AZ za 10 lat, rozumiesz?

15

Kontynuując moje poprzednie wyzwanie Policz do 20 słowami! , po raz kolejny użyjemy listy słów z tego wyzwania, aby wykonać inne zadanie. Tym razem będziesz używać wyłącznie:

https://github.com/Magic Octopus Urn / wordListsByLength / blob / master / 10.txt

Aby wybrać 26 różnych słów, każde zaczynające się od unikalnej litery, i wypisz je w porządku rosnącym od A do Z. Oto poprawny przykład:

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

Jest to Aardwolf , to grubodziób , to kalanchoe , to nudibranch i wentletrap .


Zasady

  • Brak odczytu bezpośrednio z repozytorium lub innych luk.
  • Możesz wybrać dowolne 26 słów podanych w łączu .
    • Ty wybierasz słowa i są to słowa, które program powinien wypisywać za każdym razem.
  • Należy wybrać jedno słowo rozpoczynające się od każdej z następujących liter:
    • [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]
  • To jest , najniższe wygrane bajtów.

Wszelkie inne sugestie dotyczące wydzielenia przy użyciu list słów?

Ponadto kradnij moje listy słów i stawiaj wyzwania.

Urna Magicznej Ośmiornicy
źródło
1
hej, tylko mały nitpick, „poprzedni link do wyzwania” prowadzi do odpowiedzi, a nie do samego wyzwania
Rod
1
Czy dane wyjściowe muszą być oddzielone znakami nowej linii, czy może dane wyjściowe mogą być tablicami / oddzielone innym separatorem?
Herman L
Jestem rozczarowany, że nudibranch nie jest bankiem w kolonii nudystów.
Draco18s nie ufa już
5
Reguły zawierają „q”, ale przykład nie.
trichoplax
Aardwolves są cholernie urocze.
MikeTheLiar

Odpowiedzi:

6

Bubblegum , 100 99 bajtów

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                                  ...

Wypróbuj online!

Wynik:

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

Słowa zostały ponownie wybrane za pomocą symulowanego wyżarzania:

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
źródło
uglinessesistnieje możliwość, że litera U została pominięta, ale to niewiele pomaga, ponieważ nadal masz do czynienia z Q, X i Y. Nic nie przychodzi im na myśl.
Cody Gray
@CodyGray Program automatycznie wybrał wszystkie słowa z całego słownika, więc nie było żadnych brakujących, ale myślę, że lubi uneasinessdobrze kompresować za pomocą easinessesi queasiness. Jest bardzo spójny w tych wyborach.
Anders Kaseorg,
5

JavaScript (ES6), 168 bajtów

Dla każdej litery początkowej wyprowadza albo pierwsze słowo kończące się na firmach, albo pierwsze dostępne słowo.

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

Próbny

Arnauld
źródło
4

Galaretka , 69 bajtów

Jest to naiwne podejście, które może być ulepszone przez niektóre sprytne tiki

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

Wypróbuj online!

(Zakłada się, że „Prawidłowe separatory to znaki niealfabetyczne, które można wydrukować w formacie ASCII (liczby parzyste, nie przejmuj się)” nie zgadzają się z poprzednim wyzwaniem)

Jonathan Allan
źródło
4

Galaretka , 49 bajtów

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

Wypróbuj online!(Trwa około 22 sekund w TIO)

Wyjścia:

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

Jak to działa

“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
źródło
3

Python 2 , 256 231 220 bajtów

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

Zaoszczędziłem 36 bajtów dzięki Jonathanowi Allanowi, który wykonał większość ciężkiej pracy w tym zakresie (właśnie znalazłem słowa: P)

Wypróbuj online!

Stephen
źródło
Niektóre zmiany tutaj przy użyciu twojego podejścia do zaoszczędzenia 25 bajtów. (przejdź do Pythona 2, aby zaoszczędzić jeszcze jeden print)
Jonathan Allan
Właściwie jeszcze więcej tutaj
Jonathan Allan
1
„POTWIERDŹ! Fishses! - Pierwszą rzeczą, którą zobaczyłem, patrząc na ten kod, he.
Magic Octopus Urn
3

Japt , 169 107 bajtów

