베타로드 , 203 바이트
명확성을 위해 줄 바꿈이 추가되었습니다.
(a(:^)*(!()):#(}:(:)~^a((::*:**:*)*)~*(~*)*~(*)~^a*(*)*{)>(0)(!()){:^}(1)(){:^}(2)(:*){:^}(
3)(::**){:^}(4)(:*:*){:^}(5)(::*:**){:^}(6)(:*::**){:^}(7)(::*::***){:^}(8)(:*:*:*){:^}(9)(
::**::**){:^}R^^S):^
나는 Underload 응답이 일반적으로하는 것처럼 스택의 상단이 아닌 STDIN에서 읽어야한다는 제한을 스스로에게주었습니다. 또한 적절한 십진수 입력을 사용하여 대부분의 코드를 구성합니다.
설명:
나는 quine - 래퍼에서 프로그램을 마무리 : (a(:^)*
와 ):^
. 이는 quine wrapper 내부의 모든 코드가 스택의 맨 아래에 프로그램의 소스 코드를 갖음을 의미합니다.
숫자를 일반적인 교회 숫자로 변환하기 위해 각 숫자를 코드로 바꾸어 10을 곱하고 그 숫자를 추가하는 기술을 사용합니다.
0 -> (::*:**:*)*
1 -> (::*:**:*)*(:)~*(*)*
2 -> (::*:**:*)*(::)~*(**)*
3 -> (::*:**:*)*(:::)~*(***)*
여기에는 많은 반복이 있으므로, 스택의 맨 위에서 교회 번호를 가져 와서 "숫자 문자열"을 구성하는 데 사용하는 서브 프로그램으로 패키지를 만들어 보자.
:(:)~^a((::*:**:*)*)~*(~*)*~(*)~^a*(*)*
나는 이것을 신속하게 액세스 할 수 있도록 새로운 환경에 넣었습니다.
#(}:(:)~^a((::*:**:*)*)~*(~*)*~(*)~^a*(*)*{)>
이제에 대한 대체 코드를 만들 수 있습니다 R
. R
스택의 최상위 요소를 사용하여 STDIN의 문자열을 Betaload 코드로 바꾸는 조회 테이블을 구성합니다. 다음과 같이 작동합니다.
()
(0)(code for 0)
(1)(code for 1)
(2)(code for 2)
...
R
그러나 방금 만든 서브 프로그램을 사용하여 코드 세그먼트를 생성 할 수 있습니다.
(0)(!()){:^}
(1)(){:^}
(2)(:*){:^}
(3)(::**){:^}
...
R
실행 되면 입력 값을 교회 숫자를 구성하는 일련의 서브 프로그램으로 변환합니다. 이 서브 프로그램이 실행될 때 스택의 다음 요소 (0은 이전에 위치)에 Church 숫자를 작성합니다. 이는 R^
스택의 최상위 값이 교회 숫자가 됨을 의미합니다 . 그런 다음 ^
스택의 마지막 요소 (프로그램 소스 코드)에 Church 숫자를 적용하여 답을 얻습니다.
재미있는 사실 : 몇 달 동안이 제출에 대한 MD를 받았습니다. 나는 더 이상 찾을 수없는 질문을 오해 한 후에 그것을 유지했다. 휴지통에서 발굴하여 여기에 게시해야했습니다.