배경
젤리 의 산술 원자는 자동으로 벡터화됩니다. 실제로 x + y 는 x 또는 y 가 숫자 또는 비정형 숫자 배열 일 때마다 잘 정의 됩니다. Jelly의 소스 코드는 일반 벡터 라이저를 사용하여이 동작을 구현하지만이 문제를 해결하기 위해 정수 및 중첩 정수 배열 만 추가하는 것을 고려할 것입니다.
정의
깊이 정의 X를 같이 0 경우 X는 같은 정수 (1) 은 정수 (비어) 평면 배열하고, 경우로서 N + 1 는 적어도 하나 개의 깊이의 원소가 포함되어있는 경우 , N 및 깊이없이 소자 (k)를> n .
이 방법은, 1 깊이 가지고 0 , [] 및 [1] 및 [1,1]을 깊이있는 1 , [[] [] 및 [1] [1] 과 [1] 및 [(1) , []]의 깊이는 2입니다 . [1, [1, [1]]]의 깊이는 3입니다 .
x + y 연산 은 다음과 같이 정의됩니다.
경우 X 와 Y는 깊이가 0 , 그 합을 반환합니다.
경우 X 및 Y는 동일하지만, 긍정적 인 깊이를 가지고 반복적으로 적용 + 모든 항목 (X) 과의 대응하는 항목 예 .
경우 X 와 Y는 서로 다른 길이를 가지고, 합계의 배열에 이상 배열의 꼬리를 추가합니다.
결과를 돌려줍니다.
경우 X 의 깊이가보다 엄격 작은 Y의 깊이, 재귀 적으로 적용 + 에 X 와의 모든 항목 Y , 그 결과를 반환합니다.
y 의 깊이가 x 의 깊이보다 작 으면 반대의 작업을 수행하십시오 .
예를 들어, 작업 [1, [2, 3], [4]] + [[[10, 20], [30], 40, 50], 60]을 고려하십시오 .
왼쪽 인수의 깊이는 2 이고 오른쪽 인수의 깊이는 3 이므로 [1, [2, 3], [4]] + [[10, 20], [30], 40, 50 ] 및 [1, [2, 3], [4]] + 60 입니다.
[1, [2, 3], [4]] 및 [[10, 20], [30], 40, 50]의 깊이는 모두 2 이므로 1 + [10, 20] , [2, 3] + [30] 및 [4] + 40 .
1 + [10, 20] = [1 + 10, 1 + 20] = [11, 21]
[2, 3] + [30] = [2 + 30, 3] = [32, 3]
참고 3 개 가 일치하는 요소를 가지고 있지 않기 때문에, 남아 그대로.
[4] + 40 = [4 + 40] = [44]
50 결과가되도록, 정합 소자가없는 [[[11, 21], [32 (3)], [44, 50] .[1, [2, 3], [4]] + 60 = [1 + 60, [2, 3] + 60, [4] + 60] = [61, [2 + 60, 3 + 60], [ 4 + 60]] , [61, [62, 63], [64]]로 나타납니다 .
최종 결과는 [[[11, 21], [32, 3], [44], 50], [61, [62, 63], [64]]] 입니다.
직무
두 개의 정수, 두 개의 중첩 된 정수 배열 또는 이들의 조합을 입력으로 사용하여 위에서 정의한대로 합계를 리턴하는 프로그램 또는 함수를 작성하십시오.
언어에 여러 배열 유형 (목록, 튜플, 벡터 등)이있는 경우 답을 위해 원하는 언어를 선택할 수 있습니다. 반환 유형은 인수 유형과 일치해야합니다.
지루하고 탁월한 솔루션을 방지하기 위해 언어가 내장 언어로 정확하게 작동하는 경우 해당 언어를 사용하지 못할 수 있습니다.
다른 모든 언어의 모든 내장 기능이 허용됩니다. 선택한 언어로이 기능이 허용되는 경우 내장 추가 기능을 과부하 및 / 또는 재정의 할 수 있습니다.
이것은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.
테스트 사례
0 + 0 = 0
[-1, 0, -1] + [1] = [0, 0, -1]
[] + [0] = [0]
[] + 0 = []
[] + [] = []
[[], 0] + [] = [[], []]
[1, 2, 3] + 10 = [11, 12, 13]
[1, 2, 3] + [10] = [11, 2, 3]
[1, 2, 3] + [10, [20]] = [[11, 12, 13], [21, 2, 3]]
[1, 2, 3, []] + [10, [20]] = [11, [22], 3, []]
[1, [2, [3, [4]]]] + [10, [20]] = [[11, [21]], [[12, [22]], [13, [24]]]]
더 많은 테스트 사례를 생성하려면 이 Jelly 프로그램을 사용할 수 있습니다 .