Desafio:
Dada uma matriz NxN em que e uma das oito 'opções de dobra' distintas, gera uma lista / matriz 2D com os valores subtraídos.
As oito opções de dobragem são: da esquerda para a direita; direita para esquerda; de cima para baixo; de baixo para cima; da esquerda para a direita; do topo à direita; da esquerda para a direita; direito ao pé direito.
Exemplos passo a passo:
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]]
Com a opção de dobrar de cima para baixo, produzimos o seguinte como resultado:
[[ 1,-7,-5,-3],
[ 0,22,-5,68]]
Por quê? Dobramos de cima para baixo. Como as dimensões da matriz são uniformes, não temos uma camada intermediária para preservar como está. A 'th fila [1, 1, 1, 1]
serão subtraídos pelo ' th fileira (teria sido 'th linha para matrizes de dimensão ímpares); assim [1-0, 1-8, 1-6, 1-4]
se torna [1, -7, -5, -3]
. A 'ª linha [1, 25, 0, 75]
será subtraída pela ' ª linha (teria sido 'ª linha para matrizes de dimensões ímpares); então[1-1, 25-3, 0-5, 75-7]
torna-se [0, 22, -5, 68]
.
Com a opção de dobrar de baixo para a direita para topleft (com a mesma matriz de entrada acima), produzimos o seguinte como resultado:
[[-74, 2, 1, 7],
[ 0, 7, 6],
[-24, 1],
[ 1]]
Com as seguintes subtrações dobráveis:
[[1-75, 3-1, 5-4, 7],
[ 0-0, 8-1, 6],
[1-25, 1],
[ 1]]
Regras do desafio:
- Você pode usar oito letras distintas
[A-Za-z]
ou números distintos no intervalo para as opções de dobra. Os números ou são provavelmente as opções mais comuns, mas se você quiser usar números diferentes dentro do intervalo para alguns cálculos inteligentes, fique à vontade para fazê-lo. Indique quais opções de dobragem você usou em sua resposta. - A matriz de entrada sempre será uma matriz NxN quadrada, portanto você não precisa manipular nenhuma matriz NxM retangular. também sempre será pelo menos 2, pois uma matriz vazia ou 1x1 não pode ser dobrada.
- A entrada da matriz sempre conterá números não negativos no intervalo (os números na saída estarão, portanto, no intervalo ).
- Com a dobra (anti) diagonal ou a dobra vertical / horizontal de dimensão ímpar, a 'camada' do meio permanecerá inalterada.
- A E / S é flexível. Pode ser uma matriz / lista 2D de números inteiros; pode ser retornado ou impresso como uma string delimitada por espaço e nova linha; você pode modificar a matriz de entrada e substituir os números que devem desaparecer
null
ou um número fora do[-999, 999]
intervalo para indicar que eles desapareceram; etc etc.
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:
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
ou número inteiro no intervalo [-999,999]
, portanto, a ordem não importa. E desculpe, mas você deve produzir a dobra correta com base na entrada, portanto, a saída das oito não é permitida.