AZ 10, kan?

15

Sebagai tindak lanjut dari tantangan saya sebelumnya Hitung sampai 20 dengan Kata-kata!, sekali lagi kami akan menggunakan daftar kata dari tantangan itu untuk melakukan tugas lain. Kali ini, Anda akan secara eksklusif menggunakan:

https://github.com/Magic Gurita Mm / wordListsByLength / blob / master / 10.txt

Untuk memilih 26 kata yang berbeda, masing-masing dimulai dengan huruf unik, dan keluarkan dalam urutan naik dari A ke Z. Berikut adalah contoh yang valid:

aardwolves
babbitting
caravaning
debilitate
evaporator
fantasized
geographer
hawfinches
imbecility
juvenility
kalanchoes
lamaseries
malodorous
nudibranch
oligophagy
pantywaist
quarreling
russetting
scantiness
teetotaler
undercount
voodooisms
wentletrap
xenophobic
yeomanries
zwitterion

Ini adalah aardwolf , ini adalah hawfinch , ini adalah kalanchoe , ini adalah nudibranch dan goletrap .


Aturan

  • Tidak ada bacaan langsung dari repositori, atau celah lainnya.
  • Anda dapat memilih 26 kata yang disediakan dalam tautan .
    • Anda memilih kata-kata dan ini adalah kata-kata yang harus dihasilkan oleh program Anda setiap saat.
  • Satu kata yang dimulai dengan masing-masing huruf berikut harus dipilih:
    • [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]
  • Ini adalah , kemenangan byte-count terendah.

Adakah saran lain untuk spin-off menggunakan daftar kata?

Juga, jangan ragu untuk mencuri daftar kata-kata saya dan membuat tantangan.

Guci Gurita Ajaib
sumber
1
hei, hanya nitpick kecil, "tautan tantangan sebelumnya" tautan ke jawaban, bukan ke tantangan itu sendiri
Rod
1
Apakah output harus dipisahkan dengan baris baru, atau dapatkah output menjadi array / dipisahkan dengan pembatas lain?
Herman L
Saya kecewa bahwa nudibranch bukan bank di koloni nudis.
Draco18s tidak lagi mempercayai SE
5
Aturan termasuk 'q' tetapi contohnya tidak.
trichoplax
Aardwolves sangat menggemaskan.
MikeTheLiar

Jawaban:

6

Bubblegum , 100 99 byte

