97
`...`£`...`hXiU°d}R
ここで、2つのバックティックのペアは、一見ランダムな印刷可能文字と印刷不可能文字のストリングを表します。オンラインでお試しください!出力:
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がコーディングする方法を教えてくれた方法です。
とにかく、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スクリプトこれを行うをし、必要なプレフィックスを圧縮して、結果のプログラムの長さを教えてくれました。(ただし、引用符の間に単語リストを手動で貼り付ける必要があります。)
この説明はおそらくやや紛らわしいので、質問がある場合は気軽に質問してください。