Japt , 85 byte
97
`...`£`...`hXiU°d}R
trong đó hai cặp backticks đại diện cho chuỗi các ký tự dường như có thể in và không thể in được. Hãy thử trực tuyến! Đầu ra:
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
Giải trình
Kỹ thuật cơ bản là:
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.
Tôi tìm thấy cozinesses
bằng cách bắt đầu với nesses
một số câu trả lời khác đã được sử dụng và liên tục tìm thấy chữ cái trước đó xuất hiện trong số hầu hết 26 chữ cái. Vì các kỹ thuật tham lam thường không tối ưu, nên sau đó tôi đã viết một kịch bản để tìm từ tối ưu thực sự:
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");
(Tôi không quan tâm rằng nó cực kỳ xấu xí. Đây là cách PPCG đã dạy tôi viết mã: P Đừng lo lắng, tôi không làm điều này trong sản xuất.)
Dù sao, khi chạy trong bảng điều khiển trình duyệt trong danh sách từ 10 chữ cái , kết quả này xuất ra
[ "ozinesses", 57 ]
Các 57
là số chữ cái sẽ phải xuất hiện trong chuỗi multiline. Nó cũng mất khoảng 17 giây trên máy tính của tôi, vì vậy hãy kiên nhẫn khi bạn chạy nó.
Bằng cách thay thế f=
dòng bằng
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]];
bạn có thể nhận được tất cả các hậu tố trong vòng 20 ký tự tối ưu. (Thay đổi 20
ở cuối thành một thứ khác để điều chỉnh điều này. Lưu ý: chức năng này có thể chỉ hoạt động trong Firefox.) Bạn có thể tìm thấy danh sách tất cả các hậu tố dưới 100 tại đây .
Dù sao, từ đó trở đi chỉ là nhiệm vụ tìm từ cho mỗi chữ cái trong bảng chữ cái có hậu tố dài nhất chung ozinesses
. Tôi đã viết một kịch bản Japt để làm điều này, cũng như nén các tiền tố cần thiết cho tôi và cho tôi biết chương trình kết quả sẽ kéo dài bao lâu. (Tuy nhiên, bạn sẽ phải dán danh sách từ giữa các dấu ngoặc kép.)
Lời giải thích này có lẽ hơi khó hiểu, vì vậy xin vui lòng hỏi bất kỳ câu hỏi nào bạn có thể có.