La máquina
Una máquina de tipo bola de billar se compone solo de los símbolos \
_
/
junto con letras mayúsculas y minúsculas, espacios y el número 1
.
\
y /
son rampas. Una pelota que viene de arriba será desviada hacia el lado derecho o izquierdo, respectivamente. Para ambas rampas, si una pelota viene de cualquier lado, se desviará hacia abajo.
_
Es un elemento lógico. La lógica realizada por él es la parte más poco parecida al billar de la computadora. Primero, una pelota que viene de izquierda o derecha continúa en la misma dirección. Se detendrá una pelota que viene de arriba. Luego, después del final de su ejecución (ver Ejecución de la máquina a continuación), si el número de bolas que cruzan / aterrizan es un número par positivo, entonces se libera una sola bola desde la parte inferior del elemento.
Un espacio no hace nada. Cualquier bola que provenga de cualquier dirección cae directamente hacia abajo debido a la gravedad.
Las letras minúsculas son entradas. Todas las entradas serán un solo 1 o 0.
Las letras mayúsculas son salidas. El número que saldrá será el número de bolas de billar que lleguen a su ubicación.
El número 1
libera una bola de billar extra en ese lugar. Representa un 1 lógico.
Todos los personajes además \_/
hacen que cualquier bola que venga de cualquier dirección caiga directamente hacia abajo debido a la gravedad.
Las bolas nunca se combinan, se dividen o chocan. Solo se crean cuando se liberan de una entrada, a _
o a 1
. Solo se destruyen cuando caen directamente sobre a _
.
Ejemplo de máquina
1 a
\_/ b
\_/
\/
/\ /
_ _
A B
Nunca habrá líneas en blanco en una máquina, pero _
puede que parezca que hay una línea en blanco.
Corriendo la máquina
Una máquina se ejecuta en capas o filas. Todo el movimiento de la bola de billar en la capa superior se realiza antes de que ocurra algo en la segunda capa.
La máquina
ab
\_A
C
se ejecuta de la siguiente manera:
Primero, solicita la entrada a
en el formulario a:
. El usuario ingresará un 1 o 0 (seguido de enter). Repite esto para la entrada b
. Este es el final de la primera capa. Voy a suponer que el usuario ingresó un 1 para ambas entradas.
Luego traza el camino de la primera bola (desde a
), que va a lo largo de \
, a través de _
, hacia el A
, y cae al punto debajo del A
. Luego traza el camino para la segunda bola (desde b
), que va directamente hacia abajo _
y termina. Este es el final de la segunda capa.
Ahora, antes de la tercera capa, ya que _
ha tenido dos bolas cruzadas sobre ella, suelta una bola. La salida A
ha tenido una bola cruzada sobre ella, por lo que sale A:1
.
Para la tercera capa, traza el camino de la primera bola (desde la _
), que atraviesa C
y cae directamente hacia abajo. La segunda bola (que cayó a través del A
) también cae directamente hacia abajo.
Ahora, antes de la cuarta capa, dado que la salida C
tenía un recorrido de bola sobre ella, sale C:1
.
Como la cuarta capa está en blanco, el programa termina.
El resultado total debería verse como
a:1 (the user entered the one)
b:1 (same here)
A:1
C:1
La meta
Su objetivo es tomar una máquina de STDIN y simularla tomando entradas e imprimiendo salidas según sea necesario para STDOUT. La primera parte de la entrada a su programa consistirá en la máquina a ejecutar, seguida de una línea en blanco. Cualquier letra de entrada encontrada debe hacer que su programa solicite la entrada en forma del nombre de entrada seguido de dos puntos. Cualquier salida debe mostrarse en la forma del nombre de salida, seguido de dos puntos, seguido del número de bolas que pasan sobre ese punto.
Esto es golf.
Ejemplos
Un cruce de alambre
ab
\/
AB
Una puerta XOR
ab1
\_/
C
Una víbora completa
1 a
\_/ b
\_/
\/
/\
_ __/
\_/
\/c
\\_/
_S1
\ \/
__/
/
_
\__
C
\_/
?