N 차원 배열 반전 된 배열을 반환하거나 출력하는 함수 나

세부

정수만 포함하는 배열 (또는 목록)이 주어지면 모든 하위 요소가 반전 된 배열을 반환하거나 출력하는 함수 나 프로그램을 작성하십시오. 즉, 가장 깊은 배열의 모든 요소를 ​​뒤집은 다음 두 번째 가장 깊은 요소 등을 뒤집습니다. 크기를 지정할 필요는 없지만 함수 또는 프로그램은 프로그래밍 언어의 기본 형식으로 들쭉날쭉 한 배열 에 합니다.


이:

[[1,2], [3,4]]

이것이 될 것입니다 :

[[4,3], [2,1]]

이:

[[[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9]],
 [[10,11,12], [13,14,15], [16,17,18]],
 [[19,20,21], [22,23,24], [25,26,27]],
 [[28,29,30], [31,32,33], [34,35,36]],
 [[37,38,39], [40,41,42], [43,44,45]],
 [[46,47,48], [49,50,51], [52,53,54]]]

이것이 될 것입니다 :

[[[54,53,52], [51,50,49], [48,47,46]],
 [[45,44,43], [42,41,40], [39,38,37]],
 [[36,35,34], [33,32,31], [30,29,28]],
 [[27,26,25], [24,23,22], [21,20,19]],
 [[18,17,16], [15,14,13], [12,11,10]],
 [[ 9, 8, 7], [ 6, 5, 4], [ 3, 2, 1]]]

이:

[[[1,2]],
 [[3,4], [5]],
 [[6,7,8], [9], [10,11]],
 [[[12,13], [14,15]], [16], [17,18,19,20]],
 [21]]

이것이 될 것입니다 :

[[21],
 [[20,19,18,17], [16], [[15,14], [13,12]]],
 [[11,10], [9], [8,7,6]],
 [[5], [4,3]],
 [[2,1]]]

보너스

이것은 일부 객체 지향 프로그래밍 언어 에서 대답을 희망적으로 장려 할 것입니다.

바이트 수 -50 % 프로그램이 다양한 유형의 멤버 (객체 형식 일 수 있음)를 가진 배열 (또는 목록)을 입력으로 취하고 모든 배열을 성공적으로 되돌릴 수있는 경우.

이:

[["Foo",["Bar",1]],
  2,
 ["Baz"],
 [[["Qux"],3],3.14]]

이것이 될 것입니다 :

[[3.14,[3,["Qux"]]],
 ["Baz"],
  2,
 [[1,"Bar"],"Foo"]]


답변

Pyth, 11-50 % = 5.5 바이트

L?+IbY_yMbb

온라인으로 사용해보십시오 : 데모 또는 테스트 스위트 .

이것은 함수를 정의합니다 y. 추가 3 바이트<newline>yQ 단순히 입력 목록으로 함수를 호출하므로 총 바이트 수로 계산할 필요가 없습니다.

설명:

L?+IbY_yMbb
L             define a function y(b), that returns:
 ?+IbY           if b + [] == b (test if b is a list):
      _yMb           recursively call y on all elements in b, then reverse the list
          b      else: b

답변

Dyalog APL , 14-50 % = 7 바이트

{∇¨⍣(×|≡⍵)⌽⍵}

⌽⍵
⍣(×|≡⍵)인수가 원자가 아닌 경우 인수를 뒤집습니다 ([절대] 깊이의 부호
∇¨).

경우 ⎕ML←3APL2에서 마이그레이션하는 것이 시스템의 경우입니다 (IBM 스타일), 1 바이트는 제거하여 저장할 수 있습니다 |.

APL 시도 온라인을 .

호기심을 위해 제안 된 int 및 float 반전 :

{∇¨⍣(×≡⍵){0::⌽⍵⋄⍎⌽⍕⍵}⍵}

내부 기능 :

0::⌽⍵오류가 발생하면 revesed 인수
⍎⌽⍕make를 문자열로 반환하고 역순으로 숫자로 만듭니다.


답변

프롤로그, 40-50 % = 20 바이트

a(X,Y):-reverse(X,Z),maplist(a,Z,Y);X=Y.

이것은 실패 할 때까지 (즉, 마지막 요소가 목록이 아니었을 때까지) 목록의 각 멤버에 대해로 술어 a/2를 재귀 적으로 호출 합니다.maplist/3reverse/2


답변

파이썬 2, 40-50 % = 20

f=lambda x:map(f,x)[::-1]if"">x>[]else x

보너스를 받으려면 기본 방식에서 약간의 수정 만하면됩니다. 모든 목록이 빈 문자열보다 작고 모든 숫자가 빈 목록보다 작다는 사실을 사용합니다.

모든 테스트 사례


답변

이맥스 리스프, 46 바이트 * 0.5 = 23

(defun g(x)(if(atom x)x(mapcar'g(reverse x))))

사용 예 : (g '((1 2) 3 (four 5)))->((5 four) 3 (2 1))

고전적인 재귀 접근법 : 인수가 목록이 아닌 경우 변경하지 않고 목록이면 함수를 목록의 반대쪽에 매핑하십시오.


답변

Mathematica, 34 / 2 = 17 바이트

Quiet[Reverse//@#]/.Reverse->(#&)&

또는 Reverse//@#&수많은 오류와 Reverse모든 곳 을 원한다면 .


답변

클로저 43 / 2 = 21.5 바이트

(defn f[x](if(coll? x)(reverse(map f x))x))