Étant donné une liste de nombres [ a 1 a 2 ... a n ] , calculez la somme de toutes les matrices Aᵢ où Aᵢ est définie comme suit ( m est le maximum de tous 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
Exemple
Compte tenu de l'entrée, [2,1,3,1]
nous construisons la matrice suivante:
[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]
Règles et E / S
- vous pouvez supposer que l'entrée n'est pas vide
- vous pouvez supposer que toutes les entrées sont non négatives (0≤)
- l'entrée peut être une matrice 1 × n (ou n × 1), une liste, un tableau, etc.
- de même, la sortie peut être une matrice, une liste de listes, un tableau, etc.
- vous pouvez prendre et renvoyer des entrées via n'importe quel format d'E / S par défaut
- votre soumission peut être un programme ou une fonction complète
Cas de test
[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]]
Réponses:
Gelée ,
105 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
R , 80 octets
Essayez-le en ligne!
Prend l'entrée de stdin; imprime une
0x1
matrice d'entrée0
, qui s'imprime commela source
F
est une variable globale intégrée dont la valeur initiale estFALSE
. Ici, il est contraint à 0 et utilisé comme valeur initiale de la somme cumulée. Cette réponse démontre la raison de ne pas utiliserF
etT
sauf dans un code spécialement conçu pour ne jamais être réellement utilisé!Haskell ,
706651 octetsEssayez-le en ligne!
la source
JavaScript (ES6),
8879 octetsRetourne
[]
pour[0]
.Essayez-le en ligne!
la source
APL (Dyalog Unicode) , 8 octets SBCS
Programme complet. Demande stdin pour la liste, imprime la matrice sur stdout.
Utilise la méthode de Dennis .
Essayez-le en ligne!
⎕
stdin⍴⍨¨
r eshape-selfie de chacun↑
mélanger la liste des listes dans la matrice, en remplissant avec 0⍉
transposer+\
somme cumulée par ligneLe
⍉
ne fait pas de différence de calcul, il pourrait être laissé et\
changé pour⍀
résumer en colonne au lieu de la ligne sage.la source
Python 2 , 85 octets
Essayez-le en ligne!
la source
Octave , 64 octets
Essayez-le en ligne!
Explication:
Encore une fois: les expressions dans la liste d'arguments et eval sont utilisées dans une fonction :)
Cela prend
x
en entrée et crée deux matrices identiques remplies de zéros, avec les dimensionsk=a=zeros(length(x),max(x))
. Ceci est réalisé en ajoutant le vecteur horizontalx
avec un vecteur vertical avec1:max(x)
, en étendant implicitement les dimensions à un tableau 2D, puis en multipliant cela par zéro.~(x+...)
ne fonctionne malheureusement pas, car cela obligea
à être un tableau logique dans le reste de la fonction.for i=x
est une boucle que fait pour chaque itérationi=x(1)
,i=x(2)
et ainsi de suite.a(1:i,k++:end)
est la partie de la matrice qui doit être mise à jour pour chaque itération.1:i
est un vecteur indiquant quelles lignes doivent être mises à jour. Sii=0
, alors ce sera un vecteur vide, donc rien ne sera mis à jour, sinon c'est le cas1, 2 ...
.++k:end
incrémente lak
matrice d'une unité et crée une plage à partir de la première valeur de cette matrice (1,2,3...
) et jusqu'à la dernière colonne de laa
matrice.+=i
ajoute la valeur actuelle àa
.end,a
termine la boucle et les sortiesa
.la source
GolfScript , 39 octets
Essayez-le en ligne!
Utilise l'algorithme de Dennis .
la source
Wolfram Language (Mathematica) , 42 octets
Essayez-le en ligne!
la source
Java 10, 142 octets
Essayez-le en ligne.
la source
Rubis , 50 octets
Essayez-le en ligne!
la source
Pari / GP , 60 octets
Essayez-le en ligne!
la source