배경
Fractran 은 John Conway가 발명 한 난해한 Turing-complete 프로그래밍 언어입니다. Fractran 프로그램은 정렬 된 분수 목록으로 구성됩니다. 프로그램은 단일 정수를 입력으로 사용하여 시작합니다. 프로그램의 각 반복마다 숫자에 해당 분수를 곱하면 다른 정수가 생성되도록 첫 번째 분수를 목록에서 검색합니다. 그런 다음 목록 시작 부분부터 다시 시작하여 새 번호로이 프로세스를 반복합니다. 목록에 숫자와 곱할 수있는 분수가 없으면 프로그램이 종료되고 숫자를 출력으로 제공합니다.
Fractran이 Turing-complete 인 이유는 레지스터 시스템을 시뮬레이션하기 때문입니다. 숫자의 소인수 분해는 레지스터의 내용을 저장하는 반면, 나누기와 곱셈은 레지스터에서 조건부로 더하고 빼는 방법입니다. Wikipedia 기사 (위 링크)를 읽는 것이 좋습니다.
도전
태스크는 STDIN에서 유효한 Fractran 프로그램을 유일한 입력으로 가져 와서 Fractran 프로그램을 시뮬레이트하는 유효한 BF 프로그램을 STDOUT에 생성 할 수있는 가장 짧은 프로그램을 작성하는 것입니다. BF로 Fractran 프로그램을 시뮬레이션 할 수있는 두 가지 방법이 있습니다.
참고 : 귀하의 답변은 BF 프로그램이 아닙니다. 귀하의 답변은 주어진 Fractran 프로그램에서 BF 프로그램을 생성하는 코드입니다. 목표는 BF 프로그램을 Fractran 프로그램과 동일하게 만드는 것입니다. (기술적으로 당신은 BF에서 경쟁을 할 수 있지만 어려울 것입니다)
옵션 1
프로그램은 다음을 수행하는 BF 프로그램을 출력해야합니다.
- Fractran 프로그램에 대한 입력 인 해당 ASCII 문자 (BF 입력 작동 방식으로 인해) 형식으로 STDIN에서 정확히 1 개의 숫자를 가져옵니다.
- Fractran 프로그램에서 출력되는 해당 ASCII 문자 형식으로 정확히 1 개의 숫자를 STDOUT에 인쇄합니다.
이 옵션은 Fractran 가상 머신의 정확한 입력 및 출력을 나타냅니다.
옵션 2
프로그램이 생성하는 BF 코드는 다음을 수행해야합니다.
- 메모리에 이미 인코딩 된 숫자를 소인수 분해하여 (프로그램을 실행하기 전에) 입력하십시오. 입력이 28 (2 * 2 * 7)이면 두 번째 셀에는 2의 값이 있고 일곱 번째 셀에는 1의 값이 있습니다 (포인터는 셀 0에서 시작). 다른 모든 셀은 0이됩니다.
- 프로그램이 종료 될 때 메모리에 인코딩 된 출력을 소인수 분해하여 출력하십시오. 출력이 10이면 각 셀 2와 5에 1의 값이 있어야합니다. 다른 모든 소수 셀은 값이 0이어야합니다. 다른 세포의 내용은 중요하지 않습니다.
이 옵션은 Fractran 언어 뒤에있는 컴퓨팅 모델을 나타냅니다.
규칙 및 요구 사항
- 입력 (프로그램 상단)은 STDIN의 분수 목록입니다. 분자와 분모 사이에 쉼표가있는 한 줄에 하나의 분수가 있습니다. 빈 줄은 입력 끝을 나타냅니다. 분수는 항상 가장 낮은 항으로 줄어 듭니다.
- 프로그램의 출력은 STDOUT에 대한 단일 라인의 유효한 BF 프로그램이어야합니다. 이 프로그램은 두 가지 옵션 중 하나에 따라 특정 Fractran 프로그램을 시뮬레이션 할 수 있어야합니다. 모든 입력에 대해 생성 된 BF 프로그램은 Fractran 프로그램과 동일한 출력을 생성 할 수 있어야합니다.
- 선택한 옵션을 명시해야합니다.
- BF 메모리 및 테이프의 범위와 랩핑 여부를 선택할 수 있습니다
- 코드 골프. 또한 출력 된 BF 프로그램의 크기는 중요하지 않으며 변환을 수행하는 프로그램의 크기 만 중요합니다.
- 프로그램은 인쇄 가능한 ASCII로만 구성되어야합니다.
어딘가 모호하다면 주저하지 말고 물어보십시오. 이것은 설명하기가 매우 어려운 문제입니다.
또한 프로그램이 작동하는지 쉽게 확인할 수 있도록 다음과 같은 입력을 위해 프로그램에서 생성 된 BF 코드를 게시하십시오.
33,20
5,11
13,10
1,5
2,3
10,7
7,2
이 프로그램은 숫자의 이진 확장에서 1의 수를 계산합니다. 그러나 모든 Fractran 프로그램에서와 같이 입력 및 출력이 이상하게 형식화됩니다. 입력은 2 ^ A 형식이며 출력은 13 ^ B 형식입니다.