Ispirato da questa domanda
Un altro modo per srotolare un'immagine 2D in una stringa 1D è utilizzare una curva di Hilbert.
Esistono molte versioni di questa curva, a seconda del numero di iterazioni utilizzate durante il calcolo. Di seguito segui l'esempio delle curve di Hilbert dal primo al quinto ordine.
Il modo di calcolare questa curva è il seguente. Per prima cosa definiamo il primo ordine di Hilbert Curve come quello mostrato in figura (quello per n = 1), in modo che si adatti a un quadrato 1x1. Dobbiamo quindi fare quattro copie di questa curva, spaziandole in un quadrato 4x4, in modo che presentino tutti la "concavità" verso il lato sinistro. Quindi capovolgiamo le due curve 1 all'ordine più a sinistra, in modo che la concavità superiore sia rivolta verso l'alto, mentre quella inferiore è rivolta verso il basso. Finalmente colleghiamo gli angoli delle curve di Hilbert adiacenti. Se si desidera ottenere una curva di ordine (n + 1), è sufficiente ripetere il processo con quattro curve di ordine n. Possiamo vedere una visualizzazione del processo qui (aggiungerò presto anche un'immagine che dettaglia il processo)
Il tuo compito in questa sfida è srotolare una matrice di numeri interi lungo la curva di Hilbert di ordine più basso per quella matrice.
Per semplicità, avremo la curva a partire dall'angolo in alto a sinistra della matrice.
È possibile ricevere l'input come un elenco di un numero intero, in cui ciascun elenco secondario rappresenta una riga della matrice.
Si può presumere che l'input sarà una matrice quadrata (n * n).
Per esempio:
Ingresso:
[[ 1, 2,]
[ 3, 4 ]]
Produzione:
[ 1, 2, 4, 3 ]
Dal momento che stiamo usando il primo ordine di Hilbert Curve mostrato in figura
Ingresso:
[[ 1, 2, 3, 4, ]
[ 5, 6, 7, 8, ]
[ 9, 10, 11, 12, ]
[ 13, 14, 15, 16 ]]
Produzione:
[ 1, 5, 6, 2, 3, 4, 8, 7, 11, 12, 16, 15, 14, 10, 9, 13 ]
Utilizzando il secondo ordine di Hilbert Curve
Come al solito, non sono consentite scappatoie standard.
Questo è code-golf, quindi vince la risposta più breve in byte.