Japt , 85 ไบต์
97
`...`£`...`hXiU°d}R
โดยที่คู่หลังสองคู่แสดงสตริงของอักขระสุ่มที่พิมพ์ได้และไม่สามารถพิมพ์ได้ ลองออนไลน์! เอาท์พุท:
achinesses
boninesses
cozinesses
dozinesses
easinesses
fozinesses
gorinesses
hazinesses
ickinesses
jokinesses
keennesses
lazinesses
mazinesses
nosinesses
oozinesses
pipinesses
quadrantes
riminesses
sizinesses
tininesses
uglinesses
vainnesses
warinesses
xylotomies
yeomanries
zaninesses
คำอธิบาย
เทคนิคพื้นฐานคือ:
97 Set U to 97
`ch
on
...`£ }R Map each line X in this multiline string to:
U°d Take U.toCharCode() and increment U. ["a", "b", "c", ...]
Xi Prepend this to X. ["ach", "bon", "c", ...]
`cozinesses`h Overwrite this onto the beginning of "cozinesses".
["achinesses", "boninesses", "cozinesses", ...]
£ }R Rejoin with newlines and implicitly output.
ฉันค้นพบcozinesses
โดยเริ่มต้นด้วยnesses
คำตอบอื่น ๆ ที่ใช้และค้นหาจดหมายฉบับก่อนหน้าซ้ำ ๆ ซึ่งปรากฏในจดหมายจำนวนมากถึง 26 ฉบับ เนื่องจากเทคนิคโลภมักไม่เหมาะสมฉันจึงเขียนสคริปต์เพื่อค้นหาคำที่เหมาะสมที่สุด:
alphabet="abcdefghijklmnopqrstuvwxyz".split``;
wordlist=alphabet.map(x=>[]);
document.body.innerText.split`\n`.slice(0,-1).map(x=>wordlist[x.charCodeAt()-97].push(x));
f=(q="",n=7,s=0,words=wordlist,z=n&&alphabet.map(x=>[x+q,words.map(y=>[y=y.filter(z=>z[n]==x),t+=0 in y][0],t=0),t]))=>n?z.filter(x=>x[2]>=Math.max(1,...z.map(x=>(x[2]-2)*2/3))).map(x=>f(x[0],n-1,s+26-x[2],x[1])).sort((a,b)=>a[1]-b[1])[0]:[q,s];
console.time("find optimal word");
console.log(f());
console.timeEnd("find optimal word");
(ฉันไม่สนใจว่ามันน่าเกลียดอย่างไม่น่าเชื่อนี่คือวิธีที่ PPCG สอนให้ฉันเขียนโค้ด: P ไม่ต้องกังวลฉันจะไม่ทำสิ่งนี้ในการผลิต)
อย่างไรก็ตามเมื่อทำงานในคอนโซลเบราว์เซอร์ในรายการคำ 10 ตัวอักษรผลลัพธ์นี้
[ "ozinesses", 57 ]
57
เป็นจำนวนตัวอักษรที่จะต้องปรากฏในสตริงหลายคอมพิวเตอร์ของฉันใช้เวลาประมาณ 17 วินาทีดังนั้นโปรดอดทนเมื่อคุณใช้งาน
โดยแทนที่f=
ด้วยเส้น
f=(q="",n=9,s=0,words=wordlist,z=n&&alphabet.map(x=>[x+q,words.map(y=>[y=y.filter(z=>z[n]==x),t+=0 in y][0],t=0),t]))=>n?[for(x of z.filter(x=>x[2]>=Math.max(1,...z.map(x=>(x[2]-2)*2/3))))for(y of f(x[0],n-1,s+26-x[2],x[1]))y].sort((a,b)=>a[1]-b[1]).filter((x,i,a)=>x[1]<=a[0][1]+20):[[q,s]];
คุณสามารถรับส่วนต่อท้ายทั้งหมดภายใน 20 ตัวอักษรของตัวที่ดีที่สุด (เปลี่ยนส่วน20
ท้ายเป็นอย่างอื่นเพื่อปรับค่านี้หมายเหตุ: ฟังก์ชั่นนี้อาจใช้ได้เฉพาะใน Firefox) คุณสามารถค้นหารายการคำต่อท้ายทั้งหมดภายใต้ 100 ที่นี่ที่นี่
ozinesses
อย่างไรก็ตามจากที่นั่นมันเป็นเพียงแค่งานในการหาคำสำหรับตัวอักษรที่มีคำต่อท้ายที่ยาวที่สุดในการร่วมกันกับแต่ละ ฉันเขียนสคริปต์ Japtเพื่อทำสิ่งนี้เช่นเดียวกับบีบอัดคำนำหน้าจำเป็นสำหรับฉันและบอกฉันว่าโปรแกรมที่เกิดขึ้นจะนานแค่ไหน (คุณจะต้องวางรายการคำด้วยตนเองระหว่างเครื่องหมายคำพูด)
คำอธิบายนี้อาจค่อนข้างสับสนดังนั้นโปรดอย่าลังเลที่จะถามคำถามใด ๆ ที่คุณอาจมี