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.