Der Text des Kinderbuchs Eisbär, Eisbär, Was hörst du? hat ein sehr einfaches Muster. Sie können den Text verwenden, um einführende Programmierkonzepte zu vermitteln.
Mein Sohn langweilte sich schnell bei dieser Idee und ich beschloss, stattdessen ein bisschen Golf zu spielen.
Die Herausforderung
Schreiben Sie in der Programmiersprache Ihrer Wahl das kleinstmögliche Programm, das den folgenden Text ausgibt. Die Ausgabe sollte genau übereinstimmen, einschließlich Groß- und Kleinschreibung, Abstand und Interpunktion.
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
quelle
quelle
B
undC
inPolar Bear
undBoa Constrictor
notwendig? (In Batch kostet mich das 10% meiner Byteanzahl ...)Antworten:
05AB1E,
349331330322314311 BytesProbieren Sie es online aus
Erläuterung
•4i;kV_†©:š×Îj€Yå—‚‘%˜ESδþ¤çÑ9¶‹{Å€7¾à{Ì®qA•
Gepackte Saite mit den Sounds
GROWL0ROAR0SNORT0FLUT0BRAY0HISS0TRUMPET0SNARL0YELP0BELLOW0WHISTL
35B0¡…ing«lV
Auspacken, auf 0 aufteilen, zu jedem Wort "ing" hinzufügen, nach lower konvertieren und in Variable Y speichern
•7ü[¿‘¢wÀ¶à-‚¤î„jHâ™ÐJ'µ‡ÀÂý6›ü‚š¸€%NtÅýµL›fU¥ì€€uîT¡›Ÿ{!œ>'Ì&ý§¨Ü?é>•
Verpackter String mit den Tieren
POLAR1BEAR0LION0HIPPOPOTAMUS0FLAMINGO0ZEBRA0BOA1CONSTRICTOR0ELEPHANT0LEOPARD0PEACOCK0WALRUS0ZOOKEEPER
36B1ð:0¡™
Auspacken, 1 durch Leerzeichen ersetzen, auf 0 teilen und in Groß- / Kleinschreibung konvertieren
D©„, «D‚ø
Duplizieren, zur späteren Verwendung speichern, "," zu einer Kopie hinzufügen, diese duplizieren und zip.
“€À€·€î—«?“¶«¸
Wörter aus dem Wörterbuch "Was hören Sie?", Gefolgt von einer neuen Zeile, die einer neuen Liste hinzugefügt wurde
‘€JU
Kartesisches Produkt der Liste "Animal, Animal" und "what you hear? \ N", abgeflacht und verbunden und in Variable X gespeichert. Pruduces Liste der Zeichenfolgen der Form "Animal, Animal, what you hear? N ".
¦“„¾“‚˜l
Nehmen Sie die verbleibende Liste der Tiere von vor, entfernen Sie den Tierpfleger und fügen Sie Kinder hinzu, konvertieren Sie in Kleinbuchstaben.
v
Für jedes Tier:
Drücke "I hear0 in my ear.", Teile auf 0 und drücke als separate Saiten.
yð«Y¦õ‚˜Nè«
Drücken Sie "Tiergeräusch", wenn Kinder kein Geräusch haben
sr„ a
Drücken Sie "a" an der richtigen Stelle
N5Qi'n«}
Wenn das Tier "Elefant" ist, addiere "n"
ð«
Platz hinzufügen.
N9›ijrj¨ðs«…...«}
Wenn das Tier ein Kind ist, entfernen Sie das Leerzeichen und fügen Sie "..." hinzu
srJˆ}
Setzen Sie sich mit dem Satz "Ich höre ein (n) Tiergeräusch in meinem Ohr." (Wie auch die untergeordneten), in globalem Array und Endschleife speichern
X¯‚ø€J
Rufen Sie die ersten Zeilen ab, machen Sie einen Reißverschluss und beginnen Sie mit der Produktion des ersten Teils des Reims "Animal, Animal, was hören Sie? \ NIch höre ein (n) Tiergeräusch in meinem Ohr."
vy,¶?}
Drucken, gefolgt von einer neuen Zeile.
…...DU?
Drucken Sie "..." und speichern Sie eine Kopie in der Variablen X.
Y¨v
Für jeden Ton außer "Pfeifen":
N__i ', ¶} Beginnen Sie jede Zeile mit Ausnahme der ersten mit ", \ n" (wobei das Komma in die vorherige Zeile gesetzt wird).
yð“€è€…“
Push Sound, Space und "Like A"
N6Qi'n«}
Wenn Elefant, fügen Sie "n" hinzu.
ð®NèJl?}X,
Rufe das im Register gespeicherte Tier ab, verbinde alles, drucke und beende die Schleife, gefolgt von "...". Dies erzeugt die "Geräusche wie ein (n) Tier" -Linien.
“€Š's€À I—«.“?
Print dictionary string "das ist was ich höre."
quelle
PHP,
420414434414412 BytesAufruf von CLI oder Voranstellen
<pre>
auf Ausgabe.Nervenzusammenbruch
quelle
JavaScript,
545541497 BytesEine lustige Herausforderung!
Vielen Dank an Downgoat, dass er mir
27Tonnen Bytes gespart hatatob
und an Titus für 4 Bytes!Ungolfed:
quelle
a.map((n,m)=>n>9||(p+=s[n]...))
c=console.log;
am Anfang dann Gebrauch c () 6 Bytes zu speichern. Oder speichern Sie den String einfach in einer Variablen und drucken Sie ihn einmal mit alert () aus.c=console.log
funktioniert nicht, weillog
einthis
von sein mussconsole
oder es einen Fehler erzeugt. (Es sei denn, es funktioniert nicht in einigen Browsern / Umgebungen?) Die Idee, alles in eine Zeichenfolge zu/// ,
523512 BytesProbieren Sie es online!
608 Bytes weniger als die eigentliche Nachricht (1120), das ist weniger als die Hälfte davon (560)!
quelle
Dyalog APL , 387 Bytes
Um das Lesen zu erleichtern:
⎕UCS¯2(219⌶)¯128+⎕UCS'
...'
⎕UCS '
...'
Zeichenkette in Unicode-Codepunkte konvertieren¯128+
Subtrahiere 128, um -128 ≤ n ≤ 127 zu erhalten¯2(219⌶)
un-zlib⎕UCS
Unicode-Codepunkte in Zeichenfolgen konvertierenDie Quellzeichenfolge besteht aus den folgenden 365 Byte zlib'ed Unicode-Codepunkten:
quelle
Python 3,
497484480 Bytes(Guthaben für 13 Bytes sollte an Gábor Fekete gehen, und weitere 4 Bytes wurden von Taylor Lopez gespeichert.)
Sie könnten also vermuten, dass ich eine Sprache wie Python als Lehrmittel verwenden würde. Dies war das Programm, bevor ich anfing, Golf zu spielen.
quelle
a=A[i]
zua,b=A[i]
und dann können Sie schreibena
undb
anstelle vona[0]
unda[1]
. Dies spart 12 Bytes.N=lambda m:("a","an")["E"==m[0]]+" "+m.lower()
zuN=lambda m:"an"[:("E"==m[0])+1]
undn=a[0]+", ";P(n+n+"what do you hear?")
zu wechseln ,a+=", ";P(a+a+"what do you hear?")
werden 2 weitere Bytes gespart.len(A)
, da der Zweck dieser Herausforderung einfach darin besteht, die statische Ausgabe zu generieren (nicht die dynamische Eingabe), ist es akzeptabel,11
stattdessen eine fest codierte zu verwenden, um Bytes zu sparen?Pyth -
427384 BytesProbieren Sie es hier aus - Permalink
quelle
ing
s weg Golf spielen ? Ich werde verrückt, wenn ich sehe, wie PHP Pyth schlägt.a elephant
.C #,
575525520526507504497494493 BytesC # Lambda, wo die Ausgabe a ist
string
.Erläuterung
t
als String mit dem Formatnoise,animal,noise,animal,...
und geteilt durch,
.r
unds
.r
ist der erste Teil des Liedes unds
der letzte Teil.z
undn
sind hier um damit umzugehenElephant
.t
und bauen Sier
unds
in der gleichen Schleife. Seltsame ternäre + interpolierte Sachen.Code
Probieren Sie es online!
quelle
Python 2 - 454 Bytes
quelle
R
518509482477474465452456 BytesVerlinken Sie mit R-Fiddle, um den Code zu testen
children
aus dem Vektora
, und bekam in dem entsprechenden Eintrag befreited
Vektor 8 Byte zu speichernchildren
27 Bytes wurden eingespart, da durch das Verschieben überflüssige Subskripte aufgeräumt und entfernt wurden .tolower
Funktion, sparte 5 ByteswriteLines
durchcat
und formatieren Sie es entsprechend neu (\n
stellenweise hinzugefügt ), um 3 Byte zu sparend
nur 7 Elemente nicht die volle 11 sind, R nur wieder zum Start zurückkehren wird. Als 11 <14 funktioniert das dann bei uns. 9 Bytes gespeichert.cat
Funktion trennte sich mit" "
, änderte sich zurück zuwriteLines
. 4 Bytes hinzugefügt (cat
kann durch Hinzufügen,sep=""
zur Funktion behoben werden )quelle
' '
vor jedem Punkt desa
nach"Polar Bear"
. Es ist normal?C #,
592572 BytesIch hatte eine großartige Zeit mit meinem Kollegen diese Herausforderung anzunehmen! Danke für die Idee.
Formatiert:
EDIT: Vielen Dank für Ihre zahlreichen und tollen Tipps, sie haben mir sehr geholfen und ich werde versuchen, auch die anderen zum Laufen zu bringen.
quelle
new[]
stattdessen o.new string[]
Sie können dies auch zu einer anonymen Funktion machen, wie in @ aloisdgs Antworta elephant
Falle gegangen (ich auch). Es istan elephant
;)Batch,
650647 BytesDenn
%*
ist das nächste, was Batch zu einem Array hat. Wenn ich kannPolar bear
undBoa constrictor
dann kann ich 10% sparen ... aber ich bin immer noch mehr als 50% des Originaltextes ...Bearbeiten: 3 Bytes durch Setzen
e=echo(
eines(
anstelle eines Leerzeichens gespart , wodurch ich Leerzeilen ausgeben kann, obwohl ich sie dann@echo off
vollständig ausschreiben muss.quelle
Bash + Zcat, 402 Bytes
Nur ein Witz:
ein 2-zeiliges Bash-Skript, das sich selbst beendet und die zweite Zeile an zcat weiterleitet.
Die zweite Zeile ist der gezippte Text.
So bereiten Sie es vor: Der gesamte Text in einer Datei
a
. DannDie so erstellte Datei liefert den Starttext 402 Bytes.
quelle
tail -n+2 \$0|zcat;exit
folgen nur ein Zeilenumbruch und eine Binärzeichenfolge von 379 Bytes (die komprimierte Version des vorgeschlagenen Textes). Wussten Sie den Grund für die Ablehnung? (Es ist ein halbstandardmäßiges Verfahren für die Bash-Selbstinstallation von Skripten mit einem darin enthaltenen Archiv, IMHO unterscheidet sich nicht so sehr von der Verwendung einer Bibliothek in c ++).zcat
), sodass Ihr Header ( Bash + coreutils, 402 Byte ) anstelle von ( Bash (mit zcat) 402 ) sein muss. Und können Sie Ihre Antwort bearbeiten (einfach<!>
am Ende Ihres Beitrags anhängen )? Ich möchte die downvote entfernen> :(zcat
ist nicht von coreutils, es kommt mitgzip
. In vielen Systemen ist ein Skript mit dem mangzip -cd "$@"
... Übrigens habe ich in Bash + zcat, 402 Bytes geändert.F #,
591589579576573567552 BytesDies ist mein erster Versuch, Code-Golf mit einer Sprache zu spielen, die ich mag. Ich wette, es gibt einige Möglichkeiten, wie dies kürzer gemacht werden könnte. Läuft in FSI, benötigt also kein .NET-Boilerplate.
Bearbeiten: 10 Bytes durch Entfernen rasiert
\r
. Es wird in VSCode immer noch gut gerendert. Schneiden Sie weitere drei Bytes mit der Funktionskomposition und weitere drei Bytes mit einem Lambda und dann sechs Bytes mit einer for-Schleife anstelle von Seq.iter (Lambda entfernen). Schließlich wurden 15 Bytes durch Umordnen geschnittena(s:string)
quelle
Emacs Lisp, 576 (621) Bytes
Wenn Sie "einen Elefanten" reparieren, dauert es etwas länger:
Ungolfed:
quelle
^[aeiou]
bis verkürzt werden^e
, nicht wahr?C 596 Bytes
Rufen Sie
f()
ohne Argumente an. Dies ist nicht das beste Golf der Welt, ich kann es wahrscheinlich mehr schrumpfen.Probiere es auf ideone aus.
quelle
a[99][99]
->**a
(-6). Sie können hier nichtf()
ohne Argumente anrufen , Sie brauchen einen
. Ersetzenf(n){
durchf{n;
. Noch ein -1 hier. Auchf()
ist jetzt aufrufbar.**a
bedeutet ein Array von Zeichenarrays (oder ein Zeichenzeigerzeiger), und für mich hat es immer funktioniert (gcc 4.8). Welchen Compiler benutzt du? Wenn Sie gcc nicht verwenden, müssen Sie es angeben. Wenn Sie gcc verwenden, ist dies eine Standardeinstellung.a[99][99]
mita[<how many elements do I modify?>+1][<what is the maximum length of any string in here?>+1]
.Python 3,
442441 Bytesungolfed:
Im Grunde genommen nur eine Schleife, die zwei Zeichenfolgen aufbaut, die die beiden Teile der Geschichte darstellen. Der
'n'[:'el'in n]
behandelt das "an" für Elefanten. Das[44:-30]
Abhacken des führenden "Ich höre einen Eisbären in meinem Ohr knurren" und das nachfolgende "Pfeifen wie ein Tierpfleger".quelle
QB64 (QuickBASIC), 581 Byte
Der Code wird ein wenig erweitert, wenn Sie ihn in den Interpreter werfen, aber diese Quelldatei kann unverändert geladen werden. Wenn Sie die gesamte Ausgabe sehen möchten, bevor ein Bildlauf durchgeführt wird, müssen Sie
width 80,46
am Anfang eine Anweisung hinzufügen .quelle
GOSUB
/RETURN
anstelle vonCALL
/SUB
/ sparenEND SUB
. Sie können auch die AnführungszeichenDATA
für alle Einträge einfügen, die keine Leerzeichen enthalten. Da es schließlich nur ein Tier gibt, das mit einem Vokal beginnt,A$="Elephant"
ist es tatsächlich 1 Byte kürzer alsLEFT$(A$,1)="E"
. Gute Verwendung vonRESTORE
, übrigens!LUA 535 Bytes
ungolfed:
Probieren Sie es online aus
quelle
PHP, 366 Bytes
Faule Antwort, aber warum einen benutzerdefinierten Dekomprimierer schreiben, wenn gzip verfügbar ist?
Hex-Dump von PHP-Code (kann mit xxd -r gespeichert werden )
Ich habe ein paar Iterationen von zopfli verwendet , um den Quelltext in 349 Byte komprimierte Daten zu konvertieren, wobei das Zeichen vermieden wurde, das sonst mit Backslashes maskiert werden müsste.
quelle
Japt ,
308303299295288280294289286 BytesEnthält eine Reihe von nicht druckbaren Elementen. Folgen Sie dem Link unten, um sie anzuzeigen.
Probier es aus
+14 Bytes, weil ich die Walross-Linie zusammengeballt hatte; Nächste Woche muss ich noch einmal darüber nachdenken, um zu sehen, ob ich eines dieser Bytes zurückbekomme.
quelle
Powershell
921889886898 Byteses ist nicht perfekt, spart aber 300 Bytes :)
EDIT: Danke Jonathan Frech, ich habe 32 Bytes gespart. Und danke Veskah für die Korrektur der Ausgabe.
quelle
ö
Bytes nicht effizienter?ö
wird in einigen Codepages nur mit einem Byte dargestellt, UTF-8 benötigt zwei Byte für dieses Zeichen.an elephant
gibt auch einen zusätzlichen Zeilenumbruch zwischen den früheren Strophen, der durch Entfernen der entfernt werden kann"n"
.Clojure, 526 Bytes
Hier ist mein erster Versuch. Muss ich lieben die Formatierung und wie unleserlich es ist. Hoffe die Warnungen von
use 'clojure.string
sind akzeptabel.Probieren Sie es online aus.
Formatierter Code:
quelle
Java,
571 555538 oder 516 BytesIn JShell sind jedoch nur 516 Byte erforderlich, um das Ergebnis zu erhalten
quelle
an
vsa
.. Ich habe es behoben und auf 507 Bytesi
mit0
bis zu10
Wechselb=a[i-1]
mitb=a[i++]
und Entfernen des Zuwachses wo es derzeit ist.Swift2, 519 Bytes
quelle
Haskell
537499497 BytesMit der Konvention, dass eine Lösung nicht ausführbar sein muss, erzeugen Sie die Ausgabe nur über eine Funktion, diese kann auf 479 Bytes gekürzt werden. Die Ausgabe erfolgt in
g
:quelle
C (clang) , 552 Bytes
Probieren Sie es online!
quelle
Perl 5 , 413 Bytes
Probieren Sie es online!
quelle
JavaScript, 424 Bytes
Probier es aus
quelle
Pyth, 342 Bytes
Probieren Sie es hier online aus .
Erklärung folgt.
quelle