Polar Bear, Polar Bear, co słyszysz?


50

Tekst dziecięcej książki Polar Bear, Polar Bear, What Do You Hear? ma bardzo prosty wzór. Możesz użyć tego tekstu do nauczania wstępnych koncepcji programowania.

Mój syn szybko znudził się tym pomysłem, więc zamiast tego postanowiłem zagrać w golfa.

Wyzwanie

W wybranym języku programowania napisz jak najmniejszy program, który wydrukuje następujący tekst. Dane wyjściowe powinny być dokładnie dopasowane, w tym wielkość liter, odstępy i znaki interpunkcyjne.

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
Złożoność kolmogorowa byłaby dobrym tagiem
charredgrass,

3
Są wielkie Bi Cw Polar Beari Boa Constrictorkonieczne? (W partii kosztuje mnie to 10% mojej liczby bajtów ...)
Neil,

Czy przesyłanie skrótu i ​​brutalne wymuszanie rozwiązania z ograniczonym zestawem jest dozwolone? : D
polim

4
To bardzo miłe pierwsze wyzwanie!
Alex A.,

1
Dałbym +1, ale masz 42 głosy poparcia i kim jestem, by przeszkadzać w galaktyce?
FantaC

Odpowiedzi:


34

05AB1E, 349 331 330 322 314 311 bajtów

•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—«.“?

Wypróbuj online

Wyjaśnienie

•4i;kV_†©:š×Îj€Yå—‚‘%˜ESδþ¤çÑ9¶‹{Å€7¾à{Ì®qA•
Zapakowany ciąg zawierający dźwięki GROWL0ROAR0SNORT0FLUT0BRAY0HISS0TRUMPET0SNARL0YELP0BELLOW0WHISTL

35B0¡…ing«lV
Rozpakuj, podziel na 0, dodaj „ing” do każdego słowa, przekonwertuj na niższy i zapisz w zmiennej Y

•7ü[¿‘¢wÀ¶à-‚¤î„jHâ™ÐJ'µ‡ÀÂý6›ü‚š¸€%NtÅýµL›fU¥ì€€uîT¡›Ÿ{!œ>'Ì&ý§¨Ü?é>•
Zapakowany sznurek zawierający zwierzęta POLAR1BEAR0LION0HIPPOPOTAMUS0FLAMINGO0ZEBRA0BOA1CONSTRICTOR0ELEPHANT0LEOPARD0PEACOCK0WALRUS0ZOOKEEPER

36B1ð:0¡™
Rozpakuj, zamień 1 na spację, podziel na 0 i przekonwertuj na tytuł

D©„, «D‚ø
Duplikuj, zapisz, aby zarejestrować się do późniejszego użycia, dodaj „,” do jednej kopii, zduplikuj ją i skompresuj.

“€À€·€î—«?“¶«¸
Słownikowe słowa „co słyszysz?”, Po których następuje nowy wiersz, dodany do nowej listy

‘€JU
Kartezjański produkt z listy „Zwierzę, zwierzę” i „co słyszysz? \ N” spłaszczył i połączył i przechowuje go w zmiennej X. Pruduje listę ciągów znaków „Zwierzę, zwierzę, co słyszysz? N „.

¦“„¾“‚˜l
Weź pozostałą listę zwierząt z przeszłości, usuń dozorcę i dodaj dzieci, przekonwertuj na małe litery.

v
Dla każdego zwierzęcia:

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

Wciśnij „słyszę 0 w uchu.”, Podziel na 0 i wciśnij jako osobne ciągi.

yð«Y¦õ‚˜Nè«
Wciśnij „dźwięk zwierząt”, gdy dzieci nie mają dźwięku

sr„ a
Wciśnij „a” we właściwe miejsce

N5Qi'n«}
Jeśli zwierzę to „Słoń”, dodaj „n”

ð«
Dodaj miejsce

N9›ijrj¨ðs«…...«}
Jeśli zwierzę to dzieci, usuń spację i dodaj „...”

srJˆ}
Dołącz do zdania „Słyszę (n) dźwięk zwierzęcia w moim uchu”. (podobnie jak dzieci), przechowuj w globalnej tablicy i pętli końcowej

X¯‚ø€J
Pobierz pierwsze wiersze, spakuj i dołącz do produkcji pierwszej części rymu „Animal, Animal, co słyszysz? \ NSłyszę (n) dźwięk zwierzęcia w moim uchu”.

vy,¶?}
Drukuj, a następnie nowa linia.

