La macchina
Una macchina del tipo a palla da biliardo è composta solo da simboli \
_
/
insieme a lettere maiuscole e minuscole, spazi e numero 1
.
\
e /
sono rampe. Una palla che viene dall'alto verrà deviata sul lato destro o sinistro, rispettivamente. Per entrambe le rampe, se una palla proviene da entrambi i lati, verrà deviata verso il basso.
_
è un elemento logico. La logica eseguita da essa è la parte del computer più simile al biliardo. Innanzitutto, una palla proveniente da sinistra o destra continua nella stessa direzione. Una palla proveniente dall'alto verrà fermata. Quindi, dopo la fine della sua esecuzione (vedi Far funzionare la macchina di seguito), se il numero di palline che attraversano / atterrano su di esso è un numero pari positivo, allora una singola pallina viene rilasciata dalla parte inferiore dell'elemento.
Uno spazio non fa nulla. Qualsiasi palla proveniente da qualsiasi direzione cade verso il basso a causa della gravità.
Le lettere minuscole sono input. Tutti gli ingressi saranno 1 o 0 singoli.
Le lettere maiuscole sono emesse. Il numero emesso sarà il numero di palle da biliardo che colpiscono la sua posizione.
Il numero 1
rilascia una palla da biliardo in più in quella posizione. Rappresenta un 1 logico.
Inoltre, tutti i personaggi fanno \_/
cadere qualsiasi palla proveniente da qualsiasi direzione per gravità.
Le palle non si combinano, si dividono o si scontrano mai. Vengono creati solo quando rilasciati da un input, a _
o a 1
. Vengono distrutti solo quando cadono direttamente su a _
.
Esempio di macchina
1 a
\_/ b
\_/
\/
/\ /
_ _
A B
Non ci saranno mai linee vuote in una macchina, ma _
potrebbe far sembrare che ci sia una linea vuota.
Far funzionare la macchina
Una macchina viene eseguita in strati o righe. Tutto il movimento della palla da biliardo sul livello superiore viene eseguito prima che accada qualcosa sul secondo livello.
La macchina
ab
\_A
C
viene eseguito come segue:
Innanzitutto, richiede l'inserimento a
nel modulo a:
. L'utente inserirà quindi 1 o 0 (seguito da invio). Lo ripete per l'input b
. Questa è la fine del primo strato. Presumo che l'utente abbia inserito un 1 per entrambi gli ingressi.
Quindi traccia il percorso della prima palla (da a
), che percorre il \
, attraverso il _
, nel A
, e cade nel punto sotto il A
. Quindi traccia il percorso per la seconda palla (da b
), che scende dritta sulla _
e termina. Questa è la fine del secondo strato.
Ora, prima del terzo strato, dal momento che _
ha avuto due palle incrociate su di esso, rilascia una palla. L'uscita A
ha una croce incrociata su di essa, quindi viene emessa A:1
.
Per il terzo strato, traccia il percorso della prima palla (dal _
), che procede attraverso il C
e cade dritto. Anche la seconda palla (che è caduta attraverso A
) cade dritta.
Ora, prima del quarto strato, poiché l'output C
ha una corsa della sfera su di esso, viene emesso C:1
.
Poiché il quarto livello è vuoto, il programma termina.
Il risultato totale dovrebbe apparire come
a:1 (the user entered the one)
b:1 (same here)
A:1
C:1
L'obiettivo. il gol
Il tuo obiettivo è prendere una macchina da STDIN e simularla prendendo input e stampando l'output secondo necessità su STDOUT. La prima parte dell'input per il programma sarà costituita dalla macchina da eseguire, seguita da una riga vuota. Eventuali lettere di input rilevate dovrebbero indurre il programma a richiedere input sotto forma di nome di input seguito da due punti. Qualsiasi output dovrebbe essere mostrato sotto forma del nome dell'output, seguito da due punti, seguito dal numero di palline che passano sopra quel punto.
Questo è il golf.
Esempi
Un incrocio di filo
ab
\/
AB
Un cancello XOR
ab1
\_/
C
Un sommatore completo
1 a
\_/ b
\_/
\/
/\
_ __/
\_/
\/c
\\_/
_S1
\ \/
__/
/
_
\__
C
\_/
?