(Ci sono domande correlate su infinite sandpiles e sulla ricerca di elementi di identità di sandpiles .)
Data una matrice di numeri interi non negativi, restituisce una matrice delle stesse dimensioni, ma rovesciata :
- Se la matrice non contiene valori superiori a 4, restituirla.
- Ogni "cella" più grande di 3 viene ridotta di 4 e tutte le celle direttamente vicine (sopra, sotto, sinistra e destra) vengono incrementate, se esistono.
- GOTO 1.
Esempi:
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
(Devi solo restituire il risultato finale. Il percorso su cui lo raggiungi potrebbe differire da quello mostrato qui: non importa in quale ordine esegui le operazioni di rovesciamento, portano tutti allo stesso risultato.)
Per una spiegazione più approfondita e un po 'di motivazione, guarda questo video di Numberphile o l'articolo di Wikipedia sul modello di sandpile abeliano .
Regole:
- È possibile accettare input e output in uno dei modi standard
- Le scappatoie sono vietate
- Input e output possono essere:
- un elenco nidificato:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- un semplice elenco:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
e la forma - qualche tipo di matrice nativa
- una stringa, ad es
1 2 3\n4 5 6\n7 8 9
- o qualsiasi altra cosa funzioni nella tua lingua.
- un elenco nidificato:
- L'input e l'output devono essere nella stessa forma
- L'input può contenere numeri più grandi di quelli mostrati qui, ma la dimensione potrebbe essere limitata dai limiti della tua lingua (equivalenti MAXINT, se applicabile)
- La matrice può avere qualsiasi forma (ad es. 1x1, 2x2, 3x3, 4x4, 2x7, 11x3, ...)
- Non è necessario gestire il caso in cui la forma è 0xN o Nx0.
Casi 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]]