음이 아닌 정수로 구성된 N 차원 직교 (비정규) 배열과 반전 할 차원 표시가 있으면 배열을 반환하지만 해당 차원을 따라 반전됩니다. 표시는 길이 N의 부울 목록 또는 0 또는 1에서 색인 된 첫 번째 N 차원의 서브 세트 목록으로 제공 될 수 있습니다.
입력 형식을 명시하십시오. 코드 설명은 대단히 감사합니다.
연습 예제
우리는 2 층 3 열 4 열 3D 배열을 제공받습니다.
[[[ 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]
(0 인덱스리스트)
[1,3]
(1 인덱스리스트)
첫 번째 차원과 마지막 차원의 순서, 즉 행과 레이어 (행)의 요소 (각 레이어의 행은 아님)의 순서를 바꿔야합니다. 먼저 (실제 순서는 중요하지 않습니다) 레이어의 순서를 반대로 바꿉니다.
[[[13,14,15,16],
[17,18,19,20],
[21,22,23,24]],
[[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9,10,11,12]]]
그런 다음 각 행의 요소 순서를 반대로 바꿉니다.
[[[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,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]]]]
답변
APL (Dyalog) , 20 9 바이트
⊃{⌽[⍺]⍵}/
방법?
/
-축소-입력 (배열)에서 가장 오른쪽에있는 요소를 가져 와서 다음 왼쪽 요소가있는 함수를 왼쪽 인수로 적용
{⌽[⍺]⍵}
– left argument
( ⍺
) 치수 에서 반대로
⊃
-동봉 된 배열을 평평하게
답변
APL (Dyalog Unicode) , 9 바이트
⊃{⊖[⍺]⍵}⌿
Uriel이 거의 동일한 것으로 편집 한 것처럼 보이지만 독립적으로 개발했습니다. 이 입력 형식이 잘못되었다고 생각했습니다.
답변
자바 스크립트 (Node.js) , 58 55 53 45 bytes
@Shaggy 덕분에 8 바이트 절약
입력을로 가져옵니다 (indications)(array)
. 여기서 표시 는 부울 목록입니다.
f=([r,...b])=>a=>1/r?a.sort(_=>r).map(f(b)):a
댓글
f = ( // f is a function taking:
[r, // r = next 'reverse' Boolean flag
...b] // b = array of remaining flags
) => // and returning an anonymous function taking:
a => // a = array (or sub-array) to process, or atomic element
1 / r ? // if r is defined:
a.sort(_ => r) // reverse a if r = 1; leave it unchanged otherwise
.map(f(b)) // for each element in the resulting array: do a recursive call,
// using f to generate a new callback function for the next flag
: // else:
a // a must be an atomic element and is simply left unchanged
답변
답변
젤리 , 8 바이트
”€ẋ”ṚpFv
0- 색인 차원 목록을 가져옵니다.
작동 원리
”€ẋ”ṚpFv Main link. Left arg: D (dimensions, 0-based), Right arg: A (array)
”€ẋ Repeat '€' d times, for each d in D.
”Ṛp Perform Cartesian product of ['Ṛ'] and each string of '€'s, prepending a
'Ṛ' to each string of '€'s.
F Flatten the result.
If, e.g., D = [0,2,4], we build the string "ṚṚ€€Ṛ€€€€".
v Eval the resulting string, using A as left argument.
답변
R , 80 78 77 바이트
[
표시된 곳에서 반대로 된 시퀀스 목록을 만들어 R 추출기 에 대한 호출을 작성하십시오 . 실제로는 0이 포함되어 있으며 자동으로 무시됩니다. 는 drop=F
차원의 R의 기본 낙하를 방지하기 위해 필요하다. rev
R이 배열을 채우는 방식 때문에 차원 반전 표시기를 호출 해야합니다 .
감사합니다-@Giuseppe
인라인 할당을 사용하는 -1
function(x,a,d=dim(x))do.call("[",c(list(x),Map(seq,r<-d*rev(a),d-r),drop=F))
동일한 길이로 동일한 결과를 얻는 유사 콘텐츠를 만든 @JayCe에 대한 훌륭한 언급 :
function(x,a,d=dim(x))array(x[t(t(expand.grid(Map(seq,r<-d*rev(a),d-r))))],d)
답변
하스켈, 120 119 바이트
함수 f는 N 차원리스트와 bool리스트를 입력으로받습니다.
class F r where f::[Bool]->r->r
instance F Int where f=seq
instance F r=>F[r]where f(a:y)=last(id:[reverse|a]).map(f y)