АЗ в 10-х, понимаешь?

15

В качестве продолжения моего предыдущего задания считайте до 20 со словами! , мы снова будем использовать список слов из этой задачи, чтобы выполнить другую задачу. На этот раз вы будете использовать исключительно:

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

Чтобы выбрать 26 разных слов, каждое из которых начинается с уникальной буквы, и выводить их в порядке возрастания от A до Z. Вот правильный пример:

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

Это амурный волк , это боярышник , это каланхоэ , это голожаберная ветчина и мухобойка .


правила

  • Нет чтения непосредственно из хранилища или каких-либо других лазеек.
  • Вы можете выбрать любое из 26 слов, указанных в ссылке .
    • Вы выбираете слова, и это слова, которые ваша программа должна выводить каждый раз.
  • Необходимо выбрать одно слово, начинающееся с каждой из следующих букв:
    • [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]
  • Это , побеждает наименьшее количество байтов.

Любые другие предложения для побочных продуктов, использующих списки слов?

Кроме того, не стесняйтесь красть мои списки слов и принимать вызовы.

Урна волшебного осьминога
источник
1
эй, просто маленький придурок, «ссылка на предыдущий вызов» связана с ответом, а не с самим вызовом
Род
1
Должен ли вывод быть разделен символами новой строки, или вывод может быть массивом / разделен другим разделителем?
Герман Л
Я разочарован тем, что голожаберный не является банком в нудистской колонии.
Draco18s больше не доверяет SE
5
В правила входит «q», а в примере нет.
трихоплакс
Aardwolves чертовски очаровательны.
MikeTheLiar

Ответы:

6

Жевательная резинка , 100 99 байт

00000000: 45ce 4502 0420 0800 c0bb bfb4 3bc1 adcf  E.E.. ......;...
00000010: 6f23 b7a1 910b 63b3 0016 84da 40d4 fd41  o#....c.....@..A
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                                  ...

Попробуйте онлайн!

Выход:

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

Слова были снова выбраны с имитацией отжига:

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)))
Андерс Касеорг
источник
uglinessesесть возможность для буквы U, которую вы пропустили, но это не очень помогает, так как у вас все еще есть Q, X и Y, с которыми нужно иметь дело. Ничто не приходит на ум для тех.
Коди Грей
@CodyGray Программа автоматически выбрала все слова из всего словаря, так что пропусков не было, но я думаю, что ей нравится uneasinessхорошо сжиматься с помощью easinessesи queasiness. Это очень последовательный выбор.
Андерс Касеорг
5

JavaScript (ES6), 168 байт

Для каждой начальной буквы выводится либо первое слово, оканчивающееся на- ofities, либо первое доступное слово.

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

демонстрация

Arnauld
источник
4

Желе , 69 байт

Это наивный подход, он может быть улучшен некоторыми умными галочками

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

Попробуйте онлайн!

(Предполагается, что «Действительные разделители являются ASCII-печатными неалфавитными символами (четные числа, безразлично)» выполняется из предыдущего вызова)

Джонатан Аллан
источник
4

Желе , 49 байт

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

Попробуйте онлайн! (Занимает около 22 секунд на TIO)

Выходы:

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

Как это устроено

“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
источник
3

Python 2 , 256 231 220 байт

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

Спасли 36 байтов благодаря Джонатану Аллану, который проделал большую часть тяжелой работы для этого (я только что нашел слова: P)

Попробуйте онлайн!

Стивен
источник
Некоторые изменения здесь, используя ваш подход, чтобы сохранить 25 байтов. (перейдите к Python 2, чтобы сохранить еще один с print)
Джонатан Аллан
На самом деле еще больше здесь
Джонатан Аллан
1
«ACK! Fishses!» - Первое, что я увидел, глядя на этот код хех.
Волшебная Осьминог Урна
3

Japt , 169 107 байт

`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

Попробуйте онлайн!

Я написал программу, которая помогает мне оптимизировать сжатие. Сортирует список по размеру сжатия shoco .

Оливер
источник
1
Вау, эта программа оптимизации действительно классная. Вы забыли заменить inessesна 1при расчете длины сжатия, хотя;)liminesses
ETHproductions
3

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 ]

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 , а также сжал для меня необходимые префиксы и сказал, как долго будет длиться полученная программа. (Вы должны будете вручную вставить список слов между кавычками.)

Это объяснение, вероятно, несколько сбивало с толку, поэтому, пожалуйста, не стесняйтесь задавать любые вопросы, которые могут у вас возникнуть.

ETHproductions
источник
2

Жевательная резинка , 110 106 байт

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

Попробуйте онлайн!

Печать:

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
totallyhuman
источник
2

Javascript (ES6), 163 байта

_=>`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))

Герман Л
источник
Ницца! Это переводит до 144 байтов в сетчатке.
Нил
Хех, я только что заметил, что это очень похоже на технику в моем ответе Япта - я даже доказал, что этот список слов оптимален для этой техники. Можете ли вы сохранить байт путем изменения /.+/gв /.*/g, -ozinessesк cozinesses, и удаление одинокая c?
ETHproductions
@ETHproductions, которая добавит «cozusiness» в конец каждой строки, так как /.*/gсоответствует группе из 0 символов после каждой строки.
Герман Л
1

Python 2 ,  168  166 байт

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

Попробуйте онлайн!

Как?

Инициализирует iв 97(порядковый номер символа a), затем перебирает список, образованный путём splitвставки строки в пробелы, образуя и printвставляя слова, увеличиваясь по iмере продвижения. Большинство записей, wв списке имеет длину два, это слово , которые начинаются с алфавитной буквой и заканчивается в inesses, то есть в виде:
chr(i)+w+'inesses'.
Записи длины 6 имеют форму:
chr(i)+w+'ies'
это означает, что форматирование может использоваться для добавления букв алфавита и добавления окончания со 'ness'вставленным символом, например, 'i'+?+'es'когда wоно короткое, например:
"%c%si%ses"%(i,w,"ness"*(len(w)<3))
-% c преобразуется iв символ; две %sвставки wи "ness"*(len(w)<3), где последний, "ness"если wкороткий или""если wдолго.

Джонатан Аллан
источник
Еще приятнее! Это переводит до 140 байт в Retina.
Нил
1

SOGL V0.12 , 66 байт

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

Попробуй здесь!

Простое сжатие словаря с проблемой, что ни одно слово, начинающееся с X, не было в словаре SOGLs, поэтому я компенсировал с помощью xenotropic - tropic был в словаре. И мне нужно было добавить начальную кавычку, потому что в противном случае парсер подумал, что [запустил цикл: /

dzaima
источник
0

Древесный уголь , 84 байта

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

Попробуйте онлайн! Использует список слов @ HermanLauenstein, но я сохранил один байт, потому что я могу пропустить f. На этот раз несколько конкурентоспособен даже в многословном режиме, который составляет всего 166 байтов. Попробуйте онлайн!

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")
Нил
источник
2
Почему вы набрали 166 вместо 84?
Конор О'Брайен
@ ConorO'Brien Я просто подумал, что было забавно, что я все еще связывался с Python.
Нил