Você mora dentro de um terminal com 80 caracteres de largura. Você está entediado e decide jogar dominó. Não, não o tipo chato que se parece com Scrabble, o tipo divertido em que você passa uma hora ajustando-os para vê-los cair em um segundo.
Nos terminais, o dominó fica assim:
| upright domino
\ left-tilted domino
/ right-tilted domino
__ fallen domino
Como todos sabemos, se um dominó inclinado toca um vertical, o segundo dominó também é inclinado. A única exceção é se dois dominós inclinados o tocarem:
|\ --> \\ /| --> // /|\ --> /|\
Ajuste a constante gravitacional do seu terminal para que essa transição leve 100 ms.
Se um dominó inclinado é suportado por outro dominó ou pelas paredes do terminal, sua jornada termina.
Nenhum dos dominós inclinados em
\||||____||||/__ /|\ /\ /|\ __\||||____||||/
(80 caracteres) se moverá, pois os dois dominós mais inclinados são suportados pelas paredes do terminal e todos os outros são suportados por outros dominós.
No entanto, se o espaço na direção de inclinação estiver vazio, o dominó cai:
| \\ --> |__\ // | --> /__|
Terminal. Constante gravitacional. Você entendeu…
Finalmente, há um leve vento da esquerda, de modo que os dominós inclinados para a direita caem mais rapidamente do que os dominados para a esquerda:
|/ \| --> |__\|
Tarefa
Escreva um programa / função que mostre uma animação de jogar dominó em um terminal.
Seu código deve fazer o seguinte:
Leia uma sequência de caracteres de entrada, representando o estado inicial dos dominós.
Essa sequência não conterá mais de 80 caracteres e consistirá apenas nos dominós descritos acima e em espaços vazios.
Imprima o estado e aguarde 100 ms.
Transforme o estado conforme explicado acima.
Se o estado mudou, volte para 2.
Regras adicionais
O comprimento da sequência de entrada não afeta a largura do terminal; mesmo que a cadeia tenha menos de 80 caracteres, as paredes do terminal ainda terão 80 caracteres.
Cada vez que a etapa 2 é executada, o estado deve ser impresso no mesmo local, substituindo o estado anterior.
Como alguns idiomas não conseguem esperar exatamente 100 ms, fique à vontade para aguardar qualquer quantidade entre 50 e 1000 ms.
Aplicam-se as regras padrão de código de golfe .
Exemplos
Para o estado inicial
||\/||
imprima o seguinte (um sobre o outro):
||\/|| |\\//| \\\/// __\\//__
Para o estado inicial
/||||\
imprima o seguinte
/||||\ //||\\ ///\\\
Para o estado inicial
/|||\
imprima o seguinte
/|||\ //|\\
Para o estado inicial
|/ \|/ \|/ \|/ \|
imprima o seguinte:
|__\|__\|__\|__\|
Para o estado inicial (80 caracteres)
\||||____||||/__ /|\ /\ /|\ __\||||____||||/
imprima o seguinte
\||||____||||/__ /|\ /\ /|\ __\||||____||||/
/
ou/|
e você verá que o bloco não cai completamente como deveria.