Prenez en entrée un tableau matriciel / numérique non vide contenant des entiers positifs. Renvoyez, dans cet ordre, les sommes de la première ligne et colonne, puis de la deuxième ligne et colonne et continuez jusqu'à ce qu'il n'y ait plus de lignes ou de colonnes.
Supposons que l'entrée soit:
2 10 10 2 4
9 7 7 2 9
1 7 6 2 4
7 1 4 8 9
La sortie doit alors être:
45, 33, 16, 17
Parce que: 2+9+1+7+10+10+2+4=45, 7+7+1+7+2+9=33, 6+4+2+4=16, 8+9=17
.
Cas de test:
Les cas de test sont au format suivant:
Input
---
Output
5
---
5
..........
1 4
----
5
..........
7
2
---
9
..........
8 3 7 10 3 7 10 1
10 7 5 8 4 3 3 1
1 6 4 1 3 6 10 1
2 3 8 2 8 3 4 1
---
62 40 33 18
..........
30 39 48 1 10 19 28
38 47 7 9 18 27 29
46 6 8 17 26 35 37
5 14 16 25 34 36 45
13 15 24 33 42 44 4
21 23 32 41 43 3 12
22 31 40 49 2 11 20
---
320 226 235 263 135 26 20
..........
7 10 1
4 4 2
6 3 4
1 4 10
5 7 6
---
34 20 20
En tant que tableaux:
[[5]]
[[1,4]]
[[7],[2]]
[[8,3,7,10,3,7,10,1],[10,7,5,8,4,3,3,1],[1,6,4,1,3,6,10,1],[2,3,8,2,8,3,4,1]]
[[30,39,48,1,10,19,28],[38,47,7,9,18,27,29],[46,6,8,17,26,35,37],[5,14,16,25,34,36,45],[13,15,24,33,42,44,4],[21,23,32,41,43,3,12],[22,31,40,49,2,11,20]]
[[7,10,1],[4,4,2],[6,3,4],[1,4,10],[5,7,6]]
Il s'agit de code-golf, donc la solution la plus courte dans chaque langue l'emporte.
10,7,7,1
, la deuxième ligne est9,7,7,2,9
et la somme est59
. Et ainsi de suiteRéponses:
MATL , 16 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Considérez, par exemple, l'entrée
Le code
&n:w:!Xl
crée le vecteur de colonne[1; 2; 3; 4]
et le vecteur de ligne[1 2 3 4 5]
.Xl
Calcule ensuite le minimum par élément avec diffusion, ce qui donne la matriceX:
linéarise cette matrice (dans l'ordre des colonnes principales) dans le vecteur de colonne[1; 1; 1; 1; 1; 2; 2; ... ; 4]
. Ce vecteur et la matrice d'entrée linéarisée, obtenue en tant queGX:
, sont passés en entrée à laaccumarray(... @sum)
fonction, ou1XQ
. Ceci calcule la somme de la deuxième entrée groupée par les valeurs de la première entrée.la source
Gelée , 3 octets
Essayez-le en ligne!
Comment ça marche
la source
CJam ,
2318 octetsBloc anonyme attendant l'argument sur la pile et laissant le résultat sur la pile.
Essayez-le en ligne!
Explication
la source
q~[{(:+\z}h;]2/::+p
[
. Mais en tant que bloc, je pense que j'en ai besoin car il ne doit pas également capturer la pile entière ci-dessous.05AB1E ,
1411 octetsEssayez-le en ligne!
Explication
la source
JavaScript (ES6), 60 octets
Une solution naïve peut être une meilleure solution.
la source
Mathematica, 60 octets
Inspiré par la réponse MATL de Luis Mendo .
Explication:
Min~Array~Dimensions@#
construit une matrice comme celle-ci:Puis
Pick[#,...,n]~Total~2
sélectionne les entrées de la matrice d'entrée correspondant au nombren
dans la matrice étrange ci-dessus, et les additionne. Enfin,...~Table~{n,Min[d=Dimensions@#]}
itère plusn
.C'est 1 octet de moins que l'approche naïve:
la source
Haskell,
5049 octetsEssayez-le en ligne!
S'il y a au moins une ligne avec au moins un élément, le résultat est la somme de la première ligne et des têtes de toutes les autres lignes suivie d'un appel récursif avec la queue de toutes les autres lignes. Dans tous les autres cas, le résultat est la liste vide.
Edit: Ørjan Johansen a enregistré un octet. Merci!
la source
Octave ,
6452 octetsMerci à @StewieGriffin d'avoir économisé 1 octet!
Cela définit une fonction anonyme.
Essayez-le en ligne!
Explication
Le code est similaire à ma réponse MATL (voir explication ici).
Deux octets ont été enregistrés en utilisant
1:size(x)
au lieu de1:size(x,1)
, exploitant le fait que1:[a b]
se comporte de la même manière que1:a
. De plus, un octet a été enregistré en utilisant1:rows(x')
au lieu de1:size(x,2)
, grâce à Stewie.la source
k, 19 octets
Essayez-le en ligne!
Explication:
la source
05AB1E , 16 octets
Essayez-le en ligne! ou essayez tous les tests
la source
Octave ,
6360 octetsEssayez-le en ligne!
La réponse pour cette matrice:
est le vecteur des sommes de ligne de sa partie triangulaire supérieure:
plus le vecteur des sommes des colonnes de sa partie triangulaire inférieure:
c'est précisément ce que ma réponse est le calcul.
la source
Julia , 62 octets
Fonctionne de manière récursive en résumant la matrice entière, puis en soustrayant la somme du bloc suivant. Probablement pas l'approche la plus efficace, mais bien intuitive.
la source
Java 7, 248 octets
Essayez ici.
Explication générale:
Disons que le tableau d'entrée a des dimensions de 4x6. La première partie du code créera une matrice temporaire et la remplira comme suit:
Et dans la deuxième partie du code, il bouclera sur cette matrice temporaire et additionnera toutes les valeurs de la matrice d'entrée pour chacun des nombres distincts de la matrice temporaire.
Explication du code:
la source
Perl 6 ,
6355 octets{($_ Z [Z] $_).kv.map(->\a,\b{b.flatmap(*[a..*]).sum -b[0;a]})}
$_
est l'entrée matricielle de la fonction anonyme.skip
est la matrice d'entrée dont la première ligne a été supprimée[Z] .skip
est la transposition de la matrice d'entrée dont la première ligne a été supprimée; c'est-à-dire la transposition sans sa première colonne$_ Z [Z] .skip
zippe la matrice d'entrée avec sa transpose-sans-première colonne, produisant une liste((first-row, first-column-sans-first-element), (second-row, second-column-sans-first-element), ...)
.kv
préfixe chaque paire avec son indexmap({...})
mappe sur les paires, en utilisant une fonction qui prend son premier argument (l'index) dans$^a
et sa seconde (la paire ligne / colonne) dans$^b
$^b.flatmap(*[$^a..*]).sum
supprime les premiers$^a
éléments de chaque paire de lignes / colonnes, puis additionne tous les éléments restantsAprès réflexion, j'ai réalisé que retirer la première colonne de la transposition avant de zipper équivalait à soustraire les éléments diagonaux à double contribution, comme dans ma première solution. Cela m'a permis de supprimer cette soustraction, et d'utiliser chaque argument de la fonction de mappage une seule fois a rendu la
{...$^a...$^b...}
méthode de passage des arguments à une fonction anonyme plus efficace que l'original-> \a, \b {...a...b...}
.la source
Vim,
66, 52 octetsEssayez-le en ligne!
Le mauvais outil pour le travail ...
la source
Gelée , 10 octets
Un programme complet qui imprime les valeurs
Essayez-le en ligne!
Comment?
la source
Python + NumPy, 75 octets
L'entrée est un tableau numpy 2D.
Essayez-le en ligne
la source
Python 2 , 97 octets
Essayez-le en ligne!
la source
Pyth,
1615 octetsPrend un tableau de tableaux de nombres de style python, renvoie un tableau de sommes.
Essayez le!
Explication
la source
GNU APL 1.7, 123 octets
La solution nécessite deux fonctions: l'une crée un tableau global et les appels la seconde, qui ajoute récursivement les sommes à ce tableau.
∇
commence et termine la fonction. Les deuxf
etg
prennent des tables comme arguments (essentiellement des tableaux 2D). Ceux-ci peuvent être créés avecX←rows cols ⍴ 1 2 3 4...
.R←⍬
assigne un vecteur vide à la variable globaleR
.g N
appelle la deuxième fonction avec le même argument donné à la première.⍴N
donne les dimensions deN
; lorsque l'une des dimensions est nulle, il n'y a plus de lignes / colonnes à additionner.0∈⍴N
renvoie 1 s'il y a un zéro dans les dimensions.→2+2×0∈⍴N
branche à la ligne numéro 2 plus 2 fois la valeur de retour de la∈
fonction: s'il n'y a pas de zéro,∈
renvoie 0 et la fonction se branche à la ligne 2 (la ligne suivante). S'il est un zéro,∈
renvoie 1 et les branches de la fonction à la ligne 4 (la fin de la fonction, de manièrereturn
essentiellement)./
est l'opérateur de réduction. Il applique l'argument de gauche, qui est un opérateur (+
) à chaque élément de la liste donné comme argument de droite.N[1;]
donne la première ligne entière du tableau etN[;1]
donne la première colonne.(+/N[1;])+(+/N[;1])-N[1;1]
additionne la première ligne et la première colonne et soustrait la valeur dans le coin supérieur gauche car elle est ajoutée à la fois dans la somme des colonnes et la somme des lignes.R←R,...
ajoute la nouvelle valeur calculée au vecteur globalR
.La fonction s'appelle ensuite (recurse jusqu'à ce qu'il n'y ait plus de lignes ou de colonnes). L'
⊃
opérateur de sélection obtient l'élément spécifié de la liste.1⊃⍴N
donne le nombre de lignes,2⊃⍴N
le nombre de colonnes.⍳
donne tous les nombres de 1 au nombre spécifié. L'↓
opérateur de suppression supprime les éléments du début de la liste. Si vous donnez plusieurs indices lors de l'accès à des éléments à partir d'une table ou d'un vecteur (par exempleN[1 2 3]
), APL accède à chacun d'eux. Par conséquent,1↓⍳1⊃⍴N
donne les indices de chaque ligne à l'exclusion de la première (2, 3, 4, ..., N
) et1↓⍳2⊃⍴N
donne un vecteur similaire mais pour les colonnes.g N[1↓⍳1⊃⍴N;1↓⍳2⊃⍴N]
appelle à nouveau la fonction mais sans la première ligne ou colonne.la source
PHP, 76 octets
Essayez-le en ligne!
la source
Mathematica, 116 octets
Formulaire de saisie
la source
Clojure, 98 octets
Itère sur l'entrée avec des index de ligne et de colonne (de manière très détaillée), crée une carte de hachage avec le minimum de
i
etj
comme clé, fusionne les cartes de hachage avec+
en une carte triée, renvoie des valeurs.la source
R, 102 octets
renvoie une fonction anonyme; imprime les résultats sur la console, avec une nouvelle ligne de fin. J'ai probablement besoin d'une approche différente.
Itère sur le minimum des lignes et des colonnes; imprime la somme de
x[,1]
(la première colonne) et dex[1,-1]
la première ligne à l'exception de la première entrée, puis définitx
comme une matrice égale àx[-1,-1]
(c'est- à -dire enx
excluant sa première ligne et sa colonne). Malheureusement, un simple réglagex=x[-1,-1]
entraîne son échec dans le cas d'une matrice carrée, car lorsqu'ilx
vaut 2x2, le sous-ensemble renvoie un vecteur plutôt qu'une matrice.Essayez-le en ligne!
la source
Java 7,
280276 octetsEssayez ici.
Approche alternative par rapport à ma réponse précédente avec les tableaux, qui est toujours plus courte que celle-ci à la fin (donc j'ai perdu un peu de temps à essayer cette approche alternative).
Explication générale:
Inspiration de @Riley réponse 05AB1E étonnante de
cette réponse utilise une liste et après chaque somme est calculée , il enlève la première colonne et la première ligne de la liste-matrice, comme ceci:
Explication du code:
la source
Python, 93 octets
Similaire à la réponse de mbomb007, mais sans NumPy
la source