돌연변이 강화 퀴네


15

당신의 임무는 자체 소스를 인쇄하는 프로그램을 만드는 것입니다.

"이봐, 우리는 이미이 도전에 직면 해있다. 그리고 수많은 변형이있다! 왜 또 다른 도전을하고 있는가?" 당신은 요청할 수 있지만, 이것은 가장 어려운 것 중 하나가 될 것입니다 (어쨌든).

quine은 "mutation-hardened"이어야합니다. 즉, quine은 해당 문자 중 하나라도 복제 된 경우에도 원본 프로그램의 소스 코드를 출력해야합니다.

예를 들어, quine이있는 경우 (다음 예는 어떤 언어로도 작성되지 않았으며 단지 의사 코드 임) :

abcd

이러한 프로그램은 모두 출력해야합니다 abcd.

aabcd
abbcd
abccd
abcdd

(각 프로그램에서, a, b, cd각 문자가 중복 일본어 문자 바로 뒤에 배치 된 즉, 현재 위치에서 중복된다.)

규칙 :

  • 표준 퀴니 규칙이 적용됩니다.
  • 멀티 바이트 문자는 하나의 문자로 계산되며 문자가 복제 될 때 해당 바이트로 "분할"되지 않습니다.

이것은 이므로 바이트 단위의 가장 짧은 코드가 승리합니다!


이것이 중요합니까? 0그리고 00CJam에서 두 출력 0.
geokavel

아니오, 0적절한 퀘인이 아닙니다.
Dennis

2
나는 그것이 코드 볼링
Mr. Xcoder

코드 돌연변이 문제는 일반적으로 해결할 수 있습니까? 따옴표로 묶인 문자열 내의 문자에 돌연변이가 발생하지 않으면 일반적으로 프로그램이 손상됩니다.
hasen

제목이 약간 오도되지 않습니까? "돌연변이 (Mutation)"는 반복하지 말고 변경하는 것을 제안합니다
Luis Mendo

답변:


18

> <> , 56 바이트

^
.
+
8
f
0
o
a
o
~
:
?
~
:
?
:
-
*
4
8
:
^
^
}
*
3
d
'

온라인으로 사용해보십시오! 또는 모든 돌연변이를 확인하십시오 .

원래 프로그램의 작동 방식 (오래된)

인터프리터는 셀 (0, 0) 에서 시작합니다 . ^방향을 위쪽으로 설정하면 명령 포인터 (IP)가 셀 (0, 20)로 둘러싸 입니다.

'문자열 모드를 활성화합니다. 다음 '문자가 나타날 때까지 IP 아래의 모든 문자가 스택에서 푸시됩니다. '감싸고 나면 같은 것이 다시 발견되므로

d3*}^^:84*=?~oao0f.^

IP는 (0, 19)에 도달 하고 여전히 위쪽으로 올라갑니다. 실행 d3*}푸시 13 = 0xd 이어서, 3 , 곱셈은 두 값 ( 39 / 작은 따옴표 ), 그 오른쪽의 스택을 회전시킨다. 이렇게하면 스택이 다음과 같이 남습니다.

'd3*}^^:84*=?~oao0f.^

다음 두 명령어 ( ^)는 현재 아무 것도하지 않습니다.

:84*=스택의 상단을 복제하고 84를 밀어서 곱한 다음 ( 32 / 공백 ), 복제 된 문자가 공간 과 동일한 지 테스트합니다 . 변경되지 않은 프로그램의 경우 항상 0을 누릅니다 .

?스택 맨 위가 잘못된 경우 다음 명령어를 건너 뜁니다. 원래 프로그램의 경우 항상 그렇기 때문에 ~항상 건너 뜁니다.

oao팝 스택의 상부를 인쇄 미는 10 / 바꿈 후 꺼내어 인쇄 바꿈 .

마지막으로 스택의 다음 문자부터 시작 0f.하여 셀 (0, 15) (맨 아래 ^)로 이동합니다.

스택이 비면 전체 소스 코드가 인쇄 된 것입니다. :실패하고 프로그램이 종료됩니다.

변형 된 프로그램 작동 방식 (오래된)

줄 바꿈이 아닌 문자를 복제하면 프로그램이 가로로만 확장됩니다. 프로그램이 수직으로 실행되므로 이러한 추가 명령어는 절대 실행되지 않습니다.

최저 속도 이전에 라인 피드를 복제하면 ^(0, 14)(0, 15)(0, 15)(0, 16)으로 이동 합니다. 0f.이제 가장 아래에있는 셀로 이동합니다. ^또한 ^이므로 프로그램은 시프트의 영향을받지 않습니다.

마지막으로 중복 된 줄 바꿈 문자도 문자열을 변경합니다. 짧은 줄은 공백으로 채워 지므로 32 / 공간 이 줄 바꿈 위치에 삽입됩니다. 공간을 위해 184*=푸시 하므로 다음 명령을 건너 뛰지 마십시오. 이 경우에는 공백을 팝핑하여 버립니다 . 따라서 다음 은 공백 위에 문자를 인쇄합니다 .?~o


줄 바꿈을 복제해도 여전히 작동합니다.
Dennis

3
오, 나는 게시물을 제대로 읽지 못했습니다 : P (Dammit Dennis, 왜 그렇게 잘
지내십니까


@ jimmy23013 수정해야합니다.
Dennis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.