Japt , 85 bytes
97
`...`£`...`hXiU°d}R
donde los dos pares de backticks representan cadenas de caracteres imprimibles y no imprimibles aparentemente aleatorios. Pruébalo en línea! Salida:
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
Explicación
La técnica básica es:
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.
Encontré cozinesses
comenzando con nesses
algunas respuestas que he usado y encontrando repetidamente la letra anterior que apareció entre la mayoría de las 26 letras. Como las técnicas codiciosas no suelen ser óptimas, más tarde escribí un guión para encontrar la palabra óptima real:
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");
(No me importa que sea increíblemente feo. Así es como PPCG me ha enseñado a codificar: P No te preocupes, no hago esto en producción).
De todos modos, cuando se ejecuta en la consola del navegador en la lista de palabras de 10 letras , esto genera
[ "ozinesses", 57 ]
los 57
ser el número de letras que tendrían que aparecer en la cadena multilínea. También tardó unos 17 segundos en mi computadora, así que tenga paciencia cuando lo ejecute.
Al reemplazar la f=
línea 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]];
Puede obtener todos los sufijos dentro de los 20 caracteres del óptimo. (Cambie 20
al final a algo más para ajustar esto. Nota: esta función probablemente solo funcione en Firefox) . Aquí puede encontrar una lista de todos los sufijos menores de 100 .
De todos modos, a partir de ahí, es solo una tarea encontrar la palabra para cada letra del alfabeto que tenga el sufijo más largo en común ozinesses
. Escribí un script Japt para hacer esto, así como comprimir los prefijos necesarios para mí y decirme cuánto tiempo durará el programa resultante. (Sin embargo, deberá pegar manualmente la lista de palabras entre comillas).
Esta explicación probablemente fue algo confusa, así que no dude en hacer cualquier pregunta que pueda tener.