Un tas de sable abélien , pour nos besoins, est une grille infinie avec des coordonnées entières, initialement vide de sable. Après chaque seconde, un grain de sable est placé à (0,0). Chaque fois qu’une cellule de la grille contient au moins 4 grains de sable, elle renverse simultanément un grain de sable sur chacun de ses quatre voisins. Les voisins de (x, y) sont (x-1, y), (x + 1, y), (x, y-1) et (x, y + 1).
Lorsqu'une cellule se renverse, ses voisins risquent de se renverser. Quelques faits:
- Cette cascade finira par s'arrêter.
- L'ordre dans lequel les cellules se répandent est sans importance; Le résultat sera le même.
Exemple
Après 3 secondes, la grille ressemble à
.....
.....
..3..
.....
.....
Après 4 secondes:
.....
..1..
.1.1.
..1..
.....
Après 15 secondes:
.....
..3..
.333.
..3..
.....
Et après 16 secondes:
..1..
.212.
11.11
.212.
..1..
Le défi
Dans le moins d'octets possible, écrivez une fonction qui prend un seul entier positif t et génère une image du tas de sable après t secondes.
Contribution
Un seul entier positif t , dans le format de votre choix.
Sortie
Une image du tas de sable après t secondes, en utilisant les caractères
. 1 2 3
Modifier: utilisez quatre caractères distincts que vous aimez ou dessinez une image. Si vous n'utilisez pas ".123" ou "0123", spécifiez dans votre réponse la signification des caractères.
Contrairement aux exemples, votre sortie doit contenir le nombre minimal de lignes et de colonnes nécessaires pour afficher la partie non nulle de la pile de sable.
C'est-à-dire que pour l'entrée 3, la sortie doit être
3
Pour 4, la sortie devrait être
.1.
1.1
.1.
Notation
Le score de golf standard s'applique.
Règles
Aucune fonction de langage ou bibliothèque qui sait déjà ce qu'est un tas de sable n'est autorisée.
Edit: la section de sortie a été modifiée, la restriction de jeu de caractères a été complètement levée. Utilisez quatre caractères ou couleurs distincts que vous aimez.
.
des cellules vides? Pouvons-nous avoir 0
une cellule vide valide?
0
? Quelle est la sortie alors?