Текст детской книги " Белый медведь", "Белый медведь", что ты слышишь? имеет очень простой шаблон. Вы можете использовать этот текст для обучения вводным программным концепциям.
Моему сыну быстро наскучила эта идея, поэтому я решил поиграть с ней в гольф.
Соревнование
На выбранном вами языке программирования напишите наименьшую возможную программу, которая напечатает следующий текст. Вывод должен точно соответствовать, включая регистр, интервал и пунктуацию.
Polar Bear, Polar Bear, what do you hear?
I hear a lion roaring in my ear.
Lion, Lion, what do you hear?
I hear a hippopotamus snorting in my ear.
Hippopotamus, Hippopotamus, what do you hear?
I hear a flamingo fluting in my ear.
Flamingo, Flamingo, what do you hear?
I hear a zebra braying in my ear.
Zebra, Zebra, what do you hear?
I hear a boa constrictor hissing in my ear.
Boa Constrictor, Boa Constrictor, what do you hear?
I hear an elephant trumpeting in my ear.
Elephant, Elephant, what do you hear?
I hear a leopard snarling in my ear.
Leopard, Leopard, what do you hear?
I hear a peacock yelping in my ear.
Peacock, Peacock, what do you hear?
I hear a walrus bellowing in my ear.
Walrus, Walrus, what do you hear?
I hear a zookeeper whistling in my ear.
Zookeeper, Zookeeper, what do you hear?
I hear children...
...growling like a polar bear,
roaring like a lion,
snorting like a hippopotamus,
fluting like a flamingo,
braying like a zebra,
hissing like a boa constrictor,
trumpeting like an elephant,
snarling like a leopard,
yelping like a peacock,
bellowing like a walrus...
that's what I hear.
code-golf
string
kolmogorov-complexity
aaaantoine
источник
источник
B
иC
вPolar Bear
иBoa Constrictor
необходимо? (В пакетном режиме это стоит мне 10% от моего количества байтов ...)Ответы:
05AB1E,
349331330322314311 байтПопробуйте онлайн
объяснение
•4i;kV_†©:š×Îj€Yå—‚‘%˜ESδþ¤çÑ9¶‹{Å€7¾à{Ì®qA•
Упакованная строка, содержащая звуки
GROWL0ROAR0SNORT0FLUT0BRAY0HISS0TRUMPET0SNARL0YELP0BELLOW0WHISTL
35B0¡…ing«lV
Распакуйте, разделите на 0, добавьте «ing» к каждому слову, преобразуйте в нижнее и сохраните в переменной Y
•7ü[¿‘¢wÀ¶à-‚¤î„jHâ™ÐJ'µ‡ÀÂý6›ü‚š¸€%NtÅýµL›fU¥ì€€uîT¡›Ÿ{!œ>'Ì&ý§¨Ü?é>•
Упакованная строка, содержащая животных
POLAR1BEAR0LION0HIPPOPOTAMUS0FLAMINGO0ZEBRA0BOA1CONSTRICTOR0ELEPHANT0LEOPARD0PEACOCK0WALRUS0ZOOKEEPER
36B1ð:0¡™
Распакуйте, замените 1 пробелом, разделите на 0 и преобразуйте в заглавный случай
D©„, «D‚ø
Дублируйте, сохраните, чтобы зарегистрироваться для последующего использования, добавьте "," в одну копию, продублируйте и заархивируйте.
“€À€·€î—«?“¶«¸
Словарные слова «что ты слышишь?», За которыми следует новая строка, добавленная в новый список
‘€JU
Декартово произведение списков «Животное, Животное» и «Что вы слышите? \ N», сплющенное и объединенное и сохраняет его в переменной X. Создает список строк вида «Животное, Животное, что вы слышите? N ».
¦“„¾“‚˜l
Возьмите оставшийся список животных от предыдущего, удалите зоопарка и добавьте детей, преобразуйте в нижний регистр.
v
Для каждого животного:
Нажмите «Я слышу 0 в моем ухе», разделите на 0 и нажмите как отдельные строки.
yð«Y¦õ‚˜Nè«
Нажимайте «звуки животных», когда у детей нет звука
sr„ a
Нажмите «а» в правильном месте
N5Qi'n«}
Если животное "Слон", добавьте "n"
ð«
Добавьте пространство.
N9›ijrj¨ðs«…...«}
Если животное - дети, уберите пробел и добавьте "..."
srJˆ}
Присоединитесь к предложению «Я слышу (n) звук животного в моем ухе». (как и дочерний), хранить в глобальном массиве и завершать цикл
X¯‚ø€J
Возьмите первые строки, застегните молнию и присоединитесь, создав первую часть стихотворения «Животное, животное, что вы слышите? \ NЯ слышу звук (n) животного в моем ухе».
vy,¶?}
Печать с новой строкой.
…...DU?
Выведите «...» и сохраните копию в переменной X.
Y¨v
Для каждого звука, кроме "свиста":
N__i ', ¶} Для каждой строки, кроме первой, начните ее с ", \ n" (перевод запятой в предыдущую строку)
yð“€è€…“
Толчок, пробел и "как у"
N6Qi'n«}
Если Слон, добавьте "n".
ð®NèJl?}X,
Извлеките животное, сохраненное в регистре, соедините все, напечатайте и завершите цикл, а затем "...". Это производит "звук как (n) животное", линии.
“€Š's€À I—«.“?
Вывести в словаре строку «вот что я слышу».
источник
PHP,
420414434414412 байтзвоните из CLI или готовьтесь
<pre>
к выводу.сломать
источник
JavaScript,
545541497 байтДовольно веселый вызов!
Спасибо Downgoat за то, что он сэкономил мне
27тонн байтatob
, а Титус за 4 байта!Ungolfed:
источник
a.map((n,m)=>n>9||(p+=s[n]...))
c=console.log;
в начале, затем используйте c (), чтобы сохранить 6 байтов. Или просто сохраните строку в переменной и напечатайте ее один раз с помощью alert ().c=console.log
не работает, потому чтоlog
должен иметьthis
ofconsole
или он выдает ошибку. (Разве это не так в некоторых браузерах / средах?) Идея поместить все это в строку звучит неплохо/// ,
523512 байтПопробуйте онлайн!
На 608 байт меньше, чем фактическое сообщение (1120), это меньше половины (560)!
источник
Dyalog APL , 387 байт
Чтобы облегчить чтение:
⎕UCS¯2(219⌶)¯128+⎕UCS'
...'
⎕UCS '
...'
преобразовать строку в кодовые точки Unicode¯128+
вычтите 128, чтобы получить -128 ≤ n ≤ 127¯2(219⌶)
ун-Zlib⎕UCS
конвертировать кодовые точки Unicode в строкуИсходная строка представляет собой следующие 365 байтов кодированных точек Unicode с zlib'ом:
источник
Python 3,
497484480 байт(Кредит за сохраненные 13 байтов должен быть передан Габору Фекете, а Тейлор Лопес сохранил еще 4 байта.)
Таким образом, вы можете догадаться, что я собираюсь использовать такой язык, как Python, в качестве учебного пособия. Это была программа, прежде чем я начал играть в гольф.
источник
a=A[i]
наa,b=A[i]
и затем вы можете написатьa
иb
вместоa[0]
иa[1]
. Это сэкономит 12 байтов.N=lambda m:("a","an")["E"==m[0]]+" "+m.lower()
кN=lambda m:"an"[:("E"==m[0])+1]
иn=a[0]+", ";P(n+n+"what do you hear?")
кa+=", ";P(a+a+"what do you hear?")
сэкономите еще 2 байта.len(A)
, поскольку цель этой задачи - просто генерировать статический вывод (не имея дело с динамическим вводом), допустимо ли11
вместо этого использовать жестко запрограммированный код для сохранения байтов?Pyth -
427384 байтаПопробуйте здесь - постоянная ссылка
источник
ing
? Я схожу с ума, увидев, как PHP победил Pyth.a elephant
.C #,
575525520526507504497494493 байтаC # лямбда, где на выходе есть
string
.объяснение
t
как строка с форматомnoise,animal,noise,animal,...
и разделена на,
.r
иs
.r
это первая часть песни иs
последняя часть.z
иn
здесь, чтобы справитьсяElephant
.t
и стройr
иs
в том же цикле. Странные троичные + интерполированные вещи.Код
Попробуйте онлайн!
источник
Python 2 - 454 байта
источник
R
518509482477474465452456 байтСсылка на R-Fiddle, чтобы попробовать код
children
из вектораa
и избавился от соответствующей записи вd
векторе, чтобы сохранить 8 байт.children
, сэкономили еще 27 байтов.tolower
функцию, сохранил 5 байтwriteLines
наcat
и переформатировать соответствующим образом (добавлено\n
местами) сохраненные 3 байтаd
всего 7 элементов, а не 11, R просто вернется к началу. Поскольку 11 <14, то это работает для нас. Сохранено 9 байт.cat
функция отделялась с" "
, изменилась обратно наwriteLines
. Добавлено 4 байта (cat
можно исправить, добавив,sep=""
в функцию)источник
' '
перед каждым элементомa
после"Polar Bear"
. Это нормально?C #,
592572 байтаБыло здорово провести время с моим коллегой! Спасибо за идею.
отформатирован:
РЕДАКТИРОВАТЬ: Спасибо за ваши многочисленные и удивительные советы, они очень помогли, и я постараюсь, чтобы другие работают также.
источник
new[]
вместо o.new string[]
Также вы можете превратить это в анонимную функцию, как в ответе @ aloisdga elephant
ловушку (я тоже). Этоan elephant
;)Пакетный,
650647 байтПотому что
%*
это самое близкое, что Batch имеет к массиву. Если я могу использовать,Polar bear
аBoa constrictor
затем я могу сэкономить 10% ... но я все еще более 50% исходного текста ...Изменить: Сохраненные 3 байта, установив
e=echo(
с(
вместо пробела, который позволяет мне использовать его эхо пустых строк, хотя я тогда выписать@echo off
в полном объеме.источник
Bash + Zcat, 402 байта
Просто шутка:
2-х строчный bash-скрипт, который следит за собой и передает вторую строку в zcat.
Вторая строка - это сжатый текст.
Как подготовить это: весь текст в файле
a
. затемФайл, созданный таким образом при выполнении, возвращает начальный текст, 402 байта.
источник
tail -n+2 \$0|zcat;exit
новой строки и двоичная строка длиной 379 байт (предложенная версия текста в сжатом виде). Знаете ли вы причину понижения? (это полустандартная процедура для самоустановочных скриптов bash с архивом внутри, ИМХО не сильно отличается от использования библиотеки в c ++).zcat
), поэтому ваш заголовок должен быть ( Bash + coreutils, 402 байта ) вместо ( Bash (с zcat) 402 ). И можете ли вы отредактировать свой ответ (просто добавьте<!>
в конце своего поста)? Я хочу убрать понижение голосов> :(zcat
не из coreutils, оно идет сgzip
. Во многих системах есть скрипт сgzip -cd "$@"
такими вызовами ... Кстати, я изменил в Bash + zcat, 402 байта.F #,
591589579576573567552 байтаЭто моя первая попытка игры в гольф с использованием языка, который мне нравится. Бьюсь об заклад, есть несколько способов сделать это короче. Работает в FSI, поэтому нет необходимости в .NET шаблоне.
Изменить: побрить 10 байтов, удалив
\r
. В VSCode он по-прежнему хорошо отображается Вырежьте еще три байта с помощью композиции функций, и еще три с помощью лямбды, затем шесть с циклом for вместо Seq.iter (избавляясь от лямбды). Наконец 15 байтов были вырезаны перестановкойa(s:string)
источник
Emacs Lisp, 576 (621) байт
При исправлении «слона» это занимает немного больше времени:
Ungolfed:
источник
^[aeiou]
до^e
, не так ли?C 596 байт
Звоните
f()
без каких-либо аргументов. Это не лучший гольф в мире, я, вероятно, могу уменьшить его больше.Попробуйте это на Ideone.
источник
a[99][99]
->**a
(-6). Вы не можете звонитьf()
без аргументов здесь, вам нужноn
. Заменитьf(n){
наf{n;
. Еще один -1 здесь. Кроме того,f()
теперь вызывается.**a
означает массив символьных массивов (или указатель на символьный указатель), и, на мой взгляд, он всегда работал (gcc 4.8). Какой компилятор вы используете? Если вы не используете gcc, вы должны указать его. Если вы используете gcc, это по умолчанию.a[99][99]
наa[<how many elements do I modify?>+1][<what is the maximum length of any string in here?>+1]
.Python 3,
442441 байтungolfed:
По сути, просто цикл, который строит две строки, представляющие две части истории. В
'n'[:'el'in n]
Обрабатываете «АН» для слона. В[44:-30]
отрубает ведущий «Я слышал , полярный медведь рычащий в моем ухе» и отстающий «свистит как зоопарк».источник
QB64 (QuickBASIC), 581 байт
Код немного расширяется, когда вы добавляете его в интерпретатор, но этот исходный файл действителен для загрузки как есть. Если вы хотите увидеть весь вывод до того, как он прокрутится, вам нужно добавить
width 80,46
оператор в начало.источник
GOSUB
/RETURN
вместоCALL
/SUB
/END SUB
. Кроме того, вы можете оставить кавычкиDATA
для всех записей, в которых нет пробелов. Наконец, поскольку есть только одно животное, начинающееся с гласного,A$="Elephant"
оно на 1 байт корочеLEFT$(A$,1)="E"
. Хорошее использованиеRESTORE
, кстати!LUA 535 байт
ungolfed:
Попробуйте онлайн
источник
PHP, 366 байт
Ленивый ответ, но зачем писать собственный декомпрессор, когда доступен gzip?
Шестнадцатеричный дамп PHP-кода (можно сохранить с помощью xxd -r )
Я использовал несколько итераций zopfli для преобразования исходного текста в 349 байт сжатых данных, избегая символа ', который в противном случае пришлось бы экранировать обратными слешами .
источник
Japt ,
308303299295288280294289286 байтСодержит кучу непечатных; перейдите по ссылке ниже, чтобы просмотреть их.
Проверь это
+14 байт, потому что я перебил моржевую линию; на следующей неделе мне нужно будет сделать еще один проход, чтобы посмотреть, смогу ли я вернуть эти байты обратно.
источник
Powershell
921889886898 байтэто не идеально, но экономит 300 байт :)
РЕДАКТИРОВАТЬ: Спасибо Джонатан Фрех, я сэкономил 32 байта. И спасибо Веске за исправление Вывода.
источник
ö
более эффективного использования байтов?ö
представлен только с использованием одного байта в некоторых кодовых страницах, UTF-8 требует два байта для этого символа.an elephant
Там также написано, что есть также дополнительный разрыв строки между ранними строфами, который можно уменьшить, удалив"n"
.clojure, 526 байт
Вот моя первая попытка. Должен любить форматирование и как он не читается. Надеюсь, что предупреждения от
use 'clojure.string
приемлемы.Попробуйте онлайн.
Форматированный код:
источник
Java,
571 555538 или 516 байтНо для получения результата в JShell требуется всего 516 байт.
источник
an
противa
.. Я исправил и golfed его 507 байтi
с0
до10
измененияb=a[i-1]
сb=a[i++]
и удалением приращения , где он в настоящее время находится.Swift2, 519 байт
источник
Haskell
537499497 байтИспользуя соглашение о том, что решение не должно быть выполнимым, только производить вывод через некоторую функцию, это можно сократить до 479 байт. Выход находится в
g
:источник
C (лязг) , 552 байта
Попробуйте онлайн!
источник
Perl 5 , 413 байт
Попробуйте онлайн!
источник
JavaScript, 424 байта
Проверь это
источник
Pyth, 342 байта
Попробуйте это онлайн здесь .
Объяснение, чтобы следовать.
источник