No triângulo de Pascal, cada número é a soma dos dois números diretamente acima dele, tratando pontos vazios como zero:
Girando o triângulo, podemos recortar matrizes quadradas de tamanhos e rotações variadas, que chamarei de matrizes de Pascal . Observe que essas matrizes sempre precisam conter o primeiro . aqui estão alguns exemplos:
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
A tarefa
Dada uma matriz quadrada que contém números positivos em qualquer formato razoável, decida se é uma matriz de Pascal .
Decidir significa retornar valores verdadeiros ou falsos, dependendo de a entrada ser uma matriz de Pascal , ou fixar dois valores constantes e retornar um para as entradas verdadeiras e o outro para entradas falsas.
Isso é código-golfe , então tente usar o mínimo de bytes possível no idioma de sua escolha. O código mais curto de cada idioma vence, portanto, não aceitarei uma resposta.
Casos de teste
Verdade
[[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]]
fonte
[[40, 20, 8, 2], [20, 12, 6, 2], [8, 6, 4, 2], [2, 2, 2, 2]]
. Minha resposta inicial foi incorretamente verdadeira para esta, mas correta para todos os casos de teste atuais.Respostas:
Braquilog ,
282423 bytesParece bastante longo, mas aqui está mesmo assim
{|↔}\↰₁{k{a₀ᶠ+ᵐ}ᵐ⊆?h=₁}
Explicação
Experimente online!
fonte
JavaScript (ES6), 114 bytes
Experimente online!
fonte
MATL , 17 bytes
Experimente online! Ou verifique todos os casos de teste .
Saídas
1
para matrizes Pascal,0
caso contrário.Explicação
fonte
R , 104 bytes
Experimente online!
Desagradável...
Cria uma matriz canónica de Pascal
Z
com dimensões iguais ao dom
, depois testa se a matriz de entradam
éidentical
aany
das rotações deZ
.fonte
Carvão , 41 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Se o máximo da primeira linha for maior que 1,
depois vire a matriz de entrada.
Se o máximo de sua primeira coluna for maior que 1,
espelhe a matriz de entrada.
Passe os elementos da matriz de entrada e imprima o resultado mínimo (ou seja, o lógico E de todos os resultados),
comparando cada valor a 1 se estiver na primeira linha, caso contrário, a soma da linha acima até e incluindo a célula acima.
fonte
Python 2 , 129 bytes
Experimente online!
Retorna
True
seM
for uma matriz de Pascal, caso contrário0
.fonte
05AB1E , 29 bytes
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Kotlin , 269 bytes
Experimente online!
fonte
Julia 0,7 , 78 bytes
Experimente online!
fonte
Java (JDK) , 234 bytes
Experimente online!
Créditos
fonte
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)Gelatina , 22 bytes
Experimente online!
Explicação
Link auxiliar, verifica se essa rotação da matriz é válida
Link principal
fonte