Dado un conjunto ortogonal N-dimensional (no desigual) de enteros no negativos, y una indicación de qué dimensiones invertir, devuelve el conjunto pero invertido a lo largo de esas dimensiones. La indicación puede darse como una lista booleana de longitud N o una lista de un subconjunto de las primeras N dimensiones indexadas desde 0 o 1.
Por favor, indique sus formatos de entrada. Las explicaciones del código son muy apreciadas.
Ejemplo de recorrido
Se nos proporciona la matriz 3D de 2 capas, 3 filas y 4 columnas.
[[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9,10,11,12]],
[[13,14,15,16],
[17,18,19,20],
[21,22,23,24]]]
y uno de
[true,false,true](Lista booleana)
[0,2](lista indexada 0)
[1,3](lista indexada 1)
Necesitamos invertir el orden de las dimensiones primera y última, es decir, las capas y los elementos de las filas (las columnas), pero no las filas de cada capa. Primero (el orden real en el que haces esto no importa) invertimos el orden de las capas:
[[[13,14,15,16],
[17,18,19,20],
[21,22,23,24]],
[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9,10,11,12]]]
y luego revertimos el orden de los elementos de cada fila:
[[[16,15,14,13],
[20,19,18,17],
[24,23,22,21]],
[[ 4, 3, 2, 1],
[ 8, 7, 6, 5],
[12,11,10, 9]]]
Casos de prueba
[[[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]]]]
reversefunciona en matrices arbitrarias pero solo se preocupa por el primer nivel), genéricos o clases recursivas (clases de tipo / objeto dependiendo de la funcionalidad o POO, pero caso de uso similar). Los dos últimos suelen ser mucho más detallados.