Vous vivez à l'intérieur d'un terminal de 80 caractères de large. Vous vous ennuyez, vous décidez donc de jouer aux dominos. Non, pas le genre ennuyeux qui ressemble au Scrabble, le genre amusant où vous passez une heure à les fixer pour les regarder tomber en une seconde.
Dans les terminaux, les dominos ressemblent à ceci:
| upright domino
\ left-tilted domino
/ right-tilted domino
__ fallen domino
Comme nous le savons tous, si un domino incliné touche un montant, le deuxième domino est également incliné. La seule exception à cela est que si deux dominos inclinés le touchent:
|\ --> \\ /| --> // /|\ --> /|\
Ajustez la constante gravitationnelle de votre terminal pour que cette transition prenne 100 ms.
Si un domino incliné est soutenu par un autre domino ou les murs du terminal, son voyage se termine.
Aucun des dominos inclinés dans
\||||____||||/__ /|\ /\ /|\ __\||||____||||/
(80 caractères) se déplacera, car les deux dominos inclinés les plus à l'extérieur sont supportés par les murs du terminal et tous les autres sont supportés par d'autres dominos.
Cependant, si l'espace dans le sens de l'inclinaison est vide, le domino tombe:
| \\ --> |__\ // | --> /__|
Terminal. Constante gravitationnelle. Tu obtiens le point…
Enfin, il y a un léger vent de gauche, donc les dominos inclinés à droite tombent plus vite que les dominos inclinés à gauche:
|/ \| --> |__\|
Tâche
Écrivez un programme / une fonction qui montre une animation de jouer aux dominos dans un terminal.
Votre code doit effectuer les opérations suivantes:
Lire une chaîne d'entrée, représentant l'état initial des dominos.
Cette chaîne ne contiendra pas plus de 80 caractères et se composera uniquement des dominos décrits ci-dessus et des espaces vides.
Imprimez l'état et attendez 100 ms.
Transformez l'état comme expliqué ci-dessus.
Si l'état a changé, revenez à 2.
Règles supplémentaires
La longueur de la chaîne d'entrée n'affecte pas la largeur du terminal; même si la chaîne est inférieure à 80 caractères, les murs du terminal sont toujours séparés de 80 caractères.
Chaque fois que l'étape 2 est exécutée, l'état doit être imprimé au même emplacement, écrasant l'état précédent.
Étant donné que certaines langues sont incapables d'attendre exactement 100 ms, n'hésitez pas à attendre n'importe quelle quantité entre 50 et 1000 ms.
Les règles de code-golf standard s'appliquent.
Exemples
Pour l'état initial
||\/||
imprimer ce qui suit (l'un sur l'autre):
||\/|| |\\//| \\\/// __\\//__
Pour l'état initial
/||||\
imprimer ce qui suit
/||||\ //||\\ ///\\\
Pour l'état initial
/|||\
imprimer ce qui suit
/|||\ //|\\
Pour l'état initial
|/ \|/ \|/ \|/ \|
imprimer ce qui suit:
|__\|__\|__\|__\|
Pour l'état initial (80 caractères)
\||||____||||/__ /|\ /\ /|\ __\||||____||||/
imprimer ce qui suit
\||||____||||/__ /|\ /\ /|\ __\||||____||||/
/
ou/|
et vous verrez que la tuile ne tombe pas complètement comme il se doit.