AZ en 10, voyez-vous?

15

Pour faire suite à mon précédent défi Comptez jusqu'à 20 avec des mots! , nous utiliserons à nouveau la liste de mots de ce défi pour effectuer une autre tâche. Cette fois, vous utiliserez exclusivement:

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

Pour choisir 26 mots différents, chacun commençant par une lettre unique, et les sortir par ordre croissant de A à Z. Voici un exemple valide:

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

C'est un loup - garou , c'est un trèfle , c'est un kalanchoe , c'est un nudibranche et un goletrap .


Règles

  • Pas de lecture directement depuis le référentiel ou toute autre faille.
  • Vous pouvez sélectionner 26 des mots fournis dans le lien .
    • Vous choisissez des mots et ce sont les mots que votre programme doit sortir à chaque fois.
  • Un mot commençant par chacune des lettres suivantes doit être sélectionné:
    • [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]
  • Il s'agit du , le plus petit nombre de victoires d'octets.

Avez-vous d'autres suggestions de retombées en utilisant les listes de mots?

Aussi, n'hésitez pas à voler mes listes de mots et à lancer des défis.

Urne de poulpe magique
la source
1
hé, juste une petite piqûre, le "lien du défi précédent" renvoie à une réponse, pas au défi lui
Rod
1
La sortie doit-elle être séparée par des retours à la ligne, ou la sortie peut-elle être un tableau / séparée par un autre délimiteur?
Herman L
Je suis déçu qu'un nudibranche ne soit pas une banque dans une colonie nudiste.
Draco18s ne fait plus confiance au SE
5
Les règles incluent «q» mais l'exemple ne le fait pas.
trichoplax
Les loups-garous sont vraiment adorables.
MikeTheLiar

Réponses:

6

Bubblegum , 100 99 octets

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

Essayez-le en ligne!

Production:

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

Les mots ont de nouveau été sélectionnés avec un recuit simulé:

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
la source
uglinessesest une possibilité pour la lettre U que vous avez manquée, mais cela n'aide pas beaucoup, car vous avez encore Q, X et Y à gérer. Rien ne leur vient à l'esprit.
Cody Gray
@CodyGray Le programme a choisi automatiquement tous les mots de l'ensemble du dictionnaire, donc aucun manquant n'était impliqué, mais je pense qu'il aime uneasinessbien compresser avec easinesseset queasiness. C'est très cohérent dans ces choix.
Anders Kaseorg
5

JavaScript (ES6), 168 octets

Pour chaque lettre de départ, sort le premier mot se terminant par -inesses ou le premier mot disponible.

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

Démo

Arnauld
la source
4

Gelée , 69 octets

C'est l'approche naïve qui peut être améliorée par quelques tiques intelligentes

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

Essayez-le en ligne!

(Suppose que "les séparateurs valides sont des caractères non alphabétiques imprimables en ASCII (nombres pairs, peu importe)") du défi précédent)

Jonathan Allan
la source
4

Gelée , 49 octets

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

Essayez-le en ligne!(Prend environ 22 secondes sur TIO)

Les sorties:

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

Comment ça fonctionne

“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
la source
3

Python 2 , 256 231 220 octets

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

Enregistré 36 octets grâce à Jonathan Allan, qui a fait la plupart du travail acharné pour cela (je viens de trouver les mots: P)

Essayez-le en ligne!

Stephen
la source
Quelques changements ici en utilisant votre approche pour économiser 25 octets. (passer à Python 2 pour en sauver un de plus print)
Jonathan Allan
En fait encore plus ici
Jonathan Allan
1
«ACK! Fishses! ' - Première chose que j'ai vu en regardant ce code heh.
Urne de poulpe magique
3

Japt , 169 107 octets