`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

Wypróbuj online!

I napisał program , który pomaga mi zoptymalizować kompresję. Sortuje listę według wielkości kompresji shoco .

Oliver
źródło
1
Wow, ten program optymalizacyjny jest naprawdę fajny. Zapomniałeś wymienić inessesze 1przy obliczaniu długości kompresji chociaż;)liminesses
ETHproductions
3

Japt , 85 bajtów

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

gdzie dwie pary znaków odwrotnych reprezentują ciągi pozornie losowych drukowalnych i niedrukowalnych znaków. Wypróbuj online! Wynik:

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

Wyjaśnienie

Podstawowa technika to:

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.

Znalazłem cozinesses, zaczynając od tego, nessesjak wykorzystano kilka innych odpowiedzi i wielokrotnie znajdując poprzednią literę, która pojawiła się wśród większości z 26 liter. Ponieważ chciwe techniki często nie są optymalne, napisałem później skrypt, aby znaleźć prawdziwe optymalne słowo:

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

(Nie obchodzi mnie to, że jest niesamowicie brzydki. Tak PPCG nauczył mnie kodować: P Nie martw się, nie robię tego w produkcji).

W każdym razie, po uruchomieniu w konsoli przeglądarki na liście 10-literowych słów , to się kończy

[ "ozinesses", 57 ]

Jest 57to liczba liter, które musiałyby pojawić się w ciągu wieloliniowym. Zajęło to również około 17 sekund na moim komputerze, więc bądź cierpliwy, kiedy go uruchomisz.

Zamieniając f=linię na

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

możesz uzyskać wszystkie przyrostki w ciągu 20 znaków od optymalnego. (Zmiana 20w końcu do czegoś innego, aby dostosować ten. Uwaga: funkcja ta prawdopodobnie działa tylko w Firefoksie.) Można znaleźć listę wszystkich przyrostków mocy 100 tutaj .

W każdym razie po prostu zadaniem jest znalezienie słowa dla każdej litery alfabetu, która ma najdłuższy wspólny sufiks ozinesses. Napisałem skrypt Japt, aby to zrobić, a także skompresować niezbędne prefiksy i powiedzieć mi, jak długo potrwa powstały program. (Musisz jednak ręcznie wkleić listę słów między znakami cudzysłowu).

Wyjaśnienie to było prawdopodobnie nieco mylące, dlatego prosimy o zadawanie wszelkich pytań.

ETHprodukcje
źródło
2

Bubblegum , 110 106 bajtów

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..

Wypróbuj online!

Wydruki:

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
całkowicie ludzki
źródło
2

JavaScript (ES6), 163 bajty

_=>`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.
źródło
Ładny! Przekłada się to na 144 bajty w siatkówce.
Neil
Heh, właśnie zauważyłem, że jest to bardzo podobne do techniki w mojej odpowiedzi Japt - udowodniłem nawet, że ta lista słów jest optymalna dla tej techniki. Można zapisać bajt zmieniając /.+/gsię /.*/g, -ozinessesaby cozinessesi usuwanie samotny c?
ETHprodukcje
@ETHproductions, które dodawałyby „firmy” na końcu każdej linii, ponieważ /.*/gpasują do grupy 0 znaków po każdej linii.
Herman L
1

Python 2 ,  168  166 bajtów

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

Wypróbuj online!

W jaki sposób?

Inicjuje ina 97(porządek znaku a), a następnie zapętla listę utworzoną przez splittingowanie łańcucha w spacjach tworzących i printwstawiających słowa, zwiększając w imiarę upływu czasu. Większość wpisów wna liście są długości dwóch, są to słowa, które rozpoczynają się od litery alfabetu i na końcu w inesses, czyli w postaci:
chr(i)+w+'inesses'.
Wpisy o długości 6 mają postać:
chr(i)+w+'ies'
Oznacza to, że można zastosować formatowanie, aby wstawić literę alfabetu i dodać koniec z 'ness'wstawionym, na przykład 'i'+?+'es'kiedy wjest krótki, tak:
"%c%si%ses"%(i,w,"ness"*(len(w)<3))
-% c konwertuje ina znak; dwie %swkładki wi "ness"*(len(w)<3), w przypadku gdy jest "ness"jeśli wjest krótki lub""jeśli wjest długi.

Jonathan Allan
źródło
Jeszcze ładniej! Przekłada się to na 140 bajtów w siatkówce.
Neil
1

SOGL V0.12 , 66 bajtów

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

Wypróbuj tutaj!

Prosta kompresja słownika z tym problemem, że żadne słowo zaczynające się na X nie było w słowniku SOGL, więc skompensowałem ksenotropowo - tropik w słowniku. I musiałem dodać cytat początkowy, ponieważ w przeciwnym razie analizator składni pomyślał, że [rozpoczął pętlę: /

dzaima
źródło
0

Węgiel drzewny , 84 bajty

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

Wypróbuj online! Wykorzystuje listę słów @ HermanLauenstein, ale zapisałem jeden bajt, ponieważ mogę przegapić f. Po raz kolejny dość konkurencyjny nawet w trybie pełnym, który ma tylko 166 bajtów. Wypróbuj 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
źródło
2
Dlaczego uzyskałeś wynik 166 zamiast 84?
Conor O'Brien
@ ConorO'Brien Właśnie pomyślałem, że to zabawne, że wciąż wiążę się z Pythonem.
Neil