Desafio:
Dada uma matriz de entrada quadrada A , preencha a matriz com uma linha e uma coluna nos quatro lados.
- O valor de cada elemento na linha superior e inferior deve ser a soma dos elementos em cada coluna correspondente.
- O valor de cada elemento nas colunas esquerda e direita deve ser a soma dos elementos em cada linha correspondente.
- O valor dos elementos no canto superior esquerdo e no canto inferior direito deve ser a soma dos elementos na diagonal
- O valor dos elementos no canto superior direito e no canto inferior esquerdo deve ser a soma dos elementos na anti-diagonal.
Exemplo:
A =
1 5 3
3 2 4
2 5 5
Output:
8 6 12 12 7
9 1 5 3 9
9 3 2 4 9
12 2 5 5 12
7 6 12 12 8
Explicação:
Os elementos superior esquerdo e inferior direito são a soma da diagonal 1 + 2 + 5 = 8 . Os elementos superior direito e inferior esquerdo são a soma dos antígenos 2 + 2 + 3 = 7 .
As linhas superior e inferior (exceto os cantos) são a soma de cada uma das colunas em A : 1 + 3 + 2 = 6 , 5 + 2 + 5 = 12 e 3 + 4 + 5 = 12 . Da mesma forma, as colunas esquerda e direita (exceto os cantos) são a soma de cada uma das linhas de A : 1 + 5 + 3 = 9 , 3 + 2 + 4 = 9 e 2 + 5 + 5 = 12 .
Entrada:
- Uma matriz quadrada não vazia, com números inteiros não negativos.
- Formato opcional
Saída:
- A matriz preenchida como explicado acima
- Formato opcional, mas deve ser o mesmo que o formato de entrada
Casos de teste:
Use os envios neste desafio se desejar converter o formato de entrada para um formato mais adequado (por exemplo [[1, 5],[0, 2]]
).
0
----------------
0 0 0
0 0 0
0 0 0
1 5
0 2
----------------
3 1 7 5
6 1 5 6
2 0 2 2
5 1 7 3
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
----------------
65 65 65 65 65 65 65
65 17 24 1 8 15 65
65 23 5 7 14 16 65
65 4 6 13 20 22 65
65 10 12 19 21 3 65
65 11 18 25 2 9 65
65 65 65 65 65 65 65
15 1 2 12
4 10 9 7
8 6 5 11
3 13 14 0
----------------
30 30 30 30 30 30
30 15 1 2 12 30
30 4 10 9 7 30
30 8 6 5 11 30
30 3 13 14 0 30
30 30 30 30 30 30
Isto é código-golfe , então a solução mais curta em cada idioma vence. As explicações são altamente encorajadas.
fonte
Respostas:
Oitava , 64 bytes
Agradeço a Tom Carpenter por salvar 4 bytes e corrigir um erro que tive no código original!
Experimente online!
Explicação:
Observe que escrevi isso muito depois de postar o desafio.
fonte
Gelatina , 27 bytes
Experimente online!
fonte
MATL ,
2726 bytesExperimente online! Ou verifique todos os casos de teste .
Explicação
fonte
APL (Dyalog) , 37 bytes
Experimente online!
1 1∘⍉
diagonal (lit. recolher os dois eixos em um)d←
armazene essa função como d e aplique-a ao argumento+⌿
preceda as somas da colunad∘⌽,
preceder d aplicado ao argumento invertido(
...)⍪
Empilhe o seguinte na parte superior:+/,⊢,+/
somas de linha, o argumento não modificado, somas de linha(
...)⍪
Empilhe o seguinte na parte superior:d,+⌿,d∘⌽
aplicado ao argumento, somas da coluna, d aplicado ao argumento reversofonte
Geléia , 26 bytes
Experimente online!
Parece surpreendentemente diferente da solução de Erik .
Finalmente consegui entender como
¦
funciona (depurando o código de Jelly, lol). Pena que requer uma€
trabalhar comÇ
no meu caso.Explicação
O código usa três links. O primeiro link auxiliar preenche um vetor com sua soma nas duas extremidades, o segundo link auxiliar fixa dois cantos da matriz e o link principal os chama apropriadamente.
fonte
Python 3 , 155 bytes
Esta é a sugestão do @LeakyNun, que salva 54 bytes . Eu mesmo joguei um pouco de golfe.
Experimente online!
Solução inicial - Python 3 , 216 bytes
Experimente online!
fonte
Python 2 ,
268250184174 bytes10 agradecimentos a Stewie Griffin
Experimente online!
Algumas explicações A entrada é carregada como uma matriz. Primeiro, o código calcula a soma de cada coluna e cada linha usando numpy.sum. Em seguida, calcula a soma da diagonal por numpy.trace. Depois disso, ele obtém a outra diagonal girando a esquerda-direita na matriz. Por fim, ele usa numpy.vstack e numpy.hstack para colar as peças.
fonte
R, 129 bytes
Uma função anônima que recebe uma matriz quadrada como entrada. Vou postar uma explicação se houver interesse.
fonte
PHP , 211 bytes
Experimente online!
Expandido
fonte
Python 3 , 125 bytes
Experimente online!
Ligeiramente não destruído:
Isso leva a entrada formatada como uma matriz numpy e, em seguida, usa as ferramentas de indexação
np.c_
enp.r_
para criar uma nova matriz de uma só vez.np.trace
enp.sum
são usados para calcular as somas ao longo das diagonais e em qualquer outro lugar, respectivamente.T
é usado para fazer a transposição antes e depois da concatenação das somas, porque é mais curto do que tornar todas as matrizes bidimensionais e usandonp.r_
.m[::-1]
salva bytes quando comparado arot90(m)
oufliplr(m)
para encontrar o rastreamento para a segunda diagonal.fonte
JavaScript (ES6), 170 bytes
Entrada e saída é uma matriz de números 2D.
Explicado
Snippet de teste
A entrada / saída foi formatada com novas linhas e guias.
fonte
LOGO , 198 bytes
A função
f
recebe uma matriz como uma lista 2D e gera a matriz resultante.g
é a função auxiliar.fonte