Notez que ce défi ne nécessite aucune manipulation ou compréhension des nombres complexes.
Étant donné une matrice carrée non vide où chaque élément est une liste entière à deux éléments (Re, Im), déterminez (en donnant toutes les valeurs véridiques / fausses ou deux valeurs cohérentes) si cela représente une matrice hermitienne.
Notez que l'entrée est un tableau 3D d'entiers; pas un tableau 2D de nombres complexes. Si votre langue ne peut pas prendre directement un tableau 3D, vous pouvez prendre une liste plate (et la forme n × n ou n × n × 2 si cela vous aide).
Une matrice est hermitienne si elle est égale à sa propre transposition conjuguée . En d'autres termes, si vous le retournez sur sa diagonale en haut à gauche à en bas à droite et annulez le deuxième élément de toutes les listes de feuilles à deux éléments, il est identique à la matrice d'entrée. Notez que l'ordre de retournement et de négation n'est pas pertinent, vous pouvez donc annuler d'abord et retourner ensuite.
Exemple pratique
Cet exemple utilise JSON avec un espace blanc superflu pour faciliter la lecture:
[[ [2, 0] , [2, 1] , [4, 0] ],
[ [2,-1] , [3, 0] , [0, 1] ],
[ [4, 0] , [0,-1] , [1, 0] ]]
Transposer (inverser la diagonale NW — SE):
[[ [2, 0] , [2,-1] , [4, 0] ],
[ [2, 1] , [3, 0] , [0,-1] ],
[ [4, 0] , [0, 1] , [1, 0] ]]
Nier les deuxièmes éléments des listes de feuilles:
[[ [2, 0] , [2, 1] , [4, 0] ],
[ [2,-1] , [3, 0] , [0, 1] ],
[ [4, 0] , [0,-1] , [1, 0] ]]
Comme c'est identique à l'entrée, la matrice est hermitienne.
Cas de test
Hermitien
[[[2,0],[2,1],[4,0]],[[2,-1],[3,0],[0,1]],[[4,0],[0,-1],[1,0]]]
[[[1,0],[2,0]],[[2,0],[1,0]]]
[[[1,0],[2,-3]],[[2,3],[1,0]]]
[[[42,0]]]
Non hermitien
[[[2,0],[2,1],[4,0]],[[2,-1],[3,0],[0,1]],[[4,0],[0,-1],[1,-1]]]
[[[0,1],[0,2]],[[0,2],[0,1]]]
[[[1,0],[2,3]],[[2,3],[1,0]]]
[[[3,2]]]
Réponses:
R,
714847 octetsPrend un tableau 3D de nombres réels, crée un tableau 2D de nombres imaginaires, transpose, conjugue et compare.
Merci à @Giuseppe d' avoir réduit le nombre d'octets d'un incroyable 23 octets, et à @Vlo pour le dernier 1!
Essayez-le en ligne!
Exemple:
la source
B=A[,,1]+A[,,2]*1i
devrait économiser quelques octets.isSymmetric
et fonctionne pour les matrices complexes hermitiennes, mais le1x1
cas est délicat car il[
supprime les attributs et il en résulte uncomplex
plutôt qu'unmatrix
function(A)all(Conj(t(B<-A[,,1]+A[,,2]*1i))==B)
L'affectation en ligne sauve 1.Octave ,
393431 octetsEssayez-le en ligne!
Enregistré 3 octets grâce à Luis Mendo qui m'a informé des clarifications dans le texte du challenge.
Explication:
Dans MATLAB et Octave,
'
c'est la transposition complexe conjuguée, pas la transposition "régulière".Nous créons une variable
y
ligne qui est la première couche de la matrice 3D plus la deuxième couche multipliée par l'unité complexej
, c'est-à-dire une matrice complexe où le terme réel est la première "couche" et l'imaginaire est la deuxième "couche". On vérifie ensuite si elle est égale à un conjugué complexe transposé.Cela produira une matrice contenant uniquement
1
si vrai, et une matrice contenant au moins un0
si faux. Celles-ci sont considérées comme vraies et fausses dans Octave (Proof) .la source
Python 2 , 50 octets
Essayez-le en ligne!
la source
APL (Dyalog Unicode) ,
221597 octetsEssayez-le en ligne!
Fonction de préfixe tacite.
Merci à Adám pour 7 octets sur le Dfn, et à Adám et ErikTheOutgolfer pour
avoirsupportéma stupidité enm'aidant à trouver la version tacite.Merci à ngn pour 2 octets sur la version tacite.
Comment?
la source
Wolfram Language (Mathematica) ,
453433262118 octetsEssayez-le en ligne!
la source
0xf3c7
c'est l'opérateur de transposition, mais qu'est-ce que c'est0xf3c8
?0xf3c9
( Documentation Wolfram ).Java 8,
137136134126119116 octets-3 octets grâce à @ceilingcat .
Retourne
1
si hermitien,0
sinon.Explication:
Essayez-le en ligne.
la source
J , 14 octets
Essayez-le en ligne!
Explication
la source
-:0 2|:(,-)/"1
Haskell , 50 octets
-7 octets grâce à H.PWiz.
Essayez-le en ligne!
la source
Gelée ,
65 octetsUn lien monadique revenant
1
pour une entrée hermitienne et0
autrement.Essayez-le en ligne!
Comment?
la source
Ø+
.05AB1E , 9 octets
Essayez-le en ligne!
Explication
la source
Rubis , 46 octets
Essayez-le en ligne!
Port de ma réponse Python
la source
Perl 5 , -a0 48 octets
Ancien comptage: 50 octets (
+2
poura0
). Pas mal pour une langue qui n'a pas de transposition intégrée (je ne suis pas du tout jaloux, pas de sirree)Donnez la matrice d'entrée sur STDIN avec
,
entre la partie réelle et imaginaire, par exemple:Imprime
1
pour hermitien, rien d'autreEssayez-le en ligne!
la source
Husk , 7 octets
Essayez-le en ligne!
Comment?
Notez que cela
†
devrait fonctionner au lieu demm
, mais il y a un bug ennuyeux qui m'empêche de l'utiliser :(la source
JavaScript (ES6), 53 octets
Sauvegardé 2 octets grâce à @Neil
Retours
false
pour Hermitian outrue
pour non-Hermitian.Essayez-le en ligne!
la source
f=([c,...s],p='')=>c?p+c+f(s,p+'🍹'):p
.C (gcc) ,
107103100 octetsA[0]
au golf à*A
deux reprises.Essayez-le en ligne!
la source
En fait , 13 octets
Essayez-le en ligne!
Comment ça fonctionne?
Cette soumission utilise en fait des nombres complexes. Si la prise d'entrée comme matrice d'entrées complexes était autorisée, ce serait 8 octets .
la source
Pyth, 9 octets
Explication:
Suite de tests .
la source
qCmm*V_B1
.qCmm.e_Fbk
... apparemment, j'ai oublié de modifier le nombre d'octets dans la soumission finale. @ Mr.Xcoder Je l'ai corrigé malgré tout, merci pour la capture!C,
111110108 octetsMerci à @Jonathan Frech d'avoir sauvé un octet et merci à @ceilingcat d'avoir sauvé deux octets!
Essayez-le en ligne!
C (gcc) ,
106104octetsEssayez-le en ligne!
la source
r|=...|...
marche aussi bienr+=...||...
.En fait , 13 octets
Essayez-le en ligne!
Explication:
la source