Белый медведь, белый медведь, что ты слышишь?


50

Текст детской книги " Белый медведь", "Белый медведь", что ты слышишь? имеет очень простой шаблон. Вы можете использовать этот текст для обучения вводным программным концепциям.

Моему сыну быстро наскучила эта идея, поэтому я решил поиграть с ней в гольф.

Соревнование

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

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.

6
Колмогоров-сложности будет хорошим тегом для этого
charredgrass

3
Есть заглавные буквы Bи Cв Polar Bearи Boa Constrictorнеобходимо? (В пакетном режиме это стоит мне 10% от моего количества байтов ...)
Нил

Допускается ли отправка хэша и взлома решения с ограниченным набором? : D
полим

4
Это очень хороший первый вызов!
Алекс А.

1
Я бы +1, но ты на 42 голосов, и кто я такой, чтобы нарушать пути галактики?
FantaC

Ответы:


34

05AB1E, 349 331 330 322 314 311 байт

•4i;kV_†©:š×Îj€Yå—‚‘%˜ESδþ¤çÑ9¶‹{Å€7¾à{Ì®qA•35B0¡…ing«lV•7ü[¿‘¢wÀ¶à-‚¤î„jHâ™ÐJ'µ‡ÀÂý6›ü‚š¸€%NtÅýµL›fU¥ì€€uîT¡›Ÿ{!œ>'Ì&ý§¨Ü?é>•36B1ð:0¡™D©„, «D‚ø“€À€·€î—«?“¶«¸â€˜€JU¦“„¾“‚˜lv„I “—«0€†€¯¶å.“«0¡`yð«Y¦õ‚˜Nè«sr„ aN5Qi'n«}ð«N9›ijrj¨ðs«…...«}srJˆ}X¯‚ø€Jvy,¶?}…...DU?Y¨vN__i',¶}yð“€è€…“N6Qi'n«}ð®NèJl?}X,“€Š's€À I—«.“?

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

объяснение

•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
Для каждого животного:

„I “—«0€†€¯¶å.“«0¡`

Нажмите «Я слышу 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—«.“?
Вывести в словаре строку «вот что я слышу».


30
Этот вызывает Ктулху.
Aloisdg говорит восстановить Монику

6
Я не вижу, где заканчивается код и начинается упакованная информация.
Адам

4
@ Адам, я знаю. Это очень похоже на тарабарщину :) В конце я добавлю объяснение, которое, надеюсь, прояснит ситуацию. Я мог бы хотеть попробовать и играть в гольф еще немного сначала все же.
Эминья

28
Это, вероятно, то, как непрофессионалы представляют код.
noɥʇʎԀʎzɐɹƆ

1
Я понятия не имею, что я только что прочитал ...
Нико

9

PHP, 420 414 434 414 412 байт

звоните из CLI или готовьтесь <pre>к выводу.

$v=[growl,roar,snort,flut,bray,hiss,trumpet,snarl,yelp,bellow,whistl];$a[6]=n;foreach($n=['polar bear',lion,hippopotamus,flamingo,zebra,'boa constrictor',elephant,leopard,peacock,walrus,zookeeper]as$i=>$p)echo$i?"I hear a$a[$i] $p $v[$i]ing in my ear.

":"",$q=ucwords($p),", $q, what do you hear?
",$i>9?"I hear children...

...":""&$z[]="$v[$i]ing like a$a[$i] $p";echo join(",
",$z),"...
that's what I hear.";
  • пара уведомлений о неопределенных константах; Неявное приведение PHP к литеральной строке снова включается
  • добавление «n» для «слона» заняло 20 байт ...
  • вернул 20 байтов, переупорядочив вещи :)

сломать

$n=['polar bear',lion,hippopotamus,flamingo,zebra,'boa constrictor',elephant,leopard,peacock,walrus,zookeeper];
$v=[growl,roar,snort,flut,bray,hiss,trumpet,snarl,yelp,bellow,whistl];
$a[6]=n;
// loop through nouns with index $i
foreach($n as$i=>$p) echo
    // print first part:
        // not first noun: print second line to previous step
        $i?"I hear a$a[$i] $p $v[$i]ing in my ear.\n\n":"",
        // uppercase the first letter of each word in the noun, print
        $q=ucwords($p),
        // print uppercase noun again and the rest of the line
        ", $q, what do you hear?\n",
        // for last noun print bridge, else print nothing
        $i>9?"I hear children...\n\n...":""
    // ... AND add line to second part
        &$z[]="$v[$i]ing like a$a[$i] $p"
;
// print second part and final line
echo join(",\n",$z),"...\nthat's what I hear.";

8

JavaScript, 545 541 497 байт

a="Polar Bear|Lion|Hippopotamus|Flamingo|Zebra|Boa Constrictor|Elephant|Leopard|Peacock|Walrus|Zookeeper".split`|`;s=btoa`º0:èj¼ìíÍùn·6ëk,áË3¶»¦¥ës²v«<ÛzYhÃ<!Ëe`.split`z`;a.map((m,n)=>{console.log(m+", "+m+", what do you hear?\n "+((n>9)?"I hear children...\n":"I hear a"+(n==5?"n ":" ")+a[n+1].toLowerCase()+" "+s[n+1]+"ing in my ear.\n"))});p="...";a.map((m,n)=>{if(n>9)return;p+=s[n]+"ing like a"+(n==6?"n ":" ")+m.toLowerCase()+(n>8?"...\nthat's what I hear.":",\n")});console.log(p)

Довольно веселый вызов!

Спасибо Downgoat за то, что он сэкономил мне 27 тонн байт atob, а Титус за 4 байта!

Ungolfed:

a="Polar Bear|Lion|Hippopotamus|Flamingo|Zebra|Boa Constrictor|Elephant|Leopard|Peacock|Walrus|Zookeeper".split`|`;
s=btoa`º0:èj¼ìíÍùn·6ëk,áË3¶»¦¥ës²v«<ÛzYhÃ<!Ëe`.split`z`;
a.map((m,n)=>{
  console.log(m+", "+m+", what do you hear?\n "+((n==10)?"I hear children...\n":"I hear a" + (n==5?"n ":" ") + a[n+1].toLowerCase() + " " + s[n+1] + "ing in my ear.\n"))
});
p="...";a.map((m,n)=>{
  if(n==10) return;
  p+=s[n] + "ing like a" + (n==6?"n ":" ") + m.toLowerCase() + (n==9?"...\nthat's what I hear.":",\n")
});
console.log(p);

a.map((n,m)=>n>9||(p+=s[n]...))
Нил

1
@ OldBunny2800 В целях игры в гольф вы можете устанавливать глобальные переменные. (Не делайте этого в рекурсивной функции!)
Нил

1
Ваш код не работает, я предполагаю, что в вашем коде base64 произошла перестановка некоторых букв. После разделения я получаю ["ujA66Gq87O3N + W63NutrLOHLM7a7pqXrc7J2q", "", "ниже", "why2U ="].
lolesque

1
Определите c=console.log;в начале, затем используйте c (), чтобы сохранить 6 байтов. Или просто сохраните строку в переменной и напечатайте ее один раз с помощью alert ().
lolesque

1
@lolesque The c=console.logне работает, потому что logдолжен иметь thisof consoleили он выдает ошибку. (Разве это не так в некоторых браузерах / средах?) Идея поместить все это в строку звучит неплохо
apsillers

7

/// , 523 512 байт

/_/\/\///:/ar_!/, what do you he:?
I he: _$/!a_#/ing in my e:.

_%/ing like a_&/, _*/,
_0/Pol: Be:_1/ion_2/ippopotamus_3/lamingo_4/ebra_5/oa _S/onstrictor_6/lephant_7/eopard_8/eacock_9/alrus_Q/ookeeper_R/trumpet/0&0$ l1 ro:#L1&L1$ h2 snort#H2&H2$ f3 flut#F3&F3$ z4 bray#Z4&Z4$ b5cS hiss#B5CS&B5CS$n e6 R#E6&E6$ l7 snarl#L7&L7$ p8 yelp#P8&P8$ w9 bellow#W9&W9$ zQ whistl#ZQ&ZQ!children...

...growl% pol: be:*ro:% l1*snort% h2*flut% f3*bray% z4*hiss% b5cS*R%n e6*snarl% l7*yelp% p8*bellow% w9...
that's what I he:.

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

На 608 байт меньше, чем фактическое сообщение (1120), это меньше половины (560)!


6

Dyalog APL , 387 байт

⎕UCS¯2(219⌶)¯128+⎕UCS'øZýÓÁî°üÁ~`Û¯ß(4Õ+ÖjáïvXô ¶Dhkë ©4¹³`LxÖ4¢gͼ4ªBáDÚN¼ùV ÂÅF]@¸hÆà bKÚ¸_oQãÔÝ ¸$8§ú_ÔÈxÖ ~6*ãªd ¿ð>¥ÐB8þôÍxwÄ6Å
ô¡é¢wBlDµ¯ë
Ãbqè+ý+ÜÈýgu!gWËØ#0="«ë"HDÝÀV·¦/ÕMÆí}h<àì7å ÝÒëëñX³ýM <dÄ<ëmµñqP]¥c¬l¾¤ìÚã/$ÝÕqÙÞîCLéMÝÏ}OÔϤr$¤è©~ì2[¢{·YWÒ俦à¶)YØ©;s÷¬¥+ó&¿ÉâgËr
,Ýî©)¥Ö­2è´ÝÅd{úK5­·Õ}ýÚ'

