Observe que esse desafio não requer manipulação ou entendimento de números complexos.
Dada uma matriz quadrada não vazia onde cada elemento é uma lista inteira de dois elementos (Re, Im), determine (fornecendo quaisquer valores de verdade / falsidade ou quaisquer dois valores consistentes) se isso representa uma matriz hermitiana.
Observe que a entrada é uma matriz 3D de números inteiros; não é uma matriz 2D de números complexos. Se o seu idioma não puder usar uma matriz 3D diretamente, você poderá fazer uma lista simples (e o formato n × n ou n × n × 2, se isso ajudar).
Uma matriz é hermitiana se igualar sua própria transposição de conjugado . Em outras palavras, se você girá-lo na diagonal superior esquerda para inferior direita e negar o segundo elemento de todas as listas de folhas de dois elementos, ele será idêntico à matriz de entrada. Observe que a ordem de virar e negar é irrelevante; portanto, você pode negar primeiro e virar depois.
Exemplo de passeio
Este exemplo usa JSON com espaço em branco supérfluo para facilitar a leitura:
[[ [2, 0] , [2, 1] , [4, 0] ],
[ [2,-1] , [3, 0] , [0, 1] ],
[ [4, 0] , [0,-1] , [1, 0] ]]
Transposição (vire na diagonal NW-SE):
[[ [2, 0] , [2,-1] , [4, 0] ],
[ [2, 1] , [3, 0] , [0,-1] ],
[ [4, 0] , [0, 1] , [1, 0] ]]
Negue os segundos elementos das listas:
[[ [2, 0] , [2, 1] , [4, 0] ],
[ [2,-1] , [3, 0] , [0, 1] ],
[ [4, 0] , [0,-1] , [1, 0] ]]
Como isso é idêntico à entrada, a matriz é hermitiana.
Casos de teste
Hermitian
[[[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]]]
Não-eremita
[[[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]]]
Respostas:
R,
714847 bytesPega uma matriz 3D de números reais, cria uma matriz 2D de números imaginários, transpõe, conjuga e compara.
Agradecemos a @ Giuseppe por reduzir a contagem de bytes em 23 bytes surpreendentes e a @Vlo no final 1!
Experimente online!
Exemplo:
fonte
B=A[,,1]+A[,,2]*1i
deve salvar alguns bytes.isSymmetric
existe e funciona para matrizes complexas hermitianas mas o1x1
caso é complicado uma vez que[
atributos gotas e isso resulta em umacomplex
vez de ummatrix
function(A)all(Conj(t(B<-A[,,1]+A[,,2]*1i))==B)
A atribuição em linha salva 1.Oitava ,
393431 bytesExperimente online!
Economizei 3 bytes graças a Luis Mendo, que me informou sobre os esclarecimentos no texto do desafio.
Explicação:
Em MATLAB e Octave,
'
é a transposição do complexo conjugado, não a transposição "regular".Criamos uma variável variável
y
que é a primeira camada da matriz 3D mais a segunda camada multiplicada pela unidade complexaj
, ou seja, uma matriz complexa em que o termo real é a primeira "camada" e o imaginário é a segunda "camada". Em seguida, verificamos se ele se iguala ao complexo conjugado transposto.Isso produzirá uma matriz contendo apenas
1
se for verdadeira e uma matriz contendo pelo menos uma0
se for falsa. Estes são considerados verdadeiros e falsos na oitava (prova) .fonte
Python 2 , 50 bytes
Experimente online!
fonte
APL (Dyalog Unicode) ,
221597 bytesExperimente online!
Função de prefixo tácito.
Agradeço a Adám por 7 bytes no DFN, e a Adám e ErikTheOutgolfer por
suportar minha estupidez,ajudando-me a encontrar a versão tácita.Obrigado a ngn por 2 bytes na versão tácita.
Quão?
fonte
Wolfram Language (Mathematica) ,
453433262118 bytesExperimente online!
fonte
0xf3c7
é o operador de transposição, mas o que é0xf3c8
?0xf3c9
( Wolfram Documentation ).Java 8,
137136134 134126bytesRetorna
1
se Hermitian,0
caso contrário.Explicação:
Experimente online.
fonte
J , 14 bytes
Experimente online!
Explicação
fonte
-:0 2|:(,-)/"1
Haskell , 50 bytes
-7 bytes graças a H.PWiz.
Experimente online!
fonte
Gelatina ,
65 bytesUm link monádico retornando
1
para uma entrada Hermitian e0
outros.Experimente online!
Quão?
fonte
Ø+
.05AB1E , 9 bytes
Experimente online!
Explicação
fonte
Ruby , 46 bytes
Experimente online!
Porta da minha resposta Python
fonte
Perl 5 , -a0 48 bytes
Contagem antiga: 50 bytes (
+2
paraa0
). Nada mal para uma linguagem que não tem transposição embutida (não tenho ciúmes, nem senhor)Dê a matriz de entrada no STDIN
,
entre a parte real e a imaginária, por exemplo:Imprimirá
1
para eremita, nada de diferenteExperimente online!
fonte
Casca , 7 bytes
Experimente online!
Quão?
Observe que
†
deve funcionar em vez demm
, mas há um bug irritante que me impede de usá-lo :(fonte
JavaScript (ES6), 53 bytes
Guardado 2 bytes graças a @Neil
Retorna
false
para Hermitian outrue
para não-Hermitian.Experimente online!
fonte
f=([c,...s],p='')=>c?p+c+f(s,p+'🍹'):p
.C (gcc) ,
107103100 bytesA[0]
a*A
duas vezes.Experimente online!
fonte
Na verdade , 13 bytes
Experimente online!
Como funciona?
Esse envio realmente usa números complexos. Se a entrada como uma matriz de entradas complexas fosse permitida, seriam 8 bytes .
fonte
Pitão, 9 bytes
Explicação:
Conjunto de teste .
fonte
qCmm*V_B1
.qCmm.e_Fbk
... aparentemente, esqueci de editar a contagem de bytes no envio final. @ Mr.Xcoder Corrigi-o independentemente, obrigado pela captura!C,
111110108 bytesObrigado a Jonathan Frech por salvar um byte e a @ceilingcat por salvar dois bytes!
Experimente online!
C (gcc) ,
106104 bytesExperimente online!
fonte
r|=...|...
funciona tão bem quantor+=...||...
.Na verdade , 13 bytes
Experimente online!
Explicação:
fonte