Japt , 85 bayt
97
`...`£`...`hXiU°d}R
burada iki çift iğne, görünüşte rastgele yazdırılabilir ve yazdırılamaz karakterlerin dizelerini temsil eder. Çevrimiçi deneyin! Çıktı:
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
açıklama
Temel teknik:
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.
Buldum cozinesses
başlayarak nesses
diğer bazı cevaplar kullanmış olduğu ve defalarca 26 harften en arasına göründüğü önceki harfi bulma. Açgözlü teknikler genellikle optimal olmadığından, daha sonra gerçek optimal kelimeyi bulmak için bir senaryo yazdım:
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");
(İnanılmaz derecede çirkin olması umrumda değil. PPCG bana kodlamayı öğretti: P Merak etme, bunu üretimde yapmıyorum.)
Her neyse, 10 harfli kelime listesindeki tarayıcı konsolunda çalıştırıldığında , bu çıktı
[ "ozinesses", 57 ]
Çok 57
satırlı dizede görünmesi gereken harf sayısıdır. Bilgisayarımda da yaklaşık 17 saniye sürdü, bu yüzden çalıştırdığınızda sabırlı olun.
f=
Hattı değiştirerek
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]];
tüm sonekleri en uygun olanın 20 karakterleri içinde alabilirsiniz. ( 20
Sonunda, bunu ayarlamak için başka bir şeyle değiştirin. Not: bu işlev muhtemelen yalnızca Firefox'ta çalışır.) 100 altındaki tüm soneklerin bir listesini burada bulabilirsiniz .
Her neyse, oradan sadece en uzun eki olan alfabenin her harfi için kelimeyi bulmak bir görevdir ozinesses
. Bunu yapmak için bir Japt betiği yazdım , benim için gerekli önekleri sıkıştırdım ve ortaya çıkan programın ne kadar süreceğini söyledim. (Sözcük listesini tırnak işaretleri arasına elle yapıştırmanız gerekir.)
Bu açıklama muhtemelen biraz kafa karıştırıcıydı, bu nedenle lütfen sorularınızı sormaktan çekinmeyin.