Se le dará una matriz bidimensional y un número y se le pedirá que encuentre si la matriz dada es Toeplitz o no.
Formato de entrada
Se le dará una función que tomará la two-dimensional
matriz como argumento.
Formato de salida:
Regrese 1
de la función si la matriz es Toeplitz , de lo contrario regrese -1
.
Restricciones:
3 < n,m < 10,000,000
donde n
es el número de filas, mientras m
que será el número de columnas.
Caso de prueba de muestra:
Sample Input :
4
5
6 7 8 9 2
4 6 7 8 9
1 4 6 7 8
0 1 4 6 7
Sample Output :
1
Puntuación
Este es el código de golf , por lo que gana la respuesta más corta en bytes.
code-golf
grid
decision-problem
matrix
Martin Ender
fuente
fuente
Respuestas:
Mathematica, 42 bytes
Mathematica no tiene una función integrada para verificar si algo es una matriz de Toeplitz, pero sí tiene una función integrada para generar una. Entonces generamos uno desde la primera columna (
#&@@@#
) y la primera fila (#&@@#
) de la entrada y verificamos si es igual a la entrada. Para convertir elTrue
/False
resultado a1
/-1
usamosBoole
(para dar1
o0
) y luego simplemente transformamos el resultado con2x-1
.fuente
Octava , 30 bytes
Supongo que no tengo que manejar 1,000,000x1,000,000 matrices como se dice en el desafío. Esto funciona para matrices que no exceden la memoria disponible (menos de 1 TB en mi caso).
Pruébalo en línea!
Esto toma una matriz
x
como entrada y crea una matriz Toeplitz basada en los valores de la primera columna y la primera fila. Luego verificará la igualdad de cada elemento de las matrices. SI todos los elementos son iguales, entonces la entrada es una matriz de Toeplitz.La salida será una matriz de las mismas dimensiones que la entrada. Si hay ceros en la salida, entonces eso se considera falso como octava.
Editar:
Acabo de notar el formato de salida estricto:
Esto funciona para 41 bytes. Puede ser posible jugar golf un byte o dos desde esta versión, pero espero que las reglas de salida se relajen un poco.
fuente
Jalea , 5 bytes
Pruébalo en línea!
Siguiendo la definición aquí .
fuente
05AB1E , 11 bytes
Pruébalo en línea!
Explicación
fuente
Haskell , 43 bytes
Pruébalo en línea!
fuente
False
estuviera permitido, podría haberlo superado en un byte.Mathematica, 94 bytes
entrada
otro basado en el algoritmo de Stewie Griffin
Mathematica, 44 bytes
fuente
s
? ¿No puedes usar#
en su lugar?Java 7,
239233220113 bytes-107 bytes después de usar un algoritmo más eficiente gracias a @Neil .
Explicación:
Pruébalo aquí.
fuente
r
=n
yc
=m
si lo compara con el desafío).-->
operador!Haskell , 51 bytes
t
toma una lista de listas de enteros y devuelve un entero.Pruébalo en línea!
Esto podría haber sido 39 o 38 bytes con salida verdadero / falso.
La idea de usar
init
se inspiró en la respuesta 05AB1E de Emigna, que usa un método muy similar; antes de eso usé una compresión anidada.Cómo funciona
zipWith((.init).(/=).tail)=<<tail
es una forma libre de puntos\m->zipWith(\x y->tail x/=init y)(tail m)m
.m
, comprobando si el primero con el primer elemento eliminado es diferente del segundo con el segundo elemento eliminado.or
combina entonces los controles para todos los pares de filas.1-sum[2|...]
Convierte el formato de salida.fuente
JavaScript (ES6),
6554 bytesfuente
a=>a.some(b=>b.some((v,i)=>d[i]-(d[i]=v),d=[,...d]),d=[])?-1:1
(62 bytes)Ruby , 54 bytes
Exactamente como se especifica, se puede jugar más si se acepta entrada / salida flexible.
Explicación:
Itere en la matriz y compare cada línea con la línea de arriba, desplazada una a la derecha. Si son diferentes, use una matriz vacía para la próxima iteración. Al final, devuelve -1 si la matriz final está vacía, o 1 si tiene al menos 2 elementos (dado que la matriz más pequeña posible es 3x3, esto es cierto si todas las comparaciones devuelven verdadero)
Pruébalo en línea!
fuente
<=>
para calcular el resultado!|(*x,_),y|
tal si no necesitas cortarx
?PHP, 70 bytes
fuente
Python, 108
No es eficiente en absoluto, ya que toca cada elemento cada
n+m
vez que filtra las diagonales. Luego verifica si hay más de un elemento único por diagonal.fuente
Axioma, 121 bytes
m tiene que ser una matriz de algún elemento que permita ~ =; deshacerse de él
fuente
Retina , 148 bytes
Pruébalo en línea!
Una matriz de entrada N × M
se convierte primero en una matriz N × (N + M-1) alineando las diagonales de esta manera:
y luego la primera columna se verifica repetidamente para que contenga un único número único, y se elimina si es así. La matriz es Toeplitz si la salida está en blanco.
fuente
MATL , 11 bytes
Pruébalo en línea!
El sencillo método de "construir una matriz de Toeplitz y verificarlo", que utilizan las pocas respuestas principales, de alguna manera me pareció aburrido (y de todos modos parece que sería 1 byte más largo). Así que elegí el método "comprobar que cada diagonal solo contiene un valor único".
T&Xd
- Extraiga las diagonales de la entrada y cree una nueva matriz con ellas como columnas (relleno con ceros según sea necesario)"
- iterar a través de las columnas de ese@Xz
- empuje la variable de iteración (la columna actual) y elimine (rellenando) ceros de ella&=
- comprobación de igualdad de difusión : esto crea una matriz con todos los 1 (verdad) si todos los valores restantes son iguales entre sí; de lo contrario, la matriz contiene algunos 0, lo cual es falsov
- concatenar valores de resultados juntos, para crear un vector de resultado final que sea verdadero (todos 1s) o falsey (algunos 0s)fuente
R , 48 bytes
Pruébalo en línea!
fuente
Clojure, 94 bytes
fuente