7 , 31 자, 30 점, 안전하지만 고장 났습니까?
7 프로그램은 일반적으로 숫자이지만 공백을 포함하여 여러 숫자로 나눌 수 있습니다. 따라서이 제출은 두 개의 숫자 (7 인터프리터에 의해 내재적으로 연결됨)로 구성되며 프로그램은 표준 입력을 통해 두 개의 숫자를 입력으로 사용합니다. (머리글의 "31 자"는 두 숫자의 총 길이에 공백 문자 하나를 더한 것입니다. 숫자를 구성하는 숫자는 프로그램으로 사용될 때는 8 진수로 해석되지만 입력으로 사용될 때는 10 진수로 해석됩니다. 실제 숫자가 아닌 두 가지 경우에 동일한 숫자입니다. 프로그램으로 취급하거나 입력으로 취급 할 때 공백이나 줄 바꿈으로 구분하든 관계없이 관련이 없습니다. 제출을 무효화하지 않습니다.)
예상되는 출력은 다음 숫자입니다 (7 개의 인터프리터가 사용하는 출력 형식이므로 여기에 10 진수로 표시됨).
238363505302130098723162537059
Esolang 위키에서 링크 된 7 개의 인터프리터는 내부적으로 숫자를 단항으로 저장합니다. 즉, 실제로 자신이하는 일을보기 위해 프로그램을 실제로 실행할 수있는 충분한 메모리가 없을 것입니다. 프로그램의 동작을 수동으로 해결하고 소량의 입력으로 테스트하여 예상대로 작동하는지 확인함으로써 프로그램을 검증했습니다. 다른 방법은 더 효율적인 숫자 저장 방법을 사용하는 인터프리터를 작성하는 것입니다.
여기서 균열을 피하는 것은 고통스러운 일이지만, 이제는 프로그램 자체의 숫자 이외의 두 숫자가 238363505302130098723162537059를 출력으로 생성 할 수 없다는 사실에 만족했습니다. ( 1 주일 후 편집 : 질문 해석 방식에 따라 틀렸을 수 있습니다. 아래를 참조하십시오. )
해결책
원래 프로그램은 다음과 같습니다.
711170237403706
111723603700633
엑스와이3 x y− y− 2와이( 3 x − 1 ) − 2x = 711170237403706와이= 111723603700633238363505302130098723162537059
다음과 같은 이유로 인해 다른 입력이 원하는 결과를 제공하지 않습니다.
y(3x−1)−2=238363505302130098723162537059y(3x−1)=238363505302130098723162537061111723603700633213351071221111721335107122111173x−1(3×711170237403706)−1=2133510712211117xy
그러나 질문을 해석하는 방법에 따라 원하는 출력을 생성하는 두 번째 입력이있을 수 있습니다 (따라서이 솔루션을 무효화 함).
113x−1x79454501767376699574387512354189)는 7 개의 프로그램에 대한 문자 세트에 없습니다. 따라서 입력이 프로그램과 동일한 문자 세트로 제한되는 경우이 솔루션은 유효합니다. 그러나 프로그램 문자 세트 외부의 문자를 포함하는 입력이 허용되는 경우이 솔루션은 유효하지 않습니다.
설명
의도 한 솔루션의 작동 방식은 다음과 같습니다.
711170237403706 111723603700633
7 7 7 스택 요소 분리기
111 0403 403706 111723603700633 초기 스택 요소
111 항 3 번, 단항
"숫자 입력"을위한 023 I / O DSL
403706 111723603700633 메인 프로그램
(암시 적 : 원본을 유지하면서 기본 프로그램 요소 의 사본 을 실행하십시오. )
40 {프로그램} 위의 {023} 스왑
3 {023}을 사용하여 I / O를 수행하십시오. 팝 {프로그램}
0 I / O : 숫자
23 {111}을 여러 번 복사하여 숫자를 입력하십시오.
706 숫자에 "6"을 붙입니다 (감소)
11 두 개의 빈 스택 요소를 밀어 넣습니다.
17236 스택 요소 "23"푸시 (이스케이프되지 않음)
0 빈 요소를 소비하는 {23} 탈출
3 {23}을 사용하여 I / O를 수행하십시오. 팝 {아래 요소}
23 스택 입력 상단을 여러 번 복사
7006 "66"추가 (즉, 빼기 2)
3 출력 {수}
3 프로그램을 종료합니다 (낮은 스택으로 인해)
1
7
0
6
66
12345
3123451234512345