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.
code-golf
string
kolmogorov-complexity
aaaantoine
źródło
źródło
B
iC
wPolar Bear
iBoa Constrictor
konieczne? (W partii kosztuje mnie to 10% mojej liczby bajtów ...)Odpowiedzi:
05AB1E,
349331330322314311 bajtówWypró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:
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ę”.
źródło
PHP,
420414434414412 bajtówzadzwoń z CLI lub przygotuj
<pre>
do wyjścia.awaria
źródło
JavaScript,
545541497 bajtówCałkiem fajne wyzwanie!
Dzięki Downgoat za zaoszczędzenie mi
27ton używanych bajtówatob
, a Titus za 4 bajty!Nie golfowany:
źródło
a.map((n,m)=>n>9||(p+=s[n]...))
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 ().c=console.log
nie działa, ponieważlog
musi miećthis
odconsole
lub 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/// ,
523512 bajtówWypróbuj online!
608 bajtów mniej niż rzeczywisty komunikat (1120), to mniej niż połowa (560)!
źródło
Dyalog APL , 387 bajtów
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:
źródło
Python 3,
497484480 bajtów(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.
źródło
a=A[i]
na,a,b=A[i]
a następnie możesz pisać,a
ab
zamiasta[0]
ia[1]
. Pozwoli to zaoszczędzić 12 bajtów.N=lambda m:("a","an")["E"==m[0]]+" "+m.lower()
sięN=lambda m:"an"[:("E"==m[0])+1]
in=a[0]+", ";P(n+n+"what do you hear?")
doa+=", ";P(a+a+"what do you hear?")
uratuje 2 kolejne bajty.len(A)
, skoro celem tego wyzwania jest po prostu wygenerowanie wyjścia statycznego (nie zajmowanie się dynamicznym wprowadzaniem danych), czy dopuszczalne jest użycie11
zamiast tego zapisanego na stałe kodu w celu zaoszczędzenia bajtów?Pyth -
427384 bajtówWypróbuj tutaj - bezpośredni link
źródło
ing
? Szaleję, widząc, jak PHP pokonuje Pytha.a elephant
.C #,
575525520526507504497494493 bajtówC # lambda gdzie wyjście jest a
string
.Wyjaśnienie
t
jako ciąg znaków o formacienoise,animal,noise,animal,...
i podział według,
.r
is
.r
jest pierwszą częścią piosenki is
ostatnią częścią.z
in
są tutaj do obsługiElephant
.t
i budowaćr
is
w tej samej pętli. Dziwne trójskładnikowe + interpolowane rzeczy.Kod
Wypróbuj online!
źródło
Python 2 - 454 bajtów
źródło
R
518509482477474465452456 bajtówLink do R-Fiddle'a, aby wypróbować kod
children
z wektorema
, a pozbył odpowiedniego wpisu wd
wektorze zapisać 8 bajtówchildren
, zaoszczędzono kolejne 27 bajtów.tolower
funkcji, zapisano 5 bajtówwriteLines
zcat
i przekształcony w odpowiedni (dodawane\n
w miejscach) zapisywane 3 bajtyd
tylko 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.cat
funkcja była oddzielana" "
, zmieniona z powrotem nawriteLines
. Dodano 4 bajty (cat
można naprawić, dodając,sep=""
do funkcji)źródło
' '
przed każdym przedmiotema
po"Polar Bear"
. Jest to normalne?C #,
592572 bajtówŚwietnie się bawiłem biorąc to wyzwanie z moim kolegą! Dzięki za pomysł.
Sformatowany:
EDYCJA: Dziękuję za liczne i niesamowite wskazówki, bardzo pomogły, a ja postaram się, aby pozostałe również działały.
źródło
new[]
zamiast o.new string[]
Możesz także przekształcić to w anonimową funkcję, jak w odpowiedzi @ aloisdga elephant
pułapkę (ja też). Jestan elephant
;)Partia,
650647 bajtówPonieważ
%*
jest to najbliższa rzecz, którą Batch ma do tablicy. Jeśli mogę użyć,Polar bear
aBoa constrictor
nastę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 off
w całości.źródło
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ępnieTak utworzony plik po uruchomieniu zwraca tekst początkowy 402 bajtów.
źródło
tail -n+2 \$0|zcat;exit
nowa 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 ++).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> :(zcat
nie pochodzi z coreutils, ale pochodzigzip
. W wielu systemach jest skrypt z tymi wywołaniamigzip -cd "$@"
... BTW zmodyfikowałem w Bash + zcat, 402 bajtów.F #,
591589579576573567552 bajtówTo 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)
źródło
Emacs Lisp, 576 (621) bajtów
Podczas ustawiania „słonia” trwa to nieco dłużej:
Nie golfowany:
źródło
^[aeiou]
celu^e
, nie może?C, 596 bajtów
Zadzwoń
f()
bez żadnych argumentów. To nie jest najlepszy golf na świecie, prawdopodobnie mogę go bardziej zmniejszyć.Wypróbuj na ideone.
źródło
a[99][99]
->**a
(-6). Nie możesz dzwonićf()
bez argumentów, potrzebujeszn
. Wymieńf(n){
sięf{n;
. Kolejne -1 tutaj. Ponadtof()
można teraz wywoływać.**a
oznacza 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.a[99][99]
za[<how many elements do I modify?>+1][<what is the maximum length of any string in here?>+1]
.Python 3,
442441 bajtówbez golfa:
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”.źródło
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,46
instrukcję na początku.źródło
GOSUB
/RETURN
zamiastCALL
/SUB
/END SUB
. Możesz także wstawić cudzysłowyDATA
dla 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 wykorzystanieRESTORE
BTW!LUA 535 bajtów
bez golfa:
Wypróbuj online
źródło
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 )
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”.
źródło
Japt ,
308303299295288280294289286 bajtówZawiera wiązkę niedrukowalnych; kliknij link poniżej, aby je wyświetlić.
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.
źródło
PowerShell
921889886898 bajtównie 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.
źródło
ö
byłoby bardziej wydajne bajtowo?ö
jest reprezentowany tylko za pomocą jednego bajtu na niektórych stronach kodowych, UTF-8 wymaga dwóch bajtów dla tego znaku.an elephant
Istnieje dodatkowy podział linii między wcześniejszymi zwrotkami, które można ustawić, usuwając"n"
.clojure, 526 bajtów
Oto moja pierwsza próba. Uwielbiam formatowanie i jego nieczytelność. Mam nadzieję, że ostrzeżenia
use 'clojure.string
są dopuszczalne.Wypróbuj online.
Sformatowany kod:
źródło
Java,
571 555538 lub 516 bajtówAle do uzyskania wyniku w JShell potrzeba tylko 516 bajtów
źródło
an
vsa
.. Naprawiłem i grałem ją do 507 bajtówi
z0
góry do10
zmieniającychb=a[i-1]
sięb=a[i++]
i usuwanie przyrost gdzie to jest obecnie.Swift2, 519 bajtów
źródło
Haskell
537499497 bajtówStosują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
:źródło
C (clang) , 552 bajtów
Wypróbuj online!
źródło
Perl 5 , 413 bajtów
Wypróbuj online!
źródło
JavaScript, 424 bajty
Sprawdź to
źródło
Pyth, 342 bajty
Wypróbuj online tutaj .
Wyjaśnienie do naśladowania.
źródło