Ihr Ziel ist es, ein Programm zu schreiben, das das folgende Gedicht genau so ausgibt, wie es hier erscheint:
There was an old lady who swallowed a fly.
I don't know why she swallowed that fly,
Perhaps she'll die.
There was an old lady who swallowed a spider,
That wriggled and iggled and jiggled inside her.
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.
There was an old lady who swallowed a bird,
How absurd to swallow a bird.
She swallowed the bird to catch the spider,
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.
There was an old lady who swallowed a cat,
Imagine that to swallow a cat.
She swallowed the cat to catch the bird,
She swallowed the bird to catch the spider,
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.
There was an old lady who swallowed a dog,
What a hog to swallow a dog.
She swallowed the dog to catch the cat,
She swallowed the cat to catch the bird,
She swallowed the bird to catch the spider,
She swallowed the spider to catch the fly,
I don't know why she swallowed that fly,
Perhaps she'll die.
There was an old lady who swallowed a horse,
She died of course.
Der Text muss genau so aussehen wie hier, und es gewinnen die wenigsten Zeichen.
Bearbeiten: Ihr Programm kann möglicherweise nicht auf das Internet zugreifen.
code-golf
kolmogorov-complexity
Ethan Roseman
quelle
quelle
Antworten:
Perl 5.10,
392384372235369 (ASCII) / 234 (Unicode)Die kürzeste ASCII-Version ist 369 Zeichen lang:
Es begann mit diesem Basisprogramm:
Die Kernidee ist es, das Ende des Reims und den Anfang des nächsten Reims beizubehalten und es im weiteren Verlauf zu
$trail
erweitern. Die Notwendigkeit eines speziellen Falls für die erste Verwendung und der Versuch, die Variable für den Tiernamen auch in der tierspezifischen Phrase wiederzuverwenden, machen sie nicht trivial. Weitere Optimierungen umfassen:$_
für die$buf
meisten Substitutionsoperationen noch mehr zu verkürzen (Verwendung@_
ist durch die Macht der Gewohnheit und gewinnen nichts mehr als jedes andere Zeichen)$"
Variablen)' swallow'
und'iggled '
\n
Keinerlei Code-Abstände und alles in String-Literalen, die durch aktuelle Zeilenumbrüche ersetzt wurdenAlle außer der letzten Optimierung ergeben dies:
Darüber hinaus ist dieser Golf ein Opfer des Problems der unterbestimmten Codierung. Da in einer bestimmten Codierung ab sofort einzelne Zeichen anstelle von Bytes gezählt werden, ist ein großer Gewinn zu erzielen, wenn die Programmquelle vor dem Start von UCS2 decodiert wird. Das Endergebnis ist nicht mehr gut lesbar, aber es ist in Ordnung, kurz. (234 Zeichen, gezählt als Unterschied zu
perl -E''
wie üblich)Zum Golfen gab es schon viel, bevor man auf Unicode zurückgegriffen hat, sonst würde es nicht viel Spaß machen.
Bearbeiten: Es
kann keine Möglichkeit zum Kopieren / Einfügen der 234-Zeichen-Version in diesen Browser gefunden werden. Ich lasse die 235-Zeichen-Version. Wird heute Abend behoben, wenn ich eine echte UTF8-fähige Zwischenablage in die Hände bekomme.einen Weg gefunden. Quasi Proof auf Ideone.quelle
Perl,
12094 ZeichenDie Zählung umfasst den Anruf beim Dolmetscher.
Du hast gesagt, es genau so zu reproduzieren , wie es hier der Fall ist;)
NB
Diese Lösung hat die Einschränkung "Kein Internet" ausgelöst. Lassen Sie es eine Lektion für zukünftige Code-Golf-Fragenspezifikationen sein :)
quelle
LWP::Simple
ist Teil des Perl-Kerns, zumindest in Version 5.12.3.Python 3.x: 407 Zeichen
quelle
JavaScript (422)
Funktioniert in den SpiderMonkey-Interpreter-Versionen, die sowohl von Anarchy Golf als auch von Ideone verwendet werden .
Ein bisschen besser formatiert:
quelle
0
Trick zur Initialisierungi
auf0
nur 2 Bytes. Habe ein +1Vim, 373 Tastenanschläge
Komisch, wie exponentiell dieses Krabbeln ist.
quelle
C (gcc) ,
429424 Bytes-5 Bytes dank Ceilingcat
Probieren Sie es online!
quelle
Ruby, 436 Zeichen
quelle
Scala (
706619599550 Zeichen)Wenn Sie Map anstelle von Foreach verwenden, können Sie mehr Zeichen ausdrücken. Bei Codegolf kümmern wir uns nicht um Leistung, Eleganz (Nichtveränderlichkeit) oder Logik.
quelle
Tinte ,
370369354 BytesProbieren Sie es online!
Erläuterung
quelle
Haskell,
515498Bei der Bewertung werden keine Zeilenumbrüche und Leerzeichen für die Präsentation berücksichtigt.
Ungolfed:
quelle
(++)
mit einem kürzeren Bezeichner könnte eine gute Idee sein.#
Operator oder etwas ähnlichesPython, 484
Ok, ich habe es geschafft, aber es war ziemlich langweilig ...
Der letzte Satz ist immer mit "fly", daher wurden einige Zeichen entfernt ...
Weniger Golf Version:
quelle
C, zum Spaß (561 Zeichen)
Bei der Bewertung werden keine Zeilenumbrüche und Leerzeichen für die Präsentation berücksichtigt.
Vielen Dank an JB für seine Verbesserungen!
quelle
&
und[]
?&
s zu entfernen, wenn ich Zeiger benutze und es hat nicht funktioniert: P. JB, ich kenne keine Methode, die keine Indizierung erfordert (und noch mehr Zeichen verwendet).C #, 556 Zeichen
quelle
Perl, 489 Zeichen
quelle
PHP , 344 Bytes
Probieren Sie es online!
PHP , 405 Bytes
Probieren Sie es online!
quelle
Bubblegum, 255 Bytes
quelle
Python 2 ,
453 442 427387 Bytes£
, bevor verwendet wurde ein Doppelbyte-Zeichen !!swallow
Kurzschriftin
und"..."
entferntProbieren Sie es online!
quelle
~
anstelle von£
(was zwei Bytes lang ist, solange es nicht ASCII ist) verwenden.in
und ein String-Literal.Groovy, 475 Bytes
Nichts zu interessantes, nur viel String-Interpolation. Golftipps hierzu sind willkommen!
quelle
tcl, 451 bytes
Verfügbar für die Ausführung unter: http://rextester.com/live/GXF89639 (10. Versuch)
quelle
Wolfram Language (Mathematica) , 295 Bytes
Probieren Sie es online!
Diese Lösung ist ein 46-Byte-Dekomprimierer
BinaryDeserialize@ByteArray@ToCharacterCode@"..."
, der auf ein 248-Byte-Array einwirkt, das als ASCII-Zeichenfolge maskiert ist. Das Übertragen dieser Zeichenfolge zwischen verschiedenen Programmen ist etwas schwierig. TIO beispielsweise vergrößert diese Lösung mithilfe der UTF-8-Codierung auf 416 Byte, anstatt die ASCII-Zeichenfolge beizubehalten. Speichern Sie den Text in einer Variablen,text
und führen Sie aus, um die minimale 295-Byte-Lösung zu erhaltenFühren Sie dann die generierte Datei in der Befehlszeile mit aus
quelle
Java 758 Zeichen
Hier ist mein Java-Aufwand (758 Zeichen)
quelle
Java, 655 Bytes
Dies ist eine golfed Version dieser Antwort . Es werden über 100 Bytes für kleinere Dinge gespeichert.
quelle
public
kann entfernt werden;class M{public static void main
kann seininterface M{static void main
;String S=...,T=...,e=...;String[]a=...;String[]q=...;
kann seinString S=...,T=...,e=...,a[]=...,q[]=...;
;for(int i=0;...)...for(int j=i
kann seinfor(int i=0,j;...)...for(j=i
;for(j=i;j>0;j--)...a[j]...a[j-1]
kann seinfor(j=i;j>0;)...a[j]...[a--j]
;static void p(String v){...}
kann seinstatic<T>void p(T v){...}
( 623 Bytes ) Versuchen Sie es online.Charcoal ,
369366 BytesProbieren Sie es online!
Link zur ausführlichen Version des Codes.
quelle
PowerShell , 512 Byte
Probieren Sie es online!
Dank an @Chirishman für ihren Beitrag .
quelle
Stax , 195 Bytes
Führen Sie es aus und debuggen Sie es
Ausgepackt, ungolfed und kommentiert sieht es so aus.
Führen Sie dieses aus
quelle
PowerShell , 349 Byte = Skript: 9 + Archiv: 340
Probieren Sie es online!
Das Powershell-Skript zum Erstellen des Archivs
t
(siehe TIO):quelle