Indexer la somme et dépouiller ma matrice
Étant donné un tableau matriciel / 2D dans votre langue préférée
Contribution:
- La matrice aura toujours une longueur impaire
- La matrice sera toujours parfaitement carrée
- Les valeurs de la matrice peuvent être n'importe quel entier dans votre langue (positif ou négatif)
Exemple:
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 50 6 7 8 9
4 5 6 100 8 9 10
5 6 7 8 -9 10 11
6 7 8 9 10 11 12
7 8 900 10 11 12 0
Définitions:
- Le "numéro central" est défini comme le numéro qui a le même nombre de chiffres à gauche, à droite, de haut en bas
Dans ce cas, son 100 moyen
- La "coque extérieure" est la collection de nombres dont leur indice x et y est ou 0 ou la taille de la matrice
1 2 3 4 5 6 7
2 8
3 9
4 10
5 11
6 12
7 8 900 10 11 12 0
Ta tâche:
Ajouter au nombre central la somme de chaque ligne et colonne après avoir multiplié les valeurs de chacune par leur index basé sur 1
Une seule ligne par exemple
4 5 6 7 8
pour chaque numéro
number * index + number * index.....
4*1 + 5*2 + 6*3 + 7*4 + 8*5 => 100
exemple:
2 -3 -9 4 7 1 5 => 61
-2 0 -2 -7 -7 -7 -4 => -141
6 -3 -2 -2 -3 2 1 => -10
8 -8 4 1 -8 2 0 => -20
-5 6 7 -1 8 4 8 => 144
1 5 7 8 7 -9 -5 => 10
7 7 -2 2 -7 -8 0 => -60
|
78 65 60 45 -15 -89 10 => 154
|
=> -16
- Pour toutes les lignes et colonnes, vous combinez ces valeurs.
- Maintenant, vous les additionnez aussi => 154-16 = 138
- Vous ajoutez ce numéro au "numéro central" et supprimez la "coque extérieure" de la matrice
0 -2 -7 -7 -7 => -88
-3 -2 -2 -3 2 => -15
-8 4 1+138 -8 2 => 395
6 7 -1 8 4 => 69
5 7 8 7 -9 => 26
19 69 442 30 -26
faites cela jusqu'à ce que vous vous retrouviez avec un seul numéro
-2 -2 -3 => -15
4 1060 -8 => 2100
7 -1 8 => 29
27 2115 5
- Ajouter 2114 + 2147 à 1060
- Retirez la "coque extérieure" et obtenez 5321
- Il ne nous reste plus qu'un seul numéro
c'est la sortie!
cas de test:
-6
-6
-7 -1 8
-4 -6 7
-3 -6 6
2
6 7 -2 5 1
-2 6 -4 -2 3
-1 -4 0 -2 -7
0 1 4 -4 8
-8 -6 -5 0 2
-365
8 3 5 6 6 -7 5
6 2 4 -2 -1 8 3
2 1 -5 3 8 2 -3
3 -1 0 7 -6 7 -5
0 -8 -4 -9 -4 2 -8
8 -9 -3 5 7 8 5
8 -1 4 5 1 -4 8
17611
-9 -7 2 1 1 -2 3 -7 -3 6 7 1 0
-7 -8 -9 -2 7 -2 5 4 7 -7 8 -9 8
-4 4 -1 0 1 5 -3 7 1 -2 -9 4 8
4 8 1 -1 0 7 4 6 -9 3 -9 3 -9
-6 -8 -4 -8 -9 2 1 1 -8 8 2 6 -4
-8 -5 1 1 2 -9 3 7 2 5 -6 -1 2
-8 -5 -7 -4 -9 -2 5 0 2 -4 2 0 -2
-3 -6 -3 2 -9 8 1 -5 5 0 -4 -1 -9
-9 -9 -8 0 -5 -7 1 -2 1 -4 -1 5 7
-6 -9 4 -2 8 7 -9 -5 3 -1 1 8 4
-6 6 -3 -4 3 5 6 8 -2 5 -1 -7 -9
-1 7 -9 4 6 7 6 -8 5 1 0 -3 0
-3 -2 5 -4 0 0 0 -1 7 4 -9 -4 2
-28473770
Réponses:
MATL ,
3634 octetsL'entrée est un tableau 2D avec
;
comme séparateur de ligneEssayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
Python 2.7, 229 octets
C'est ma première tentative de quelque chose comme ça, donc j'espère que j'ai suivi toutes les règles avec cette soumission. Ceci est juste une fonction qui prend une liste de listes comme paramètre. J'ai l'impression que les sommes et la compréhension de la liste pourraient probablement être un peu raccourcies, mais c'était trop difficile pour moi. :RÉ
Merci à Easterly Irk de m'avoir aidé à raser quelques octets.
la source
...) + sum([i*j...
->...)+sum([i*j...
), mais dans l'ensemble, excellent premier post !!!!...]for ...
. Vous pouvez supprimer au moins 2 espaces comme ça. (la fin de la liste frappe la boucle for)C #, 257 octets
voici une réponse non esolang
non golfé:
la source
using System.Linq
etusing System
. Je ne sais pas si c'est requis par les règles.System.Linq
. D'autres langages qui nécessitent l'importation pour utiliser certaines fonctionnalités passent par le même processus, donc je pense qu'il est injuste de supposer que chaque module est chargé en mémoire en C #.J, 66 octets
Approche directe basée sur le processus décrit dans le défi.
[:+/^:2#\*]+|:
obtient la somme.]+(i.@,~=](]+*)<.@-:)@#*
est un moyen particulièrement laid pour incrémenter le centre de la somme.[:}:@}."1@}:@}.
enlève la coque extérieure. Il existe probablement une meilleure façon de procéder.Usage
la source
Brachylog , 114 octets
Je suis surpris que cela fonctionne même pour être honnête. Au moins, je me suis rendu compte que Brachylog avait vraiment besoin d'une "valeur de changement de cet élément" en tant que intégré cependant ...
Exemple d'utilisation:
Explication
Version plus lisible (et plus longue):
Je vais juste expliquer en gros ce que fait chaque prédicat (c'est-à-dire chaque ligne sauf la première qui est le prédicat principal + prédicat 1):
Prédicat principal + prédicat 1
{l1,?hh.|:2f:7a$\:7a&.}.
: si l'entrée n'a qu'une seule ligne, mettez fin à l'algorithme et renvoyez la seule valeur. Sinon, trouvez toutes les lignes qui satisfont le prédicat 2, puis appliquez le prédicat 7 sur la matrice résultante, puis le prédicat 7 sur la transposition, puis appelez récursivement.Prédicat 2
:Im:I:?:3f.
: Prenez laI
e ligne de la matrice, trouvez toutes les valeurs de cette ligne qui satisfont le prédicat 3 avecI
et la matrice comme entrées supplémentaires.Prédicat 3
[L:I:M]h:JmN,Ll:2/D(IJ,M:4&:N+.;'(DIJ),N.)
:L
est la ligne,I
est l'indice de la ligne,M
est la matrice.N
est leJ
e élément deL
. Si la longueur deL
divisée par 2 est égale à la fois àI
etJ
, alors la sortie est la somme deN
avec le résultat du prédicat 4 sur la matrice. Sinon, la sortie est justeN
. Ce prédicat recrée essentiellement la matrice à l'exception que l'élément central est ajouté à la somme.Prédicat 4
$\:?c:5a+.
: appliquez le prédicat 5 sur chaque ligne et colonne de la matrice, unifiez la sortie avec la somme des résultats.Prédicat 5
:6f+.
: recherchez toutes les sorties valides du prédicat 6 sur la ligne, unifiez la sortie avec la somme de la liste résultante.Prédicat 6
:ImN,I:1+:N*.
:N
est laI
valeur e de la ligne, unifiez la sortie avecN * (I+1)
.Prédicat 7
brbr.
: supprimez la première et la dernière ligne de la matrice.la source
APL, 56 caractères
En anglais:
⍣(⌊.5×≢⍵)
répéter "la moitié de la taille d'une dimension arrondie"(⍵⍪⍉⍵)+.×⍳≢⍵
produit interne de la matrice et sa transposition avec le vecteur d'index(-⍴⍵)↑(⌈.5×⍴⍵)↑
transformer le résultat en matrice rembourrée avec 0s1 1↓¯1 ¯1↓
enlève la coque extérieurela source