…...DU?
Wydrukuj „...” i zapisz kopię w zmiennej X.

Y¨v
Dla każdego dźwięku oprócz „gwizdania”:

N__i ', ¶} Dla każdej linii oprócz pierwszej, zacznij od „, \ n” (sprawiając, że przecinek przechodzi w poprzednią linię)

yð“€è€…“
Wciśnij dźwięk, przestrzeń i „jak”

N6Qi'n«}
Jeśli Elephant doda „n”.

ð®NèJl?}X,
Odzyskaj zwierzę zapisane w rejestrze, dołącz do wszystkiego, wydrukuj i zakończ pętlę, a następnie „...”. Daje to linie „dźwięk jak (n) zwierzę”.

“€Š's€À I—«.“?
Wydrukuj ciąg słownika „to właśnie słyszę”.


30
Ten woła Cthulhu.
aloisdg mówi Przywróć Monikę

6
Nie widzę, gdzie kończy się kod, a zaczynają spakowane dane.
Adám,

4
@ Adám Wiem. Wygląda to jak bełkot :) W końcu dodam wyjaśnienie, które, mam nadzieję, sprawi, że będzie jaśniejsze. Może jednak najpierw spróbuję zagrać w golfa.
Emigna

28
Prawdopodobnie tak ludzie świeccy wyobrażają sobie kod.
noɥʇʎԀʎzɐɹƆ

1
Nie mam pojęcia, co właśnie przeczytałem ...
Nico

9

PHP, 420 414 434 414 412 bajtów

zadzwoń z CLI lub przygotuj <pre>do wyjścia.

$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.";
  • kilka uwag dla nieokreślonych stałych; Ujawnia się rzutowanie PHP na dosłowny ciąg znaków
  • dodanie „n” dla „słonia” zajęło 20 bajtów ... hmpf.
  • odzyskałem 20 bajtów, zmieniając kolejność rzeczy :)

awaria

$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 bajtów

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)

Całkiem fajne wyzwanie!

Dzięki Downgoat za zaoszczędzenie mi 27 ton używanych bajtów atob, a Titus za 4 bajty!

Nie golfowany:

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]...))
Neil

1
@ OldBunny2800 Na potrzeby gry w golfa możesz ustawić zmienne globalne. (Nie rób tego jednak w funkcji rekurencyjnej!)
Neil

1
Twój kod nie działa, zakładam, że stos wymienił kilka liter w kodzie base64. Po podziale otrzymuję [„ujA66Gq87O3N + W63NutrLOHLM7a7pqXrc7J2q”, „”, „poniżej”, „dlaczego2U =”].
lolesque

1
Zdefiniuj c=console.log;na początku, a następnie użyj c (), aby zapisać 6 bajtów. Lub po prostu zapisz ciąg w zmiennej i wydrukuj go raz za pomocą alert ().
lolesque

1
@lolesque c=console.lognie działa, ponieważ logmusi mieć thisod consolelub produkuje błąd. (Chyba, że ​​nie działa w niektórych przeglądarkach / środowiskach?) Pomysł, aby umieścić wszystko w łańcuch, brzmi jednak dobrze
apsillers

7

/// , 523 512 bajtów

/_/\/\///:/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:.

Wypróbuj online!

608 bajtów mniej niż rzeczywisty komunikat (1120), to mniej niż połowa (560)!


6

Dyalog APL , 387 bajtów

⎕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­·Õ}ýÚ'

Aby ułatwić czytanie: ⎕UCS¯2(219⌶)¯128+⎕UCS'...'

⎕UCS '... 'zamień ciąg znaków na punkty kodu Unicode

¯128+ odejmij 128, aby uzyskać -128 ≤ n ≤ 127

¯2(219⌶) un-zlib

⎕UCS konwertuj punkty kodu Unicode na ciąg znaków

