세부
정수만 포함하는 배열 (또는 목록)이 주어지면 모든 하위 요소가 반전 된 배열을 반환하거나 출력하는 함수 나 프로그램을 작성하십시오. 즉, 가장 깊은 배열의 모든 요소를 뒤집은 다음 두 번째 가장 깊은 요소 등을 뒤집습니다. 크기를 지정할 필요는 없지만 함수 또는 프로그램은 프로그래밍 언어의 기본 형식으로 들쭉날쭉 한 배열 에 합니다.
예
이:
[[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←3
APL2에서 마이그레이션하는 것이 시스템의 경우입니다 (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/3
reverse/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))