Vivi all'interno di un terminale di 80 caratteri di larghezza. Sei annoiato, quindi decidi di giocare a domino. No, non il tipo noioso che assomiglia a Scrabble, il tipo divertente in cui passi un'ora a guardarli cadere in un secondo.
Nei terminali, i domino si presentano così:
| upright domino
\ left-tilted domino
/ right-tilted domino
__ fallen domino
Come tutti sappiamo, se un domino inclinato tocca un montante, anche il secondo domino viene inclinato. L'unica eccezione a ciò è se due domino inclinati lo toccano:
|\ --> \\ /| --> // /|\ --> /|\
Regola la costante gravitazionale del tuo terminale in modo che questa transizione richieda 100 ms.
Se un domino inclinato è supportato da un altro domino o dalle pareti del terminale, il suo viaggio termina.
Nessuno dei domino inclinati dentro
\||||____||||/__ /|\ /\ /|\ __\||||____||||/
(80 caratteri) si sposteranno, poiché i due domino inclinati più estesi sono supportati dalle pareti del terminale e tutti gli altri sono supportati da altri domino.
Tuttavia, se lo spazio nella direzione di inclinazione è vuoto, il domino cade:
| \\ --> |__\ // | --> /__|
Terminale. Costante gravitazionale. Ottieni il punto ...
Infine, c'è un leggero vento da sinistra, quindi i domino inclinati a destra cadono più velocemente di quelli inclinati a sinistra:
|/ \| --> |__\|
Compito
Scrivi un programma / funzione che mostri un'animazione di giocare a domino in un terminale.
Il tuo codice dovrebbe effettuare le seguenti operazioni:
Leggi una stringa dall'input, che rappresenta lo stato iniziale dei domino.
Questa stringa conterrà non più di 80 caratteri e sarà composta esclusivamente dai domino sopra descritti e spazi vuoti.
Stampa lo stato e attendi 100 ms.
Trasforma lo stato come spiegato sopra.
Se lo stato è cambiato, torna a 2.
Regole aggiuntive
La lunghezza della stringa di input non influisce sulla larghezza del terminale; anche se la stringa è più corta di 80 caratteri, le pareti del terminale sono comunque distanti 80 caratteri.
Ogni volta che viene eseguito il passaggio 2, lo stato deve essere stampato nella stessa posizione, sovrascrivendo lo stato precedente.
Poiché alcune lingue non sono in grado di attendere esattamente 100 ms, non esitare ad attendere qualsiasi importo compreso tra 50 e 1000 ms.
Si applicano le regole standard del code-golf .
Esempi
Per lo stato iniziale
||\/||
stampa quanto segue (uno sopra l'altro):
||\/|| |\\//| \\\/// __\\//__
Per lo stato iniziale
/||||\
stampa quanto segue
/||||\ //||\\ ///\\\
Per lo stato iniziale
/|||\
stampa quanto segue
/|||\ //|\\
Per lo stato iniziale
|/ \|/ \|/ \|/ \|
stampa quanto segue:
|__\|__\|__\|__\|
Per lo stato iniziale (80 caratteri)
\||||____||||/__ /|\ /\ /|\ __\||||____||||/
stampa quanto segue
\||||____||||/__ /|\ /\ /|\ __\||||____||||/
/
o/|
e vedrai che la tessera non cade completamente come dovrebbe.