Schreiben Sie mit einer Programmiersprache 5 einzeilige Programme, von denen jedes eine andere Zeile des ersten Verses zu Harry Nilssons 1972er Song " Coconut " ausgibt, wenn es einzeln ausgeführt wird:
Bruder eine Kokosnuss gekauft, er kaufte es für einen Cent
Seine Schwester ein anderes hatte sie bezahlt sie für einen Kalk
Sie den Kalk in die Kokosnuss setzen, sie trank sie beide bis
Sie den Kalk in die Kokosnuss setzen, sie trank sie beide bis
sie legte die Limette in die Kokosnuss, sie trank sie beide aus
Die letzten 3 Zeilen haben den gleichen Text, also könnten auch Ihre letzten 3 Programme sein.
Es gibt 5 faktorielle oder 120 Möglichkeiten, wie diese 5 einzeiligen Programme in einem einzelnen 5-zeiligen Programm pro Zeile angeordnet werden können. Sie müssen Ihre einzeiligen Programme so optimieren, dass das 5-zeilige Programm für möglichst viele dieser 120 Kombinationen den gesamten Vers in der richtigen Reihenfolge ausgibt , genau wie oben angegeben.
Beispiel
Die einfachste Antwort hätte 5 einzeilige Druckanweisungen, die letzten 3 sind identisch:
print('Brother bought a coconut, he bought it for a dime')
print('His sister had another one, she paid it for a lime')
print('She put the lime in the coconut, she drank them both up')
print('She put the lime in the coconut, she drank them both up')
print('She put the lime in the coconut, she drank them both up')
Die Ausgabe an die 5-Zeilen-Programme erfolgt in der richtigen Reihenfolge, solange sich die ersten beiden Einzeiler an der richtigen Stelle befinden. Nur 6 der 120 möglichen Anordnungen erreichen dies.
Wertung
Die Einreichung mit den meisten Arbeitsfällen von allen 120 gewinnt. Tie - Break an den Satz von Programmen mit dem niedrigsten kumulativen geht Byteanzahl (Zeilenumbrüche nicht gezählt). Das Beispiel hat 309 Bytes.
Einzelheiten
Ihre Programme lesen möglicherweise keinen eigenen Quellcode. Sie sollten auch keine anderen externen Dateien lesen oder eine Netzwerkverbindung benötigen.
Ausgabe an Standard oder nächstgelegene Alternative. Sie können auch in eine Datei mit dem Namen Ihrer Wahl ausgeben.
"Einzeilige Programme" sind Zeichenfolgen, die alle Zeichen außer Zeilenendezeichen enthalten (Sie müssen sich wahrscheinlich nur um Zeilenumbrüche kümmern).
Wenn Sie die Single-Liner zu 5-Liner zusammensetzen, sollten Sie genau 4 Newlines hinzufügen, eine zwischen jedem benachbarten Paar von Single-Liner. Sie können optional einen nachgestellten Zeilenumbruch hinzufügen.
quelle
main
Methode habe? Was sollte dann ausgeführt werden, wenn das Programm ausgeführt wird?main
.Antworten:
CJam, 120 gültige Permutationen,
334 299290 BytesZiemlich einfache Logik:
UPDATE : Es stellt sich heraus, dass Sie den Wrap-Sort-Unwrap-Zyklus nach den 3 ähnlichen und in den Endzeilen des Songs erscheinenden nicht benötigen. Ich kann erklären warum, wenn es nicht so offensichtlich ist :)
quelle
Vorspiel , 120 Permutationen,
20452035 BytesDies hat mich letztendlich überzeugt, dass Prelude und CJam ein Kind brauchen. Ohne Preludes sehr begrenzten Befehlssatz wäre diese Einreichung tatsächlich sehr wettbewerbsfähig, wenn sie CJam nicht einmal schlagen würde.
Die Grundidee ist die folgende
In Prelude ist jede Zeile eine eigene "Stimme" mit einem eigenen Stapel, und diese Stimmen werden parallel ausgeführt. Das heißt, im vollständigen Programm erstellt jede Zeile die Zeichenfolge einzeln und druckt sie am Ende aus. Aufgrund der Offsets der print-Anweisungen spielt die Reihenfolge der Zeilen für die Reihenfolge der Ausgabe keine Rolle, da die Ausführung von links nach rechts und nicht von oben nach unten erfolgt.
Warum sind die Zeilen so lang? Prelude speichert nur Zahlen auf seinem Stapel. Darüber hinaus kann immer nur eine einstellige Zahl gleichzeitig gedrückt werden, sodass größere Zahlen aus Addition und Subtraktion konstruiert werden müssen (es gibt weder eine Multiplikation noch eine andere Arithmetik). Der größte Teil des Codes besteht also darin, einfach die richtigen Zeichencodes zu berechnen und zu verschieben. Um dies etwas zu verkürzen, habe ich sie um versetzt
96
. Am Ende schleife ich zum Drucken eine Schleife, bis der Stapel leer ist (dh a0
angetroffen wird), addiere 96 zu jeder Zahl und drucke sie aus.Beachten Sie, dass die Zeichenfolgen umgekehrt verschoben werden, da sie vom letzten zum ersten Zeichen gedruckt werden.
Dies setzt den Python-Interpreter mit voraus
NUMERIC_OUTPUT = False
(so definiert die Spezifikation E / A).Ich habe den folgenden CJam-Code verwendet, um die Zeichenfolgenkonstruktion zu generieren:
Zum Schluss, nur zum Spaß, warum ich denke, dass dies wirklich kurz wäre, wenn Prelude ein Konzept von Streichern hätte:
Jetzt sind die Druckanweisungen
!
bereits in der richtigen Reihenfolge, sodass ich sie nicht einmal ausgleichen muss. Ich denke, ich werde mich irgendwann damit befassen.quelle
Ruby, 120 gültige Permutationen, 430 Bytes
Funktioniert in beliebiger Reihenfolge oder einzeln. Jede Zeile ändert den globalen Status und legt dann einen Hook fest, der am Ende des Programms ausgeführt werden soll, es sei denn, der Hook wurde bereits gesetzt.
quelle
> <> , 120 Permutationen, 703 Bytes
Die Einzeiler-Einschränkung war für eine 2D-Sprache ziemlich schwierig, daher musste ich einen Weg finden, um das Beste aus dem
.
Teleport-Unterricht herauszuholen .Die Initiale
<
lässt das Programm nach links fließen, umhüllen und ausführenDies ist eine Reihe von
p
(Put-) Anweisungen, mit denen Zeichen platziert werden, bis das Board so aussieht:Das
#.!50
Programm kippt dann den Programmfluss wieder nach rechts, bevor es zu Zeile 5 springt. Folgendes folgt:/
Spiegel in Zeile 5 folgen, finden Sie den Text 5, der auf den Stapel geschoben wird. Wir teleportieren uns dann zu Linie 6./
Spiegel in Zeile 6 folgen, finden Sie den Text 4, der auf den Stapel geschoben wird. Wir teleportieren uns dann zu Linie 7./
Spiegel in Zeile 7 folgen, finden Sie den Text 3 ...Dies geschieht, bis wir den Text 1 drücken. Dann teleportieren wir uns zu Zeile 10. Dies ist eine Schleife, um den gesamten Stapel zu drucken, bis er leer ist.
Wenn nur eine Zeile des Programms vorhanden ist,
\
erledigen die Spiegel die gleiche Aufgabe wie die Teleports auf jeder Textzeile.Wenn das Programm verschlüsselt ist, gilt die obige Erklärung weiterhin, sodass das Programm für alle Permutationen funktioniert!
quelle