Étant donné une matrice, additionnez ses valeurs vers le haut / bas ou gauche / droite pour former un X, pliez-la et retournez la liste. Je décris ici l'algorithme:
Algorithme
Votre entrée sera une matrice carrée de taille impaire d'entiers dans la capacité numérique raisonnable de votre langue.
Prenons l'exemple de la matrice suivante:
1 2 3 2 1
0 3 2 3 0
4 2 5 6 3
7 4 7 9 4
0 6 7 2 5
Tout d'abord, ajoutez chaque nombre au nombre le plus proche qui se trouve sur la diagonale principale ou l'antidiagonale. Autrement dit, divisez la matrice en quatre sections le long de la diagonale principale et de l'antidiagonale, puis additionnez tous les nombres de chaque section vers le centre, comme suit:
1 2 3 2 1
↓ ↓ ↓
0 → 3 2 3 ← 0
↓
4 → 2 → 5 ← 6 ← 3
↑
7 → 4 7 9 ← 4
↑ ↑ ↑
0 6 7 2 5
Cette étape donne le résultat suivant:
1 1
5 5
39
17 15
0 5
Ensuite, nous le plions en aplatissant le X et en entrelaçant les éléments avec le coin supérieur gauche en premier et le coin inférieur gauche en dernier. Cela donne le résultat suivant:
1, 0, 5, 17, 39, 5, 15, 1, 5
Vous pouvez imaginer cela comme étirer la diagonale principale et la faire tourner dans le sens antihoraire.
Ceci est le résultat final.
Défi
Implémentez cet algorithme. Des échappatoires standard s'appliquent. Tous les formats d'E / S raisonnables sont acceptables.
Cas de test
Input
Output
1 2 3 2 1
0 3 2 3 0
4 2 5 6 3
7 4 7 9 4
0 6 7 2 5
1, 0, 5, 17, 39, 5, 15, 1, 5
1 2 3 4 5
5 4 3 2 1
1 3 5 7 9
0 9 8 7 6
6 7 8 9 0
1, 6, 11, 16, 47, 7, 22, 5, 0
1 3 7 4 8 5 3
8 4 7 5 3 8 0
0 6 3 6 9 8 4
2 6 5 8 7 4 2
0 6 4 3 2 7 5
0 6 7 8 5 7 4
8 5 3 2 6 7 9
1, 8, 15, 11, 23, 20, 62, 32, 25, 13, 18, 3, 9