(inspiré par cette question sur Math)
Les définitions
Étant donné une n x n
matrice carrée A , nous pouvons l'appeler invertible
s'il existe une n x n
matrice carrée B telle que AB = BA = I n , I n étant la matrice d'identité de taille n x n
(la matrice avec la diagonale principale 1
s et tout le reste 0
), et AB et BA représentant la multiplication matricielle habituelle (je n'entrerai pas dans le détail ici - allez prendre une classe d'algèbre linéaire).
De là, on peut appeler une m x n
matrice C totally invertible
si chaque k x k
sous - matrice (défini ci - dessous) de C est inversible pour tous k > 1
, k <= (smaller of m,n)
.
Une sous-matrice est définie comme la matrice résultante après la suppression d'un nombre quelconque de lignes et / ou de colonnes de la matrice d'origine. Par exemple, la 3x3
matrice C ci-dessous peut être transformée en 2x2
sous - matrice C ' en supprimant la première ligne 1 2 3
et la colonne du milieu 2 5 8
comme suit:
C = [[1 2 3]
[4 5 6] --> C' = [[4 6]
[7 8 9]] [7 9]]
Notez qu'il existe de nombreuses possibilités de sous-matrice différentes, ce qui précède n'est qu'un exemple. Ce défi ne concerne que ceux où la sous-matrice résultante est une k x k
matrice carrée .
Le défi
Étant donné une matrice d'entrée, déterminez si elle est totalement inversible ou non.
L'entrée
- Une seule matrice de taille
m x n
, dans n'importe quel format approprié . - Sans perte de généralité, vous pouvez supposer
m <= n
oum >= n
, selon ce qui est golfeur pour votre code, et prendre la saisie de cette façon (c'est-à-dire que vous obtenez une opération de transposition gratuite si vous le souhaitez). - La taille de la matrice d'entrée ne sera ni inférieure
3 x 3
ni supérieure à celle que votre langue peut gérer. - La matrice d'entrée sera constituée uniquement de valeurs numériques de Z + (les entiers positifs ).
Le résultat
- Une valeur truey / falsey pour savoir si la matrice d'entrée est totalement inversible.
Les règles
- Un programme complet ou une fonction sont acceptables.
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
Les exemples
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]]
la source
2 6 3; 1 12 2; 5 3 1
?6
coin, pas un7
. Fautes de frappe maladroites.Réponses:
Gelée ,
26 24 23 20 19 1716 octets-1 octet grâce à @miles (inutile pour chacun
€
, lors de la prise de déterminants)-2 octets, @miles à nouveau! (séparation de chaîne inutile et utilisation
Ѐ
rapide)TryItOnline! ou les 8 tests
Comment?
la source
ldepth = 2
dans la sourceZœcLÆḊ
et un autre octet dans le lien principal parçЀJȦ
€
you golfed off. Totalement oubliéЀ
.œcЀJµZœcLÆḊµ€€Ȧ
qui est également de 16 octetsMathematica 10.0, 34 octets
Une chaîne de 6 tilde ... nouveau record personnel!
la source
MATL, 57 octets
Bien sûr, vous pouvez l' essayer en ligne!
L'entrée doit être en orientation «portrait» (nRows> = nColumns). Je pense que ce n'est peut-être pas la solution la plus efficace ... Mais au moins je laisse un peu de place pour que d'autres me surpassent. J'adorerais entendre des indices spécifiques qui auraient pu raccourcir cette approche particulière, mais je pense que ce bytecount massif devrait inspirer les autres à faire une entrée MATL avec une approche complètement différente. Affiche 0 si faux, ou une valeur massive si vrai (deviendra rapidement Inf si la matrice est trop grande; pour 1 octet supplémentaire, on pourrait remplacer
H*
parH&Y
(logique et)). Enregistré quelques octets grâce à @LuisMendo.la source