Łańcuch źródłowy to następujące 365 bajtów punktów kodu Unicode zlib'ed:

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 bajtów

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

(Kredyt na 13 zapisanych bajtów powinien przejść do Gábor Fekete, a dodatkowe 4 bajty zostały zapisane przez Taylor Lopez.)

Prawdopodobnie można się domyślić, że użyję języka takiego jak Python jako narzędzia do nauczania. To był program, zanim zacząłem grać w golfa.

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
Możesz użyć składni rozpakowywania, aby zapisać niektóre bajty: zmień a=A[i]na, a,b=A[i]a następnie możesz pisać, aa bzamiast a[0]i a[1]. Pozwoli to zaoszczędzić 12 bajtów.
Gábor Fekete

Zmieniających N=lambda m:("a","an")["E"==m[0]]+" "+m.lower()się N=lambda m:"an"[:("E"==m[0])+1]i n=a[0]+", ";P(n+n+"what do you hear?")do a+=", ";P(a+a+"what do you hear?")uratuje 2 kolejne bajty.
Gábor Fekete

Ogólne pytanie w golfa. Jeśli tak len(A), skoro celem tego wyzwania jest po prostu wygenerowanie wyjścia statycznego (nie zajmowanie się dynamicznym wprowadzaniem danych), czy dopuszczalne jest użycie 11zamiast tego zapisanego na stałe kodu w celu zaoszczędzenia bajtów?
Taylor Lopez,

1
@TaylorLopez na pewno jest to zła praktyka w ogóle, ale w golfa, gdzie celem jest zminimalizowanie kodu, nie widzę powodu, dla którego by tego nie zrobić.
aaaantoine

5

Pyth - 427 384 bajtów

=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"

Wypróbuj tutaj - bezpośredni link


Czy umiesz grać w golfa ing? Szaleję, widząc, jak PHP pokonuje Pytha.
Tytus

1
Kod wyjściowy a elephant.
Antti29

Wszystkie problemy (w tym fakt, że PHP pokonał Pyth) zostały naprawione!
KoreanwGlasses,

3

C #, 575 525 520 526 507 504 497 494 493 bajtów

()=>{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 # lambda gdzie wyjście jest a string.

Wyjaśnienie

  1. Init tjako ciąg znaków o formacie noise,animal,noise,animal,...i podział według ,.
  2. Deklaruj ri s. rjest pierwszą częścią piosenki i sostatnią częścią. zi nsą tutaj do obsługi Elephant.
  3. Spacer ti budować ri sw tej samej pętli. Dziwne trójskładnikowe + interpolowane rzeczy.
  4. Zwróć pierwszą część utworu, a następnie ostatnią część.

Kod

()=>{
    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;
};

Wypróbuj online!


3

Python 2 - 454 bajtów

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 bajtów

Link do R-Fiddle'a, aby wypróbować kod

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]))
  • Przeniesiony childrenz wektorem a, a pozbył odpowiedniego wpisu w dwektorze zapisać 8 bajtów
  • Więcej sprzątania i usuwania indeksów, które stały się zbędne przez przenoszenie children, zaoszczędzono kolejne 27 bajtów.
  • Globalizacja tolowerfunkcji, zapisano 5 bajtów
  • Wymienić writeLinesz cati przekształcony w odpowiedni (dodawane \nw miejscach) zapisywane 3 bajty
  • Uświadomiłem sobie, że jeśli dtylko 7 elementów nie jest pełne 11, R ponownie zapętli się z powrotem do początku. Jak 11 <14, to działa dla nas. Zapisano 9 bajtów.
  • zglobalizowane indeksy dolne, zapisane 13 bajtów.
  • catfunkcja była oddzielana " ", zmieniona z powrotem na writeLines. Dodano 4 bajty ( catmożna naprawić, dodając ,sep=""do funkcji)

Witamy w PPCG! To miła pierwsza odpowiedź. Czy istnieje sposób wypróbowania kodu online?
aloisdg mówi Przywróć Monikę

1
Spróbuj tego r-fiddle.org/#/fiddle?id=5pqkHPyL&version=1, chociaż musiałem dodać znak (odwrotny ukośnik), aby odczytać apostrof „poprawnie”
Robert Maidstone

