(存在有关无限沙堆以及查找沙堆的标识元素的相关问题。)
给定非负整数矩阵,返回尺寸相同但倒塌的矩阵:
- 如果矩阵不包含任何大于4的值,则将其返回。
- 每个大于3的“单元”都会减少4,并且所有直接相邻的单元(上方,下方,左侧和右侧)(如果存在)都会递增。
- 转到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视频或有关Abelian sandpile模型的Wikipedia文章。
规则:
- 您可以采用任何标准方式进行输入和输出
- 禁止漏洞
- 输入和输出可能是:
- 嵌套列表:
[[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的情况。
测试用例
[[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,最短的代码(每种语言)获胜。
可以显示所有中间结果吗?
—
feersum
@feersum我想是这样,只要清楚最终结果是什么。
—
L3viathan