이 문제에서는 목록 목록을 더 간단한 목록 형식으로 구문 분석해야합니다.
이 도전은 내 슬픈 깃발 파서를 기반으로합니다. 내 sadflak 파서에서는 프로그램 시작 속도를 높이기 위해 모든 ()을 제거하고 목록 시작 부분에서 ()의 합계로 바꿨습니다.
Sad-List로 파싱하려면 다음을 수행해야합니다 (파이썬 구현, 튜플 튜플 사용).
def sadlistfunc(list):
new-sadlist = [0]
for i in list:
if i == ():
new-sadlist[0]+=1
else:
new-sadlist.append(sadlistfunc(i))
이것은 재귀 함수입니다. 목록의 경우, 목록 입력에서 ()의 수로 시작하여 새 목록을 시작하면이 목록의 나머지는 목록 입력에서 ()가 아닌 모든 목록의 슬픈 목록 버전입니다. 리스트를 돌려줍니다.
입력:
몇 가지 다른 형식으로 입력 할 수 있습니다.
- 당신은 그것을 목록으로 가져갈 수 있습니다
- 당신은 그것을 튜플로 가져갈 수 있습니다
- 당신은 문자열로 취할 수 있습니다
문자열로 가져 가면 brain-flak에 표시된 것처럼 대괄호 세트를 사용해야합니다. 문자 1과 2를 사용할 수 없습니다
합리적이다
입력은 항상 하나의 목록 안에 있지만 프로그램은 입력 외부의 암시 적 목록 레이어를 가정 할 수 있습니다 (예 : () () () = (() () ())). 그렇지 않을 수도 있습니다. 예는 명시적인 외부 목록과 함께합니다
산출:
목록, 튜플 또는 문자열 등이 될 수 있습니다. 메타 합의와 같이 합리적인 출력 형식을 사용할 수 있습니다.
예:
(()()()) = [3]
(((()))) = [0,[0,[1]]]
((())()(())) = [1, [1], [1]]
() = invalid input, if the outside bracket is explicit.
((((())())())(())()) = [1, [1, [1, [1]]], [1]]
입력이 엄격하지는 않습니다. 이러한 입력은 다음과 같습니다.
[[],[],[]]
[[[[]]]]
[[[]],[],[[]]]
[]
[[[[[]],[]],[]],[[]],[]]
또는 다른 합리적인 형식
설명 된 테스트 사례 :
(()()((())())())
이것을 "슬픈"하기 위해, 우선 우리는 ()
()() ()
( ((())()) )
3. 그런 다음 제거하고 시작 부분에 3을 추가하십시오.
(3,((())()))
이 목록에는 하나의 목록이 있습니다. 우리는 이것을 슬프게한다
((())())
몇 개입니까?
()
((()) )
1. 시작시 1을 제거하고 추가합니다
(1,(()))
여기에 하나의 목록이 있습니다
(())
카운트
()
( )
카운트 제거 및 추가
(1)
우리는 이것을 다시 목록에 넣습니다.
(1,(1))
우리는 이것을 다시 목록에 넣습니다.
(3,(1,(1)))
끝난
이것은 code-golf 이므로 짧을수록 좋습니다.
((((())())())(())()) = [1, [1, [1, [1]], [1]]
있어야 한다고 생각 합니다 ((((())())())(())()) = [1, [1, [1, [1]]], [1]]
.