00000000: 45ce 4502 0420 0800 c0bb bfb4 3bc1 adcf  E.E.. ......;...
00000010: 6f23 b7a1 910b 63b3 0016 84da 40d4 fd41  o#[email protected]
00000020: 344c 2b81 e824 e09f 9e19 e4e9 8d3a 1353  4L+..$.......:.S
00000030: 3f7c c3fc 59b8 b732 5b07 62e7 c383 4fcc  ?|..Y..2[.b...O.
00000040: 4d5f 88c5 bd60 6f44 8c8d b87d 215e 78c3  M_...`oD...}!^x.
00000050: 359e ec4d 360c bd4a 94e2 6e25 e06f ef43  5..M6..J..n%.o.C
00000060: d286 17                                  ...

Cobalah online!

Keluaran:

artinesses
businesses
cozinesses
dozinesses
easinesses
fastnesses
gastnesses
hazinesses
ickinesses
jokinesses
kindnesses
lazinesses
mazinesses
nosinesses
oozinesses
pastnesses
queasiness
rosinesses
sexinesses
tininesses
uglinesses
vastnesses
wilinesses
xanthomata
yeastiness
zaninesses

Kata-kata itu lagi dipilih dengan anil simulasi:

from __future__ import print_function
import math
import random
import zopfli.zlib

wordlists = [[] for n in range(26)]
for word in open('wordListsByLength/10.txt', 'rb').read().splitlines():
    wordlists[ord(word[:1]) - ord('a')].append(word)

words = [random.choice(wordlist) for wordlist in wordlists]

temperature = 1.
score = 9999
best = score

while True:
    old_score = score
    n = random.randrange(len(wordlists))
    old_word = words[n]
    words[n] = random.choice(wordlists[n])
    score = len(zopfli.zlib.compress(b'\n'.join(words)) - 6
    if score > old_score and random.random() >= math.exp((old_score - score) / temperature):
        words[n] = old_word
        score = old_score
    else:
        temperature *= .9999
        if score < best:
            best = score
            print(best, repr(b'\n'.join(words)))
Anders Kaseorg
sumber
uglinessesadalah kemungkinan untuk huruf U yang Anda lewatkan, tetapi ini tidak banyak membantu, karena Anda masih punya Q, X, dan Y untuk ditangani. Tidak ada yang terlintas dalam pikiran mereka.
Cody Grey
@CodyGray Program ini memilih semua kata secara otomatis dari seluruh kamus, jadi tidak ada yang terlibat, tapi saya pikir suka uneasinessmengompresi dengan baik dengan easinessesdan queasiness. Sangat konsisten tentang pilihan-pilihan itu.
Anders Kaseorg
5

JavaScript (ES6), 168 byte

Untuk setiap huruf awal, menghasilkan kata pertama yang berakhiran -inesses atau kata pertama yang tersedia.

_=>`ash0bus0coz0doz0eer0foz0gor0hom0ink0jok0kaiserdoms
log0mir0nos0ooz0pun0quackeries
ros0siz0tin0ugl0vacantness
wir0xanthomata
yardmaster
zan0`.split`0`.join`inesses
`

Demo

Arnauld
sumber
4

Jelly , 69 byte

Ini adalah pendekatan naif yang mungkin dapat ditingkatkan oleh beberapa kutu yang pintar

“6)ọʋtL⁺%ḍʠ9ƲȮṆ'ṫZpɲṇḃb7ṗ³ðʠ©q€©[ẠṾṠɠ+ȯ!?^_iṘ©ð⁴ạ'8œÐṣTP³ḃXŻDƭƇM⁽H>Ỵ»

Cobalah online!

(Asumsikan bahwa "separator yang valid adalah karakter non-alfabet ASCII yang dapat dicetak (angka genap, tidak peduli)" berlaku dari tantangan sebelumnya)

Jonathan Allan
sumber
4

Jelly , 49 byte

“J9,⁹FṾ»ŒVŒlµL=⁵µÐf
¢Ḣ€OIT+“¢&ĠUṗɓṃ€~ƙṂ’D¤;@0‘ị¢Y

Cobalah online! (Memakan waktu sekitar 22 detik pada TIO)

Output:

aardwolves
babbitting
cabalettas
daftnesses
earlywoods
fabricants
gadgetries
habiliment
iatrogenic
jaborandis
kaiserdoms
labialized
macadamize
naboberies
oafishness
pacemaking
quackeries
rabbinical
sabadillas
tabernacle
ubiquinone
vacantness
wadsetting
xanthomata
yardmaster
zabaglione

Bagaimana itu bekerja

“J9,⁹FṾ»ŒVŒlµL=⁵µÐf           - all length 10 Jelly dictionary words
“J9,⁹FṾ»                        - literal string "dictionary.long"
        ŒV                      - Python eval: get list of long words
          Œl                    - set all to lowercase 
            µ   µÐf             - filter keep only those which meet:
             L                  - length
              =                 - equal to
               ⁵                - 10

¢Ḣ€OIT+“¢&ĠUṗɓṃ€~ƙṂ’D¤;@0‘ị¢Y - main link
¢                               - length 10 Jelly dictionary words from helper
 Ḣ€                             - first letter of each.
   O                            - ord: character values
    I                           - difference between consecutive elements
     T                          - indices of nonzero elements
                            (gets indices of first word starting with each letter)
      +                         - add
       “¢&ĠUṗɓṃ€~ƙṂ’D¤          - the list [2,0,5,9,1,3,3,1,1,6,1,2,0,0,0,0,2,1,1,1,0,3,1,8,0]
                      ;@0       - append 0 to beginning (golfable?)
                         ‘      - increment each element
                          ị¢    - index into the above length 10 words
                            Y   - join by newlines
fireflame241
sumber
3

Python 2 , 256 231 220 byte

i=97
for w in"uto ibli aco emo ntom utur laci olo deo ackfishes ymo exic alac omo cean alyn uaternion eno eri omo rban eno avelessly ero outhfully witterion".split():print chr(i)+(w+["graphy","ology"][w[3:]>''])[:9];i+=1

Disimpan 36 byte berkat Jonathan Allan, yang melakukan sebagian besar kerja keras untuk ini (saya baru menemukan kata-kata: P)

Cobalah online!

Stephen
sumber
Beberapa perubahan di sini menggunakan pendekatan Anda untuk menghemat 25 byte. (pindah ke Python 2 untuk menyimpan satu lagi dengan print)
Jonathan Allan
Sebenarnya lebih banyak lagi di sini
Jonathan Allan
1
'ACK! Ikan! ' - Hal pertama yang saya lihat ketika melihat kode ini heh.
Magic Gurita Guci
3

Japt , 169 107 byte

`a®
¾n
¯g
¸w
e
fox
g
z

jo
ê]
¦m
µt
nos
oil
po
qua×@i
c
 x
