Questa è la generalizzazione bidimensionale di questa sfida .
Per i nostri scopi, una matrice (o matrice 2D) A è considerata una sottomatrice di un'altra matrice B , se A può essere ottenuto rimuovendo completamente un numero di righe e colonne da B . (Nota: alcune fonti hanno definizioni diverse / più restrittive.)
Ecco un esempio:
A = [1 4 B = [1 2 3 4 5 6
2 1] 6 5 4 3 2 1
2 1 2 1 2 1
9 1 8 2 7 6]
Possiamo eliminare le colonne 2, 3, 5, 6 e le righe 2, 4 da B per ottenere A :
B = [1 2 3 4 5 6 [1 _ _ 4 _ _ [1 4 = A
6 5 4 3 2 1 --> _ _ _ _ _ _ --> 2 1]
2 1 2 1 2 1 2 _ _ 1 _ _
9 1 8 2 7 6] _ _ _ _ _ _]
Si noti che A è ancora una sottotrix di B se vengono mantenute tutte le righe o tutte le colonne di B (o di fatto se A = B ).
La sfida
Hai indovinato. Dato intero due non vuoto matrici A e B , determinare se A è una sottomatrice di B .
È possibile scrivere un programma o una funzione, prendendo l'input tramite STDIN (o l'alternativa più vicina), l'argomento della riga di comando o l'argomento della funzione e producendo il risultato tramite STDOUT (o l'alternativa più vicina), il valore di ritorno della funzione o il parametro della funzione (out).
L'input può essere in qualsiasi formato conveniente. Le matrici possono essere fornite come liste nidificate, stringhe che utilizzano due diversi separatori, liste piatte insieme alle dimensioni della matrice, ecc., Purché l'input non sia preelaborato. Puoi scegliere di prendere B prima e A secondo, purché la tua scelta sia coerente. Puoi presumere che gli elementi delle matrici siano positivi e meno di 256.
L'output dovrebbe essere veritiero se A è una sottostruttura di B e falsare diversamente. Il valore di output specifico non deve essere coerente.
Si applicano le regole standard del code-golf .
Casi test
Ogni test è su una linea separata, A, B
.
Casi veri:
[[1]], [[1]]
[[149, 221]], [[177, 149, 44, 221]]
[[1, 1, 2], [1, 2, 2]], [[1, 1, 1, 2, 2, 2], [3, 1, 3, 2, 3, 2], [1, 1, 2, 2, 2, 2]]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[1, 2, 3], [4, 7, 6], [7, 8, 9], [1, 2, 3], [4, 5, 6], [7, 8, 9]]
[[228, 66], [58, 228]], [[228, 66], [58, 228]]
[[1, 2], [2, 1]], [[1, 2, 2], [2, 1, 2], [2, 2, 1]]
[[136, 196], [252, 136]], [[136, 252, 210, 196, 79, 222], [222, 79, 196, 210, 252, 136], [252, 136, 252, 136, 252, 136], [180, 136, 56, 252, 158, 222]]
Casi di falsi:
[[1]], [[2]]
[[224, 15]], [[144, 15, 12, 224]]
[[41], [150]], [[20, 41, 197, 150]]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[1, 2, 3], [7, 8, 9], [4, 5, 6]]
[[1, 2, 2], [2, 1, 2], [2, 2, 1]], [[1, 2], [2, 1]]
[[1, 2, 2], [2, 1, 2]], [[1, 2], [2, 1], [2, 2]]
[[1, 2], [3, 4]], [[5, 3, 4, 5], [2, 5, 5, 1], [4, 5, 5, 3], [5, 1, 2, 5]]
[[158, 112], [211, 211]], [[158, 211, 189, 112, 73, 8], [8, 73, 112, 189, 211, 158], [211, 158, 211, 158, 211, 158], [21, 158, 199, 211, 212, 8]]