Você receberá uma matriz bidimensional e um número e será solicitado que descubra se a matriz fornecida é Toeplitz ou não.
Formato de entrada:
Você receberá uma função que terá two-dimensional
matriz como argumento.
Formato de saída:
Retorne 1
da função se a matriz for Toeplitz , caso contrário, retorne -1
.
Restrições:
3 < n,m < 10,000,000
onde n
é o número de linhas enquanto m
será o número de colunas.
Exemplo de caso de teste:
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
Pontuação
Isso é código-golfe , então a resposta mais curta em bytes vence.
code-golf
grid
decision-problem
matrix
Martin Ender
fonte
fonte
Respostas:
Mathematica, 42 bytes
O Mathematica não possui um built-in para verificar se algo é uma matriz de Toeplitz, mas possui um built-in para gerar uma. Então, geramos uma da primeira coluna (
#&@@@#
) e da primeira linha (#&@@#
) da entrada e verificamos se é igual à entrada. Para converter oTrue
/False
result em1
/-1
usamosBoole
(para dar1
ou0
) e, em seguida, basta transformar o resultado com2x-1
.fonte
Oitava , 30 bytes
Suponho que não precise lidar com 1.000.000 x 1.000.000 de matrizes, como está escrito no desafio. Isso funciona para matrizes que não excedem a memória disponível (menos de 1 TB no meu caso).
Experimente online!
Isso leva uma matriz
x
como entrada e cria uma matriz Toeplitz com base nos valores na primeira coluna e na primeira linha. Ele verificará cada elemento das matrizes quanto à igualdade. Se todos os elementos forem iguais, a entrada será uma matriz de Toeplitz.A saída será uma matriz das mesmas dimensões que a entrada. Se houver zeros na saída, isso será considerado falso como oitava.
Editar:
Só notei o formato de saída estrito:
Isso funciona para 41 bytes. Pode ser possível obter um byte ou dois dessa versão, mas espero que as regras de saída sejam um pouco mais relaxadas.
fonte
Gelatina , 5 bytes
Experimente online!
Seguindo a definição aqui .
fonte
05AB1E , 11 bytes
Experimente online!
Explicação
fonte
Haskell , 43 bytes
Experimente online!
fonte
False
fosse permitido, eu poderia ter vencido por um byte.Mathematica, 94 bytes
entrada
outro baseado no algoritmo de Stewie Griffin
Mathematica, 44 bytes
fonte
s
? Você não pode simplesmente usar#
?Java 7,
239233220113 bytes-107 bytes após uma dica de uso de um algoritmo mais eficiente, graças ao @Neil .
Explicação:
Experimente aqui.
fonte
r
=n
ec
=m
se você comparar com o desafio).-->
operador!Haskell , 51 bytes
t
pega uma lista de listas de números inteiros e retorna um número inteiro.Experimente online!
Isso poderia ter sido de 39 ou 38 bytes com saída truthy / falsy.
A idéia de usar
init
foi inspirada na resposta 05AB1E de Emigna, que usa um método muito semelhante; antes disso, usei um zip aninhado.Como funciona
zipWith((.init).(/=).tail)=<<tail
é uma forma sem pontos de\m->zipWith(\x y->tail x/=init y)(tail m)m
.m
, verificando se o primeiro com o primeiro elemento removido é diferente do segundo com o segundo elemento removido.or
então combina as verificações para todos os pares de linhas.1-sum[2|...]
converte o formato de saída.fonte
JavaScript (ES6),
6554 bytesfonte
a=>a.some(b=>b.some((v,i)=>d[i]-(d[i]=v),d=[,...d]),d=[])?-1:1
(62 bytes)Ruby , 54 bytes
Exatamente como especificado, pode ser jogado mais se a entrada / saída flexível for aceita.
Explicação:
Itere na matriz e compare cada linha com a linha acima, deslocada uma para a direita. Se forem diferentes, use uma matriz vazia para a próxima iteração. No final, retorne -1 se a matriz final estiver vazia ou 1 se tiver pelo menos 2 elementos (como a menor matriz possível é 3x3, isso é verdade se todas as comparações retornarem verdadeiras)
Experimente online!
fonte
<=>
para calcular o resultado!|(*x,_),y|
tal você não precisar cortarx
?PHP, 70 bytes
fonte
Python, 108
Não é eficiente, pois toca todos os elementos
n+m
durante a filtragem de diagonais. Em seguida, verifica se há mais de um elemento exclusivo por diagonal.fonte
Axioma, 121 bytes
m tem que ser uma matriz de algum elemento que permita ~ =; ungolf it
fonte
Retina , 148 bytes
Experimente online!
Uma matriz de entrada N × M
é primeiro convertido em uma matriz N × (N + M-1) alinhando as diagonais da seguinte maneira:
e a primeira coluna é repetidamente verificada para conter um único número único e removida, se for o caso. A matriz é Toeplitz se a saída estiver em branco.
fonte
MATL , 11 bytes
Experimente online!
O método simples "construa uma matriz de Toeplitz e verifique com ela", que as poucas respostas mais usadas, de alguma forma me pareceu chato (e parece que isso seria 1 byte mais longo de qualquer maneira). Então, eu fui para o método "verificar cada diagonal contém apenas um valor único".
T&Xd
- Extraia as diagonais da entrada e crie uma nova matriz com elas como colunas (preenchendo com zeros, conforme necessário)"
- percorra as colunas desse@Xz
- empurre a variável de iteração (a coluna atual) e remova (preenchimento) zeros dela&=
- verificação de igualdade de transmissão - isso cria uma matriz com todos os 1s (verdade) se todos os valores restantes forem iguais um ao outro, caso contrário, a matriz contém alguns 0s que são falsosv
- concatenar valores de resultados juntos, para criar um vetor de resultado final que seja verdadeiro (todos os 1s) ou falsey (alguns 0s)fonte
R , 48 bytes
Experimente online!
fonte
Clojure, 94 bytes
fonte