Hier ist das (ziemlich beängstigende) Lied der fünf kleinen Enten (es ist nicht lang):
Five little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only four little ducks came back.
Four little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only three little ducks came back.
Three little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only two little ducks came back.
Two little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only one little duck came back.
One little duck went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but none of the little ducks came back.
Mother duck herself went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
and all of the little ducks came back.
Ihre Aufgabe ist es nicht, dieses Lied auszugeben. Sie sollten einen Vers nehmen und den nächsten Vers ausgeben (der nächste Vers des letzten Verses ist der erste Vers).
Regeln
- Bitte keine Standardlücken.
- Die Ein- / Ausgabe erfolgt über unsere Standard-Ein- / Ausgabemethoden.
- Der genaue Vers muss ausgegeben werden und es sollte keine Unterschiede zum Liedtext geben. Die Eingabe wird nicht anders sein, wenn sie auch mit dem Liedtext verglichen wird.
Beispiele
Mother duck herself went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
and all of the little ducks came back.
Erwartet:
Five little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only four little ducks came back.
Three little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only two little ducks came back.
Erwartet:
Two little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only one little duck came back.
Antworten:
Stax ,
115111 BytesFühren Sie es aus und debuggen Sie es
Alle Verse als Testfälle
quelle
JavaScript (ES9), 227 Byte
Dies ähnelt der folgenden Node-Version, verwendet jedoch eine Formel, die auf basiert,
parseInt()
anstattBuffer()
den Eingabevers zu identifizieren.Dies ist ES2018 (auch bekannt als ES9), da wir einen regulären Ausdruck mit dem
/s
Flag ( dotAll ) verwenden.Probieren Sie es online!
Wie?
In dieser Version analysieren wir den gesamten Eingabevers als Basis 30 (
0
bist
) und führen ein bitweises UND mit 7 durch. Das Parsen stoppt beim ersten ungültigen Zeichen, was zu Folgendem führt:JavaScript (Node.js) ,
233 231227 Byte2 Bytes dank @Shaggy gespart
Probieren Sie es online!
Wie?
Das dritte Zeichen jedes Eingabevers kann als eindeutiger Bezeichner verwendet werden. Mit dem ASCII-Code modulo 9 erhalten wir:
Die Ausgabeversen sind mit den folgenden Vorlagen codiert:
Wobei jede Ziffer durch eine Zeichenfolge gemäß der folgenden Tabelle ersetzt wird:
Wo der reguläre Ausdruck
/ w.*\n/s
diesen gemeinsamen Teil aus der Eingabe extrahiert:Wir fügen schließlich die letzten 11 Zeichen der Eingabe hinzu
" came back."
.quelle
exec
wann die Seite neu geladen wurde. Großartige Köpfe ...!Python 3 ,
267 263254 Bytes4 Bytes gespart dank @ovs
Probieren Sie es online!
Ersetzt die relevanten Teile durch die entsprechenden Teile des nächsten Verses.
Nach der Vorinitialisierung
T
ist['8', '9', 'and all of the little ducks', 'One little duck', 'but none of the little ducks', 'Two little ducks', 'but only one little duck', 'Three little ducks', 'but only two little ducks', 'Four little ducks', 'but only three little ducks', 'Five little ducks', 'but only four little ducks', 'Mother duck herself']
.Alternatives Python 2 , 252 Bytes
von @ovs
Probieren Sie es online!
quelle
for a in zip(T,T[-2:]+T):s=s.replace(*a)
für 264 Bytes.lambda s:reduce(lambda s,a:s.replace(*a),zip(T,T[-2:]+T),s)
für 262 Bytes in Python 2.T[2:]
anstelle vonT[-2:]
QuadR ,
257242 Bytes-14 danke an Black Owl Kai, -1 danke an Kevin Cruijssen
Probieren Sie es online!
quelle
Java 10, 347 Bytes
Probieren Sie es online aus.
Erläuterung:
quelle
T-SQL,
407 390 388382 BytesVARCHAR(MAX)
REPLACE
Führt nach einigen Byte-Einsparungen Folgendes als dynamisches SQL aus:Verwendet eine
CASE
Anweisung undSTUFF
Befehle, um Zeichen an den aufgelisteten Positionen einzufügen / zu überschreiben.EDITS :
LEFT
anstatt auf umgeschaltetSUBSTRING
und ein Leerzeichen entfernt wurdeCHAR
und Verschieben eines zusätzlichen Buchstabens in die SekundeREPLACE
gespart (danke, @CDC!)Hier ist meine erste Version mit einer anderen Methode (nach dem Ersetzen, formatiert):
STRING_SPLIT
undPARSENAME
werden verwendet, um einen String über-
und.
Trennzeichen in Zeilen und Spalten zu unterteilen .Die erste Spalte ist ein Schlüsselzeichen, das mit dem dritten Buchstaben des Eingabevers abgeglichen wird (danke für die Idee, @ Night2). Das zweite und dritte sind die Ersetzungen, die für diesen Vers durchgeführt werden.
quelle
Python 2 , 1034 Bytes
Das ist mein Code! Es verwendet ein einfaches Wörterbuch. Nachdem Sie diesen Code ausgeführt haben, können Sie einen beliebigen Vers eingeben und es wird der nächste Vers ausgegeben.
PS: Ich bin neu in diesem Kanal und dies ist mein erster Beitrag. Diese Herausforderung hat mir sehr gut gefallen, also habe ich mich entschlossen, sie auszuprobieren. Bitte zögern Sie nicht mich zu korrigieren.
quelle
x
odera
). 2) Python ist ziemlich tolerant gegenüber Whitespace. Daher würde ich versuchen, auch einige Ihrer Whitespaces zu entfernen. Zum Beispiel brauchen Sie keine Leerzeichen=
. Endlich haben wir eine Seite zum Golfen in Python, die Sie besuchen können, um Ihr Spiel zu verbessern.sys
indem Sie z. B.raw_input()
den Schlüssel des Wörterbuchs verkürzen usw. Sie sollten auf jeden Fall die wiederholten Abschnitte des Songs herausnehmen und separat hinzufügenPHP (7.4),
253247 Bytes-6 Byte durch Verbesserung des Aufbaus des Ersatz-Arrays mithilfe von "Entpacken in Arrays".
Probieren Sie es online!
Dadurch wird ein Array aller möglichen Ersetzungen (12 verwendete + 2 nicht verwendete) in einem
key=>value
Format erstellt. Beispiel:['Mother duck herself' => 'Five little ducks', etc...]
und ersetzt dann nur die mit strtr .Das einzig interessante ist meine allererste Verwendung von "In Arrays entpacken" , einer neuen Funktion in PHP 7.4.
PHP , 264 Bytes
Probieren Sie es online!
Ich habe verschiedene Wörter jedes Verses in einem Array gespeichert. Ich finde, welcher Vers das dritte Zeichen der Eingabe verwendet, da es eindeutig ist (
vuroet
). Dann ersetze ich einfach verschiedene Wörter dieses Verses durch verschiedene Wörter des nächsten Verses.quelle
Reinigen , 352 Bytes
Probieren Sie es online!
quelle
C # (Visual C # Interactive Compiler) , 262 Byte
Probieren Sie es online!
quelle
PowerShell ,
356343340336 ByteProbieren Sie es online aus .
Mehr lesbare Version:
quelle
PowerShell ,
265263255251246 ByteProbieren Sie es online!
Ich benutzte die rohe Gewalt, um den Ausdruck zu finden
+"$args"[2]*37%724%7
.Danke @Arnauld für das
3rd char
.quelle
Japt v2.0a0, 143 Bytes
Es wurde versucht, einen einzelnen Vers mit Ersetzungen zu codieren, aber am Ende war die Anpassung von Arnauld's Lösung kürzer. Haben Sie eine andere Idee, die hoffentlich wieder kürzer wird, aber Sie wissen nicht, wann ich es versuchen kann.
Probieren Sie es aus - enthält alle Verse
quelle
Bash ,
373355 BytesHier ist nichts zu verrückt. Eine einfache Reduzierung um einige Bytes wäre, die zweistelligen Variablen (a1, a2, a3, e1..e6) durch Einzeichenvariablen zu ersetzen.
Probieren Sie es online!
Probieren Sie es online!quelle
05AB1E , 134 Bytes
Probieren Sie es online!
Da ich relativ neu bei 05AB1E bin, kann man vielleicht viel Golf spielen
quelle
Perl 6 , 247 Bytes
Probieren Sie es online!
Definitiv golffähig, besonders die letzten 5 Elemente in der Liste im Formular
"num $l num-1"
oder die Start-Regex, die den richtigen Teilen der alten Eingabe entspricht.quelle
Kohle , 156 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Schauen Sie sich das dritte Zeichen der ersten Zeile an, um herauszufinden, welchen Vers wir wollen.
Ausgabe des ersten Teils der ersten Zeile durch die Indizierung in die Liste von Strings
Five
,Four
,Three
,Two
,One
,Mother duck herself
. Dann drucken Sielittle duck
unds
nach Bedarf, gefolgt von den letzten 18 Zeichen der Eingabezeile (die in jedem Vers immer gleich sind).Die beiden mittleren Zeilen sind in jedem Vers gleich.
Für die letzte Zeile erweist es sich aus
little ducks
irgendeinem Grund als besser, sie in die Liste der Alternativen aufzunehmen, aber die letzten 11 Zeichen werden immer noch aus der Eingabe kopiert.quelle
Tinte , 353 Bytes
Probieren Sie es online!
Erstens verwendet prüft String um herauszufinden , was Vers wir sind in - , die auf die Aktivierung der Zahlen leicht genug Dank ist am Start -
F
,T
undO
treten nicht in anderen Orten, und Sie können die zweite und vierte Strophe unterscheiden von das erste und dritte, indem auch nachFi
und gesucht wirdTh
.Dann machen wir einfach das, was Tinte am besten kann und drucken normalen Text, der mit Bedingungen übersät ist. Zuerst habe ich versucht, switch-Anweisungen zu verwenden, aber das sah zwar besser aus, endete aber länger.
Sie würden denken, das
Quack
s wäre ein guter Ort, um Variablen zu verwenden, was, wenn eine Zeichenfolge ein paar Mal wiederholt wird, aber Variablen mit genügend Overhead einhergehen, dass jeder Versuch, dies zu tun, den Code länger macht. Vielleicht ist das ein Zeichen, dass ich nicht mit Tinte Golf spielen soll.quelle