Japt , 85 Bytes
97
`...`£`...`hXiU°d}R
Dabei stehen die beiden Backtick-Paare für Zeichenfolgen mit scheinbar zufälligen druckbaren und nicht druckbaren Zeichen. Probieren Sie es online! Ausgabe:
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
Erläuterung
Die grundlegende Technik ist:
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.
Ich habe cozinesses
angefangen mit nesses
einigen anderen Antworten, die verwendet wurden, und habe wiederholt den vorherigen Buchstaben gefunden, der unter den 26 Buchstaben am häufigsten vorkam. Da gierige Techniken oft nicht optimal sind, habe ich später ein Skript geschrieben, um das wirklich optimale Wort zu finden:
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");
(Es ist mir egal, dass es unglaublich hässlich ist. So hat mir PPCG das Codieren beigebracht: P Keine Sorge, ich mache das nicht in der Produktion.)
Auf jeden Fall wird dies ausgegeben, wenn es in der Browserkonsole in der 10-Buchstaben-Wortliste ausgeführt wird
[ "ozinesses", 57 ]
Das 57
ist die Anzahl der Buchstaben , die in der mehrzeiligen Zeichenfolge erscheinen würden. Es dauerte auch ungefähr 17 Sekunden auf meinem Computer, seien Sie also geduldig, wenn Sie es ausführen.
Durch Ersetzen der f=
Zeile mit
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]];
Sie können alle Suffixe innerhalb von 20 Zeichen vom optimalen abrufen. (Ändern Sie das 20
am Ende in etwas anderes, um dies anzupassen. Hinweis: Diese Funktion funktioniert wahrscheinlich nur in Firefox.) Eine Liste aller Suffixe unter 100 finden Sie hier .
Von da an ist es nur noch eine Aufgabe, das Wort für jeden Buchstaben des Alphabets zu finden, mit dem das längste Suffix gemeinsam ist ozinesses
. Dazu habe ich ein Japt-Skript geschrieben , die erforderlichen Präfixe komprimiert und mir mitgeteilt , wie lang das resultierende Programm sein wird. (Sie müssen die Wortliste jedoch manuell zwischen die Anführungszeichen einfügen.)
Diese Erklärung war wahrscheinlich etwas verwirrend. Sie können also jederzeit Fragen stellen.