(Ada pertanyaan terkait tentang tumpukan pasir tak terbatas , dan menemukan elemen identitas tumpukan pasir .)
Diberikan matriks bilangan bulat non-negatif, kembalikan matriks dengan dimensi yang sama, tetapi dijatuhkan :
- Jika matriks tidak mengandung nilai lebih dari 4, kembalikan.
- Setiap "sel" yang lebih besar dari 3 akan berkurang sebesar 4, dan semua sel yang bertetangga secara langsung (di atas, di bawah, kiri, dan kanan) bertambah, jika ada.
- GOTO 1.
Contoh:
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
(Anda hanya perlu mengembalikan hasil akhir. Jalur yang Anda capai mungkin berbeda dari yang ditunjukkan di sini: tidak masalah dalam urutan mana Anda melakukan operasi penggulingan, semuanya mengarah ke hasil yang sama.)
Untuk penjelasan yang lebih dalam dan motivasi, lihat video Numberphile ini atau artikel Wikipedia tentang model pasir Abelian .
Aturan:
- Anda dapat mengambil input dan output dengan salah satu cara standar
- Celah dilarang
- Input dan output mungkin:
- daftar bersarang:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- daftar sederhana:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
dan bentuknya - semacam jenis matriks asli
- sebuah string, mis
1 2 3\n4 5 6\n7 8 9
- atau apa pun yang berfungsi dalam bahasa Anda.
- daftar bersarang:
- Input dan output harus dalam bentuk yang sama
- Input mungkin berisi angka yang lebih besar daripada yang ditunjukkan di sini, tetapi ukurannya mungkin dibatasi oleh batas bahasa Anda (setara MAXINT, jika ada)
- Matriks dapat memiliki bentuk apa pun (mis. 1x1, 2x2, 3x3, 4x4, 2x7, 11x3, ...)
- Anda tidak perlu menangani case di mana bentuknya 0xN atau Nx0.
Testcases
[[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]]
Ini codegolf , kode terpendek (per bahasa) menang.