Dziękuję Ci. W R-Fiddle widziałem, że masz ' 'przed każdym przedmiotem apo "Polar Bear". Jest to normalne?
aloisdg mówi Przywróć Monikę

Nie jestem do końca pewien, co masz na myśli. Masz na myśli miejsce w pierwszej części wiersza? Jak w przestrzeni przed „Lwem” tutaj? „Niedźwiedź polarny, niedźwiedź polarny ...... \ n Słyszę ...... \ n Lew, Lew ..... \ n Słyszę ...” Nie zauważyłem tego wcześniej. Pochodzi z funkcji kota oddzielającej za pomocą spacji. Można to naprawić, dodając do funkcji sep = "", jednak wtedy preferowane jest użycie writeLines. (Zmieniłem kod z powrotem na writeLines)
Robert Maidstone

3

C #, 592 572 bajtów

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

Świetnie się bawiłem biorąc to wyzwanie z moim kolegą! Dzięki za pomysł.

Sformatowany:

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();
    }
}

EDYCJA: Dziękuję za liczne i niesamowite wskazówki, bardzo pomogły, a ja postaram się, aby pozostałe również działały.


1
Usuń wszystkie niepotrzebne białe znaki, których możesz użyć new[]zamiast o. new string[]Możesz także przekształcić to w anonimową funkcję, jak w odpowiedzi @ aloisdg
TheLethalCoder,

Witamy w PPCG! Dobry pomysł w tej odpowiedzi! Inspirację możesz znaleźć w poradach dotyczących gry w golfa na stronie C # . Tak trzymaj!
aloisdg mówi Przywróć Monikę

1
Wpadłeś w a elephantpułapkę (ja też). Jest an elephant;)
aloisdg mówi Przywróć Monikę

Wyjmij swoje „ing” z tablicy czasowników i przenieś je na wyjście, aby uzyskać więcej oszczędności.
GuitarPicker

3

Partia, 650 647 bajtów

@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

Ponieważ %*jest to najbliższa rzecz, którą Batch ma do tablicy. Jeśli mogę użyć, Polar beara Boa constrictornastępnie mogę zaoszczędzić 10% ... ale wciąż jestem więcej niż 50% oryginalnego tekstu ...

