,{-?>}-):(=?
#}<<.{?_<.<.<.<.<.
Eingabe in Form eines Byte-Wertes , also zB Eingabe !
einer Schlange der Länge 33.
Probieren Sie es online!
Es ist eine Weile her...
Erläuterung
Eine kurze Einführung von Brian & Chuck:
- Die erste Zeile des Programms ist Brian, die zweite ist Chuck.
- Brian und Chuck sind zwei Brainfuck-ähnliche Instanzen. Der Hauptfang ist, dass Chucks Programm Brians Tape ist und umgekehrt. Die Bandköpfe / Anweisungszeiger beginnen in der ersten Zelle jedes Bandes und die Ausführung beginnt bei Brian.
- Bei den Befehlen gibt es einige Unterschiede. Nur Brian kann
,
(Input) und nur Chuck kann .
(Output) verwenden. Zusätzlich zu <
und >
gibt es {
und }
die den Bandkopf bis zur nächsten Nullzelle bewegen (oder im Falle des {
linken Bandendes, wenn keine Nullzelle unterwegs ist). Stattdessen [...]
ist der einzige Kontrollfluss?
die Steuerung auf die andere Instanz umschaltet, wenn die aktuelle Zelle nicht Null ist. Der erste ausgeführte Befehl in der anderen Zelle ist der nach der Bedingung. Und schließlich _
ist es aus Bequemlichkeitsgründen nur ein Alias für Null-Bytes.
Nun der Code. Brian beginnt damit:
,{-?
Dies liest die Eingabe in die erste Zelle von Chuck, bewegt dann den Bandkopf mit nach links {
(macht im Moment nichts) und dekrementiert die Eingabe mit, -
bevor die Steuerung für Chuck umgeschaltet wird, wenn der Wert immer noch ungleich Null ist. Dies beginnt die Hauptschleife. Chuck führt dann dieses Bit aus:
}<<.{?
Dies bewegt den Bandkopf auf Brian bis zum Ende, verschiebt zwei Zellen nach links auf den =
Kopf und vor dem Bandkopf ganz nach links gedruckt und die Steuerung wieder auf Brian umgestellt. So funktionieren Schleifen im Allgemeinen in B & C.
Sobald die Eingabe auf Null reduziert wurde, wird das Band ?
von Brian nichts mehr tun. Dann führt Brian diesen Teil aus:
>}-):(=?
Das ):(=
sind No-Ops, also ist der eigentliche Code gerecht >}-?
. Wir bewegen uns weg von der Null - Zelle mit >
, nach oben zu _
mit }
, verringern sie es nicht Null und Schalter auf Chuck machen mit ?
. Dann wird das letzte Bit von Chuck ausgeführt:
<.<.<.<.<.
Dies druckt einfach die fünf Zeichen vor Chuck, dh =(:)-
. Beachten Sie, dass wir einen anderen drucken müssen, =
da die Hauptschleife nur N-1
zu Eingabezeiten ausgeführt wird N
.