Während ich versuchte (und versagte), meinen kleinen Sohn zum Abendessen zu überreden, versuchte ich, ihm etwas vorzusingen. Auf halbem Weg durch dieses Lied wurde mir klar, dass sich die Formelstruktur gut zum Code-Golfen eignet!
Die Aufgabe besteht darin, ein Programm oder eine Funktion zu schreiben, die keine Eingabe akzeptiert und den folgenden Text erzeugt:
There's a hole in the bottom of the sea
There's a hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a log in the hole in the bottom of the sea
There's a log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a bump on the log in the hole in the bottom of the sea
There's a bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a frog on the bump on the log in the hole in the bottom of the sea
There's a frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a smile on the flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a smile on the flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
Herausforderungsregeln:
- Der Text kann ausgedruckt oder als Funktionsausgabe zurückgegeben werden
- Jeder Vers wird durch eine einzelne Leerzeile getrennt
- Das nachgestellte Leerzeichen ist in Ordnung, solange das Layout nicht geändert wird (also kein führendes Leerzeichen oder zusätzliche Leerzeichen zwischen Wörtern).
- Nachgestellte Zeilenumbrüche sind ebenfalls in Ordnung.
- Keine führenden Zeilenumbrüche.
- Alle Sprachen sind willkommen, und das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes für jede Sprache!
gzip -5
komprimiert es auf 186 Bytes (bzip2
undxz
scheint es noch schlimmer zu machen).Antworten:
SOGL ,
1039493 BytesProbieren Sie es hier aus!
quelle
Stax ,
908775 BytesFühren Sie es aus und debuggen Sie es
Ausgepackt, ungolfed und kommentiert sieht es so aus.
Führen Sie dieses aus
quelle
Perl 5,
158154 Bytes154 Bytes
158 Bytes
quelle
There's a bottom of the sea
. Die Fakten überprüfen, +1There's a sea
aber es ist längerPython 2 ,
202190187185183182181 BytesProbieren Sie es online!
Alte Alternativen zu
'io'['g'in s]
(13 Bytes):'oi'[s[5]<'n']
'io'[len(s)>30]
,'ioo'[len(s)%3]
,'ooi'[len(s)%4]
, und'io'[w[1]=='o']
Gerettet:
quelle
"hole, t%shole\n"%a[1:]
speichert ein Byte'oi'[s[5]<'n']
wird auch eine alte Alternative sein: Featuring'io'['g'in s]
!C (gcc) ,
261246236 Bytes-15 Bytes, danke an Daniel Schepler
-10 Bytes, danke an ceilingcat
Probieren Sie es online!
quelle
,*b="_TH<0$\31\r"
stattdessen schreiben ?05AB1E ,
1031009997969392 BytesDank Kevin Cruijssen ein Byte gespart
Probieren Sie es online!
Erläuterung
“¥ÊˆŽ bumpÑå‡îtíÁ¤†îÌea¹²“#v
startet eine Schleife über der Liste["hole", "log", "bump", "frog", "wart", "hair", "fly", "flea", "smile"]
. Die Wörter werden mit dem Wörterbuch 05AB1E komprimiert.Bei jedem machen wir:
quelle
õ
, da es anscheinend standardmäßig eine leere Zeichenfolge ausgibt, wenn eins
WAP mit nichts auf dem Stapel verwendet wird . Ich konnte nichts anderes zum Golfen finden; sehr nette antwort!PowerShell ,
194188185180174 ByteProbieren Sie es online!
Kann nicht ganz scheinen, Python zu fangen ...Grundsätzlich setzt ein paar gemeinsame Zeichenketten
$h
,$a
,$z
, und$b
, dann durch eine Schleife durch jedes der Elemente geht (hole
,log
...flea
,smile
), wobei jede Iteration die entsprechende verse ausgibt. Es gibt ein bisschen Logik!$j++
in der Mitte, um denin
/on
-Schalter zu erklären , der passiert. AndernfallsWrite-Output
verbleiben alle Zeichenfolgen in der Pipeline, und die Standardeinstellung gibt uns kostenlose Zeilenumbrüche.-6 Bytes dank Arnauld.
-3 Bytes dank mazzy.
-5 Bytes dank Veskah.
-6 bytes dank mazzy.
quelle
-split
ziemlich viel, um Worte zu finden.JavaScript (ES6),
201 194 189 188187 Bytes1 Byte dank @Shaggy gespeichert
Probieren Sie es online!
JavaScript (ES6), 235 Byte
Einfach neu verpackt .
Probieren Sie es online!
quelle
Bash,
168160 Bytes160 Bytes
168 Bytes
Übersetzt von meiner anderen Antwort in Perl.
quelle
Japt
-Rx
,126116113112111109107 BytesEs stellt sich heraus, dass es unglaublich schwierig ist, eine Herausforderung beim Komprimieren von Saiten zu spielen, während Sie auf Ihrem Handy den Boozer runterfahren - wer hätte gedacht ?!
Probier es aus
quelle
XML,
719673603514493486 ByteSie können es mit "ausführen"
xmlstarlet sel -t -m '//a' -v . -n <xml_file_here>
.Dies wäre viel einfacher, wenn XML nicht so ausführlich wäre, aber das ist weniger als 25% der Größe des Originaltexts.
quelle
Retina 0,8,2 , 150 Bytes
Probieren Sie es online! Erläuterung:
Füge den letzten Vers ein.
Berechnen Sie alle Verse.
Bringe die Verse in die richtige Reihenfolge.
Vervollständige jeden Vers und füge den Refrain hinzu.
Erweitern Sie einige Platzhalter.
quelle
R ,
237231 BytesProbieren Sie es online!
quelle
PHP,
180178 BytesLaufen Sie mit
-nr
oder versuchen Sie es online .Gibt Warnungen in PHP 7.2 aus; Um dies zu beheben, setzen Sie Anführungszeichen um
die Array - Elemente,
io
,hole
und die zwei eigenständigeT
.quelle
C (gcc) ,
334328307299 BytesProbieren Sie es online!
quelle
Perl 6 , 166 Bytes
Probieren Sie es online!
quelle
Japt
-R
, 142 BytesProbieren Sie es online!
quelle
Batch, 267 Bytes
t
Enthält eine Zeichenfolge, die im Refrain wiederholt wird.s
Enthält den größten Teil der Verszeile, währendr
zwischenin the
und gewählt wirdon the
. In den Versen werden nur die ersten 11 Zeichen vont
benötigt, während in der ersten Refrainzeile die zweite Kopie vont
dieT
Kleinbuchstaben hat und die zweite Refrainzeile die letzten 25 Zeichen von wiederverwendets
.quelle
Ruby ,
173-170BytesProbieren Sie es online!
quelle
Haskell ,
243215 BytesMit Hilfe von Nimi auf 215 Byte reduziert
Probieren Sie es online!
(Alte 243-Byte-Version ist hier ).
Eine recht unkomplizierte Lösung.
quelle
s
nur einmal, damit Sie es inline können. b) Sie immer prepend und Anfügen etwas zut
, so kann man es sich um eine (Infix) Funktion machen:t#u=t:"here's a "++u
. c) Die Erstellung der großen Liste in Funktionl
mitmap(++" on the ")(words"smile flea ..."
ist kürzer. Außerdem: Verschieben Sie alles, was an diese Liste angehängt ist, in die Liste. d) Die Liste der Nummern, die gelöscht werden sollen, läuft jetzt von8
unten nach unten0
(einstellige Nummern!). e) Jetzt werdeni
auch einige Bytes gespeichert. f) Sie müssen Ihre Hauptfunktion nicht benennen. Gemäß unserer Meta werden Haskell-Werte als ordnungsgemäße Funktionen angesehenv=
.>>=
(concatMap) aus der Liste Monade und Inlineconcat
in Funktion verwendenl
. Probieren Sie es online!JavaScript (Babel Node) , 239 Bytes
-7 Bytes von @Oliver
*.*
Probieren Sie es online!
quelle
T
in der dritten Zeile jedes Verses sollte in Kleinbuchstaben geschrieben sein.Python 3 ,
213 206 198193 BytesProbieren Sie es online!
-15 Bytes dank @Sara
-5 Bytes dank nur @ ASCII
Wahrscheinlich ein bisschen mehr Golf, aber nicht viel.
quelle
o=e=
beide machen würdeo
unde
beziehen sich auf das gleiche Objekt. Ich dachte auch, Split würde länger dauern.o
unde
sie beziehen sich auf das gleiche Objekt ... es ist nur , dass Strings in Python unveränderlich sind so Dinge wie+=
eine neue Kopie erstellen , anstatt von Mutieren der bestehendenSauber , 267 Bytes
Probieren Sie es online!
quelle
cQuents ,
238219 BytesProbieren Sie es online!
Diese Herausforderung brachte mich dazu, endlich Listen und Zeichenketten in meiner Sprache zu implementieren. Diese Sprache ist für ganzzahlige Sequenzen gebaut, also hat es ziemlich gut geklappt!
Erläuterung
quelle
Perl 5 , 194 Bytes
@ ASCII-only 6 Bytes mit wörtlichen Zeilenumbrüchen und einem
\l
Trick, den ich vergessen habe, abgeschnittenProbieren Sie es online!
quelle
\l
vorher gesehen, hatte aber nie einen Grund, es zu benutzen, also habe ich nie daran gedacht.Charcoal ,
115106 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Edit: 9 Bytes durch Kopieren meines Batch-Codes für die letzte Zeile des Refrains gespeichert. Erläuterung:
Speichern Sie die Zeichenfolge
There's a hole
, die zweimal unverändert verwendet wird, ein drittes Mal in Kleinbuchstaben und ein viertes Mal, aber nur die ersten 10 Zeichen.Teilen Sie die Zeichenfolge
bottom of the seaxhole ixlog ixbump oxfrog oxwart oxhair oxfly oxflea oxsmile o
aufx
s.Durchlaufen Sie die 9 Verse, nehmen Sie die ersten
i+2
Elemente des Arrays, kehren Sie sie um, fügen Sie sie zusammenn the
und stellen SieThere's a
dem Ergebnis ein Präfix voran .Erweitern Sie jede Zeile zu einem Vers, indem Sie die Zeile duplizieren und den Refrain konstruieren. Jede Zeile des Verses wird dann implizit auf jede eigene Zeile gedruckt, und jeder Vers wird implizit durch eine Leerzeile getrennt.
quelle
V ,
184-170BytesProbieren Sie es online!
Erläuterung:
4iThere's a hole in the bottom of the sea<\n><esc>
Füge 4 Mal "Theres 'ein Loch in den Grund des Meeres" ein.kk
Gehen Sie in die dritte Zeiley5w
Kopie "Da ist ein Loch"5eá,
Nach "Da ist ein Loch" ein Komma einfügenlp
Einfügen nach dem KommaD
Löschen Sie den Rest der Zeile5brt
Kleinbuchstaben das zweite THj4yy
Kopieren Sie 4 Zeilen aus der zweiten ZeileGp
Fügen Sie alles nach der ersten Zeile ein4w8ion the <esc>
(am Ende des ersten Verses) gehe zum ersten "Loch" im zweiten Vers und füge "auf" das Achtfache ein2briilog <esc>
gehe zurück zum letzten "on", ersetze das o mit einem i und füge dann "log" ein3bibump <esc>3bifrog <esc>3biwart <esc>3bihair <esc>3bifly <esc>3biflea <esc>3bismile <esc>
Gehen Sie rückwärts durch die Zeile und fügen Sie die entsprechenden Wörter zwischen den einzelnen "auf der" ein.7ñ4yykp4wd3wñ
4yykp4wd3w
7 mal ausführen4yykp
duplizieren Sie den Vers vor diesem4wd3w
gehe zum ersten Wort nach "Da ist ein Loch" und lösche 3 Wörter8ñÄ5jñ
Dupliziere die erste Zeile jedes Verses nach der ersten (es gibt 8 davon zu tun)quelle
/// 216 Bytes
Probieren Sie es online!
Diese Art von Aufgabe ist das Einzige, was /// einigermaßen gut kann. : D Hey, das Ergebnis ist kürzer als C, C # oder Java!
Die Ausgabe dieses Programms endet in zwei nachgestellten Zeilenumbrüchen. Ich hoffe, das ist kein Deal-Breaker.
Jedenfalls gibt es hier keine wirkliche Klugheit. Ich identifizierte einfach wiederholte Zeichenfolgen und definierte Ein-Zeichen-Verknüpfungen für sie und wiederholte, bis ich keine wiederholten Zeichenfolgen mehr sah. Ich habe das mehr oder weniger naiv und gierig gemacht. Ich habe jedoch absichtlich eine Abkürzung für "Lächeln auf dem Floh auf dem ... Meer" definiert, gefolgt von "Floh auf dem ... Meer" und so weiter, um eine Kette von Abkürzungen zu bilden . Das Ergebnis ist, dass die gesamte Abfolge neuer Substantive im Code deutlich sichtbar ist, und das finde ich ziemlich erfreulich. :)
Nach dem Ersetzen von V und U haben wir den folgenden besser lesbaren Code:
quelle
LaTeX, 265
268ZeichenKompiliert ein nettes PDF mit Absatzeinrückungen und allem.
Ungolfed und kommentiert:
Der Ausgabe:
quelle
C # (Visual C # Interactive Compiler) , 220 Byte
Probieren Sie es online!
-5 Bytes dank @ASCIIOnly und -2 Bytes dank @someone!
Ich habe ein kleines Kind und kann Ihnen versichern, dass dieses Lied zu gleichen Teilen eingängig und nervig ist.
quelle
.Any()
->!=""
?in
in derforeach
> _>