이 문제에서는 대한 통역 쓸 것 2 Ω (로 전사 TwoMega ), 느슨하게 기반으로하는 언어 브레인 퍽 무한 차원의 저장 공간을.
언어
2 Ω는 상태의 세 조각을 포함
테이프 비트의 무한리스트이며,는 모두 0으로 초기화는 좌측의 요소, 우측 요소하지만있다.
메모리 포인터 테이프의 요소의 지표 인 음이 아닌 정수이다. 더 높은 메모리 포인터는 오른쪽에있는 테이프 셀을 나타냅니다. 0의 메모리 포인터는 가장 왼쪽의 요소를 나타냅니다. 메모리 포인터는 0으로 초기화됩니다.
하이퍼 큐브 개념적이며 ∞ 하이퍼 큐브의 폭을 단지 2 셀마다 차원 결합하지만, 치수의 무한의 수를 의미한다 0으로 초기화 비트를 포함 각각의 셀의 차원 "박스" 세포는 셀 수 없습니다 .
하이퍼 큐브에 대한 인덱스 는 하이퍼 비트의 셀을 참조하는 무한 비트 목록입니다 (유한 차원의 하이퍼 큐브를 참조하기 위해 유한 비트 목록을 사용할 수있는 것과 동일 함). 테이프는 무한 비트 목록이므로 전체 테이프는 항상 하이퍼 큐브의 요소를 나타냅니다. 이 요소를 referent 라고합니다 .
2 Ω는 7 개 개의 다른 문자에 의미를 제공합니다 :
<
메모리 포인터를 1 씩 줄입니다. 0 미만으로 줄이면 정의되지 않은 동작이므로 처리 할 필요가 없습니다.>
메모리 포인터를 1 씩 증가시킵니다.!
지시자에서 비트를 뒤집습니다..
지시자에서 비트를 출력합니다.^
테이프의 메모리 포인터가 가리키는 셀 의 비트를 참조하는 비트 의 역수 로 바꿉니다 .[x]
x
참조의 비트가 1 인 한 코드 를 실행합니다 .
도전
작업은 문자열을 입력으로 사용하고 해당 입력을 2Ω 프로그램 으로 실행하는 프로그램을 작성하는 것 입니다.
이것은 코드 골프따라서 가장 짧은 유효한 답변 (바이트 단위로 측정)이 이깁니다.
노트
- 당신은 프로그램이 전적으로 문자로 구성된다고 가정 할 수 있습니다
<>!.^[]
그리고 그것은[]
제대로 중첩됩니다. - 통역사는 시스템의 사용 가능한 메모리에 의해서만 제한되어야합니다. 적절한 시간 내에 샘플 프로그램을 실행할 수 있어야합니다.
샘플 프로그램
인쇄 1 :
!.
인쇄 010 :
.!.!.
0을 영원히 인쇄 :
![!.!]
0을 영원히 인쇄하거나 !
앞에 붙인 경우 1을 영원히 인쇄합니다 .
[.]![!.!]
cat
프로그램 작성에 대한 귀하의 초대 : 입력을위한 지시가없는 것 같습니다.
.
-단일 0을 인쇄 한 다음 존재합니다. !^!.
-하나를 인쇄 한 다음 종료합니다. 그래도 더 좋을 것입니다. 현재 제출물을 확인하기 위해 제출물을 이해해야합니다 (따라서 투표하십시오!)
[0,0,0,0,0,0,0...]
(즉 !
, 프로그램 시작시 a의 존재) 주어집니다 .
[.]![!.!]
셀의 값을 영원히 인쇄 할 수 있습니다
1
테이프 의 s 수가 항상 유한하기 때문에 스토리지 셀 수는 실제로 계산할 수 없습니다 . 실제로, 자연수와 테이프 상태 (테이프 내용을 역방향 이진 숫자로 해석) 사이에 상당히 간단한 삭제가 있는데, 이는 Hypercube가 기본적으로 무한 1D 배열이며 정수 포인터 값의 비트 를 플립 하여 액세스 함을 나타냅니다. , brainfuck에서와 같이 / 감소 대신에.