배경
(진정하고 감동적인 이야기를 바탕으로)
저는 Lisp와 비슷한 언어로 자주 놀았습니다. 나는 그들과 함께 쓰고, 실행하고, 해석하고, 디자인하고, 나를 위해 기계를 쓰도록 만들었습니다 ... 그리고 나를 괴롭히는 것이 있다면, 특정 형식 스타일을 따르지 않는 Lisp를보고 있습니다.
불행히도 일부 텍스트 편집기 ( 기침 XCode 기침 )는 코드를 복사하여 붙여 넣을 때마다 아름다운 탭과 공백을 제거하는 경향이 있습니다 ...
(A
(B
(C)
(D))
(E))
( ABCDE
임의의 기능이있는 곳)
일부 텍스트 편집기는이 멋진 코드를 다음과 같이 정돈 합니다.
(A
(B
(C)
(D))
(E))
엉망이야! 읽을 수 없습니다!
도와 줘요?
도전
이 과제의 목표는 아래에 설명 된 형식으로 줄 바꿈으로 구분 된 일련의 함수를 사용하여 가독성과 우아함을 강조하는보다 아름다운 배열을 반환하는 것입니다.
입력
F
arity N
인수 의 함수 를 다음과 유사한 구조로 정의합니다 .
(F (G1 ...) (G2 ...) (G3 ...) ... (GN ...))
G1, G2, ..., GN
그 자체로 모든 기능이 어디에 있습니까 ? arity 0
함수 A
는 간단 (A)
하지만 arity 2
함수 B
는 형식입니다(B (...) (...))
코드는 모든 함수의 선행 괄호 앞에 첫 번째 줄 바꿈이있는 일련의 함수로 입력을 가져와야합니다 (첫 번째 함수 제외). 위의 예는 유효한 입력입니다.
당신은 가정 할 수 있습니다 :
- 괄호는 균형을 이룹니다.
- 함수는 250 번 이상 들여 쓰기 할 필요가 없습니다.
- 모든 기능은 괄호로 묶습니다.
()
- 함수 이름에는 인쇄 가능한 ASCII 문자 만 포함됩니다.
- 함수 이름에는 괄호 나 공백이 포함되지 않습니다.
- 입력에 선택적인 후행 줄 바꿈이 있습니다.
출력
코드는 동일한 함수 집합을 출력해야 합니다. 여기서 변경되는 유일한 함수는 선행 괄호 앞에 공백이나 탭을 추가하는 것입니다. 출력은 다음 규칙을 준수해야합니다.
- 주어진 첫 번째 함수 (및 이후 최상위 함수)에는 선행 공백이 없어야합니다.
- 함수의 가로 위치에 대한 인수는 해당 함수의 가로 위치 오른쪽에 정확히 하나의 탭입니다.
- 탭은 구현에 따라 정의되지만 3 칸 이상이어야합니다.
- 각 줄 다음에 최대 2 개의 공백을 선택적으로 인쇄 할 수 있습니다.
규칙
- 이것은 코드 골프입니다. 가장 짧은 코드가 승리합니다!
- 표준 허점 은 허용되지 않습니다.
예
입력:
(A
(B
(C)
(D))
(E))
산출:
(A
(B
(C)
(D))
(E))
입력:
(!@#$%^&*
(asdfghjklm
(this_string_is_particularly_long
(...))
(123456789)))
(THIS_IS_TOP_LEVEL_AGAIN
(HERE'S_AN_ARGUMENT))
산출:
(!@#$%^&*
(asdfghjklm
(this_string_is_particularly_long
(...))
(123456789)))
(THIS_IS_TOP_LEVEL_AGAIN
(HERE'S_AN_ARGUMENT))
입력:
(-:0
(*:0
(%:0
(Arg:6)
(Write:0
(Read:0
(Arg:30))
(Write:0
(Const:-6)
(Arg:10))))
(%:0
(Const:9)
(/:0
(Const:-13)
(%:0
(Arg:14)
(Arg:0)))))
(WriteArg:22
(-:0
(Const:45)
(?:0
(Arg:3)
(Arg:22)
(Arg:0)))))
산출:
(-:0
(*:0
(%:0
(Arg:6)
(Write:0
(Read:0
(Arg:30))
(Write:0
(Const:-6)
(Arg:10))))
(%:0
(Const:9)
(/:0
(Const:-13)
(%:0
(Arg:14)
(Arg:0)))))
(WriteArg:22
(-:0
(Const:45)
(?:0
(Arg:3)
(Arg:22)
(Arg:0)))))
()
?