Aceto , 19 17 Bytes nicht konkurrierend
Neue Version (17 Bytes):
Diese neue Version nimmt die Zeichen einzeln auf und wird am besten mit der -F
Option ausgeführt. Es funktioniert ähnlich, aber nicht identisch mit der vorherigen Lösung:
>,
Op0
p|1u
,ip^
Alte Antwort (19 Bytes):
(Nicht konkurrierend, da ich zwei Fehler im Interpreter beheben musste)
|p1u
iOp<
|!`X
rd!r
Dies ist die erste Aceto-Antwort, die zeigt, was sie relativ gut kann, würde ich sagen. Die "Listen" sind Eingabeströme mit einer Eingabe pro Zeile, "1" für "wahr" und "0" für "falsch", wobei eine leere Zeichenfolge das Ende der Liste kennzeichnet.
Aceto-Programme laufen auf einer Hilbert-Kurve, die links unten beginnt und rechts unten endet. Zuerst r
lesen wir eine Zeichenkette, d
duplizieren sie und negieren sie ( !
), indem wir leere Zeichenketten in True umwandeln , alles andere in False. Dann gibt es einen bedingten horizontalen Spiegel ( |
): Wenn das oberste Element auf dem Stapel wahr ist, spiegeln Sie es horizontal. Dies passiert, wenn die Zeichenfolge leer war. Wenn wir das Spiegeln machen, landen wir auf dem X
, was den Dolmetscher umbringt.
Andernfalls konvertieren wir die verbleibende Kopie auf dem Stapel in eine i
nteger-Zahl und führen eine weitere bedingte horizontale Spiegelung durch: Diesmal spiegeln wir, da 1 wahr und 0 falsch ist, wenn wir den (ersten) wahren Wert sehen. Wenn wir nicht spiegeln (wir haben also eine 0 gesehen), p
drucken wir, was sich auf dem Stapel befindet (da der Stapel leer ist, eine Null) und springen zum O
Rigin der Kurve, wo wir begonnen haben, und starten den gesamten Prozess erneut.
Wenn wir eine 1 sahen, spiegeln wir und landen auf der u
, was die Richtung umkehrt, in die wir uns auf der Hilbert-Kurve bewegen. 1p
druckt eine 1 und jetzt gehen wir auf dasselbe, was O
wir gegangen wären, wenn wir eine 0 gesehen hätten, aber da wir uns im "umgekehrten Modus" befinden, ist unser Ursprung unten rechts , also springen wir dorthin.
Jetzt r
lesen wir eine andere Zeichenkette und negieren sie. Wenn die Zeichenfolge leer war und daher das oberste Stapelelement wahr ist, `
wird der nächste Befehl ( ) nicht ignoriert X
, wodurch wir beendet werden.
Andernfalls (wenn die Zeichenfolge nicht leer war), werden wir die maskieren X
und ignorieren. In diesem Fall gehen wir nach links ( <
), p
rint 0 (weil der Stapel leer ist) und springen zurück zum O
rigin.