Чтобы облегчить чтение: ⎕UCS¯2(219⌶)¯128+⎕UCS'...'

⎕UCS '... 'преобразовать строку в кодовые точки Unicode

¯128+ вычтите 128, чтобы получить -128 ≤ n ≤ 127

¯2(219⌶) ун-Zlib

⎕UCS конвертировать кодовые точки Unicode в строку

Исходная строка представляет собой следующие 365 байтов кодированных точек Unicode с zlib'ом:

F8 5A FD D3 C1 EE 04 B0 8C FC C1 7E 60 DB AF 91 DF 28 34 D5 2B D6 6A E1 EF 15 76 96 58 F4 09 B6 44 11 93 04 68 6B EB A0 A9 94 34 B9 10 98 0F B3 60 4C 78 0C D6 91 1C 34 A2 89 67 CD BC 34 AA 42 95 E1 44 9E DA 4E BC 0B 0F F9 87 85 56 20 83 C2 C5 46 5D 40 B8 68 C6 E0 20 92 62 13 81 89 4B DA B8 5F 9A 6F 51 E3 D4 DD 9F A0 B8 24 38 A7 FA 5F D4 C8 78 7F D6 A0 7E 36 2A E3 AA 64 20 BF F0 3E A5 D0 42 9A 95 38 FE F4 CD 8A 78 99 77 C4 17 89 11 10 36 82 C5 0D 8A 9A F4 A1 12 E9 A2 92 77 9D 42 1E 6C 44 B5 AF EB 0D 04 C3 62 71 87 9C E8 2B FD 2B DC 04 C8 FD 67 75 21 67 57 04 CB D8 23 12 30 9A 3D 22 AB EB 22 48 9E 44 DD C0 56 B7 87 85 A6 2F D5 03 4D 9D C6 ED 7D 1E 68 3C E0 EC 37 9C 94 08 86 E5 09 DD D2 EB EB F1 58 B3 FD 4D 20 04 3C 17 64 C4 3C EB 6D B5 F1 11 89 71 50 5D A5 63 AC 6C 9A BE A4 EC DA E3 2F 24 DD D5 71 D9 DE EE 04 43 4C E9 4D DD CF 7D 4F 13 D4 CF 13 A4 72 24 A4 E8 1A 9E A9 7E EC 1F 32 5B 19 10 A2 7B B7 01 59 57 D2 E4 BF A6 E0 B6 29 94 59 D8 A9 3B 73 1D 94 9B F7 AC A5 2B F3 26 BF C9 E2 67 7F CB 72 0A 2C DD EE A9 29 A5 D6 AD 92 32 E8 B4 DD C5 64 7B FA 8A 4B 35 AD B7 D5 7D 82 0F FD 1 DA

6

Python 3, 497 484 480 байт

P=print
N=lambda m:"an"[:("E"==m[0])+1]+" "+m.lower()
h="I hear "
A=[a.split("|")for a in"Polar Bear|growl:Lion|roar:Hippopotamus|snort:Flamingo|flut:Zebra|bray:Boa Constrictor|hiss:Elephant|trumpet:Leopard|snarl:Peacock|yelp:Walrus|bellow:Zookeeper|whistl".split(":")]
for i in range(11):
 a,b=A[i]
 if i:P(h+N(a)+" "+b+"ing in my ear.\n")
 a+=", ";P(a+a+"what do you hear?")
P(h+"children...\n\n..."+",\n".join([z+"ing like "+N(y)for y,z in A[:-1]])+"...\nthat's what I hear.")

(Кредит за сохраненные 13 байтов должен быть передан Габору Фекете, а Тейлор Лопес сохранил еще 4 байта.)

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

def startsWithVowel(name):
    firstLetter = name[0]
    return firstLetter in ["A", "E", "I", "O", "U"]

def aOrAn(name):
    return "an" if startsWithVowel(name) else "a"

animals = [
#    NAME (0),     SOUND (1)
    ("Polar Bear", "growling"),
    ("Lion", "roaring"),
    ("Hippopotamus", "snorting"),
    ("Flamingo", "fluting"),
    ("Zebra", "braying"),
    ("Boa Constrictor", "hissing"),
    ("Elephant", "trumpeting"),
    ("Leopard", "snarling"),
    ("Peacock", "yelping"),
    ("Walrus", "bellowing"),
    ("Robot Dragon", "screeching"),
    ("Owl", "hooting"),
    ("Monkey", "laughing"),    
    ("Zookeeper", "whistling")]

