Полярний ведмідь, Полярний ведмідь, що ти чуєш?


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
Колмогоров-складність буде хорошим позначкою для цього
обвуглена трава

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ˆ}
Приєднуйтесь до речення "Я чую (н) звук тварини у вусі". (як і дитячий), зберігайте у глобальному масиві та кінцевому циклі

X¯‚ø€J
Отримайте перші рядки, за допомогою блискавки та приєднайтеся, створюючи першу частину рими «Тварина, тварино, що ти чуєш?

vy,¶?}
Друк, а потім новий рядок.

…...DU?
Роздрукуйте "..." і збережіть копію в змінній X.

Y¨v
Для кожного звуку, окрім "свисту":

N__i ', ¶} Для кожного рядка, окрім першого, почніть його з ", \ n" (змушуючи коми переходити на попередній рядок)

yð“€è€…“
Натисніть на звук, пробіл і "як"

N6Qi'n«}
Якщо Слон додати "n".

ð®NèJl?}X,
Отримайте тварину, збережену в реєстрі, приєднайтеся до всього, надрукуйте та закінчіть цикл з наступним написом "...". Це створює рядки "звук, як (n) тварина".

“€Š's€À I—«.“?
Друкувати рядок словника "саме це я чую".



6
Я не бачу, де закінчується код, і починаються запаковані дані.
Адам

4
@ Adám я знаю. Це дуже схоже на хитрість :) Я додам пояснення, яке, сподіваюся, зробить його більш зрозумілим. Я, можливо, спершу хотів би спробувати його в гольф.
Емінья

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 байт ... hmpf.
  • повернув 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)

Досить веселий виклик!

Дякую Пуху, що врятував мені 27 тонн байтів atob, а Титу - 4 байти!

Безголівки:

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
Ваш код не працює, я вважаю, що стек обмінявся деякими літерами у вашому базовому коді64. Після розколу я отримую ["ujA66Gq87O3N + W63NutrLOHLM7a7pqXrc7J2q", "", "нижче", "why2U ="].
лолеск

1
Визначте c=console.log;на початку, тоді використовуйте c (), щоб зберегти 6 байт. Або просто збережіть рядок у змінній та роздрукуйте її один раз за допомогою upozor ().
лолеск

1
@lolesque c=console.logне працює , тому що logнеобхідно мати thisв 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

Діалог 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⌶) ун-зліб

⎕UCS перетворити кодові точки Unicode в рядок

Джерельна рядок - це наступні 365 байт кодових точок Unicode:

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

Піт - 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 # лямбда, де вихід - a string .

Пояснення

  1. Ініціюйте 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Я чую ..." Я цього раніше не помічав. Він походить від функції кота, що розділяє за допомогою пробілу. Це можна виправити, додавши функцію 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" s у масиві дієслів та перемістіть його до виводу для додаткової економії.
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.
Другий рядок - це gzipped текст.

Як його підготувати: весь текст у файлі 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 байт (запропонована версія gzipped тексту). Чи знаєте ви причину пониження? (це напівстандартна процедура баш-самовстановлення скриптів з архівом всередині, IMHO не так відрізняється від використання бібліотеки в c ++).
Гастур

Здається, ви використовуєте coreutils ( zcat), тому ваш заголовок повинен бути ( Bash + coreutils, 402 байти ) замість ( Bash (з zcat) 402 ). І чи можете ви відредагувати свою відповідь (просто додати <!>в кінці своєї публікації)? Я хочу видалити знижку> :(
Erik the Outgolfer

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

Добре, знищено видалено. Резюме моє.
Ерік Аутгольфер

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 Languange, але я думаю , що для цілей цього завдання ви можете замінити «\ г \ п» з простим «\ п», як концепція тієї ж , і це економить байти
Vale

@ Vale спасибі збережено 10 байт
асибахі

1
Це не впливає на кількість, але ви неправильно написали "Гіпопотам".
GentlePurpleRain

@GentlePurpleRain Heh. Я думав, що шукаю всі написання. Я це виправлю.
асібахі

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

Безголівки:

(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()зараз телефонує.
Ерік Аутгольфер

@owacoder Як це? **aозначає масив символьних масивів (або вказівник символу), і, на мене, він завжди працював (gcc 4.8). Який компілятор ви використовуєте? Якщо ви не використовуєте gcc, потрібно вказати його. Якщо ви використовуєте gcc, це за замовчуванням.
Ерік Аутгольфер

@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].
Ерік Аутгольфер

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

неозорений:

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, BTW!
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.")

неозорений:

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 байт :)

EDIT: Дякую Джонатану Фреху, я врятував 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. Я виправив і переграв його на 507 байт
Кевін Круїйсен

@KevinCruijssen у вашому коді відсутнє "ing" "Я чую ... ... ** ing ** у вусі". Крім того , досить імовірно , 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.