(Il existe des questions connexes sur les tas de sable infinis et sur la recherche d'éléments d'identité des tas de sable .)
Étant donné une matrice d'entiers non négatifs, renvoyez une matrice de mêmes dimensions, mais renversée :
- Si la matrice ne contient aucune valeur supérieure à 4, renvoyez-la.
- Chaque "cellule" supérieure à 3 est réduite de 4, et toutes les cellules directement voisines (au-dessus, en dessous, à gauche et à droite) sont incrémentées, si elles existent.
- GOTO 1.
Exemples:
0 1 0 0 2 0
2 4 0 -> 3 0 1
0 0 3 0 1 3
1 2 3 2 3 4 2 5 1 4 1 2 0 3 3 0 3 3 0 3 3
4 5 6 -> 2 4 4 -> 4 2 3 -> 0 5 4 -> 3 2 1 -> 3 3 1 -> 3 3 2
7 8 9 5 7 7 2 6 5 4 3 2 0 5 3 1 1 4 1 2 0
(Il vous suffit de renvoyer le résultat final. Le chemin sur lequel vous l'atteignez peut différer de celui illustré ici: peu importe l'ordre dans lequel vous effectuez les opérations de basculement, ils conduisent tous au même résultat.)
Pour une explication plus approfondie et une motivation, voir cette vidéo Numberphile ou l'article Wikipedia sur le modèle de tas de sable abélien .
Règles:
- Vous pouvez prendre des entrées et des sorties de n'importe quelle manière standard
- Les échappatoires sont interdites
- L'entrée et la sortie peuvent être:
- une liste imbriquée:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- une liste simple:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
et la forme - une sorte de type de matrice native
- une chaîne, par exemple
1 2 3\n4 5 6\n7 8 9
- ou tout ce qui fonctionne dans votre langue.
- une liste imbriquée:
- L'entrée et la sortie doivent être sous la même forme
- L'entrée peut contenir des nombres plus grands que ceux indiqués ici, mais la taille peut être limitée par les limites de votre langue (équivalents MAXINT, le cas échéant)
- La matrice peut avoir n'importe quelle forme (par exemple 1x1, 2x2, 3x3, 4x4, 2x7, 11x3, ...)
- Vous n'avez pas besoin de gérer le cas où la forme est 0xN ou Nx0.
Cas de test
[[2, 5, 4], [8, 6, 4], [1, 2, 3]] -> [[3, 3, 0], [1, 2, 2], [1, 3, 2]]
[[0, 0, 2], [1, 3, 3], [0, 0, 0]] -> [[0, 0, 2], [1, 3, 3], [0, 0, 0]]
[[9, 9, 9], [9, 9, 9], [9, 9, 9]] -> [[1, 3, 1], [3, 1, 3], [1, 3, 1]]
[[4, 5], [2, 3]] -> [[2, 3], [0, 1]]
[[2, 3, 5], [2, 2, 0]] -> [[3, 0, 2], [2, 3, 1]]
[[7]] -> [[3]]
C'est codegolf , le code le plus court (par langue) l'emporte.