NAME = 0
SOUND = 1
for animalNumber in range(len(animals)):
    thisAnimal = animals[animalNumber]
    if animalNumber + 1 < len(animals):    
        nextAnimal = animals[animalNumber + 1] 
    else: 
        nextAnimal = None

    print("{n}, {n}, what do you hear?".format(n=thisAnimal[NAME]))

    if nextAnimal != None:
        print("I hear {a} {n} {s} in my ear.".format(n=nextAnimal[NAME].lower(),
                                                     s=nextAnimal[SOUND],
                                                     a=aOrAn(nextAnimal[NAME])))
    else:
        print("I hear children...")

        children = []        
        for animal in animals[:-1]:
            children.append("{s} like {a} {n}".format(n=animal[NAME].lower(), 
                                                      s=animal[SOUND],
                                                      a=aOrAn(animal[NAME])))
        print("...{}...".format(",\n".join(children)))
        print("that's what I hear.")

2
Вы можете использовать синтаксис распаковки, чтобы сохранить несколько байтов: измените 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вместо этого использовать жестко запрограммированный код для сохранения байтов?
Тейлор Лопес

1
@TaylorLopez, конечно, это плохая практика в целом, но для игры в гольф, где целью является минимизация кода, я не вижу причин, почему бы и нет.
aaaantoine

5

Pyth - 427 384 байта

=G"1, 1, what do you hear?\nI hear a 2 in my ear.\n"=Hc"growling/Polar Bear/roaring/Lion/snorting/Hippopotamus/fluting/Flamingo/braying/Zebra/hissing/Boa Constrictor/trumpeting/Elephant/snarling/Leopard/yelping/Peacock/bellowing/Walrus/whistling/Zookeeper"\/FNT
::G\1@H+yN1\2++r@H+yN3Zd@H+yN2)p+::G"I(.|\n)*"k\1@H20"I hear children...\n\n..."FN9
::"1 like a 2,"\1@HyN\2r@H+yN1Z)p"bellowing like a walrus...\nthat's what I hear.

J"%s, %s, what do you hear?"K"I hear a%sing in my ear.\n"=Hc"Polar Bear/roar/Lion/snort/Hippopotamus/flut/Flamingo/bray/Zebra/hiss/Boa Constrictor/trumpet/Elephant/snarl/Leopard/yelp/Peacock/bellow/Walrus/whistl/Zookeeper/growl"\/FN11
%J*2[@HyN)?qNT"I hear children...\n"%Kjd[?qN5\nkr@H+yN2Z@HhyN))p"..."FN9
+%=J"%sing like a%s"[@HtyN+?qN5\nk+dr@HyNZ)?qN8"..."\,)
"that's what I hear"

Попробуйте здесь - постоянная ссылка


Вы можете играть в гольф ing? Я схожу с ума, увидев, как PHP победил Pyth.
Тит

1
Выводы кода a elephant.
Antti29

Все проблемы (включая тот факт, что PHP победил Pyth) исправлены!
KoreanwGlasses

3

C #, 575 525 520 526 507 504 497 494 493 байта

