태그 보관물: array-manipulation

array-manipulation

다차원 반전 반전됩니다. 표시는 길이 N의 부울 목록 또는

음이 아닌 정수로 구성된 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

답변

파이썬 2 , 56 55 바이트

f=lambda a,t:t and[f(l,t[1:])for l in a][::1|-t[0]]or a

온라인으로 사용해보십시오!


답변

젤리 , 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의 기본 낙하를 방지하기 위해 필요하다. revR이 배열을 채우는 방식 때문에 차원 반전 표시기를 호출 해야합니다 .

감사합니다-@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)