중첩 목록을 정렬하는 프로그램이나 함수를 작성해야합니다. 중첩 목록을 정렬하는 규칙은 다음과 같습니다.
이 목록을 예로 들어 보겠습니다.
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
이 목록의 각 요소에는 "우선 순위"가 있습니다. 요소는 숫자 또는 하위 목록으로 계산됩니다. 먼저 동일한 깊이에서 각 요소의 우선 순위를 가져옵니다. 요소가 숫자 인 경우 우선 순위는 숫자 자체와 동일합니다. 요소가 하위 목록 인 경우 우선 순위는 하위 하위 목록을 포함하지 않는 모든 숫자 의 합입니다 .
따라서 깊이 1 의 모든 요소의 우선 순위 는 다음과 같습니다.
( 7 ) 2 7 ( 3 ) 9
((5, 2), 2, 7, (2, 1, (3, 4)), 9)
각 요소를 우선 순위별로 정렬하십시오. 동점이있는 경우 원래 목록과 동일한 순서를 유지해야합니다.
2 ( 3 ) ( 7 ) 7 9
(2, (2, 1, (3, 4)), (5, 2), 7, 9)
모든 하위 목록에 대해 반복하십시오. 이 서브리스트에서
(2, 1, (3, 4))
우리의 우선 순위는 다음과 같습니다 :
2 1 ( 7 )
(2, 1, (3, 4))
정렬하면 다음과 같습니다.
(1, 2, (3, 4))
(3, 4)
이미 정렬되었으므로 완료되었습니다. (5, 2)
결과를 반복 (2, 5)
하고 완료했습니다! 우리의 최종 목록은 다음과 같습니다.
(2, (1, 2, (3, 4)), (2, 5), 7, 9)
규칙 :
매우 의심 스럽지만 Mathematica에 무언가가있는 경우 중첩 목록 정렬 내장은 허용되지 않습니다. 정기적 인 정렬 기능 이 허용됩니다.
I / O는 임의의 합리적인 형식 일 수 있습니다.
모든 하위 목록에는 하나 이상의 숫자 또는 목록이 포함됩니다. 또한 하위 목록은 여러 수준으로 중첩 될 수 있습니다. 예를 들어에
(1, 2, (((3))))
의(((3)))
하위 목록 만 있기 때문에의 우선 순위는 0입니다.유효하지 않은 목록 (일치하지 않는 괄호, 숫자가 아닌, 대괄호 유형, 음수 등)은 정의되지 않은 동작을 초래합니다.
테스트 I / O :
(1, 2, 3) ---> (1, 2, 3)
(1, 2, 6, 3, 9, 8) ---> (1, 2, 3, 6, 8, 9)
(4, 3, (2), (1)) ---> ((1), (2), 3, 4)
(4, 3, (2), ((1))) ---> (((1)), (2), 3, 4)
(5, (1, 2, (9, 8))) ---> ((1, 2, (8, 9)), 5)
(3, (1, 2), (2, 1)) ---> (3, (1, 2), (1, 2))
(3, (1, 2, (99)), (2, 1, (34))) ---> (3, (1, 2, (99)), (1, 2, (34)))
(7, 2, (1, (9, 12)), (4, 3, 2, (1, 2))) ---> ((1, (9, 12)), 2, 7, (2, 3, (1, 2), 4))
바이트 단위의 최단 답변이 이깁니다.