Tenga en cuenta que este desafío no requiere manejo o comprensión de números complejos.
Dada una matriz cuadrada no vacía donde cada elemento es una lista entera de dos elementos (Re, Im), determine (dando cualquier valor verdadero / falso o cualquiera de los dos valores consistentes) si esto representa una matriz hermitiana.
Tenga en cuenta que la entrada es una matriz 3D de enteros; no una matriz 2D de números complejos. Si su idioma no puede tomar una matriz 3D directamente, puede tomar una lista plana (y la forma n × n o n × n × 2 si eso ayuda).
Una matriz es hermitiana si es igual a su propia transposición conjugada . En otras palabras, si lo voltea sobre su diagonal superior izquierda a inferior derecha y niega el segundo elemento de todas las listas de hojas de dos elementos, es idéntico a la matriz de entrada. Tenga en cuenta que el orden de voltear y negar es irrelevante, por lo que puede negar primero y voltear después.
Ejemplo de recorrido
Este ejemplo usa JSON con espacios en blanco superfluos para facilitar la lectura:
[[ [2, 0] , [2, 1] , [4, 0] ],
[ [2,-1] , [3, 0] , [0, 1] ],
[ [4, 0] , [0,-1] , [1, 0] ]]
Transposición (voltear a través de NW-SE diagonal):
[[ [2, 0] , [2,-1] , [4, 0] ],
[ [2, 1] , [3, 0] , [0,-1] ],
[ [4, 0] , [0, 1] , [1, 0] ]]
Negar los segundos elementos de las listas de hojas:
[[ [2, 0] , [2, 1] , [4, 0] ],
[ [2,-1] , [3, 0] , [0, 1] ],
[ [4, 0] , [0,-1] , [1, 0] ]]
Como esto es idéntico a la entrada, la matriz es hermitiana.
Casos de prueba
Ermitaño
[[[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]]]
No ermitaño
[[[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]]]

Respuestas:
R,
714847 bytesToma una matriz 3D de números reales, crea una matriz 2D de números imaginarios, transpone, conjuga y compara.
¡Gracias a @Giuseppe por reducir el recuento de bytes en la asombrosa cantidad de 23 bytes, y a @Vlo por el último 1!
Pruébalo en línea!
Ejemplo:
fuente
B=A[,,1]+A[,,2]*1idebería guardar algunos bytes.isSymmetricexiste y funciona para matrices complejas hermitianos pero el1x1caso es complicado ya que[los atributos gotas y el resultado es uncomplexlugar de unamatrixfunction(A)all(Conj(t(B<-A[,,1]+A[,,2]*1i))==B)La asignación en línea ahorra 1.Octava ,
393431 bytesPruébalo en línea!
Ahorré 3 bytes gracias a Luis Mendo, quien me informó sobre las aclaraciones en el texto del desafío.
Explicación:
En MATLAB y Octave,
'es la transposición del complejo conjugado, no la transposición "regular".Creamos una variable
ylínea que es la primera capa de la matriz 3D más la segunda capa multiplicada con la unidad complejaj, es decir, una matriz compleja donde el término real es la primera "capa", y el imaginario es la segunda "capa". Luego verificamos si es igual al conjugado complejo transpuesto.Esto generará una matriz que contiene solo
1si es verdadera, y una matriz que contiene al menos una0si es falsa. Estos se consideran verdaderos y falsos en Octave (Proof) .fuente
Python 2 , 50 bytes
Pruébalo en línea!
fuente
APL (Dyalog Unicode) ,
221597 bytesPruébalo en línea!
Función de prefijo tácito.
Gracias a Adám por 7 bytes en el Dfn, y a Adám y ErikTheOutgolfer por
aguantar mi estupidez.ayudándome a encontrar la versión tácita.Gracias a ngn por 2 bytes en la versión tácita.
¿Cómo?
fuente
Wolfram Language (Mathematica) ,
453433262118 bytesPruébalo en línea!
fuente
0xf3c7es el operador de transposición, pero ¿qué es0xf3c8?0xf3c9( documentación de Wolfram ).Java 8,
137136134126119 bytesDevuelve
1si Hermitian, de lo0contrario.Explicación:
Pruébalo en línea.
fuente
J , 14 bytes
Pruébalo en línea!
Explicación
fuente
-:0 2|:(,-)/"1Haskell , 50 bytes
-7 bytes gracias a H.PWiz.
Pruébalo en línea!
fuente
Jalea ,
65 bytesUn enlace monádico que regresa
1para una entrada hermitiana y de lo0contrario.Pruébalo en línea!
¿Cómo?
fuente
Ø+.05AB1E , 9 bytes
Pruébalo en línea!
Explicación
fuente
Ruby , 46 bytes
Pruébalo en línea!
Puerto de mi respuesta de Python
fuente
Perl 5 , -a0 48 bytes
Conteo anterior: 50 bytes (
+2paraa0). No está mal para un idioma que no tiene transposición incorporada (no estoy celoso en absoluto, no señor)Dé la matriz de entrada en STDIN
,entre la parte real e imaginaria, por ejemplo:Se imprimirá
1para ermitaño, nada de lo contrarioPruébalo en línea!
fuente
Casco , 7 bytes
Pruébalo en línea!
¿Cómo?
Tenga en cuenta que
†debería funcionar en lugar demm, pero hay un error molesto que me impide usarlo :(fuente
JavaScript (ES6), 53 bytes
Guardado 2 bytes gracias a @Neil
Devoluciones
falsepara Hermitian otruepara no Hermitian.Pruébalo en línea!
fuente
f=([c,...s],p='')=>c?p+c+f(s,p+'🍹'):p.C (gcc) ,
107103100 bytesA[0]a*Ados veces.Pruébalo en línea!
fuente
Realmente , 13 bytes
Pruébalo en línea!
¿Cómo funciona?
Esta presentación en realidad hace uso de números complejos. Si se permitiera la entrada como una matriz de entradas complejas, sería de 8 bytes .
fuente
Pyth, 9 bytes
Explicación:
Banco de pruebas .
fuente
qCmm*V_B1.qCmm.e_Fbk... aparentemente olvidé editar el conteo de bytes en el envío final. @ Mr.Xcoder Lo arreglé independientemente, gracias por la capturaC,
111110108 bytes¡Gracias a @Jonathan Frech por guardar un byte y gracias a @ceilingcat por guardar dos bytes!
Pruébalo en línea!
C (gcc) ,
106104bytesPruébalo en línea!
fuente
r|=...|...funciona tan bien comor+=...||....En realidad , 13 bytes
Pruébalo en línea!
Explicación:
fuente