整数の2D配列が与えられた場合、その行と列をブロックで並べ替えましょう。つまり、特定の行または列を並べ替えるだけで、並べ替えに必要な変換を2D配列の他のすべての行または列に適用できます。
ルール
- 入力は、整数の2D配列と1インデックス付き整数になります。この整数は、数値が正の場合にソートされる行を表し、数値が負の場合にソートされる列を表します(または、必要に応じて逆になります)。例:(
4x3
行x列)配列を指定すると、2番目の列を-2
引数で、または3番目の行を引数でソートでき3
ます。この2番目の引数はゼロになることはなく、その絶対値は配列の対応する次元より大きくなることはありません。 - 出力は、指定された行または列をソートするために必要な変換が適用された整数の2D配列にもなります。または、STDOUTに配列を書き込むこともできます。
- 出力配列には、指定された行または列が昇順でソートされます。行の2つの数字を交換する必要がある場合、数字が配置されている列全体が交換されることに注意してください。また、列内の2つの数字を交換する必要がある場合、数字が配置されている行全体が交換されます。
- 並べ替えられる行/列に同じ番号が複数回現れる場合、値を交換する方法に応じていくつかの解決策があり、交換される残りの行/列に応じてそれを行うだけです。
例
Positive indices for rows and negative indices for columns
[5 8 7 6 [1 3 2 4
1 3 2 4 order by -3 (3rd column) --> 9 6 3 0
9 6 3 0] 5 8 7 6]
[5 8 7 6 [9 6 3 0
1 3 2 4 order by -4 (4th column) --> 1 3 2 4
9 6 3 0] 5 8 7 6]
[5 8 7 6 [5 7 8 6
1 3 2 4 order by 2 (2nd row) --> 1 2 3 4
9 6 3 0] 9 3 6 0]
[5 8 7 6 [6 7 8 5
1 3 2 4 order by 3 (3rd row) --> 4 2 3 1
9 6 3 0] 0 3 6 9]
[1 2 [1 2 [3 2
3 2] order by -2 (2nd column) --> 3 2] or 1 2] (both are valid)
[7 5 9 7 [5 7 7 9 [5 7 7 9
1 3 2 4 order by 1 (1st row) --> 3 1 4 2 or 3 4 1 2
9 6 3 0] 6 9 0 3] 6 0 9 3]
これはcode-golfなので、各言語の最短コードが勝つかもしれません!