퍼플 인터프리터 골프
자주색 은 두 가지 주요 목적으로 설계된 esolang입니다.
- Aubergine을 최소화하기 위해서는 주변에 자체 수정 한 명령 언어가 충분하지 않기 때문입니다.
- 매우 작은 골프 통역사 의 가능성을 인정합니다 . 합리적인 기능을 갖춘 Python 2 인터프리터의 첫 번째 패스는 702 바이트에 불과하며 경험이 많은 골퍼가 그로부터 약간의 면도를 할 수 있다고 확신합니다.
귀하의 목표는이 언어에 대한 통역사를 작성하는 것입니다.
퍼플에 대한 정보 :
자주색 프로그램은 프로그램의 첫 번째 문자가 주소 0에 위치하도록 주소를 지정할 수있는 무한한 메모리 배열에 배치 된 일련의 문자입니다. 배열의 나머지 부분 (Purple 프로그램이 저장되기 전과 후)은 0으로 초기화됩니다.
Purple에는 a 및 b 및 i 라는 3 개의 레지스터가 있으며 , 각각의 레지스터 는 부호있는 정수를 보유 할 수 있으며 0으로 초기화됩니다. i 도 명령 포인터이며 항상 현재 실행중인 Purple 명령을 가리 킵니다.
각 사이클에서 인터프리터는 명령 포인터로 표시된 메모리 위치에서 시작하여 3 개의 연속 문자 시퀀스를 읽고이 시퀀스를 퍼플 명령으로 실행하려고 시도합니다. 그 후 명령 포인터는 항상 3 씩 증가합니다.
구문 상, Purple 명령어는 " xyz " 와 같이 한 행에 3 개의 문자 (또는 그 인코딩)로 구성됩니다 .
첫 번째 문자 x 는 다음 중 하나 일 수 있습니다.
abABio
이 기호의 의미는 다음과 같습니다.
a - Place the result in register a.
b - Place the result in register b.
A - Place the result in the location in memory referred to by register a.
B - Place the result in the location in memory referred to by register b.
i - Set the instruction pointer to the result.
o - Output the result to stdout.
다른 두 바이트 y 및 z 는 다음 중 하나 일 수 있습니다.
abABio1
이러한 각 기호는 다음과 같은 의미를 갖습니다.
a - Return the contents of register a.
b - Return the contents of register b.
A - Return the contents of the memory array at the address stored in register a.
B - Return the contents of the memory array at the address stored in register b.
i - Return the contents of register i (the instruction pointer).
o - Return the value of a single character read from stdin.
1 - Return the literal numeric value 1.
명령을 인출 한 후, 퍼플 인터프리터 평가할 것이다 Y 그리고 Z를 , 감산 결과 (Z)이 결과로부터 Y , 다음 작업이 수행로 나타낸 X 차이에서.
세 문자 시퀀스 (또는 그 인코딩)가 유효한 Purple 명령어가 아닌 경우, 인터프리터는 오류없이 즉시 중단됩니다.
통역사는 :
- 기능이 아닌 완전한 프로그램이어야합니다.
- EOF를 읽지 않으면 stderr로 출력하지 마십시오 .
- 아래 주어진 테스트 프로그램을 포함하여 매우 많은 수를 포함하지 않는 잘 구성된 모든 입력에 대한 참조 구현과 동일하게 작동하십시오. (음, 타이밍에 동일하게-느리게 실행될 수는 있지만 너무 많이 실행할 수는 없습니다!)
프로그램을 원하는 형식으로 인터프리터에 제공 할 수 있습니다. 파일에서 읽거나 프로그램에 문자열로 포함 시키거나 stdin에서 읽습니다.
테스트 사례 :
프로그램
ooo
입력으로 실행할 때
z!
양보해야한다
Y
프로그램
bbboobiii
입력으로 실행할 때
It's a cat program.
(또는 다른 입력)
It's a cat program.
(또는 수신 된 모든 입력) 그런 다음 다시 시작하고 동일한 작업을 다시 수행하십시오 .
프로그램
Aoab11bi1bABoAaiba
입력으로 실행할 때
0
양보해야한다
0
그런 다음 정지하지만 입력으로 실행하면
1
계속 출력해야합니다
1
영원히.
프로그램
b1bbb1oAbabaa1ab1Ab1Bi1b
양보해야한다
b1bbb1oAbabaa1ab1Ab1Bi1b
프로그램
aA1aa1bb1oAbbi1bb1bbAb1Bi1b Purple is the awesomest! Why haven't you tried it yet?
!dlroW ,olleG
양보해야한다
Hello, World!
채점 :
이것은 code-golf 이므로 다음 보너스로 잠재적으로 수정 된 바이트 단위의 가장 짧은 소스가 승리합니다.
보너스:
- 인터프리터가 stdin 또는 명령 행 인수에서 파일 이름을 읽고 파일에서 프로그램을로드하는 경우 -10 %
uint32
, 문자에는 정수를, 정수에는 MAXINT 를 사용해야 합니다.