d
ugl
void
°r
xopb
yeÇ
z`·£`ê£`hX

Cobalah online!

Saya menulis sebuah program yang membantu saya mengoptimalkan kompresi. Ini mengurutkan daftar berdasarkan ukuran kompresi shoco -nya .

Oliver
sumber
1
Wow, program optimasi itu sangat keren. Anda lupa mengganti inessesdengan 1ketika menghitung panjang kompresi;)liminesses
ETHproduksi
3

Japt , 85 byte

97
`...`£`...`hXiU°d}R

di mana dua pasang backticks mewakili string karakter yang tampaknya dapat dicetak dan tidak dicetak. Cobalah online! Keluaran:

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

Penjelasan

Teknik dasarnya adalah:

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.

Saya menemukan cozinessesdengan memulai dengannesses beberapa jawaban lain telah digunakan dan berulang kali menemukan huruf sebelumnya yang muncul di antara sebagian besar dari 26 huruf. Karena teknik serakah tidak sering optimal, saya kemudian menulis naskah untuk menemukan kata optimal yang sebenarnya:

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");

(Saya tidak peduli itu sangat jelek. Ini adalah bagaimana PPCG telah mengajarkan saya untuk kode: P Jangan khawatir, saya tidak melakukan ini dalam produksi.)

Lagi pula, ketika dijalankan di konsol browser pada daftar kata 10 huruf , ini menghasilkan

[ "ozinesses", 57 ]

Itu 57 menjadi jumlah huruf yang harus muncul dalam multiline string yang. Butuh waktu sekitar 17 detik di komputer saya, jadi bersabarlah saat Anda menjalankannya.

Dengan mengganti f=baris dengan

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]];

Anda bisa mendapatkan semua sufiks dalam 20 karakter yang optimal. (Mengubah20 di akhir untuk sesuatu yang lain untuk menyesuaikan ini. Catatan: fungsi ini mungkin hanya berfungsi di Firefox.) Anda dapat menemukan daftar semua sufiks di bawah 100 di sini .

Ngomong-ngomong, dari sana, itu hanya tugas menemukan kata untuk setiap huruf dari alfabet yang memiliki akhiran terpanjang yang sama dengan ozinesses . Saya menulis skrip Japt untuk melakukan ini, serta mengkompres prefiks yang diperlukan untuk saya dan memberi tahu saya berapa lama program yang dihasilkan akan. (Anda harus menempelkan secara manual daftar kata di antara tanda kutip.)

Penjelasan ini mungkin agak membingungkan, jadi silakan bertanya apa pun yang Anda miliki.

Produksi ETH
sumber
2

Bubblegum , 110 106 byte

Hexdump:

0000000: 45cc 4116 8240 0c83 e1bd b72c 50a1 0ed3  E.A..@.....,P...
0000010: 2015 454e 2fcf 4727 bb6f 91fc 1293 b946   .EN/.G'.o.....F
0000020: 68dc 3aec c91e 4772 2055 2279 e776 94aa  h.:...Gr U"y.v..
0000030: 1727 695b f392 7ca0 b1b8 f445 573b 39f3  .'i[..|....EW;9.
0000040: 5679 7344 1236 2717 169e 5b2b acdc 0663  VysD.6'...[+...c
0000050: 2f72 1b5b e10d 1b2e 7ed8 ddd5 b14c e84e  /r.[....~....L.N
0000060: 7e15 55fc df3d c473 f003                 ~.U..=.s..

Cobalah online!

Cetakan:

ashinesses
boxinesses
cozinesses
dozinesses
easinesses
foxinesses
gamenesses
hazinesses
inkinesses
jokinesses
knackeries
lamenesses
mazinesses
nosinesses
oilinesses
pokinesses
quackeries
rosinesses
samenesses
tamenesses
uglinesses
voidnesses
wilinesses
xenophobes
yeomanries
zaninesses
benar-benar manusiawi
sumber
2

Javascript (ES6), 163 byte

_=>`ach
bon
c
d
eas
f
gam
ha
ick
jok
keen
la
ma
nos
o
pip
quackeri
rac
si
tid
ugl
vain
war
xenogami
yeomanri
zan`.replace(/.+/g,s=>s+"-ozinesses".substr(s.length))

Herman L.
sumber
Bagus! Ini diterjemahkan menjadi 144 byte di Retina.
Neil
Heh, saya baru memperhatikan ini sangat mirip dengan teknik dalam jawaban Japt saya - saya bahkan membuktikan daftar kata ini optimal untuk teknik ini. Bisakah Anda menyimpan byte dengan mengubah /.+/gke /.*/g, -ozinesseske cozinesses, dan menghapus satu-satunya c?
Produk ETH
@ETHproduksi yang akan menambahkan "kesenangan" ke akhir setiap baris, karena /.*/gcocok dengan sekelompok 0 karakter setelah setiap baris.
Herman L
1

Python 2 ,  168  166 byte

i=97
for w in"ch on ag ew as ox am az ck ok azatsk ac at os il ip uacker ac ex id gl agilit ar enogam eomanr an".split():print"%c%si%ses"%(i,w,"ness"*(len(w)<3));i+=1

Cobalah online!

Bagaimana?

Menginisialisasi ike 97(ordinal karakter a) maka loop melalui daftar dibentuk oleh splitting string di ruang membentuk dan printing kata-kata, incrementing isebagai kelanjutannya. Sebagian besar entri, w, dalam daftar yang panjang dua, ini adalah kata-kata yang dimulai dengan huruf abjad dan berakhir di inesses, yaitu dalam bentuk:
chr(i)+w+'inesses'.
Entri dengan panjang 6 berbentuk:
chr(i)+w+'ies'
Ini berarti format dapat digunakan untuk mengawali huruf alfabet dan menambahkan akhiran dengan 'ness'memasukkan seperti 'i'+?+'es'ketika wsingkat seperti:
"%c%si%ses"%(i,w,"ness"*(len(w)<3))
-% c mengkonversi ike karakter; %smemasukkan dua wdan "ness"*(len(w)<3), di mana yang terakhir adalah "ness"jika jikaw pendek atau""w panjang.

Jonathan Allan
sumber
Bahkan lebih baik! Ini diterjemahkan menjadi 140 byte di Retina.
Neil
1

SOGL V0.12 , 66 byte

"⅟μ█X§¡Ψ}|μ⁾k,²9γ↑č─[╝B4mh|c↑′ρ╤τnE╗Ζ±$ņ¦Pγ9¬oΘ′`║F→█#▲xpņRe└ωηηƨ‘