Edit: Zapisane 3 bajty ustawiając e=echo(z (zamiast przestrzeni, która pozwala mi używać go do echo puste wiersze, chociaż wtedy trzeba pisać @echo offw całości.


2

Bash + Zcat, 402 bajty

Tylko żart:
2-liniowy skrypt bash, który ogonuje się i przesyła drugą linię do Zcat.
Drugi wiersz to spakowany tekstem.

Jak go przygotować: cały tekst w pliku a. Następnie

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

Tak utworzony plik po uruchomieniu zwraca tekst początkowy 402 bajtów.


Czy możesz opublikować rzeczywisty kod? 402 bajtów nie jest to dużo (to znaczy można go zakładać.)
Eryk Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Po kodzie następuje tylko tail -n+2 \$0|zcat;exitnowa linia i ciąg binarny o długości 379 bajtów (proponowana wersja zgzipowanego tekstu). Czy znasz przyczynę przegłosowania? (jest to pół-standardowa procedura do samodzielnego instalowania skryptów bash z archiwum w środku, IMHO nie różni się tak bardzo od korzystania z biblioteki w c ++).
Hastur

Wygląda na to, że używasz coreutils ( zcat), więc nagłówkiem musi być ( Bash + coreutils, 402 bajty ) zamiast ( Bash (z zcat) 402 ). I czy możesz edytować swoją odpowiedź (wystarczy dołączyć <!>na końcu postu)? Chcę usunąć downvote> :(
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ zcatnie pochodzi z coreutils, ale pochodzi gzip. W wielu systemach jest skrypt z tymi wywołaniami gzip -cd "$@"... BTW zmodyfikowałem w Bash + zcat, 402 bajtów.
Hastur

Dobrze, głosowanie usunięte. Głos jest mój.
Erik the Outgolfer

2

F #, 591 589 579 576 573 567 552 bajtów

To moja pierwsza próba gry w golfa w języku, który lubię. Założę się, że można to skrócić na kilka sposobów. Działa w FSI, więc nie ma potrzeby płyty kotłowej .NET.

Edycja: Ogolono 10 bajtów, usuwając \r. Nadal dobrze renderuje się w VSCode, więc idź. Wytnij kolejne trzy bajty ze składu funkcji, a kolejne trzy za pomocą lambda, a następnie sześć za pomocą pętli for zamiast Seq.iter (pozbycie się lambda). Ostatecznie 15 bajtów zostało wyciętych przez zmianę kolejnościa(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
Witamy w PPCG, fajna odpowiedź!
kot

Wiem, że #F jest językiem .net, ale myślę, że dla celów tego wyzwania możesz zastąpić „\ r \ n” prostym „\ n”, ponieważ koncepcja jest taka sama i oszczędza bajty
Vale

@Vale dzięki. zapisano 10 bajtów
asibahi

1
Nie wpływa to na liczbę, ale źle wpisałeś „Hipopotam”.
GentlePurpleRain

@GentlePurpleRain Heh. Myślałem, że szukałem wszystkich pisowni. Naprawię to.
asibahi

1

Emacs Lisp, 576 (621) bajtów

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

Podczas ustawiania „słonia” trwa to nieco dłużej:

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

Nie golfowany:

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

Twój regex mogłaby zostać skrócona od ^[aeiou]celu ^e, nie może?
owacoder,

Dla słonia tak, ale gdyby dodano inne zwierzęta, musiałoby się to zmienić. Przy 600 bajtach już 6 bajtów nie zaszkodzi tak bardzo.
Lord Yuuma,

1

C, 596 bajtów

Zadzwoń f()bez żadnych argumentów. To nie jest najlepszy golf na świecie, prawdopodobnie mogę go bardziej zmniejszyć.

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

Wypróbuj na ideone.


Czy możesz dodać link do ideone?
aloisdg mówi Przywróć Monikę

2
Dodano link ideone.
owacoder,

a[99][99]-> **a(-6). Nie możesz dzwonić f()bez argumentów, potrzebujesz n. Wymień f(n){się f{n;. Kolejne -1 tutaj. Ponadto f()można teraz wywoływać.
Erik the Outgolfer

@owacoder Jak to możliwe? **aoznacza tablicę tablic znaków (lub wskaźnik znaków) i dla mnie zawsze działało (gcc 4.8). Z jakiego kompilatora korzystasz? Jeśli nie używasz gcc, musisz go określić. Jeśli używasz gcc, jest to ustawienie domyślne.
Erik the Outgolfer,

@owacoder Nie! To tworzy tablicę, która pasuje do 98 łańcuchów o długości 98! I zdecydowanie nie powinieneś nazywać swojego linku ideone „Wypróbuj online!” Do golfa, wymienić a[99][99]z a[<how many elements do I modify?>+1][<what is the maximum length of any string in here?>+1].
Erik the Outgolfer,

1

Python 3, 442 441 bajtów

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

bez golfa:

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

Zasadniczo, tylko pętla, która tworzy dwa ciągi reprezentujące dwie części opowieści. Te 'n'[:'el'in n]uchwyty „an” dla słonia. W [44:-30]kotlety off wiodącym „Słyszę niedźwiedź polarny growling mi do ucha” i tylnym „gwizdanie jak Heca”.


1

QB64 (QuickBASIC), 581 bajtów

Kod rozszerza się nieco, gdy wrzucisz go do interpretera, ale ten plik źródłowy jest prawidłowy do załadowania w niezmienionej postaci. Jeśli chcesz zobaczyć cały wynik przed przewinięciem, musisz dodać width 80,46instrukcję na początku.

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
Wiem, że to trochę późno, ale: Myślę, że możesz zaoszczędzić trochę bajtów, używając GOSUB/ RETURNzamiast CALL/ SUB/ END SUB. Możesz także wstawić cudzysłowy DATAdla wszystkich pozycji, w których nie ma spacji. Wreszcie, ponieważ istnieje tylko jedno zwierzę, które zaczyna się od samogłoski, A$="Elephant"jest w rzeczywistości o 1 bajt krótsze niż LEFT$(A$,1)="E". Ładne wykorzystanie RESTOREBTW!
DLosc

1

LUA 535 bajtów

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

bez golfa:

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

Wypróbuj online


1

PHP, 366 bajtów

Leniwa odpowiedź, ale po co pisać niestandardowy dekompresor, gdy gzip jest dostępny?

Zrzut szesnastkowy kodu PHP (można zapisać za pomocą 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.');

Użyłem kilku iteracji zopfli, aby przekonwertować tekst źródłowy na 349 bajtów skompresowanych danych, unikając znaku „, który w innym przypadku musiałby być poprzedzony odwrotnym ukośnikiem”.


1

Japt , 308 303 299 295 288 280 294 289 286 bajtów

Zawiera wiązkę niedrukowalnych; kliknij link poniżej, aby je wyświetlić.

`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 Ê#.`]¬]¬Ã·]¬

Sprawdź to

+14 bajtów, bo podniosłem linię morsa; w przyszłym tygodniu będę musiał przejrzeć kolejną przepustkę, aby sprawdzić, czy uda mi się odzyskać któryś z tych bajtów.


1

PowerShell 921 889 886 898 bajtów

nie jest idealny, ale oszczędza 300 bajtów :)

EDYCJA: Dzięki Jonathan Frech, zapisałem 32 bajty. I dziękuję Waszemu za poprawienie wyników.

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

Czy użycie standardowego 7-bitowego znaku ASCII nie öbyłoby bardziej wydajne bajtowo?
Jonathan Frech

Co więcej, myślę, że w twoim pierwszym wierszu jest trochę zbędnych białych znaków wraz z długą nazwą funkcji.
Jonathan Frech

Dziękuję za podpowiedzi :)! (Użyłem Ö tylko dlatego, że uczyłem, że używałem już wszystkich użytecznych znaków ASCII XD)
Add-TheNewOne

Znak öjest reprezentowany tylko za pomocą jednego bajtu na niektórych stronach kodowych, UTF-8 wymaga dwóch bajtów dla tego znaku.
Jonathan Frech

Twoje wyjście jest trochę wyłączone. Ostatnia zwrotka powtarza niedźwiedzia polarnego, który sprawia, że ​​wszystko jest jedno, a ty włączasz gwizdanie, które nie jest potrzebne. Brakuje także elips. Pisze także an elephantIstnieje dodatkowy podział linii między wcześniejszymi zwrotkami, które można ustawić, usuwając "n".
Veskah

0

clojure, 526 bajtów

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

Oto moja pierwsza próba. Uwielbiam formatowanie i jego nieczytelność. Mam nadzieję, że ostrzeżenia use 'clojure.stringsą dopuszczalne.

Wypróbuj online.

Sformatowany kod:

(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 lub 516 bajtów

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

Ale do uzyskania wyniku w JShell potrzeba tylko 516 bajtów

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

To daje niepoprawne dane wyjściowe dotyczące pomieszczeń, zakładek, małymi literami a anvs a.. Naprawiłem i grałem ją do 507 bajtów
Kevin Cruijssen

@KevinCruijssen w twoim kodzie brakuje „ing” z „Słyszę ... ... ** ing ** w moim uchu”. Ponadto, bardzo prawdopodobne golfable zaczynając iz 0góry do 10zmieniających b=a[i-1]się b=a[i++]i usuwanie przyrost gdzie to jest obecnie.
Olivier Grégoire,

0

Swift2, 519 bajtów

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 bajtów

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

Stosując konwencję, że rozwiązanie nie musi być wykonywalne, tylko generuje dane wyjściowe za pomocą jakiejś funkcji, można to skrócić do 479 bajtów. Dane wyjściowe są w 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 (clang) , 552 bajtów

(*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.");}

Wypróbuj online!



0

Perl 5 , 413 bajtów

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

Wypróbuj online!


0

JavaScript, 424 bajty

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

Sprawdź to


0

Pyth, 342 bajty

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.

Wypróbuj online tutaj .

Wyjaśnienie do naśladowania.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.