(Es gibt verwandte Fragen zu unendlichen Sandhaufen und zum Auffinden von Identitätselementen von Sandhaufen .)
Bei einer Matrix nicht negativer Ganzzahlen geben Sie eine Matrix mit den gleichen Dimensionen zurück, die jedoch gestürzt wurde :
- Wenn die Matrix keine Werte größer als 4 enthält, geben Sie sie zurück.
- Jede "Zelle", die größer als 3 ist, wird um 4 verringert, und alle direkt benachbarten Zellen (oben, unten, links und rechts) werden inkrementiert, falls vorhanden.
- GOTO 1.
Beispiele:
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
(Sie müssen nur das Endergebnis zurückgeben. Der Pfad, auf dem Sie es erreichen, kann sich von dem hier gezeigten unterscheiden: Es spielt keine Rolle, in welcher Reihenfolge Sie die Sturzoperationen ausführen, sie führen alle zum gleichen Ergebnis.)
Für eine tiefere Erklärung und eine gewisse Motivation siehe dieses Numberphile-Video oder den Wikipedia-Artikel über das abelsche Sandpile-Modell .
Regeln:
- Sie können die Ein- und Ausgabe auf eine der Standardmethoden vornehmen
- Lücken sind verboten
- Input und Output können sein:
- eine verschachtelte Liste:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- eine einfache Liste:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
und die Form - eine Art nativer Matrixtyp
- eine Zeichenfolge, z
1 2 3\n4 5 6\n7 8 9
- oder was sonst noch in deiner Sprache funktioniert.
- eine verschachtelte Liste:
- Eingabe und Ausgabe müssen in derselben Form vorliegen
- Die Eingabe kann größere Zahlen als die hier gezeigten enthalten, die Größe ist jedoch möglicherweise an die Grenzen Ihrer Sprache gebunden (ggf. MAXINT-Äquivalente).
- Die Matrix kann eine beliebige Form haben (zB 1x1, 2x2, 3x3, 4x4, 2x7, 11x3, ...)
- Sie müssen den Fall nicht behandeln, in dem die Form 0xN oder Nx0 ist.
Testfälle
[[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]]
Dies ist Codegolf , der kürzeste Code (pro Sprache) gewinnt.