Vives dentro de una terminal que tiene 80 caracteres de ancho. Estás aburrido, así que decides jugar al dominó. No, no del tipo aburrido que se parece a Scrabble, el tipo divertido donde pasas una hora configurándolos para verlos caer en un segundo.
En las terminales, el dominó se ve así:
| upright domino
\ left-tilted domino
/ right-tilted domino
__ fallen domino
Como todos sabemos, si un dominó inclinado toca uno vertical, el segundo dominó también se inclina. La única excepción a esto es si dos fichas de dominó inclinadas lo tocan:
|\ --> \\ /| --> // /|\ --> /|\
Ajuste la constante gravitacional de su terminal para que esta transición tome 100 ms.
Si un dominó inclinado es apoyado por otro dominó o las paredes de la terminal, su viaje termina.
Ninguna de las fichas de dominó inclinadas en
\||||____||||/__ /|\ /\ /|\ __\||||____||||/
(80 caracteres) se moverán, ya que las dos fichas de dominó inclinadas más externas están soportadas por las paredes de la terminal y todas las demás están respaldadas por otras fichas de dominó.
Sin embargo, si el espacio en la dirección de inclinación está vacío, el dominó se cae:
| \\ --> |__\ // | --> /__|
Terminal. Constante gravitacional. Tú entiendes…
Finalmente, hay un ligero viento de la izquierda, por lo que las fichas de dominó inclinadas a la derecha caen más rápido que las inclinadas a la izquierda:
|/ \| --> |__\|
Tarea
Escriba un programa / función que muestre una animación de jugar dominó en una terminal.
Su código debe hacer lo siguiente:
Lea una cadena de entrada, que representa el estado inicial de las fichas de dominó.
Esta cadena no contendrá más de 80 caracteres y consistirá únicamente en el dominó descrito anteriormente y los espacios vacíos.
Imprima el estado y espere 100 ms.
Transforme el estado como se explicó anteriormente.
Si el estado cambió, regrese a 2.
Reglas adicionales
La longitud de la cadena de entrada no afecta el ancho del terminal; incluso si la cadena tiene menos de 80 caracteres, las paredes de la terminal aún están separadas por 80 caracteres.
Cada vez que se ejecuta el paso 2, el estado debe imprimirse en la misma ubicación, sobrescribiendo el estado anterior.
Dado que algunos idiomas no pueden esperar exactamente 100 ms, no dude en esperar cualquier cantidad entre 50 y 1000 ms.
Aplican reglas estándar de código de golf .
Ejemplos
Para el estado inicial
||\/||
imprima lo siguiente (uno sobre el otro):
||\/|| |\\//| \\\/// __\\//__
Para el estado inicial
/||||\
imprime lo siguiente
/||||\ //||\\ ///\\\
Para el estado inicial
/|||\
imprime lo siguiente
/|||\ //|\\
Para el estado inicial
|/ \|/ \|/ \|/ \|
imprima lo siguiente:
|__\|__\|__\|__\|
Para el estado inicial (80 caracteres)
\||||____||||/__ /|\ /\ /|\ __\||||____||||/
imprime lo siguiente
\||||____||||/__ /|\ /\ /|\ __\||||____||||/
/
o/|
y verá que el mosaico no cae del todo como debería.