Défi:
Étant donné une matrice d'entrée carrée A , complétez la matrice avec une ligne et une colonne sur les quatre côtés.
- La valeur de chaque élément de la ligne supérieure et inférieure doit être la somme des éléments de chaque colonne correspondante.
- La valeur de chaque élément dans la colonne de gauche et de droite doit être la somme des éléments de chaque ligne correspondante.
- La valeur des éléments en haut à gauche et en bas à droite doit être la somme des éléments sur la diagonale
- La valeur des éléments en haut à droite et en bas à gauche doit être la somme des éléments dans l'anti-diagonale.
Exemple:
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
Explication:
Les éléments en haut à gauche et en bas à droite sont la somme de la diagonale 1 + 2 + 5 = 8 . Les éléments en haut à droite et en bas à gauche sont la somme de l'anti-diagonale 2 + 2 + 3 = 7 .
Les rangées du haut et du bas (sauf les coins) sont la somme de chacune des colonnes de A : 1 + 3 + 2 = 6 , 5 + 2 + 5 = 12 et 3 + 4 + 5 = 12 . De même, les colonnes gauche et droite (sauf les coins) sont la somme de chacune des lignes de A : 1 + 5 + 3 = 9 , 3 + 2 + 4 = 9 et 2 + 5 + 5 = 12 .
Contribution:
- Une matrice carrée non vide, avec des entiers non négatifs.
- Format optionnel
Sortie:
- La matrice rembourrée comme expliqué ci-dessus
- Format facultatif, mais il doit être identique au format d'entrée
Cas de test:
Utilisez les soumissions de ce défi si vous souhaitez convertir le format d'entrée en un format plus approprié (par exemple [[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
C'est le golf de code , donc la solution la plus courte dans chaque langue l' emporte. Les explications sont fortement encouragées.
la source
Réponses:
Octave , 64 octets
Merci à Tom Carpenter d'avoir économisé 4 octets et d'avoir corrigé une erreur que j'avais dans le code d'origine!
Essayez-le en ligne!
Explication:
Remarque, j'ai écrit ceci longtemps après avoir posté le défi.
la source
Gelée , 27 octets
Essayez-le en ligne!
la source
MATL ,
2726 octetsEssayez-le en ligne!Ou vérifiez tous les cas de test .
Explication
la source
APL (Dyalog) , 37 octets
Essayez-le en ligne!
1 1∘⍉
diagonale (lit. réduire les deux axes en un)d←
stocker cette fonction comme d et l'appliquer à l'argument+⌿
ajouter les sommes des colonnesd∘⌽,
ajout de d appliqué à l'argument inversé(
…)⍪
Empilez les éléments suivants en haut:+/,⊢,+/
sommes de ligne, l'argument non modifié, sommes de ligne(
…)⍪
Empilez les éléments suivants en haut:d,+⌿,d∘⌽
appliqué à l'argument, somme des colonnes, d appliqué à l'argument inverséla source
Gelée , 26 octets
Essayez-le en ligne!
Semble étonnamment différent de la solution d' Erik .
J'ai finalement réussi à comprendre comment ça
¦
marche (en déboguant à travers le code de Jelly, lol). Dommage qu'il nécessite un€
pour travailler avecÇ
dans mon cas.Explication
Le code utilise trois liens. Le premier lien auxiliaire remplit un vecteur avec sa somme aux deux extrémités, le deuxième lien auxiliaire fixe les deux coins de la matrice et le lien principal les appelle de manière appropriée.
la source
Python 3 , 155 octets
C'est la suggestion de @LeakyNun, qui économise 54 octets . Je l'ai ensuite joué un peu au golf.
Essayez-le en ligne!
Solution initiale - Python 3 , 216 octets
Essayez-le en ligne!
la source
Python 2 ,
268250184174 octets10 merci à Stewie Griffin
Essayez-le en ligne!
Quelques explications L'entrée est téléchargée sous forme de matrice. Tout d'abord, le code calcule la somme de chaque colonne et de chaque ligne à l'aide de numpy.sum. Ensuite, il calcule la somme de la diagonale par numpy.trace. Après cela, il obtient l'autre diagonale en faisant un retournement gauche-droite sur la matrice. Enfin, il utilise numpy.vstack et numpy.hstack pour coller les pièces ensemble.
la source
R, 129 octets
Une fonction anonyme qui prend une matrice carrée en entrée. Je posterai une explication s'il y a un intérêt.
la source
PHP , 211 octets
Essayez-le en ligne!
Étendu
la source
Python 3 , 125 octets
Essayez-le en ligne!
Légèrement non golfé:
Cela prend une entrée formatée sous forme de tableau numpy, puis utilise les outils d'indexation
np.c_
etnp.r_
pour créer un nouveau tableau en une seule fois.np.trace
etnp.sum
sont utilisés pour calculer les sommes le long des diagonales et partout ailleurs, respectivement.T
est utilisé pour prendre la transposition avant et après la concaténation des sommes, car il est plus court que de rendre tous les tableaux bidimensionnels et d'utilisernp.r_
.m[::-1]
enregistre les octets par rapport àrot90(m)
oufliplr(m)
pour trouver la trace de la deuxième diagonale.la source
JavaScript (ES6), 170 octets
L'entrée et la sortie sont un tableau 2D de nombres.
Expliqué
Extrait de test
L'entrée / sortie a été formatée avec des nouvelles lignes et des tabulations.
la source
LOGO , 198 octets
La fonction
f
prend une matrice sous forme de liste 2D, puis affiche la matrice résultante.g
est la fonction d'assistance.la source