Les langages de niveau inférieur, tels que C et C ++, n'ont en réalité aucun concept de tableaux multidimensionnels. (Autre que les vecteurs et les tableaux dynamiques) Lorsque vous créez un tableau multidimensionnel avec
int foo[5][10];
Ce n'est en fait que du sucre syntaxique . Ce que C fait vraiment, c'est créer un seul tableau contigu de 5 * 10 éléments. Cette
foo[4][2]
est également du sucre syntaxique. Cela fait vraiment référence à l'élément
4 * 10 + 2
ou, le 42e élément. En général, l'indice de l'élément [a][b]
dans le tableau foo[x][y]
est à
a * y + b
Le même concept s'applique aux tableaux 3D. Si nous avons foo[x][y][z]
et nous [a][b][c]
accédons à l'élément, nous accédons vraiment à l'élément:
a * y * z + b * z + c
Ce concept s'applique aux tableaux à n dimensions. Si nous avons un tableau avec des dimensions D1, D2, D3 ... Dn
et que nous accédons à l'élément, S1, S2, S3 ... Sn
la formule est
(S1 * D2 * D3 ... * Dn) + (S2 * D3 * D4 ... * Dn) + (S3 * D4 ... * Dn) ... + (Sn-1 * Dn) + Sn
Le défi
Vous devez écrire un programme ou une fonction qui calcule l'index d'un tableau multidimensionnel selon la formule ci-dessus. L'entrée sera deux tableaux. Le premier tableau correspond aux dimensions et le second tableau aux indices. La longueur de ces deux tableaux sera toujours égale et d'au moins 1.
Vous pouvez supposer en toute sécurité que chaque nombre dans les tableaux sera un entier non négatif. Vous pouvez également supposer que vous n'obtiendrez pas a 0
dans le tableau de dimensions, bien que a 0
puisse être dans les indices. Vous pouvez également supposer que les indices ne seront pas supérieurs aux dimensions.
Test IO
Dimensions: [5, 10]
Indices: [4, 2]
Output: 42
Dimensions: [10, 10, 4, 62, 7]
Indices: [1, 2, 3, 4, 5]
Output: 22167
Dimensions: [5, 1, 10]
Indices: [3, 0, 7]
Output: 37
Dimensions: [6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
Indices: [3, 1, 5, 5, 3, 0, 5, 2, 5, 4]
Output: 33570178
int[10]
.