()=>{var t="growl,Polar Bear,roar,Lion,snort,Hippopotamus,flut,Flamingo,bray,Zebra,hiss,Boa Constrictor,trumpet,Elephant,snarl,Leopard,yelp,Peacock,bellow,Walrus,whistl,Zookeeper".Split(',');string r="",s="",z="a ",n="an ";for(int i=0,j=0;i<21;r+=t[++i]+$", {t[i]}, what do you hear?\nI hear "+(i>19?@"children...

...":(i==11?n:z)+t[++i+1].ToLower()+$" {t[i]}ing in my ear.\n\n"))s+=j<20?t[j]+"ing like "+(j==12?n:z)+t[++j].ToLower()+(++j<20?@",
":@"...
"):"that's what I hear.";return r+s;};

C # лямбда, где на выходе есть string.

объяснение

  1. Init tкак строка с форматом noise,animal,noise,animal,...и разделена на ,.
  2. Объявить rи s. rэто первая часть песни и sпоследняя часть. zи nздесь, чтобы справиться Elephant.
  3. Иди tи строй rи sв том же цикле. Странные троичные + интерполированные вещи.
  4. Верните первую часть песни, а затем последнюю часть.

Код

()=>{
    var t="growl,Polar Bear,roar,Lion,snort,Hippopotamus,flut,Flamingo,bray,Zebra,hiss,Boa Constrictor,trumpet,Elephant,snarl,Leopard,yelp,Peacock,bellow,Walrus,whistl,Zookeeper".Split(',');
    string r="",s="",z="a ",n="an ";
    for(int i=0,j=0;i<21;r+=t[++i]+$", {t[i]}, what do you hear?\nI hear "+(i>19?@"children...

...":(i==11?n:z)+t[++i+1].ToLower()+$" {t[i]}ing in my ear.\n\n"))
        s+=j<20?t[j]+"ing like "+(j==12?n:z)+t[++j].ToLower()+(++j<20?@",
":@"...
"):"that's what I hear.";
    return r+s;
};

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


3

Python 2 - 454 байта

a="polar bear,lion,hippopotamus,flamingo,zebra,boa constrictor,elephant,leopard,peacock,walrus,zookeeper,whistl,bellow,yelp,snarl,trumpet,hiss,bray,flut,snort,roar,growl".split(',')
e='...\n\n'
r=range
print'\n'.join([(a[i].title()+', ')*2+"what do you hear?\nI hear "+((i<10)*("a%s %sing in my ear.\n"%("n "[i!=5:]+a[i+1],a[~-~i]))or"children%s..."%e+",\n".join(a[~j]+"ing like a"+"n "[j!=6:]+a[j]for j in r(10))+e+"that's what I hear.")for i in r(11)])

3

R 518 509 482 477 474 465 452 456 байт

Ссылка на R-Fiddle, чтобы попробовать код

a=c("Polar Bear","Lion","Hippopotamus","Flamingo","Zebra","Boa Constrictor","Elephant","Leopard","Peacock","Walrus","Zookeeper")
b=c("...growl","roar","snort","flut","bray","hiss","trumpet","snarl","yelp","bellow","whistl")
d=c(rep("a ",6),"an ")
f=tolower(a)
cat(c(paste0(a,", ",a,", what do you hear?\nI hear ",c(paste0(d,f," ",b,"ing in my ear.")[-1],"children..."),"\n\n"),paste0(b,"ing like ",d,f,c(rep(",\n",9),"...\nthat's what I hear."))[-11]))
  • Переместился childrenиз вектора aи избавился от соответствующей записи в dвекторе, чтобы сохранить 8 байт.
  • Более аккуратная обработка и удаление подписок, сделанных излишними при перемещении children, сэкономили еще 27 байтов.
  • Глобализировал tolowerфункцию, сохранил 5 байт
  • Заменить writeLinesна catи переформатировать соответствующим образом (добавлено \nместами) сохраненные 3 байта
  • Понял, что если dвсего 7 элементов, а не 11, R просто вернется к началу. Поскольку 11 <14, то это работает для нас. Сохранено 9 байт.
  • глобализированные подписки, сохраненные 13 байтов.
  • catфункция отделялась с " ", изменилась обратно на writeLines. Добавлено 4 байта ( catможно исправить, добавив ,sep=""в функцию)

Добро пожаловать в PPCG! Это хороший первый ответ. Есть ли способ попробовать свой код онлайн?
Aloisdg говорит восстановить Монику

1
Попробуйте это r-fiddle.org/#/fiddle?id=5pqkHPyL&version=1, хотя мне пришлось добавить символ (обратную косую черту), чтобы заставить его правильно читать апостроф в «это»
Роберт Мейдстон

Спасибо. В R-Fiddle я видел, что у вас есть ' 'перед каждым элементом aпосле "Polar Bear". Это нормально?
Aloisdg говорит восстановить Монику

Я не совсем уверен, что вы имеете в виду. Вы имеете в виду место в первом разделе стихотворения? Как в космосе перед "Львом" здесь? "Белый медведь, белый медведь ...... \ nЯ слышу ...... \ n Льва, Лев ..... \ nЯ слышу ..." Я раньше этого не замечал. Это происходит от функции cat, разделяющей пробел. Это можно исправить, добавив sep = "" в функцию, однако тогда использование writeLines становится предпочтительным. (Я изменил код обратно на writeLines)
Роберт Мейдстон

3

C #, 592 572 байта

using System;class p{static void Main(){string[] s={"","","Polar Bear","Lion","Hippopotamus","Flamingo","Zebra","Boa Contrictor","Elephant","Leopard","Peacock","Walrus","Zookeeper","growl","roar","snort","flut","bray","hiss","trumpet","snarl","yelp","bellow","whistl"};for(int i=2;i<13;i++){s[0]+=(s[i]+", "+s[i]+", what do you hear?\nI hear "+(i<12?"a"+(i==7?"n ":" ")+s[i+1].ToLower()+" "+s[i+12]+"ing in my ear.\n\n":"children...\n\n..."));if(i<12)s[1]+=s[i+11]+"ing like a"+(i==8?"n ":" ")+s[i].ToLower()+(i<11?",\n":"...\nthat's what I hear.\n");}Console.Write(s[0]+s[1]);}}

Было здорово провести время с моим коллегой! Спасибо за идею.

отформатирован:

using System;
class p {
    static void Main() {
        string[] s = { "", "", "Polar Bear", "Lion", "Hippopotamus", "Flamingo", "Zebra", "Boa Contrictor", "Elephant", "Leopard", "Peacock", "Walrus", "Zookeeper", "growl", "roar", "snort", "flut", "bray", "hiss", "trumpet", "snarl", "yelp", "bellow", "whistl" };
        for (int i = 2; i < 13; i++) {
            s[0] += (s[i] + ", " + s[i] + ", what do you hear?\nI hear " + (i < 12 ? "a" + (i == 7 ? "n " : " ") + s[i + 1].ToLower() + " " + s[i + 12] + "ing in my ear.\n\n" : "children...\n\n..."));
            if (i < 12) s[1] += s[i + 11] + "ing like a" + (i == 8 ? "n " : " ") + s[i].ToLower() + (i < 11 ? ",\n" : "...\nthat's what I hear.\n");
        }
        Console.Write(s[0] + s[1]);
        Console.ReadKey();
    }
}

РЕДАКТИРОВАТЬ: Спасибо за ваши многочисленные и удивительные советы, они очень помогли, и я постараюсь, чтобы другие работают также.


1
Удалите все ненужные пробелы, которые вы можете использовать new[]вместо o. new string[]Также вы можете превратить это в анонимную функцию, как в ответе @ aloisdg
TheLethalCoder

Добро пожаловать в PPCG! Хорошая идея в этом ответе! Вы можете найти вдохновение для его улучшения в советах по игре в гольф на странице C # . Продолжай!
Aloisdg говорит восстановить Монику

1
Вы попали в a elephantловушку (я тоже). Это an elephant;)
aloisdg говорит восстановить Монику

Выньте свои «ing» из массива глаголов и переместите его в вывод для еще большей экономии.
GuitarPicker

3

Пакетный, 650 647 байт

@echo off
set e=echo(
set s=shift
call:d a "polar bear" ...growl "Polar Bear" a lion roar Lion a hippopotamus snort Hippopotamus a flamingo flut Flamingo a zebra bray Zebra a "boa constrictor" hiss "Boa Constrictor" an elephant trumpet Elephant a leopard snarl Leopard a peacock yelp Peacock a walrus bellow
exit/b
:d
call:v %* Walrus a zookeeper whistl Zookeeper
%e%I hear children...
%e%
:l
%e%%3ing like %1 %~2,
%s%
%s%
%s%
%s%
if not "%5"=="" goto l
%e%%3ing like a %2...
%e%that's what I hear.
exit/b
:v
%e%%~4, %~4, what do you hear?
if "%5"=="" exit/b
%e%I hear %5 %~6 %7ing in my ear.
%e%
%s%
%s%
%s%
%s%
goto v

Потому что %*это самое близкое, что Batch имеет к массиву. Если я могу использовать, Polar bearа Boa constrictorзатем я могу сэкономить 10% ... но я все еще более 50% исходного текста ...

Изменить: Сохраненные 3 байта, установив e=echo(с (вместо пробела, который позволяет мне использовать его эхо пустых строк, хотя я тогда выписать @echo offв полном объеме.


2

Bash + Zcat, 402 байта

Просто шутка:
2-х строчный bash-скрипт, который следит за собой и передает вторую строку в zcat.
Вторая строка - это сжатый текст.

Как подготовить это: весь текст в файле a. затем

echo "tail -n+2 \$0|zcat;exit" > go.sh
gzip a ;
cat a.gz >> go.sh
chomod u+x go.sh

Файл, созданный таким образом при выполнении, возвращает начальный текст, 402 байта.


Можете ли вы опубликовать фактический код? 402 байт не что много (то есть вы можете разместить его.)
Эрик Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ За кодом следует только символ tail -n+2 \$0|zcat;exitновой строки и двоичная строка длиной 379 байт (предложенная версия текста в сжатом виде). Знаете ли вы причину понижения? (это полустандартная процедура для самоустановочных скриптов bash с архивом внутри, ИМХО не сильно отличается от использования библиотеки в c ++).
Хастур

Кажется, вы используете coreutils ( zcat), поэтому ваш заголовок должен быть ( Bash + coreutils, 402 байта ) вместо ( Bash (с zcat) 402 ). И можете ли вы отредактировать свой ответ (просто добавьте <!>в конце своего поста)? Я хочу убрать понижение голосов> :(
Эрик Аутгольфер

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ zcatне из coreutils, оно идет с gzip. Во многих системах есть скрипт с gzip -cd "$@"такими вызовами ... Кстати, я изменил в Bash + zcat, 402 байта.
Хастур

Хорошо, пониженный голос удален. Upvote мое.
Эрик Outgolfer

2

F #, 591 589 579 576 573 567 552 байта

Это моя первая попытка игры в гольф с использованием языка, который мне нравится. Бьюсь об заклад, есть несколько способов сделать это короче. Работает в FSI, поэтому нет необходимости в .NET шаблоне.

Изменить: побрить 10 байтов, удалив \r. В VSCode он по-прежнему хорошо отображается Вырежьте еще три байта с помощью композиции функций, и еще три с помощью лямбды, затем шесть с циклом for вместо Seq.iter (избавляясь от лямбды). Наконец 15 байтов были вырезаны перестановкойa(s:string)

let A="Polar Bear,Lion,Hippopotamus,Flamingo,Zebra,Boa Constrictor,Elephant,Leopard,Peacock,Walrus,Zookeeper".Split(',')
let S="growl,roar,snort,flut,bray,hiss,trumpet,snarl,yelp,bellow,whistl".Split(',')
let a(s:string)=(if s.[0]='E'then"an "else"a ")+s.ToLower()
let f i=sprintf"%s, %s, what do you hear?\nI hear "A.[i]A.[i]
for i in 0..9 do printfn"%s%s %sing in my ear.\n"(f i)(a A.[i+1])S.[i+1]
printf"%schildren...\n\n..."(f 10)
let t i=sprintf"%sing like %s"S.[i](a A.[i])
Seq.iter(t>>printfn"%s,")[0..8]
printfn"%s...\nthat's what I hear."(t 9)

3
Добро пожаловать в PPCG, хороший ответ!
кошка

Я знаю, что #F - это язык .net, но я думаю, что для этой задачи вы можете заменить "\ r \ n" на простой "\ n", так как концепция такая же, и она сохраняет байты
Vale

@ Вейл спасибо. сохранено 10 байт
асибахи

1
Не влияет на количество, но вы написали "Гиппопотам" неправильно.
GentlePurpleRain

@GentlePurpleRain Хех. Я думал, что я искал все варианты написания. Я починю это.
Асибахи

1

Emacs Lisp, 576 (621) байт

(let*((a'("polar bear""lion""hippopotamus""flamingo""zebra""boa constrictor""elephant""leopard""peacock""walrus""zookeeper"))(l(length a))(m(- l 1))(s'("growl""roar""snort""flut""bray""hiss""trumpet""snarl""yelp""bellow""whistl")))(dotimes(i l)(message"%s, what do you hear?"(let((a(capitalize(nth i a))))(concat a", "a)))(if(not(eq i m))(message "I hear a %s %sing in my ear.\n"(nth(1+ i)a)(nth(1+ i)s))(message"I hear children...\n")(dotimes(j m)(message(concat(when(eq j 0)"...")"%sing like a %s"(if(eq(1+ j)m)"..."","))(nth j s)(nth j a)))(message"That's what I hear."))))

При исправлении «слона» это занимает немного больше времени:

(let*((a'("polar bear""lion""hippopotamus""flamingo""zebra""boa constrictor""elephant""leopard""peacock""walrus""zookeeper"))(l(length a))(m(- l 1))(s'("growl""roar""snort""flut""bray""hiss""trumpet""snarl""yelp""bellow""whistl")))(dotimes(i l)(message"%s, what do you hear?"(let((a(capitalize(nth i a))))(concat a", "a)))(if(not(eq i m))(message "I hear a %s %sing in my ear.\n"(nth(1+ i)a)(nth(1+ i)s))(message"I hear children...\n")(dotimes(j m)(message(concat(when(eq j 0)"...")"%sing like a"(and(string-match-p"^[aeiou]"(nth j a))"n")" %s"(if(eq(1+ j)m)"..."","))(nth j s)(nth j a)))(message"That's what I hear."))))

Ungolfed:

(let* ((animals '("polar bear"
                  "lion"
                  "hippopotamus"
                  "flamingo"
                  "zebra"
                  "boa constrictor"
                  "elephant"
                  "leopard"
                  "peacock"
                  "walrus"
                  "zookeeper"))
       (l (length animals))
       (m(- l 1))
       (sounds '("growl"
                 "roar"
                 "snort"
                 "flut"
                 "bray"
                 "hiss"
                 "trumpet"
                 "snarl"
                 "yelp"
                 "bellow"
                 "whistl")))
  (dotimes (i l)
    (message "%s, what do you hear?"
             (let ((animal (capitalize (nth i animals))))
               (concat animal ", " animal)))
    (if (not (eq i m))
        (message "I hear a %s %sing in my ear.\n"
                 (nth (1+ i) animals)
                 (nth (1+ i) sounds))
      (message "I hear children...\n")
      (dotimes (j m)
        (message
         (concat
          (when (eq j 0) "...")
          "%sing like a"
          (and (string-match-p"^[aeiou]" (nth j animals)) "n")
          " %s"
          (if (eq (1+ j) m) "..." ","))
         (nth j sounds )
         (nth j animals)))
      (message"That's what I hear."))))

Ваше регулярное выражение может быть сокращено с ^[aeiou]до ^e, не так ли?
owacoder

Для слона да, но если бы были добавлены другие животные, это должно было бы измениться. С 600 байтами уже 6 байт не так больно.
Лорд Юма

1

C 596 байт

Звоните f()без каких-либо аргументов. Это не лучший гольф в мире, я, вероятно, могу уменьшить его больше.

f(n){char*t,a[99][99]={"Polar Bear","Lion","Hippopotamus","Flamingo","Zebra","Boa Constrictor","Elephant","Leopard","Peacock","Walrus","Zookeeper","growl","roar","snort","flut","bray","hiss","trumpet","snarl","yelp","bellow","whistl"};for(n=0;n<11;){strcpy(t=a[n+30],n^6?" ":"n ");strcat(t,a[n++]);for(;*t=tolower(*t);++t);}for(n=0;printf("%s, %s, what do you hear?\n",a[n],a[n]),n<10;++n)printf("I hear a%s %sing in my ear.\n\n",a[n+31],a[12+n]);puts("I hear children...\n");for(n=11;n<21;++n)printf("%s%sing like a%s%s\n",n^11?"":"...",a[n],a[n+19],n^20?",":"...");puts("that's what I hear.");}

Попробуйте это на Ideone.


Можете ли вы добавить ссылку на ideone?
говорит aloisdg Восстановить Монику

2
Добавлена ​​идеоновая ссылка.
owacoder

a[99][99]-> **a(-6). Вы не можете звонить f()без аргументов здесь, вам нужно n. Заменить f(n){на f{n;. Еще один -1 здесь. Кроме того, f()теперь вызывается.
Эрик Outgolfer

@owacoder Как получилось? **aозначает массив символьных массивов (или указатель на символьный указатель), и, на мой взгляд, он всегда работал (gcc 4.8). Какой компилятор вы используете? Если вы не используете gcc, вы должны указать его. Если вы используете gcc, это по умолчанию.
Эрик Outgolfer

@owacoder Нет! Это делает массив, который подходит 98 строк длиной 98! И вам определенно не следует называть свою ссылку ideone "Попробуйте онлайн!" Для гольфа заменить a[99][99]на a[<how many elements do I modify?>+1][<what is the maximum length of any string in here?>+1].
Эрик Outgolfer

1

Python 3, 442 441 байт

h=t=''
for n,s in zip('polar bear,lion,hippopotamus,flamingo,zebra,boa constrictor,elephant,leopard,peacock,walrus,zookeeper'.split(','),'...growl roar snort flut bray hiss trumpet snarl yelp bellow whistl'.split()):u='n'[:'el'in n],n,s,n.title();h+="I hear a{0} {1} {2}ing in my ear.\n\n{3}, {3} what do you hear?\n".format(*u);t+="{2}ing like a{0} {1},\n".format(*u)
print((h+'I hear children...\n\n'+t)[44:-30]+"...\nthat's what I hear.")

ungolfed:

animals = 'polar bear,lion,hippopotamus,flamingo,zebra,boa constrictor,elephant,leopard,peacock,walrus,zookeeper'.split(',')

sounds = '...growl roar snort flut bray hiss trumpet snarl yelp bellow whistl'.split()

h=t=''
for n,s in zip(animals,sounds):
    u='n'[:'el'in n], n, s, n.title()

    h+="I hear a{0} {1} {2}ing in my ear.\n\n{3}, {3} what do you hear?\n".format(*u)

    t+="{2}ing like a{0} {1},\n".format(*u)

print((h+'I hear children...\n\n'+t)[44:-30]+"...\nthat's what I hear.")

По сути, просто цикл, который строит две строки, представляющие две части истории. В 'n'[:'el'in n]Обрабатываете «АН» для слона. В [44:-30]отрубает ведущий «Я слышал , полярный медведь рычащий в моем ухе» и отстающий «свистит как зоопарк».


1

QB64 (QuickBASIC), 581 байт

Код немного расширяется, когда вы добавляете его в интерпретатор, но этот исходный файл действителен для загрузки как есть. Если вы хотите увидеть весь вывод до того, как он прокрутится, вам нужно добавить width 80,46оператор в начало.

READ a$,v$
FOR x=0 TO 10
?a$+", "+a$+", what do you hear?"
IF x>9THEN
?"I hear children...":?:?"...";
RESTORE
FOR y=0 TO 9
READ a$,v$
?v$+"ing like ";
CALL j(a$)
IF y<9THEN?", "ELSE?"...":?"that's what I hear."
NEXT
END
ELSE
READ a$,v$
?"I hear ";
CALL j(a$)
?" "+v$+"ing in my ear."
?
END IF
NEXT
DATA"Polar Bear","growl","Lion","roar","Hippopotamus","snort","Flamingo","flut","Zebra","bray","Boa Constrictor","hiss","Elephant","trumpet","Leopard","snarl","Peacock","yelp","Walrus","bellow","Zookeper","whistl"
SUB j (A$)
?"a";
IF LEFT$(A$,1)="E"THEN?"n";
?" "+LCASE$(A$);
END SUB

1
Я знаю, что это немного поздно, но: я думаю, что вы можете сохранить некоторые байты, используя GOSUB/ RETURNвместо CALL/ SUB/ END SUB. Кроме того, вы можете оставить кавычки DATAдля всех записей, в которых нет пробелов. Наконец, поскольку есть только одно животное, начинающееся с гласного, A$="Elephant"оно на 1 байт короче LEFT$(A$,1)="E". Хорошее использование RESTORE, кстати!
DLosc

1

LUA 535 байт

p=print a="growl.roar.snort.flut.bray.hiss.trumpet.snarl.yelp.bellow.whist"b="polar bear.lion.hippopotamus.flamingo.zebra.boa constrictor.elephant.leopard.peacock.walrus.zookeeper."z=a.gmatch(a,"%P+")x=b.gmatch(b,"%P+")w=''for j=1,11 do i=x()v=z()e=j==7 and'n 'or' 'p(j==1 and''or'I hear a'..e..i..' '..v..'ing in my ear.\n')w=w..(j>10 and''or v..'ing like a'..e..i..(j>9 and'...'or',')..'\n')y=i:gsub("^%l",a.upper):gsub("%s%l",a.upper)p(y..', '..y..' what do you hear?')end p('I hear children...\n')p('...'..w.."that's what I hear.")

ungolfed:

sound_list = "growl.roar.snort.flut.bray.hiss.trumpet.snarl.yelp.bellow.whist"
animal_list = "polar bear.lion.hippopotamus.flamingo.zebra.boa constrictor.elephant.leopard.peacock.walrus.zookeeper."

sound_it = string.gmatch(sound_list, "%P+")
animal_it = string.gmatch(animal_list, "%P+")
part_2 = ''

for i = 1, 11  do
    animal = animal_it()
    sound = sound_it()
    aORan = i == 7 and 'n ' or ' '

    print(i == 1 and '' or 'I hear a'..aORan..animal..' '..sound..'ing in my ear.\n')

    part_2 = part_2..(i > 10 and '' or sound..'ling like a'..aORan..animal..(i > 9 and '...' or ',')..'\n')

    big_animal = animal:gsub("^%l", string.upper):gsub("%s%l", string.upper)
    print(big_animal..', '..big_animal..' what do you hear?')
end

print('I hear children...\n')
print('...'..part_2.."that's what I hear.")

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


1

PHP, 366 байт

Ленивый ответ, но зачем писать собственный декомпрессор, когда доступен gzip?

Шестнадцатеричный дамп PHP-кода (можно сохранить с помощью xxd -r )

0000000: 3c3f 3d67 7a69 6e66 6c61 7465 2827 7d53  <?=gzinflate('}S
0000010: c16a 8430 10bd e72b e6d6 cbe0 2f14 b6b4  .j.0...+..../...
0000020: b4d0 c3de 0abd 8d6e baca c64c 1823 62bf  .......n...L.#b.
0000030: be51 3354 1472 58f3 76de f864 e6bd 5cd9  .Q3T.rX.v..d..\.
0000040: 91c0 c592 20ec f1d4 5284 1bc3 cc23 b4a9  .... ...R....#..
0000050: f26c 3ed6 1308 5cc7 1e84 493a 7f87 ce43  .l>...\...I:...C
0000060: 3f43 222a 633e 1381 b03d 0bef b75d 081c  ?C"*c>...=...]..
0000070: 3852 3f0e 3078 9678 147a df75 20ec ff15  8R?.0x.x.z.u ...
0000080: 857f 1cf5 498a 1318 4f9a 6f99 4450 54d4  ....I...O.o.DPT.
0000090: fab5 b510 a4df 7c14 fa5e 1884 7c14 246a  ......|..^..|.$j
00000a0: 2668 d80f 51ba 26b2 a4b9 87e1 2876 6182  &h..Q.&.....(va.
00000b0: 97ff 1e84 63a1 f001 0fd6 d9d0 928f 1065  ....c..........e
00000c0: ec83 3dcd fc9a 7904 4565 632d 0792 5bf2  ..=...y.Eec-..[.
00000d0: 84c4 9dcc dd48 0405 25a5 60a9 e1e6 01b3  .....H..%.`.....
00000e0: 75e1 2874 dd38 0405 25a1 899c a494 d4d6  u.(t.8..%.......
00000f0: 399e 8e4a 5f2b 89a0 67c9 4ee6 87b5 c10a  9..J_+..g.N.....
0000100: 4cc9 86e8 4ea6 2a8f a0b0 b4fb a6ed dc4d  L...N.*........M
0000110: acaf aaf4 6e7a dc85 a755 d375 0fbb ccbf  ....nz...U.u....
0000120: dea4 3ab5 a211 2651 2adf 1e34 1a7b adb6  ..:...&Q*..4.{..
0000130: fb8c 1bcd 6f26 35d7 6896 3c2a a121 45a3  ....o&5.h.<*.!E.
0000140: c1ca d543 eed0 683a b465 971c 34d9 6ca5  ...C..h:.e..4.l.
0000150: 3404 68d4 3b1d 29bb 65b2 17ca a847 cb2a  4.h.;.).e....G.*
0000160: 624b f169 d8d6 b66d aa32 7f27 293b       bK.i...m.2.');

Я использовал несколько итераций zopfli для преобразования исходного текста в 349 байт сжатых данных, избегая символа ', который в противном случае пришлось бы экранировать обратными слешами .


1

Japt , 308 303 299 295 288 280 294 289 286 байт

Содержит кучу непечатных; перейдите по ссылке ниже, чтобы просмотреть их.

`Pol BÁLiyHippopotam«yFlaÚÁoyZeßBoa CÆqÎtyE¤pÊCyLeopÂýPea¬ckyWalr«yZookeep`qy
`gwÓ2ÂüÍdfl©dßdÊdtruÛFdsnÓ)lpdÞ)owdØtl`qd
[¡[X',SX`, Ø º y Ê#?
I Ê# `Y<A?[Y¶5?``:'aSUg°Y v SVgY `g  my e.`R]¬:[`å,Á`Q='.³R²QU¯J £[Vv `g ¦ke `Y¶6?``:'aSXv]¬Ãq`,
` QR`È  's Ø I Ê#.`]¬]¬Ã·]¬

Проверь это

+14 байт, потому что я перебил моржевую линию; на следующей неделе мне нужно будет сделать еще один проход, чтобы посмотреть, смогу ли я вернуть эти байты обратно.


1

Powershell 921 889 886 898 байт

это не идеально, но экономит 300 байт :)

РЕДАКТИРОВАТЬ: Спасибо Джонатан Фрех, я сэкономил 32 байта. И спасибо Веске за исправление Вывода.

filter Z($1,$2){while($1){$x,$1=$1
$y,$2=$2
[tuple]::Create($x,$y)}}
$0="ing"
$$="hear"
$1="I $$ a "
$3='in my ear.'
$a='Polar Bear'
$b='Lion'
$c='Hippopotamus'
$d='Flamingo'
$e='Zebra'
$f='Boa Constrictor'
$g='Elephant'
$h='Leopard'
$i='Peacock'
$j='Walrus'
$k='Zookeeper'
$v="children"
$2="roar$0"
$4="snort$0"
$5="flut$0"
$6="bray$0"
$7="hiss$0"
$8="trumpet$0"
$9="snarl$0"
$x="yelp$0"
$y="bellow$0"
$^="whistl$0"
$l="$1$b $2$3"
$m="$1$c $4$3"
$n="$1$d $5$3"
$o="$1$e $6$3"
$p="$1$f $7$3"
$q="I $$ an $g $8$3"
$r="$1$h $9$3"
$s="$1$i $x$3"
$t="$1$j $y$3"
$u="$1$k $^$3"
$z=' like a '
$w="I $$ $v..."
z $a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k $l,$m,$n,$o,$p,$q,$r,$s,$t,$u,$w|%{"$($_.item1),"*2+"what do you $$?";$_.item2;""}
"...growl$0$z$a,"
z $b,$c,$d,$e,$f $2,$4,$5,$6,$7|%{$_.item2+$z+$_.item1+","}
"$8 like an $g,"
z $h,$i $9,$x,$y|%{$_.item2+$z+$_.item1+","}
$y+$z+"Walrus..."
"that's what I $$."

Не будет ли использование стандартного 7-битного символа ASCII вместо öболее эффективного использования байтов?
Джонатан Фрех

Кроме того, я думаю, что в вашей первой строке есть лишние пробелы и длинное имя функции.
Джонатан Фрех

Спасибо за подсказки :)! (Я использовал Ö только потому, что учил, что я использовал уже все пригодные знаки ASCII XD)
Add-TheNewOne

Символ öпредставлен только с использованием одного байта в некоторых кодовых страницах, UTF-8 требует два байта для этого символа.
Джонатан Фрех

Ваш вывод немного не в порядке. Последняя строфа повторяет белого медведя, который делает все по одному, и вы включаете свист, который не нужен. Это также пропускает эллипсы. an elephantТам также написано, что есть также дополнительный разрыв строки между ранними строфами, который можно уменьшить, удалив "n".
Веска

0

clojure, 526 байт

(use 'clojure.string)(let[l lower-case
a(partition 2(split"Polar Bear,...growl,Lion,roar,Hippopotamus,snort,Flamingo,flut,Zebra,bray,Boa Constrictor,hiss,Elephant,trumpet,Leopard,snarl,Peacock,yelp,Walrus,bellow,Zookeeper,whistl,children,x"#","))b(map(fn[[w x][y e]][(str
w", "w", what do you hear?
I hear a "(l y)" "e"ing in my ear.

")(str x"ing like a "(l w))])a(rest a))r
replace](print(r(str(r(join""(map first b))#".*x.*""I hear children...")(join",
"(butlast(map last b)))"...
that's what I hear.")#"(?i)a(?= e)""an")))

Вот моя первая попытка. Должен любить форматирование и как он не читается. Надеюсь, что предупреждения от use 'clojure.stringприемлемы.

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

Форматированный код:

(use 'clojure.string)
(let [animal-sound (partition 2 (split "Polar Bear,...growl,Lion,roar,Hippopotamus,snort,Flamingo,flut,Zebra,bray,Boa Constrictor,hiss,Elephant,trumpet,Leopard,snarl,Peacock,yelp,Walrus,bellow,Zookeeper,whistl,children,x" #","))
      sentences (map (fn [[animal-1 sound-1] [animal-2 sound-2]]
                       [(str animal-1 ", " animal-1 ", what do you hear?\nI hear a "
                             (lower-case animal-2) " " sound-2 "ing in my ear.\n\n") (str sound-1 "ing like a " (lower-case animal-1))])
                     animal-sound (rest animal-sound))]
  (print (replace (str
                    (replace (join "" (map first sentences)) #".*x.*" "I hear children...")
                    (join ",\n" (butlast (map last sentences)))
                    "...\nthat's what I hear.") #"(?i)a(?= e)" "an")))

0

Java, 571 555 538 или 516 байт

String p(){String r="",z="...",b,x;String[]a="Polar Bear!Lion!Hippopotamus!Flamingo!Zebra!Boa Constrictor!Elephant!Leopard!Peacock!Walrus!Zookeeper!growling!roaring!snorting!fluting!braying!hissing!trumpeting!snarling!yelping!bellowing!whistling".split("!");for(int i=1;i<11;i++){b=i==6?"n ":" ";x=a[i-1];z+=a[i+10]+" like a"+b+x+(i==10?"...":"\n");r+=x+" , "+x+", what do you hear?\n I hear a"+b+a[i].toLowerCase()+" "+a[i+11]+" in my ear.\n\n";}r+=a[10]+" what do you hear?\n\tI hear children...\n"+z+"\nthat's what I hear.";return r;}

Но для получения результата в JShell требуется всего 516 байт.

String r="",z="...",b,x;String[]a="Polar Bear!Lion!Hippopotamus!Flamingo!Zebra!Boa Constrictor!Elephant!Leopard!Peacock!Walrus!Zookeeper!growling!roaring!snorting!fluting!braying!hissing!trumpeting!snarling!yelping!bellowing!whistling".split("!");for(int i=1;i<11;i++){b=i==6?"n ":" ";x=a[i-1];z+=a[i+10]+" like a"+b+x+(i==10?"...":"\n");r+=x+" , "+x+", what do you hear?\n I hear a"+b+a[i].toLowerCase()+" "+a[i+11]+" in my ear.\n\n";}r+=a[10]+" what do you hear?\n\tI hear children...\n"+z+"\nthat's what I hear."

Это дает неправильный вывод относительно пространств, вкладок, строчные и anпротив a.. Я исправил и golfed его 507 байт
Кевин Cruijssen

@KevinCruijssen в вашем коде отсутствует надпись "я слышу ... ... ** ** в моем ухе". Кроме того , весьма вероятно , golfable, начиная iс 0до 10изменения b=a[i-1]с b=a[i++]и удалением приращения , где он в настоящее время находится.
Оливье Грегуар

0

Swift2, 519 байт

var a=["Polar Bear","Lion","Hippopotamus","Flamingo","Zebra","Boa Constrictor","Elephant","Leopard","Peacock","Warlus","Zookeeper"],b=["...growl","roar","snort","flut","bray","hiss","trumpet","snarl","yelp","bellow","whistl"].map{"\($0)ing"},c=a.enumerate().map{"\($0.0==6 ?"an":"a") \($0.1)".lowercaseString},i=0,j=0
while i<11{print("\(a[i]), \(a[i++]), what do you hear?\nI hear \(i>10 ?"children...":"\(c[i]) \(b[i]) in my ear")\n")}
while j<10{print("\(b[j]) like \(c[j++])\(j>9 ?"...\nthat's what I hear.":",")")}

0

Haskell 537 499 497 байт

import Data.Char
a&b=a++b
b=putStr
c=concat
d=init
e('E':s)="an e"&s
e s="a "&map toLower s
f="I hear "
l=zip(lines"Polar Bear\nLion\nHippopotamus\nFlamingo\nZebra\nBoa Constrictor\nElephant\nLeopard\nPeacock\nWalrus\nZookeeper")$words"growl roar snort flut bray hiss trumpet snarl yelp bellow whistl"
main=(b.drop 41.c)[f&e n&" "&v&"ing in my ear.\n\n"&n&", "&n&", what do you hear?\n"|(n,v)<-l]>>b(f&"children...\n\n..."&(d.d.c)[v&"ing like "&e n&",\n"|(n,v)<-d l]&"...\nthat's what I hear.\n")

Используя соглашение о том, что решение не должно быть выполнимым, только производить вывод через некоторую функцию, это можно сократить до 479 байт. Выход находится в g:

import Data.Char
a&b=a++b
c=concat
d=init
e('E':s)="an e"&s
e s="a "&map toLower s
f="I hear "
l=zip(lines"Polar Bear\nLion\nHippopotamus\nFlamingo\nZebra\nBoa Constrictor\nElephant\nLeopard\nPeacock\nWalrus\nZookeeper")$words"growl roar snort flut bray hiss trumpet snarl yelp bellow whistl"
g=(drop 41.c)[f&e n&" "&v&"ing in my ear.\n\n"&n&", "&n&", what do you hear?\n"|(n,v)<-l]&f&"children...\n\n..."&(d.d.c)[v&"ing like "&e n&",\n"|(n,v)<-d l]&"...\nthat's what I hear.\n"

0

C (лязг) , 552 байта

(*P)()=printf;l(char*s){for(;*s;s++)putchar(*s>64?*s|32:*s);}char*a[]={"Zookeeper","Walrus","Peacock","Leopard","Elephant","Boa Constrictor","Zebra","Flamingo","Hippopotamus","Lion","Polar Bear"},*s[]={"whistl","bellow","yelp","snarl","trumpet","hiss","bray","flut","snort","roar","growl"};f(i){for(i=11;i--;)P("%s, %s, what do you hear?\nI hear%s ",a[i],a[i],i?i^5?" a":" an":""),i?l(a[i-1]):0,P(i?" %sing in my ear.\n\n":"children...\n\n...",s[i-1]);for(i=11;--i;)P("%sing like a%s ",s[i],i^4?"":"n"),l(a[i]),P(i-1?",\n":"...\nthat's what I hear.");}

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



0

Perl 5 , 413 байт

@t=('Polar Bear',growl,Lion,roar,Hippopotamus,snort,Flamingo,flut,Zebra,bray,'Boa Constrictor',hiss,Elephant,trumpet,Leopard,snarl,Peacock,yelp,Walrus,bellow,Zookeeper,whistl);say$_=$t[$i],", $_, what do you hear?
I hear ",/Zo/?"children...
":"a".n x(/C/).lc" $t[$i+=2] $t[$i+1]ing in my ear.
"while!/Zo/;pop@t;pop@t;print'...';say+(shift@t)."ing like a ".lc.(@t?",":'...')while$_=shift@t;say"that's what I hear."

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


0

JavaScript, 424 байта

f=(x=0,a=btoa`>Z¯ ^j¼Ëó*i¢-jk¬ÌYZ)à£6^n¶³²
춸¶óW©©íÌ·¨¥ªÝÌ÷r$Íf¥®ë3f$yê^¯0`[s=`split`]`y`.join` `[s]`z`,g=z=>n[z]+`ing like `+h(17)+l(z)+(z>9?`...
that's what I hear.`:`,
`+g(++z)),h=m=>++x%m?`a `:`an `,l=y=>a[y].toLowerCase(n=btoa`º0:èj¼ìíÍùn·6ëk,áË3¶»¦¥ës²v«<ÛzYhÃ<!ËeÌ`[s]`z`))=>a[x]+`, ${a[x]}, what do you hear?
I hear `+(x>9?`children...

...`+g(0):h(6)+l(x)+` ${n[x]}ing in my ear.

`+f(x))

Проверь это


0

Pyth, 342 байта

L:b"a e""an e"y>sm.F"
I hear a {1} {0} in my ear.

{2}, {2}, what do you hear?"+dr3edJC,+R"ing"c"growl
roar
snort
flut
bray
hiss
trumpet
snarl
yelp
bellow
whistl"bc"polar bear
lion
hippopotamus
flamingo
zebra
boa constrictor
elephant
leopard
peacock
walrus
zookeeper"b42"I hear children...
"jPPysm+j" like a "d",
"PJc2*6\."that's what I hear.

Попробуйте это онлайн здесь .

Объяснение, чтобы следовать.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.