Dada uma lista de números [ a 1 a 2 ... a n ] , calcule a soma de todas as matrizes Aᵢ onde Aᵢ é definido da seguinte forma ( m é o máximo de todos aᵢ ):
1 2 ⋯ (i-1) i (i+1) ⋯ n
+----------------------------
1 | 0 0 ⋯ 0 aᵢ aᵢ ⋯ aᵢ
2 | 0 0 ⋯ 0 aᵢ aᵢ ⋯ aᵢ
. . . . . . . .
. . . . . . . .
aᵢ | 0 0 ⋯ 0 aᵢ aᵢ ⋯ aᵢ
aᵢ₊₁ | 0 0 ⋯ 0 0 0 ⋯ 0
. . . . . . . .
. . . . . . . .
m | 0 0 ⋯ 0 0 0 ⋯ 0
Exemplo
Dada a entrada [2,1,3,1]
, construímos a seguinte matriz:
[2 2 2 2] [0 1 1 1] [0 0 3 3] [0 0 0 1] [2 3 6 7]
[2 2 2 2] + [0 0 0 0] + [0 0 3 3] + [0 0 0 0] = [2 2 5 5]
[0 0 0 0] [0 0 0 0] [0 0 3 3] [0 0 0 0] [0 0 3 3]
Regras e E / S
- você pode assumir que a entrada não está vazia
- você pode assumir que todas as entradas são não negativas (0≤)
- a entrada pode ser uma matriz 1 × n (ou n × 1), lista, matriz etc.
- Da mesma forma, a saída pode ser uma matriz, lista de listas, matriz etc.
- você pode receber e retornar entradas através de qualquer formato de E / S padrão
- seu envio pode ser um programa ou função completo
Casos de teste
[0] -> [] or [[]]
[1] -> [[1]]
[3] -> [[3],[3],[3]]
[2,2] -> [[2,4],[2,4]]
[3,0,0] -> [[3,3,3],[3,3,3],[3,3,3]]
[1,2,3,4,5] -> [[1,3,6,10,15],[0,2,5,9,14],[0,0,3,7,12],[0,0,0,4,9],[0,0,0,0,5]]
[10,1,0,3,7,8] -> [[10,11,11,14,21,29],[10,10,10,13,20,28],[10,10,10,13,20,28],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,10,18],[10,10,10,10,10,10],[10,10,10,10,10,10]]
Respostas:
Geléia ,
105 bytesExperimente online!
Como funciona
fonte
R , 80 bytes
Experimente online!
Recebe informações de stdin; imprime uma
0x1
matriz para entrada0
, que é impressa comofonte
F
é uma variável global interna cujo valor inicial éFALSE
. Aqui é coagido a 0 e usado como o valor inicial da soma acumulada. Esta resposta demonstra a razão para não usarF
eT
, exceto em código projetado especificamente para nunca ser realmente usado!Haskell ,
706651 bytesExperimente online!
fonte
JavaScript (ES6),
8879 bytesRetorna
[]
para[0]
.Experimente online!
fonte
APL (Dyalog Unicode) , 8 bytes SBCS
Programa completo. Solicita à lista stdin, imprime a matriz em stdout.
Usa o método de Dennis .
Experimente online!
⎕
stdin⍴⍨¨
r eshape-selfie de cada↑
misture a lista de listas em matriz, preenchendo com 0s⍉
transpor+\
soma acumulada por linhaComo
⍉
não faz nenhuma diferença computacional, pode ser deixado de fora e\
alterado⍀
para somar coluna em vez de linha.fonte
Python 2 , 85 bytes
Experimente online!
fonte
Oitava , 64 bytes
Experimente online!
Explicação:
Mais uma vez: expressões na lista de argumentos e eval são usadas em uma função :)
Isso assume
x
como entrada e cria duas matrizes idênticas preenchidas com zeros, com as dimensõesk=a=zeros(length(x),max(x))
. Isso é obtido adicionando o vetor horizontalx
com um vetor vertical1:max(x)
, expandindo implicitamente as dimensões para uma matriz 2D e multiplicando-o por zero.~(x+...)
infelizmente não funciona, pois isso forçaa
a ser uma matriz lógica em todo o restante da função.for i=x
é um loop que para cada iteração fazi=x(1)
,i=x(2)
e assim por diante.a(1:i,k++:end)
é a parte da matriz que deve ser atualizada para cada iteração.1:i
é um vetor dizendo quais linhas devem ser atualizadas. Sei=0
, então, esse será um vetor vazio, portanto nada será atualizado, caso contrário, será1, 2 ...
.++k:end
incrementa ak
matriz em um e cria um intervalo desde o primeiro valor dessa matriz (1,2,3...
) até a última coluna daa
matriz.+=i
adiciona o valor atual aa
.end,a
termina o loop e saia
.fonte
GolfScript , 39 bytes
Experimente online!
Usa o algoritmo de Dennis .
fonte
Wolfram Language (Mathematica) , 42 bytes
Experimente online!
fonte
Java 10, 142 bytes
Experimente online.
fonte
Ruby , 50 bytes
Experimente online!
fonte
Pari / GP , 60 bytes
Experimente online!
fonte