Diese Herausforderung steht im Zusammenhang mit Flipping Pancakes .
Möglicherweise haben Sie von der Pfannkuchensortierung gehört , bei der ein Stapel Pfannkuchen nach Größe sortiert wird, indem Sie einen Spatel in den Stapel einsetzen und alle Pfannkuchen über dem Spatel umdrehen, bis die Pfannkuchen auf dem Teller nach der Größe sortiert werden. Das Problem der verbrannten Pfannkuchen ist etwas anders. Alle Pfannkuchen haben jetzt eine Seite, die verbrannt ist, und die verbrannte Seite jedes Pfannkuchens muss zum Teller zeigen, sobald die Sortierung abgeschlossen ist.
Zum Beispiel mit dem folgenden Stapel (Größe des Pfannkuchens auf der linken 0
Seite bedeutet verbrannte Seite nach unten und 1
verbrannte Seite nach oben auf der rechten Seite):
1 0
3 1
2 1
Sie können den ganzen Stapel umdrehen, um zu erhalten 20 30 11
, die oberen beiden umdrehen, um zu erhalten, 31 21 11
und den ganzen Stapel erneut umdrehen, um 10 20 30
einen sortierten Stapel gebrannter Pfannkuchen zu erhalten. Diese Folge von Zügen, Flip 3, Flip 2, Flip 3, könnte dargestellt werden als 3 2 3
.
Die Herausforderung
- Wenn eine Reihe von Pfannkuchengrößen (nicht unbedingt eindeutig) und ihre Ausrichtungen vorgegeben sind, geben Sie eine gültige Sortierfolge für gebrannte Pfannkuchen aus, d.
- Die Ein- und Ausgabe kann in jedem vernünftigen Format mit Trennzeichen erfolgen. Geben Sie jedoch an, welche Formate Sie verwenden, und geben Sie an, welches Ende Ihres Eingabeformats das oberste Ende des Stapels (TOS) ist.
- Das Umdrehen von null Pfannkuchen ist erlaubt.
- Das Mischen von Trennzeichen in der Eingabe / Ausgabe ist zulässig.
Testfälle
In allen folgenden Testfällen ist die Eingabe eine Liste und die Ausgabe eine durch Leerzeichen getrennte Zeichenfolge. Die TOS befindet sich links.
[[1, 0], [3, 1], [2, 1]]
"3 2 3"
[[5, 1], [3, 0], [4, 1], [2, 1], [1, 0]]
"5 3 4 1 3 2 1"
[[5, 1], [3, 0], [3, 0], [1, 1]]
"4 3 2 3"
Wie immer, wenn etwas unklar oder falsch ist, lassen Sie es mich bitte in den Kommentaren wissen. Viel Glück und gutes Golfen!
0
in der Ausgabeliste erlaubt?CJam (37 Bytes)
Input ist ein Array im CJam-Format auf stdin. Die Ausgabe ist eine durch Zeilenumbrüche getrennte Liste der Flip-Längen für stdout. Die Spitze des Stapels befindet sich am Index
0
.0
zeigt die verbrannte Seite nach oben und1
die verbrannte Seite nach unten an.Online-Demo
Präparation
Die Ausgabe ist immer
3n
lange Flips, won
ist die Anzahl der Pfannkuchen. Zuerst drehen wir den größten verbleibenden Pfannkuchen nach oben; dann, wenn es mit der verbrannten Seite nach unten ist, drehen wir diesen einen Pfannkuchen um; und dann drehen wir es auf den Boden und wiederholen, als ob der Stapel Pfannkuchen einer kürzer wäre.quelle
Ruby,
1019593 BytesNicht sehr golfen, ich wollte nur eine bogo-sortierte Variante machen. Es handelt sich um eine anonyme Funktion, die eine Reihe von Arrays aufnimmt und zufällige Spiegelbilder auf stdout druckt, bis die Pfannkuchen sortiert sind.
Sie können es zum Beispiel zuweisen
f
und sagenf.call [[1, 0], [3, 1], [2, 1]]
-5 Bytes von @Jordan mit der brillanten Verwendung von
rassoc
-2 Bytes von @ Sherlock9
quelle
a.all?{...}
mit!a.rassoc(1)
.r
) zu benutzenassoc
, aber darüber nachzudenken, ist wahrscheinlich bei vielen Problemen auf dieser Seite nützlich - ich denke, dass es in den Ruby-Golftipps veröffentlicht werden sollte. Wie auch immer, danke :) ich war auch ein weiteres Byte töten kann , obwohl die Anwendung von deMorgans Gesetz und ersetztuntil
mitwhile
.b
geht immer nur0
oder1
,1-b
würde auch funktionieren und zwei Bytes einsparen.