(ispirato a questa domanda sopra in matematica)
Le definizioni
Data una n x n
matrice quadrata A , possiamo chiamarla invertible
se esiste una n x n
matrice quadrata B tale che AB = BA = I n , con I n che è la matrice identità della dimensione n x n
(la matrice con le principali diagonali 1
s e qualsiasi altra cosa 0
) e AB e BA che rappresenta la solita moltiplicazione di matrici (non entrerò qui - vai a prendere una classe di algebra lineare).
Da questo, si può chiamare una m x n
matrice C totally invertible
se ogni k x k
sottomatrice (definito di seguito) di C è invertibile per tutti k > 1
, k <= (smaller of m,n)
.
Una matrice secondaria è definita come matrice risultante dopo l'eliminazione di qualsiasi numero di righe e / o colonne dalla matrice originale. Ad esempio, la 3x3
matrice C in basso può essere trasformata in una 2x2
sottotrix C ' rimuovendo la prima riga 1 2 3
e la colonna centrale 2 5 8
come segue:
C = [[1 2 3]
[4 5 6] --> C' = [[4 6]
[7 8 9]] [7 9]]
Si noti che ci sono molte diverse possibilità di submatrix, quanto sopra è solo un esempio. Questa sfida riguarda solo quelli in cui la sottostruttura risultante è una k x k
matrice quadrata .
La sfida
Data una matrice di input, determinare se è totalmente invertibile o meno.
L'ingresso
- Una singola matrice di dimensioni
m x n
, in qualsiasi formato adatto . - Senza perdita di generalità, puoi assumere
m <= n
om >= n
, a seconda di quale sia il più golfista per il tuo codice, e prendere l'input in quel modo (ad esempio, ottieni un'operazione di trasposizione gratuitamente se lo desideri). - Le dimensioni della matrice di input non saranno inferiori
3 x 3
e non superiori a quelle gestibili dalla tua lingua. - La matrice di input sarà composta solo da valori numerici da Z + (gli interi positivi ).
Il risultato
- Un valore di verità / falsità per stabilire se la matrice di input è totalmente invertibile.
Le regole
- È accettabile un programma completo o una funzione.
- Sono vietate le scappatoie standard .
- Si tratta di code-golf quindi si applicano tutte le normali regole del golf e vince il codice più breve (in byte).
Gli esempi
Truthy
[[1 2 3]
[2 3 1]
[3 1 2]]
[[2 6 3]
[1 12 2]
[5 3 1]]
[[1 2 3 4]
[2 3 4 1]
[3 4 1 2]]
[[2 3 5 7 11]
[13 17 19 23 29]
[31 37 41 43 47]]
Falsey
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 6 2 55 3]
[4 5 5 5 6]
[9 3 7 10 4]
[7 1 8 23 9]]
[[2 3 6]
[1 2 12]
[1 1 6]]
[[8 2 12 13 2]
[12 7 13 12 13]
[8 1 12 13 5]]
6
angolo, non un 7
. Errori di battitura goffi.
2 6 3; 1 12 2; 5 3 1
?