Reto:
Dada una matriz NxN donde y una de las ocho 'opciones de plegado' distintas, genera una matriz / lista 2D con los valores restados.
Las ocho opciones de plegado son: de izquierda a derecha; De derecha a izquierda; de arriba hacia abajo; abajo hacia arriba; de arriba a abajo a la derecha; de derecha a izquierda de abajo a la izquierda hacia la derecha; de derecha a izquierda.
Ejemplos paso a paso:
Matriz de entrada:
[[ 1, 3, 5, 7],
[ 0, 8, 6, 4],
[ 1, 1, 1, 1], (a'th row in the explanation below)
[ 1,25, 0,75]]
Con la opción de plegado de arriba a abajo mostramos lo siguiente como resultado:
[[ 1,-7,-5,-3],
[ 0,22,-5,68]]
¿Por qué? Doblamos de arriba hacia abajo. Dado que las dimensiones de la matriz son pares, no tenemos una capa intermedia para preservar como es. La 'th fila [1, 1, 1, 1]
será sustraída por la ' th fila (habría sido 'th fila para matrices de dimensiones impares); así se [1-0, 1-8, 1-6, 1-4]
convierte [1, -7, -5, -3]
. La 'th fila [1, 25, 0, 75]
será restada por la ' th fila (habría sido 'th fila para matrices de dimensiones impares); asi que[1-1, 25-3, 0-5, 75-7]
convierte [0, 22, -5, 68]
.
Con la opción de plegado de abajo a derecha en su lugar (con la misma matriz de entrada anterior), mostramos lo siguiente como resultado:
[[-74, 2, 1, 7],
[ 0, 7, 6],
[-24, 1],
[ 1]]
Con las siguientes restas plegables:
[[1-75, 3-1, 5-4, 7],
[ 0-0, 8-1, 6],
[1-25, 1],
[ 1]]
Reglas de desafío:
- Puede usar ocho letras distintas
[A-Za-z]
o números distintos en el rango para las opciones de plegado. Los números o son probablemente las opciones más comunes, pero si desea usar números diferentes dentro del rango para algunos cálculos inteligentes, no dude en hacerlo. Indique qué opciones de plegado ha utilizado en su respuesta. - La matriz de entrada siempre será una matriz cuadrada de NxN, por lo que no tiene que manejar ninguna matriz rectangular de NxM. también siempre será al menos 2, ya que una matriz vacía o 1x1 no se puede plegar.
- La entrada de la matriz siempre contendrá números no negativos en el rango (por lo tanto, los números en la salida estarán en el rango ).
- Con el plegado (anti-) diagonal o el plegado vertical / horizontal de dimensiones impares, la 'capa' central no se modificará.
- I / O es flexible. Puede ser una matriz 2D / lista de enteros; puede devolverse o imprimirse como una cadena delimitada por espacios y líneas nuevas; puede modificar la matriz de entrada y reemplazar los números con los que debería haberse ido
null
o un número fuera del[-999, 999]
rango para indicar que se han ido; etcétera etcétera.
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 código de golf lo desalienten de publicar respuestas con idiomas que no sean de código. 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.
- 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:
Matriz de entrada 1:
Input-matrix (for the following eight test cases):
[[ 1, 3, 5, 7],
[ 0, 8, 6, 4],
[ 1, 1, 1, 1],
[ 1,25, 0,75]]
Input-folding option: left-to-right
Output: [[2,6],[-2,4],[0,0],[-25,74]]
Input-folding option: right-to-left
Output: [[-6,-2],[-4,2],[0,0],[-74,25]]
Input-folding option: top-to-bottom
Output: [[1,-7,-5,-3],[0,22,-5,68]]
Input-folding option: bottom-to-top
Output: [[0,-22,5,-68],[-1,7,5,3]]
Input-folding option: topleft-to-bottomright
Output: [[7],[6,-1],[1,-7,-2],[1,24,0,74]]
Input-folding option: topright-to-bottomleft
Output: [[1],[-3,8],[-4,-5,1],[-6,21,-1,75]]
Input-folding option: bottomleft-to-topright
Output: [[1,3,4,6],[8,5,-21],[1,1],[75]]
Input-folding option: bottomright-to-topleft
Output: [[-74,2,1,7],[0,7,6],[-24,1],[1]]
Matriz de entrada 2:
Input-matrix (for the following eight test cases):
[[17, 4, 3],
[ 8, 1,11],
[11, 9, 7]]
Input-folding option: left-to-right
Output: [[4,-14],[1,3],[9,-4]]
Input-folding option: right-to-left
Output: [[14,4],[-3,1],[4,9]]
Input-folding option: top-to-bottom
Output: [[8,1,11],[-6,5,4]]
Input-folding option: bottom-to-top
Output: [[6,-5,-4],[8,1,11]]
Input-folding option: topleft-to-bottomright
Output: [[3],[1,7],[11,1,-10]]
Input-folding option: topright-to-bottomleft
Output: [[17],[4,1],[8,-2,7]]
Input-folding option: bottomleft-to-topright
Output: [[17,-4,-8],[1,2],[7]]
Input-folding option: bottomright-to-topleft
Output: [[10,-7,3],[-1,1],[11]]
A-Za-z
o cualquier número entero en el rango[-999,999]
, por lo que el orden no importa. Y lo siento, pero debe generar el pliegue correcto en función de la entrada, por lo que no está permitido generar los ocho.Respuestas:
Octava ,
256248244248 bytesPruébalo en línea!
-2 bytes (y un poco de ordenar) gracias a Luis Mendo
+2 bytes debido a la corrección de TB
1-Operaciones indexadas para valores de b de 1-8:
Esto me dio dolor de cabeza, lo jugaré correctamente más tarde
fuente
rows(a)
lugar desize(a,2)
Jalea ,
3934 bytesPosiblemente hay más golf posible combinando algunas de las dos "funciones".
...Sí: -5 gracias a NickKennedy!
Pruébalo en línea!
Un enlace diádico que acepta un número entero (la instrucción) y una lista de listas de números (la matriz).
¿Cómo?
El enlace crea un código Jelly que luego se evalúa utilizando M como entrada ...
Cada una de las ocho opciones son entonces:
Cada uno de ellos (excepto
0
y4
) aplica una transformación alM
uso de algunos deZ
(transposición),Ṛ
(inversa) yU
(revertir cada uno); luego una de las dos funciones (ver más abajo), luego la inversa de la transformación de configuración (si hubiera una) implementada con el reverso del código.Las dos funciones internas son:
fuente
JavaScript (ES6),
149 ... 133128bytesToma entrada como0 ≤ d≤ 7
(matrix)(d)
NaN
Pruébalo en línea!
Comentado
fuente
Gelatina ,
7134 bytesPruébalo en línea!
Banco de pruebas
Un programa completo El argumento correcto es la matriz. El argumento izquierdo es el tipo de pliegue:
Reescrito para usar binario biyectivo de 5 bits como entrada. Tenga en cuenta que el programa dado anteriormente no funcionará repetidamente para pliegues múltiples.
fuente
Octava ,
482 bytes, 459 bytesLas entradas para decidir las direcciones de plegado son:
1) de izquierda a derecha
2) de abajo a arriba
3) de derecha a izquierda
4) de arriba a abajo
5) tr a bl
6) br a tl
7) bl a tr
8) tl a br
Cada llamada solo genera el pliegue especificado, en lugar de todos ellos (lo que probablemente tomaría menos bytes). El mayor problema es que para este caso no puedo entender cómo poner los pliegues 1-4 y 5-8 en el mismo bucle. Pero al menos la octava tiene bonitas matrices.
Pruébalo en línea!
La supresión de salida cuesta bytes, así que ignore todo lo que no sea la declaración de retorno (ans =).
fuente
Carbón ,
7877 bytesPruébalo en línea! El enlace es a la versión detallada del código. Utiliza las siguientes opciones de plegado:
Los valores plegados se reemplazan por cadenas vacías. Explicación:
Gire la matriz cuatro veces.
Dobla la matriz horizontalmente cuando sea apropiado.
Dobla la matriz diagonalmente cuando sea apropiado.
Salida de la matriz una vez que se gira de nuevo a su orientación original.
fuente