(無限の砂山、および砂山のアイデンティティ要素を見つけることに関する関連する質問があります。)
負でない整数の行列が与えられた場合、同じ次元であるが倒れた行列を返します:
- マトリックスに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のビデオまたはアーベルの砂山モデルに関する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で、最短のコード(言語ごと)が勝ちます。