Entrada:
- Um inteiro
n
- Duas matrizes quadradas de tamanho igual (com sua largura / altura sendo um múltiplo de
n
)
Saída:
Um dos dois valores distintos de sua própria escolha, um para resultados de verdade e outro para resultados de falsey (então sim, em 1/0
vez de true/false
são saídas válidas para linguagens como Java, mesmo que não sejam considerados valores oficiais de truthy / falsey ).
A saída truthy / falsey indica se podemos reorganizar blocos de tamanho n by n
em uma matriz para torná-lo igual à outra matriz.
Exemplo:
Entrada:
Matrix 1:
1 2 3 4 5 6
7 8 9 0 1 2
3 4 5 6 7 8
9 8 7 6 5 4
3 2 1 0 9 8
1 1 1 1 1 1
Matrix 2:
3 2 9 8 7 8
1 1 1 1 5 4
3 4 5 6 1 0
9 0 7 6 1 1
5 6 1 2 3 4
1 2 7 8 9 8
Integer n:
2
Saída: truthy
Por quê?
Se dividirmos as matrizes em blocos de 2 by 2
, podemos ver que todos os blocos em uma matriz também podem ser encontrados na outra matriz:
Matrix 1:
1 2 | 3 4 | 5 6
7 8 | 9 0 | 1 2
---------------
3 4 | 5 6 | 7 8
9 8 | 7 6 | 5 4
---------------
3 2 | 1 0 | 9 8
1 1 | 1 1 | 1 1
Matrix 2:
3 2 | 9 8 | 7 8
1 1 | 1 1 | 5 4
---------------
3 4 | 5 6 | 1 0
9 0 | 7 6 | 1 1
---------------
5 6 | 1 2 | 3 4
1 2 | 7 8 | 9 8
Regras do desafio:
- Você pode assumir que as matrizes conterão apenas dígitos não negativos (intervalo
[0,9]
) - Você pode assumir que a largura / altura das matrizes são iguais e um múltiplo de
n
- Você pode assumir
n
que estará no intervalo[1, 50]
, e a largura / altura das matrizes estão no intervalo[1,100]
. - Os blocos individuais de
n by n
podem ser usados apenas uma vez para determinar se as matrizes são permutações uma da outra quando divididas em blocos den by n
. - Pode haver vários
n by n
blocos iguais. - Os
n by n
blocos permanecerão na mesma orientação ao verificar se as duas matrizes são permutadas uma da outra quando divididas em blocos den by n
.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta com as regras de E / S padrão , para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código (ou seja, TIO ).
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 5 6 3 2 9 8 7 8 2
7 8 9 0 1 2 1 1 1 1 5 4
3 4 5 6 7 8 3 4 5 6 1 0
9 8 7 6 5 4 9 0 7 6 1 1
3 2 1 0 9 8 5 6 1 2 3 4
1 1 1 1 1 1 1 2 7 8 9 8
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 5 6 3 2 9 8 7 8 1
7 8 9 0 1 2 1 1 1 1 5 4
3 4 5 6 7 8 3 4 5 6 1 0
9 8 7 6 5 4 9 0 7 6 1 1
3 2 1 0 9 8 5 6 1 2 3 4
1 1 1 1 1 1 1 2 7 8 9 8
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 5 6 3 2 9 8 7 8 3
7 8 9 0 1 2 1 1 1 1 5 4
3 4 5 6 7 8 3 4 5 6 1 0
9 8 7 6 5 4 9 0 7 6 1 1
3 2 1 0 9 8 5 6 1 2 3 4
1 1 1 1 1 1 1 2 7 8 9 8
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 1 2 3 4 4
2 3 4 5 2 3 4 5
3 4 5 6 3 4 5 6
4 5 6 7 4 5 6 7
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 3 4 3 4 2
2 3 4 5 4 5 4 5
3 4 5 6 1 2 5 6
4 5 6 7 2 3 6 6
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 2 3 1
3 4 1 1
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
0 8 1
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 1 2 1 2 2
5 6 7 8 5 6 5 6
9 0 0 9 0 9 9 0
4 3 2 1 2 1 4 3
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 1 2 9 5 1 2 2
3 4 3 4 7 7 3 4
8 3 9 5 1 2 8 3
6 1 7 7 3 4 6 1
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 0 2 0 0 3 1 1 1 0 0 3 2
1 1 1 1 1 1 2 0 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5 5 5 5
Output:
falsey
[ [ 0 ] ], [ [ 25 ] ], 1
presente? Eu entendi comYou can assume the matrices will only contain non-negative digits (range [0,9])
isso que os valores da matriz são apenas entre 0 e 9?[0,9]
mais tarde na Sandbox. Eu mudei o caso de teste para[[0]],[[8]]
.Respostas:
Geléia ,
109 bytesExperimente online! (ou com pré-processamento para copiar e colar mais facilmente dos casos de teste)
Um link diádico que aceita uma lista das duas matrizes (como listas de listas) à esquerda e o inteiro à direita que produz
1
ou0
para verdade ou falsidade, respectivamente.Quão?
fonte
APL (Dyalog Extended) ,
191817 bytes-2 graças a ngn.
Função de infixo tácito anônimo. Toma
n
como argumento à esquerda e lista de duas matrizes como argumento à direita. Requer indexação zero (⎕IO←0
). Aliás, essa função funciona em matrizes de qualquer número de dimensões.Experimente online!
≡.{
…}
Resultados idênticos da seguinte função aplicada a cada matriz⍵
comn
as⍺
?≢⍵
tamanho da matriz⍳
índices 0… tamanho – 1⍺|
restante divisão quando dividido porn
⊂
coloque para usar em todas as dimensões⍵⊂⍨
use isso para particionar * a matriz em uma matriz de submatricias* inicia uma nova partição quando o elemento correspondente for menor que o anterior; remove os elementos marcados com zero
,
misturar a matriz em uma lista de submatrizes∧
ordernar ascendentefonte
(≢⍵)⍴⍺↑1
->0=⍺|⍳≢⍵
(with⎕io←0
)≡/{}¨
->≡.{}
Python 2 ,
108103 bytesExperimente online!
fonte
Perl 6 ,
94 6863 bytesExperimente online!
Bloco de código anônimo que recebe entrada como
size, [matrix1, matrix2]
e retorna um booleanoTrue/False
. Pode haver uma maneira mais eficiente de dividir a matriz em pedaços do querotor
.Explicação:
fonte
05AB1E , 14 bytes
Experimente online!
fonte
Java (JDK) , 221 bytes
Experimente online!
Explicação
A idéia é escolher cada célula pequena como uma string, o que é comparável e, em seguida, classificá-las e compará-las em ordem.
Créditos
fonte
for(j=0;j<l;){c[z=i/n+j/n*x]+=a[i][j];d[z]+=b[i][j++];}
? .. Você pode remover os suportes colocando tudo dentro do loop. Além disso, oi=0
no loop pode ser removido, porque vocêi
já é 0 na declaração.var d=new String[x*x];
pode servar d=c.clone();
. 234 bytes[
e]
com{
e}
e adicionar um lídernew int[][]
, e que teria sido suficiente. ;)i=0
era um remanescente quando eu enchia as matrizes por mim ao invés de usarArrays.fill
. Obrigado :-) E peloclone
que pensei em usá-lo, mas ainda pensei que teria retornado umObject
e não o tipo real. Devo estar com várias versões atrasadas nesse ponto;)Japonês , 18 bytes
Experimente online!
Explicação:
A etapa "Transformar em uma string" é necessária porque o Japt não compara matrizes por valor e o built-in para contornar isso não funciona para matrizes multidimensionais .
fonte
A.e()
trabalhar para matrizes multidimensionais; sempre quis voltar a isso. Enquanto issoÕmòV
->yòV
você economizará um byte.TSQL, 164 bytes
Preenchendo uma variável de tabela para ter entrada, essa criação de entrada e inserção de dados não foi incluída na contagem de bytes. Somente a consulta real para extrair os dados.
Golfe (não incluindo a tabela de teste - pode ser encontrado na versão não destruída):
Ungolfed:
Experimente
fonte
JavaScript (ES6), 88 bytes
Experimente online!
Quão?
Este código é:
Ele está aproveitando os limites descritos no desafio:
Uma matriz consiste em um dígito, portanto, podemos concatenar todas as células de uma sub-matriz sem qualquer separador e ainda obter uma representação exclusiva dela (por exemplo,
[[1,2],[3,4]]
pode ser armazenada como"1234"
).ou como código JS:
y / n << 7 | x << n
Comentado
fonte
Carvão ,
5449 bytesExperimente online! Link é a versão detalhada do código. Recebe entrada como uma matriz de matrizes bidimensionais de tamanho igual. Saídas 1 em caso de sucesso, nada em caso de falha. Explicação:
Assuma o sucesso.
Faça um loop sobre as matrizes.
Divida a matriz em
n
pedaços de linha com tamanho.Faça um loop sobre cada parte da coluna.
Extraia o pedaço de coluna para cada linha do pedaço de linha e salve a submatriz resultante em uma lista.
Enquanto a lista não estiver vazia, remova o último pedaço da lista, que em circunstâncias normais vem da segunda matriz.
Conte o número de ocorrências desse pedaço na primeira metade da lista, que em circunstâncias normais contém os pedaços restantes da primeira matriz.
Se diferente de zero, remova a primeira ocorrência desse pedaço da lista.
Se zero, limpe a saída, tornando-a falsa.
fonte
J , 55 bytes
Experimente online!
Uma solução horrível, apenas fez funcionar - não tenho poder para jogar golfe ...
fonte
Haskell,
7473 bytesNota: O TIO não foi instalado
Data.Lists
, por isso estou usandoData.List
uma função que está faltandochunksOf
: Experimente online!fonte
C # (compilador interativo do Visual C #) , 186 bytes
Experimente online!
-1 graças a @KevinCruijssen!
Menos código de golfe:
fonte
j++
pode ser removido e pode ser colocado em+=c[i][j++]+" ";
para salvar um byte.PHP ,
186163162 bytesExperimente online!
Como todos os bons desafios, comecei pensando que isso era bastante fácil e me jogou algumas curvas. Bem feito @Kevin Cruijssen!
Divide a matriz em cadeias contendo os valores para cada bloco. As matrizes são classificadas e comparadas para igualdade.
Ungolfed:
Saída
fonte
Vermelho ,
148147142 bytesExperimente online!
fonte