Coba Di Sini!

Kamus sederhana yang berisi masalah bahwa tidak ada kata yang dimulai dengan X dalam kamus SOGL, jadi saya mengganti xenotropic - tropic dalam kamus. Dan saya perlu menambahkan kutipan awal karena kalau tidak parser pikir yang [memulai loop: /

dzaima
sumber
0

Arang , 84 byte

UOχ²⁶”m⌈⎚∧³δ¤↶””|↖⧴=P“⪪šl¢‘υKBSAD ⁶⁸ςz↧\–~⎇V▷–ê"℅ ž⟲‹‹⮌0Bff5Y⪪E?Þ¹@)⟦£δT⪪⌕↙]\RZ_Q‹″”

Cobalah online! Menggunakan daftar kata @ HermanLauenstein, tetapi saya menyimpan satu byte karena saya dapat melewatkan f. Untuk sekali, agak kompetitif bahkan dalam mode verbose, yang hanya 166 byte. Cobalah online!

Oblong(c 26 "fozinesses")Print("ach\nbon\nc\nd\neas\n\ngam\nha\nick\njok\nkeen\nla\nma\nnos\no\npip\nquackeri\nrac\nsi\ntid\nugl\nvain\nwar\nxenogami\nyeomanri\nzan")
Neil
sumber
2
Mengapa Anda skor ini sebagai 166 bukan 84?
Conor O'Brien
@ ConorO'Brien Saya hanya berpikir itu lucu bahwa saya masih mengikat dengan Python.
Neil