(Есть связанные вопросы о бесконечных песчаных кучах и поиске элементов идентичности песочных куч .)
Если задана матрица неотрицательных целых чисел, верните матрицу тех же размеров, но свергнутую :
- Если матрица не содержит значений больше 4, верните ее.
- Каждая «ячейка», которая больше 3, уменьшается на 4, и все непосредственно соседние ячейки (сверху, снизу, слева и справа) увеличиваются, если они существуют.
- GOTO 1.
Примеры:
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
(Вам нужно только вернуть конечный результат. Путь, по которому вы его достигнете, может отличаться от показанного здесь: не имеет значения, в каком порядке вы выполняете операции свертывания, все они приводят к одному и тому же результату.)
Более подробное объяснение и некоторую мотивацию см. В этом видео Numberphile или в статье в Википедии об абелевой модели песочных куч .
Правила:
- Вы можете взять ввод и вывод любым из стандартных способов
- Лазейки запрещены
- Вход и выход могут быть:
- вложенный список:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- простой список:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
и форма - какой-то родной тип матрицы
- строка, например
1 2 3\n4 5 6\n7 8 9
- или что еще работает на вашем языке.
- вложенный список:
- Вход и выход должны быть в одинаковой форме
- Входные данные могут содержать большие числа, чем показанные здесь, но размер может быть ограничен пределами вашего языка (эквиваленты MAXINT, если применимо)
- Матрица может иметь любую форму (например, 1x1, 2x2, 3x3, 4x4, 2x7, 11x3, ...)
- Вам не нужно обрабатывать случай, когда форма 0xN или 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]]
Это Codegolf , самый короткий код (на язык) выигрывает.