この質問に触発された
2D画像を1D文字列に展開する別の方法は、ヒルベルト曲線を使用することです。
計算中に使用される反復回数に応じて、この曲線には多くのバージョンがあります。以下は、1次から5次までのヒルベルト曲線の例です。
この曲線の計算方法は次のとおりです。最初に、図に示されているもの(n = 1の場合)として1次ヒルベルト曲線を定義し、1x1の正方形に収まるようにします。次に、この曲線の4つのコピーを作成し、それらを4x4の正方形に間隔を空けて、すべてが左側に向かって「凹面」を示すようにします。次に、2つの左端の次数1の曲線を反転し、上の1つの凹面が上を向き、下の凹面が下を向くようにします。最後に、隣接するヒルベルト曲線の角を接続します。(n + 1)次の曲線を取得する場合は、4つのn次の曲線でプロセスを繰り返すだけです。ここでプロセスの視覚化を見ることができます(プロセスの詳細を示す画像もすぐに追加します)
この課題におけるあなたのタスクは、その行列の最低次のヒルベルト曲線に沿って整数の行列を展開することです。
簡単にするために、マトリックスの左上隅から曲線を開始します。
入力は整数のリストのリストとして受け取ることができます。各サブリストは行列の行を表します。
入力は正方行列(n * n)であると仮定できます。
例えば:
入力:
[[ 1, 2,]
[ 3, 4 ]]
出力:
[ 1, 2, 4, 3 ]
図に示す1次のヒルベルト曲線を使用しているため
入力:
[[ 1, 2, 3, 4, ]
[ 5, 6, 7, 8, ]
[ 9, 10, 11, 12, ]
[ 13, 14, 15, 16 ]]
出力:
[ 1, 5, 6, 2, 3, 4, 8, 7, 11, 12, 16, 15, 14, 10, 9, 13 ]
2次ヒルベルト曲線を使用する
通常、標準の抜け穴は許可されていません。
これはコードゴルフですので、バイトで最短の答えが勝ちます。