Japt , 85 байт
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 ]
The 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, щоб це зробити, а також стиснути необхідні для мене префікси і сказати, як довго триватиме отримана програма. (Вам доведеться вручну вставити список слів між лапки.)
Це пояснення було, ймовірно, дещо заплутаним, тому, будь ласка, не соромтесь задавати будь-які запитання.