97
`...`£`...`hXiU°d}R
其中两对反引号代表看似随机的可打印和不可打印字符的字符串。在线尝试!输出:
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就是这样教我编码的:P不用担心,我不在生产中这样做。)
无论如何,当在浏览器控制台中的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脚本来执行此操作,以及为我压缩必要的前缀,并告诉我所生成的程序将持续多长时间。(不过,您必须手动将单词列表粘贴在引号之间。)
这种解释可能有些混乱,所以请随时问您可能有的任何问题。