Japt , 85 byte
97
`...`£`...`hXiU°d}R
dove le due coppie di backtick rappresentano stringhe di caratteri stampabili e non stampabili apparentemente casuali. Provalo online! Produzione:
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
Spiegazione
La tecnica di base è:
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.
Ho scoperto cozinesses
cominciando da nesses
come altre risposte hanno usato e trovando ripetutamente la lettera precedente che appariva tra la maggior parte delle 26 lettere. Poiché le tecniche avide non sono spesso ottimali, in seguito ho scritto una sceneggiatura per trovare la vera parola ottimale:
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");
(Non mi interessa che sia incredibilmente brutto. Ecco come PPCG mi ha insegnato a programmare: P Non preoccuparti, non lo faccio in produzione.)
Ad ogni modo, quando eseguito nella console del browser nell'elenco di parole di 10 lettere , questo genera
[ "ozinesses", 57 ]
Il 57
essendo il numero di lettere che avrebbero dovuto comparire nella stringa multilinea. Inoltre ci sono voluti circa 17 secondi sul mio computer, quindi sii paziente quando lo esegui.
Sostituendo la f=
linea con
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]];
puoi ottenere tutti i suffissi entro 20 caratteri da quello ottimale. (Cambiare il 20
alla fine per qualcos'altro per regolare questo. Nota: questa funzione probabilmente funziona solo in Firefox). È possibile trovare un elenco di tutti i suffissi sotto 100 qui .
Ad ogni modo, da lì in poi è solo un compito trovare la parola per ogni lettera dell'alfabeto con il suffisso più lungo in comune ozinesses
. Ho scritto una sceneggiatura di Japt per farlo, oltre a comprimere i prefissi necessari per me e dirmi quanto tempo sarà il programma risultante. (Dovrai incollare manualmente l'elenco delle parole tra virgolette.)
Questa spiegazione è stata probabilmente un po 'confusa, quindi sentiti libero di porre qualsiasi domanda tu possa avere.