Étant donné un tableau orthogonal à N dimensions (non irrégulier) d'entiers non négatifs et une indication des dimensions à inverser, renvoyez le tableau mais inversé le long de ces dimensions. L'indication peut être donnée sous la forme d'une liste booléenne de longueur N ou d'une liste d'un sous-ensemble des N premières dimensions indexées de 0 ou 1.
Veuillez indiquer vos formats d'entrée. Les explications du code sont très appréciées.
Exemple guidé
On nous donne le tableau 3D à 2 couches, 3 rangées et 4 colonnes
[[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9,10,11,12]],
[[13,14,15,16],
[17,18,19,20],
[21,22,23,24]]]
et l'un des
[true,false,true]
(Liste booléenne)
[0,2]
(liste indexée 0)
[1,3]
(liste indexée 1)
Nous devons inverser l'ordre des première et dernière dimensions, c'est-à-dire les couches et les éléments des lignes (les colonnes), mais pas les lignes de chaque couche. Tout d'abord (l'ordre réel dans lequel vous le faites n'a pas d'importance), nous inversons l'ordre des couches:
[[[13,14,15,16],
[17,18,19,20],
[21,22,23,24]],
[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9,10,11,12]]]
puis on inverse l'ordre des éléments de chaque ligne:
[[[16,15,14,13],
[20,19,18,17],
[24,23,22,21]],
[[ 4, 3, 2, 1],
[ 8, 7, 6, 5],
[12,11,10, 9]]]
Cas de test
[[[1,2,3,4],[5,6,7,8],[9,10,11,12]],[[13,14,15,16],[17,18,19,20],[21,22,23,24]]]
[true,false,true]
/ [0,2]
/ [1,3]
↓
[[[16,15,14,13],[20,19,18,17],[24,23,22,21]],[[4,3,2,1],[8,7,6,5],[12,11,10,9]]]
[[1,2,3],[4,5,6]]
[true,false]
/ [0]
/ [1]
↓
[[4,5,6],[1,2,3]]
[[1],[4]]
[true,false]
/ [0]
/ [1]
↓
[[4],[1]]
[[7]]
[true,true]
/ [0,1]
/ [1,2]
↓
[[7]]
[1,2,3,4,5,6,7]
[true]
/ [0]
/ [1]
↓
[7,6,5,4,3,2,1]
[]
[true]
/ [0]
/ [1]
↓
[]
[[],[]]
[false,false]
/ []
/ []
↓
[[],[]]
[[[[3,1,4,1],[5,9,2,6]],[[5,3,5,8],[9,7,9,3]]],[[[2,3,8,4],[6,2,6,4]],[[3,3,8,3],[2,7,9,5]]]]
[true,false,true,true]
/ [0,2,3]
/ [1,3,4]
↓
[[[[4,6,2,6],[4,8,3,2]],[[5,9,7,2],[3,8,3,3]]],[[[6,2,9,5],[1,4,1,3]],[[3,9,7,9],[8,5,3,5]]]]
[[[[3,1,4,1],[5,9,2,6]],[[5,3,5,8],[9,7,9,3]]],[[[2,3,8,4],[6,2,6,4]],[[3,3,8,3],[2,7,9,5]]]]
[false,true,false,false]
/ [1]
/ [2]
↓
[[[[5,3,5,8],[9,7,9,3]],[[3,1,4,1],[5,9,2,6]]],[[[3,3,8,3],[2,7,9,5]],[[2,3,8,4],[6,2,6,4]]]]
[[[[3,1,4,1],[5,9,2,6]],[[5,3,5,8],[9,7,9,3]]],[[[2,3,8,4],[6,2,6,4]],[[3,3,8,3],[2,7,9,5]]]]
[false,false,false,false]
/ []
/ []
↓
[[[[3,1,4,1],[5,9,2,6]],[[5,3,5,8],[9,7,9,3]]],[[[2,3,8,4],[6,2,6,4]],[[3,3,8,3],[2,7,9,5]]]]
reverse
fonctionne sur des tableaux arbitraires mais ne se soucie que du premier niveau), des génériques ou des classes récursives (classes de type / objet selon la fonction ou POO, mais cas d'utilisation similaire). Les deux derniers sont généralement beaucoup plus verbeux.