`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

Essayez-le en ligne!

J'ai écrit un programme qui m'aide à optimiser la compression. Il trie une liste en fonction de sa taille de compression shoco .

Oliver
la source
1
Wow, ce programme d'optimisation est vraiment cool. Vous avez cependant oublié de remplacer inessesavec 1lors du calcul de la longueur de compression;)liminesses
ETHproductions
3

Japt , 85 octets

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

où les deux paires de crochets représentent des chaînes de caractères imprimables et non imprimables apparemment aléatoires. Essayez-le en ligne! Production:

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

Explication

La technique de base est:

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.

J'ai trouvé cozinessesen commençant par nessesque d'autres réponses ont utilisé et en trouvant à plusieurs reprises la lettre précédente qui apparaissait parmi la plupart des 26 lettres. Comme les techniques gourmandes ne sont pas souvent optimales, j'ai écrit plus tard un script pour trouver le vrai mot optimal:

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

(Je m'en fous que ce soit incroyablement moche. C'est ainsi que PPCG m'a appris à coder: P Ne vous inquiétez pas, je ne fais pas ça en production.)

Quoi qu'il en soit, lorsqu'il est exécuté dans la console du navigateur sur la liste de mots à 10 lettres , cela génère

[ "ozinesses", 57 ]

le 57 étant le nombre de lettres qui devraient apparaître dans la chaîne multiligne. Cela a également pris environ 17 secondes sur mon ordinateur, alors soyez patient lorsque vous l'exécutez.

En remplaçant la f=ligne par

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

vous pouvez obtenir tous les suffixes à moins de 20 caractères de l'optimum. (Remplacez le 20à la fin par quelque chose d'autre pour régler cela. Remarque: cette fonction ne fonctionne probablement que dans Firefox.) Vous pouvez trouver une liste de tous les suffixes sous 100 ici. .

Quoi qu'il en soit, à partir de là, il ne reste plus qu'à trouver le mot pour chaque lettre de l'alphabet qui a le plus long suffixe en commun avec ozinesses. J'ai écrit un script Japt pour cela, ainsi que compresser les préfixes nécessaires pour moi et me dire combien de temps le programme résultant sera. (Vous devrez cependant coller manuellement la liste de mots entre les guillemets.)

Cette explication était probablement un peu confuse, alors n'hésitez pas à poser toutes les questions que vous pourriez avoir.

ETHproductions
la source
2

Bubblegum , 110 106 bytes

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

Essayez-le en ligne!

Tirages:

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
totalement humain
la source
2

Javascript (ES6), 163 octets

_=>`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
la source
Agréable! Cela se traduit par 144 octets en rétine.
Neil
Hé, je viens de remarquer que cela est extrêmement similaire à la technique dans ma réponse Japt - j'ai même prouvé que cette liste de mots était optimale pour cette technique. Pouvez - vous économiser un octet en changeant /.+/gà /.*/g, -ozinessesà cozinesses, et le retrait du seul c?
ETHproductions
@ETHproductions qui ajouterait des "conforts" à la fin de chaque ligne, car /.*/gcorrespond à un groupe de 0 caractères après chaque ligne.
Herman L
1

Python 2 ,  168  166 octets

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

Essayez-le en ligne!

Comment?

Initialise ià 97(l'ordinal du caractère a) puis parcourt une liste formée en splittingant une chaîne aux espaces formant et printing les mots, incrémentant au ifur et à mesure. La plupart des entrées, wdans la liste sont de deux longueurs, ce sont des mots qui commencent par la lettre de l' alphabet et à la fin dans inesses, par exemple de la forme:
chr(i)+w+'inesses'.
Les entrées de longueur 6 sont de la forme:
chr(i)+w+'ies'
Cela signifie qu'un formatage peut être utilisé pour ajouter la lettre alphabétique et ajouter une fin avec l' 'ness'inséré comme 'i'+?+'es'quand west court comme ceci:
"%c%si%ses"%(i,w,"ness"*(len(w)<3))
-% c se convertit ien caractère; les deux %sinsèrent wet "ness"*(len(w)<3), lorsque ce dernier est si est long."ness" si west court ou""w

Jonathan Allan
la source
Encore mieux! Cela se traduit par 140 octets en rétine.
Neil
1

SOGL V0.12 , 66 octets

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

Essayez-le ici!

Une simple compression de dictionnaire avec le problème qu'aucun mot commençant par X n'était dans le dictionnaire SOGL, donc j'ai compensé avec xénotropique - tropique était dans le dictionnaire. Et je devais ajouter la citation de départ, car sinon l'analyseur pensait que cela [commençait une boucle: /

dzaima
la source
0

Fusain , 84 octets

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

Essayez-le en ligne! Utilise la liste de mots de @ HermanLauenstein, mais j'ai enregistré un octet car je peux manquer le f. Pour une fois, quelque peu compétitif même en mode verbeux, qui ne fait que 166 octets. Essayez-le en ligne!

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
la source
2
Pourquoi avez-vous noté 166 au lieu de 84?
Conor O'Brien
@ ConorO'Brien Je pensais juste que c'était amusant que j'étais toujours à égalité avec Python.
Neil