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]*1i
debería guardar algunos bytes.isSymmetric
existe y funciona para matrices complejas hermitianos pero el1x1
caso es complicado ya que[
los atributos gotas y el resultado es uncomplex
lugar de unamatrix
function(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
y
lí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
1
si es verdadera, y una matriz que contiene al menos una0
si 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
0xf3c7
es el operador de transposición, pero ¿qué es0xf3c8
?0xf3c9
( documentación de Wolfram ).Java 8,
137136134126119 bytesDevuelve
1
si Hermitian, de lo0
contrario.Explicación:
Pruébalo en línea.
fuente
J , 14 bytes
Pruébalo en línea!
Explicación
fuente
-:0 2|:(,-)/"1
Haskell , 50 bytes
-7 bytes gracias a H.PWiz.
Pruébalo en línea!
fuente
Jalea ,
65 bytesUn enlace monádico que regresa
1
para una entrada hermitiana y de lo0
contrario.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 (
+2
paraa0
). 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á
1
para 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
false
para Hermitian otrue
para 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*A
dos 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