En el triángulo de Pascal cada número es la suma de los dos números directamente encima de él, tratando los espacios vacíos como cero:
Al girar el triángulo, podemos cortar matrices cuadradas de diferentes tamaños y rotaciones que llamaré las matrices de Pascal . Tenga en cuenta que esas matrices siempre deben contener el superior . Aquí hay unos ejemplos:
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
6 3 1
3 2 1
1 1 1
1 5 15 35 70
1 4 10 20 35
1 3 6 10 15
1 2 3 4 5
1 1 1 1 1
1
1 1
2 1
La tarea
Dada una matriz cuadrada que contiene números positivos en cualquier formato razonable, decida si es una matriz de Pascal .
Decidir significa devolver valores verdaderos o falsos dependiendo de si la entrada es una matriz de Pascal , o fijar dos valores constantes y devolver uno para las entradas verdaderas y el otro para las entradas falsas.
Este es el código de golf , así que trate de usar la menor cantidad de bytes posible en el idioma que elija. El código más corto en cada idioma gana, por lo tanto no aceptaré una respuesta.
Casos de prueba
Cierto
[[1, 1, 1, 1], [1, 2, 3, 4], [1, 3, 6, 10], [1, 4, 10, 20]]
[[6, 3, 1], [3, 2, 1], [1, 1, 1]]
[[1, 5, 15, 35, 70], [1, 4, 10, 20, 35], [1, 3, 6, 10, 15], [1, 2, 3, 4, 5], [1, 1, 1, 1, 1]]
[[1]]
[[1, 1], [2, 1]]
Falso
[[2]]
[[1, 2], [2, 1]]
[[1, 1], [3, 1]]
[[1, 1, 1, 1], [1, 2, 3, 4], [1, 4, 6, 10], [1, 4, 10, 20]]
[[6, 3, 1], [1, 1, 1], [3, 2, 1]]
[[2, 2, 2, 2], [2, 4, 6, 8], [2, 6, 12, 20], [2, 8, 20, 40]]
[[40, 20, 8, 2], [20, 12, 6, 2], [8, 6, 4, 2], [2, 2, 2, 2]]
[[1, 5, 15, 34, 70], [1, 4, 10, 20, 34], [1, 3, 6, 10, 15], [1, 2, 3, 4, 5], [1, 1, 1, 1, 1]]
fuente
[[40, 20, 8, 2], [20, 12, 6, 2], [8, 6, 4, 2], [2, 2, 2, 2]]
. Mi respuesta inicial fue incorrectamente veraz para esta, pero correcta para todos los casos de prueba actuales.Respuestas:
Brachylog ,
282423 bytesEsto se siente bastante largo pero aquí está de todos modos
{|↔}\↰₁{k{a₀ᶠ+ᵐ}ᵐ⊆?h=₁}
Explicación
Pruébalo en línea!
fuente
JavaScript (ES6), 114 bytes
Pruébalo en línea!
fuente
MATL , 17 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Salidas
1
para matrices de Pascal, de lo0
contrario.Explicación
fuente
R , 104 bytes
Pruébalo en línea!
Asqueroso...
Crea matriz de un Pascal canónica
Z
con dimensiones iguales a la dem
, a continuación, pruebas si la matriz de entradam
esidentical
aany
de las rotaciones deZ
.fuente
Carbón , 41 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Si el máximo de su primera fila es mayor que 1,
luego voltee la matriz de entrada.
Si el máximo de su primera columna es mayor que 1,
luego refleje la matriz de entrada.
Recorra los elementos de la matriz de entrada e imprima el resultado mínimo (es decir, el lógico Y de todos los resultados),
comparando cada valor a 1 si está en la primera fila, de lo contrario, la suma de la fila de arriba hasta la celda de arriba incluida.
fuente
Python 2 , 129 bytes
Pruébalo en línea!
Devuelve
True
siM
es una matriz de Pascal, de lo contrario0
.fuente
05AB1E , 29 bytes
Pruébalo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Kotlin , 269 bytes
Pruébalo en línea!
fuente
Julia 0.7 , 78 bytes
Pruébalo en línea!
fuente
Java (JDK) , 234 bytes
Pruébalo en línea!
Créditos
fuente
i==s||j==S
ai==s|j==S
.m->{int l=m.length,i=0,j;for(;i<l;i++)for(j=0;j<l;j++)p=(i<1|j<1?m[i][j]<2:m[i][j]==m[i-1][j]+m[i][j-1])?p:0;return p>0;}
(122 bytes)Jalea , 22 bytes
Pruébalo en línea!
Explicación
Enlace auxiliar, comprueba si esta rotación de matriz es válida
Enlace principal
fuente