C 및 C ++와 같은 저급 언어에는 실제로 다차원 배열 개념이 없습니다. (벡터 및 동적 배열 이외) 다차원 배열을 사용하여
int foo[5][10];
이것은 실제로 구문 설탕 입니다. C가 실제로하는 일은 5 * 10 요소 의 단일 연속 배열을 만드는 것 입니다. 이
foo[4][2]
또한 구문 설탕입니다. 이것은 실제로 요소를 나타냅니다
4 * 10 + 2
또는 42 번째 요소입니다. 일반적으로, 요소의 인덱스 [a][b]
어레이가 foo[x][y]
있어요
a * y + b
3D 배열에도 동일한 개념이 적용됩니다. 우리가 가지고 foo[x][y][z]
있고 요소에 [a][b][c]
액세스하면 실제로 요소에 액세스합니다.
a * y * z + b * z + c
이 개념은 n 차원 배열에 적용됩니다 . 차원이있는 배열이 D1, D2, D3 ... Dn
있고 요소 S1, S2, S3 ... Sn
에 액세스 하면 수식은
(S1 * D2 * D3 ... * Dn) + (S2 * D3 * D4 ... * Dn) + (S3 * D4 ... * Dn) ... + (Sn-1 * Dn) + Sn
도전
위의 공식에 따라 다차원 배열의 인덱스를 계산하는 프로그램이나 함수를 작성해야합니다. 입력은 두 개의 배열입니다. 첫 번째 배열은 차원이고 두 번째 배열은 인덱스입니다. 이 두 배열의 길이는 항상 같고 1 이상입니다.
배열의 모든 숫자가 음이 아닌 정수라고 가정 할 수 있습니다. 0
비록 차원 배열에서 차원 배열을 얻지 못한다고 가정 할 수도 0
있습니다. 인덱스에 수 있습니다. 인덱스가 치수보다 크지 않다고 가정 할 수도 있습니다.
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
답변
답변
J, 2 바이트
#.
APL이있는 곳에 J가 있습니다! 거의. 차원을 왼쪽 arg로, 색인을 오른쪽 arg로 취합니다. “다차원 배열의 인덱싱은 기본적으로 혼합 된 기본 변환입니다.”
답변
자바 스크립트 (ES6), 34 바이트
(d,a)=>a.reduce((r,i,j)=>r*d[j]+i)
반드시 reduce
보다 낫습니다 map
.
답변
답변
젤리 , 7 6 바이트
Ṇ;żḅ@/
온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .
작동 원리
Ṇ;żḅ@/ Main link. Arguments: D (list of dimensions), I (list of indices)
Ṇ Yield 0, the logical NOT of D.
ż Zip D with I.
If D = [10, 10, 4, 62, 7] and I = [1, 2, 3, 4, 5], this yields
[[10, 1], [10, 2], [4, 3], [62, 4], [7, 5]].
; Concatenate, yielding [0, [10, 1], [10, 2], [4, 3], [62, 4], [7, 5]].
ḅ@/ Reduce by swapped base conversion to integer.
[10, 1] in base 0 is 0 × 10 + 1 = 1.
[10, 2] in base 1 is 1 × 10 + 2 = 12.
[ 4, 3] in base 12 is 12 × 4 + 3 = 51.
[62, 4] in base 51 is 51 × 62 + 4 = 3166.
[ 7, 5] in base 3166 is 3166 × 7 + 5 = 22167.
답변
답변
MATL , 9 바이트
PiPZ}N$X]
이것은 MATL에서 자연스럽게 선택되는 1 기반 인덱싱 (이제 챌린지에서 허용)을 사용합니다.
챌린지의 테스트 사례와 비교하려면 1
입력 인덱스 벡터의 각 항목을 추가 1
하고 출력에서 뺍니다 .
설명
이 코드는 내장 X]
함수를 기반으로하며 다차원 인덱스를 Matlab 또는 Octave의 sub2ind
함수 와 같은 단일 선형 인덱스로 변환 합니다.
P % Take dimension vector implicitly. Reverse
iP % Take vector of indices. Reverse
Z} % Split vector into its elements
N$X] % Convert indices to linear index (`sub2ind` function). Implicitly display