Die Maschine
Ein Billardkugelautomat besteht nur aus den Symbolen \
_
/
sowie Groß- und Kleinbuchstaben, Leerzeichen und der Zahl 1
.
\
und /
sind Rampen. Ein von oben kommender Ball wird entweder nach rechts oder nach links abgelenkt. Wenn eine Kugel von beiden Seiten kommt, wird sie für beide Rampen nach unten abgelenkt.
_
ist ein logisches Element. Die von ihm ausgeführte Logik ist der unbillardartigste Teil des Computers. Zunächst setzt sich eine Kugel, die von links oder rechts kommt, in die gleiche Richtung fort. Ein von oben kommender Ball wird gestoppt. Wenn dann nach dem Ende der Ausführung (siehe Ausführen der Maschine unten) die Anzahl der Kugeln, die sich kreuzen / auf ihr landen, gerade ist, wird eine einzelne Kugel vom Boden des Elements abgegeben.
Ein Leerzeichen macht nichts. Alle Kugeln, die aus einer beliebigen Richtung kommen, fallen aufgrund der Schwerkraft direkt nach unten.
Kleinbuchstaben sind Eingaben. Alle Eingänge sind entweder eine einzelne 1 oder 0.
Großbuchstaben sind Ausgaben. Die ausgegebene Zahl ist die Anzahl der Billardkugeln, die auf die Position treffen.
Die Nummer 1
gibt an dieser Stelle eine zusätzliche Billardkugel frei. Es repräsentiert eine logische 1.
Alle Charaktere \_/
verursachen außerdem, dass jeder Ball, der aus einer beliebigen Richtung kommt, aufgrund der Schwerkraft direkt nach unten fällt.
Bälle verbinden, spalten oder kollidieren niemals. Sie werden nur erstellt, wenn sie von einem Eingang, a _
oder a freigegeben werden 1
. Sie werden erst zerstört, wenn sie direkt auf einen fallen _
.
Beispiel maschinen-
1 a
\_/ b
\_/
\/
/\ /
_ _
A B
Ein Computer wird niemals Leerzeilen enthalten, aber die _
können den Anschein erwecken, dass eine Leerzeile vorhanden ist.
Maschine laufen lassen
Eine Maschine wird in Schichten oder Reihen betrieben. Alle Billardkugelbewegungen auf der obersten Schicht werden ausgeführt, bevor auf der zweiten Schicht etwas passiert.
Die Maschine
ab
\_A
C
wird wie folgt ausgeführt:
Zunächst werden Sie zur Eingabe a
in das Formular aufgefordert a:
. Der Benutzer gibt dann eine 1 oder 0 ein (gefolgt von der Eingabe). Dies wird für die Eingabe wiederholt b
. Dies ist das Ende der ersten Ebene. Ich gehe davon aus, dass der Benutzer für beide Eingaben eine 1 eingegeben hat.
Es zeichnet dann den Weg der ersten Kugel (von a
) nach, die entlang der \
, über die _
, in die A
, und fällt auf die Stelle unter der A
. Es zeichnet dann den Weg für die zweite Kugel (von b
) nach, die direkt nach unten geht _
und endet. Dies ist das Ende der zweiten Ebene.
Nun, vor der dritten Schicht, da _
zwei Bälle darüber gekreuzt wurden, gibt es einen Ball frei. Der Ausgang A
wurde von einer Kugel überkreuzt, sodass er ausgegeben wird A:1
.
Für die dritte Schicht wird der Pfad der ersten Kugel (von der _
) nachgezeichnet, die durch die C
und geradeaus nach unten fällt. Die zweite Kugel (die durch die fiel A
) fällt ebenfalls gerade nach unten.
Nun, vor der vierten Schicht, da der Ausgang C
eine Kugelbewegung über sich hatte, gibt er aus C:1
.
Da die vierte Schicht leer ist, wird das Programm beendet.
Das Gesamtergebnis sollte so aussehen
a:1 (the user entered the one)
b:1 (same here)
A:1
C:1
Das Ziel
Ihr Ziel ist es, eine Maschine von STDIN zu nehmen und zu simulieren, indem Sie die Eingaben und Druckausgaben nach Bedarf an STDOUT senden. Der erste Teil der Eingabe in Ihr Programm besteht aus der auszuführenden Maschine, gefolgt von einer Leerzeile. Bei Eingabe von Buchstaben sollte Ihr Programm zur Eingabe in Form eines Eingabenamens gefolgt von einem Doppelpunkt auffordern. Jede Ausgabe sollte in Form des Ausgabenamens angezeigt werden, gefolgt von einem Doppelpunkt, gefolgt von der Anzahl der Kugeln, die über diese Stelle laufen.
Das ist Golf.
Beispiele
Eine Drahtkreuzung
ab
\/
AB
Ein XOR-Gatter
ab1
\_/
C
Ein Volladdierer
1 a
\_/ b
\_/
\/
/\
_ __/
\_/
\/c
\\_/
_S1
\ \/
__/
/
_
\__
C
quelle
\_/
?Antworten:
JavaScript (
392423)Nimmt an, dass die Maschine in einer Variablen namens gesetzt ist
m
, und benachrichtigt dann die endgültige Ausgabe.Beispielquelle (führt einen Addierer aus, siehe Verlauf für Quellen mit weniger Golf): http://jsfiddle.net/96yLj/12/
Spoiler:
Edit 1: Bug mit überlaufendem Ball behoben
_
, der imA
Beispielcode nicht enthalten ist .quelle
prompt
für die Eingabe undalert
für die Ausgabe, die für JavaScript ziemlich Standard ist :-)