Entrada:
- Un entero
n
- Dos matrices cuadradas del mismo tamaño (siendo su ancho / alto múltiplo de
n
)
Salida:
Uno de los dos valores distintos de su elección, uno para resultados verdaderos y otro para resultados falsey (por lo que sí, en 1/0
lugar de true/false
resultados válidos para lenguajes como Java, aunque no se consideren valores oficiales de verdad / falsey ).
La salida de verdadero / falso indica si podemos reorganizar bloques de tamaño n by n
en una matriz para que sea igual a la otra matriz.
Ejemplo:
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
Salida: truthy
¿Por qué?
Si dividimos las matrices en bloques de 2 by 2
, podemos ver que todos los bloques en una matriz también se pueden encontrar en la otra 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
Reglas de desafío:
- Puede suponer que las matrices solo contendrán dígitos no negativos (rango
[0,9]
) - Puede suponer que el ancho / alto de las matrices son iguales y un múltiplo de
n
- Puede suponer
n
que estará en el rango[1, 50]
, y el ancho / alto de las matrices están en el rango[1,100]
. - Los bloques individuales de
n by n
solo se pueden usar una vez para determinar si las matrices son permutaciones entre sí cuando se dividen en bloques den by n
. - Puede haber múltiples
n by n
bloques que sean iguales. - Los
n by n
bloques permanecerán en la misma orientación cuando se verifique si las dos matrices son permutación entre sí cuando se dividen en bloques den by n
.
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolfing. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Las reglas estándar se aplican a su respuesta con las reglas de E / S predeterminadas , por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código (es decir, TIO ).
- Además, se recomienda agregar una explicación para su respuesta.
Casos de prueba:
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 el ejemplo ? ¿Entendí conYou can assume the matrices will only contain non-negative digits (range [0,9])
que los valores de la matriz están solo entre 0 y 9?[0,9]
más adelante en el Sandbox. He cambiado el caso de prueba a[[0]],[[8]]
.Respuestas:
Jalea ,
109 bytesPruébalo en línea! (o con preprocesamiento para copiar y pegar más fácilmente desde los casos de prueba)
Un enlace diádico que acepta una lista de las dos matrices (como listas de listas) a la izquierda y el número entero a la derecha que da
1
como resultado0
verdadero o falso, respectivamente.¿Cómo?
fuente
APL (Dyalog Extended) ,
191817 bytes-2 gracias a ngn.
Función de infijo tácito anónimo. Toma
n
como argumento izquierdo y la lista de dos matrices como argumento derecho. Requiere indexación cero (⎕IO←0
). Por cierto, esta función funciona en matrices de cualquier cantidad de dimensiones.Pruébalo en línea!
≡.{
...}
resultados idénticos de la siguiente función de aplicarse a cada matriz⍵
conn
como⍺
?≢⍵
tamaño de matriz⍳
índices 0 ... tamaño – 1⍺|
resto de división cuando se divide porn
⊂
adjuntar para usar en todas las dimensiones⍵⊂⍨
use eso para dividir * la matriz en una matriz de submatrices* comienza una nueva partición cuando el elemento correspondiente es menor que el anterior; elimina elementos marcados por cero
,
desentrañar la matriz en una lista de submatrices∧
orden ascendentefuente
(≢⍵)⍴⍺↑1
->0=⍺|⍳≢⍵
(con⎕io←0
)≡/{}¨
->≡.{}
Python 2 ,
108103bytesPruébalo en línea!
fuente
Perl 6 ,
94 6863 bytesPruébalo en línea!
Bloque de código anónimo que toma la entrada como
size, [matrix1, matrix2]
y devuelve un valor booleanoTrue/False
. Puede haber una forma más eficiente de dividir la matriz en trozos querotor
.Explicación:
fuente
05AB1E , 14 bytes
Pruébalo en línea!
fuente
Java (JDK) , 221 bytes
Pruébalo en línea!
Explicación
La idea es elegir cada celda pequeña como una cadena, que es comparable, y luego ordenar esas cadenas y compararlas en orden.
Créditos
fuente
for(j=0;j<l;){c[z=i/n+j/n*x]+=a[i][j];d[z]+=b[i][j++];}
? .. Puede quitar los soportes colocando todo dentro del bucle. Además, eli=0
en el bucle se puede eliminar, porque sui
ya es 0 en la declaración.var d=new String[x*x];
puede servar d=c.clone();
en su lugar. 234 bytes[
y]
con{
y}
y agregar un encabezadonew int[][]
, y hubiera sido suficiente. ;)i=0
era un remanente cuando me llena los arrays por mí mismo en lugar de utilizarArrays.fill
. Gracias :-) Y por loclone
que pensé en usarlo, pero todavía pensé que habría devuelto unObject
y no el tipo real. Debo tener varias versiones tarde en ese punto;)Japt , 18 bytes
Pruébalo en línea!
Explicación:
El paso "Convertirlo en una cadena" es necesario porque Japt no compara las matrices por valor y la solución incorporada que no funciona para las matrices multidimensionales .
fuente
A.e()
trabajar para arreglos multidimensionales; Siempre quise volver a ello. Mientras tantoÕmòV
->yòV
le ahorrará un byte.TSQL, 164 bytes
Al completar una variable de tabla para tener entrada, esta creación de entrada e inserción de datos no se ha incluido en el recuento de bytes. Solo la consulta real para extraer los datos.
Golfizado (sin incluir la tabla de prueba; se puede encontrar en la versión sin golf):
Sin golf:
Pruébalo
fuente
JavaScript (ES6), 88 bytes
Pruébalo en línea!
¿Cómo?
Este codigo es:
Está aprovechando los límites descritos en el desafío:
Una matriz consta de dígitos individuales, por lo que podemos concatenar todas las celdas de una submatriz sin ningún separador y aún así obtener una representación única de la misma (por ejemplo,
[[1,2],[3,4]]
se puede almacenar como"1234"
).o como código JS:
y / n << 7 | x << n
Comentado
fuente
Carbón ,
5449 bytesPruébalo en línea! El enlace es a la versión detallada del código. Toma datos como una matriz de matrices bidimensionales de igual tamaño. Salidas 1 en caso de éxito, nada en caso de fracaso. Explicación:
Asume el éxito.
Pase sobre las matrices.
Divida la matriz en
n
trozos de fila de tamaño.Pase sobre cada fragmento de columna.
Extraiga el fragmento de columna para cada fila del fragmento de fila y guarde la submatriz resultante en una lista.
Si bien la lista no está vacía, elimine el último fragmento de la lista, que en circunstancias normales proviene de la segunda matriz.
Cuente el número de ocurrencias de ese fragmento en la primera mitad de la lista, que en circunstancias normales contiene los fragmentos restantes de la primera matriz.
Si no es cero, elimine la primera aparición de ese fragmento de la lista.
Si es cero, borre la salida, haciéndola falsa.
fuente
J , 55 bytes
Pruébalo en línea!
Una solución horrible, solo lo hice funcionar: no tengo poder para jugar golf ...
fuente
Haskell,
7473 bytesNota: TIO no se ha instalado
Data.Lists
, así que estoy usandoData.List
en su lugar y agrego la función que faltachunksOf
: ¡ Pruébelo en línea!fuente
C # (compilador interactivo de Visual C #) , 186 bytes
Pruébalo en línea!
-1 gracias a @KevinCruijssen!
Menos código de golf:
fuente
j++
se puede quitar y colocar+=c[i][j++]+" ";
para guardar un byte.PHP ,
186163162 bytesPruébalo en línea!
Como todos los buenos desafíos, comencé a pensar que esto era bastante fácil y me arrojó algunas curvas. ¡Bien hecho @Kevin Cruijssen!
Divide la matriz en cadenas que contienen los valores para cada bloque. Las matrices se ordenan y comparan para igualdad.
Sin golf:
Salida
fuente
Rojas ,
148147142 bytesPruébalo en línea!
fuente