자체 성장 코드 코덱 코디 코덱 동일합니다. 프로그램 체인은 무기한

실행될 때 P1보다 정확히 1 바이트 더 긴 동일한 언어의 다른 프로그램 P2를 출력하는 프로그램 (또는 함수) (P1이라고 함)을 작성하십시오.

프로그램 P2가 실행될 때 P2보다 1 바이트 긴 세 ​​번째 프로그램 P3을 출력해야합니다. P3은 P3보다 1 바이트 더 긴 프로그램 P4를 출력해야합니다. P5, P6, …, P∞와 동일합니다.

프로그램 체인은 무기한 또는 통역사가 더 이상 처리 할 수없는 장소로 이동해야합니다 (그러나 언어 적으로 이론적으로 유효한 프로그램으로 유지되어야 함)

규칙

  • 금지 된 표준 허점
  • 체인의 모든 프로그램은 한 언어로되어 있어야합니다
  • 입력이 없습니다. 출력이 stdout 또는 함수 반환 값으로 이동
  • 일정 기간이 지나면 프로그램이 종료되어야합니다. 특정 시간대 이후에 출력 생성을 중지하지만 종료되지 않는 프로그램은 자격이 없습니다

각 언어에서 가장 짧은 프로그램 P1이 이깁니다!



답변

자바 스크립트 (ES6), 14 12 바이트

@Shaggy 덕분에 -2 바이트

f=_=>"f=_"+f

스 니펫 테스트

코드 스 니펫 표시


답변

ASCII 7 바이트, 4 바이트

1603

온라인으로 사용해보십시오!

7은 일반적으로 ASCII로 인코딩되지 않지만 이번에는보다 편리한 인코딩이므로 3 비트가 아닌 각 실행마다 1 바이트를 추가합니다.

또한 이것이 부정 행위로 간주되는지 확실하지 않습니다. (여러 가지 방식으로 경계선을 가로 지르는 7 quine이 바람을 피우고 있는지 여부는 불분명합니다.) 0인코딩 을하는 적절한 주장을 할 수 6있지만 일반적으로 결과 문자가 어디에서 나오는지 확실하지 않습니다. “는 7 개에 매우 기괴하고 암묵적인 행동이 많기 때문입니다.

이 프로그램은 1추가 된 상태로 인쇄 되며 여러 개의을 추가하더라도 그렇게 1합니다. 주석 처리 된 디버그 추적은 160311다음 과 같습니다.

|| 160311      Initial data ||; initial program 160311
||7 60311      1 command = append 7 to data
|1 0311        6 command = escape from the last | onwards (7 escapes to 1)
|16e77         0311 commands = append 6e77 to data
|16e77 16e77   Implicit (program is empty): copy data past last | to program
|16e777 6e77   1 command = append 7 to data
71603111 e77   6 command = escape from the last | onwards
71603111 e77   e7 command = output in same encoding as the source

( |프로그램에 남은 것이 없으므로 e프로그램을 부작용으로 즉시 종료합니다. 즉, 최종 7프로그램이 실행되지 않습니다).

모든 문자가 어디에서 오는지에 대한 기본적인 혼란은 7의 대부분의 명령이 실행될 때 데이터를 6생성 한 다음 주어진 데이터 조각을 생성하는 일련의 명령을 재구성하려고 시도한다는 것입니다. 이것은 종종 원본에 가깝지만 동일하지는 않습니다. quining 목적을 위해 일반적으로 결과가 거의 동일하고 일반적으로 선행 또는 후행과 다른 방식으로 7 프로그램을 작성합니다 7. 예를 들어 1데이터 716에서는 가장 쉬운 방법입니다 1현재 데이터 문자열로. 우리는 원래 16다른 (그러나 비슷한) 문자 시퀀스로 그것을 생성하여 파괴적으로|데이터가 시작된 마커. (나는 이것이 문자 그대로의 quine이 아니라는 가장 좋은 주장은 출력이 입력과 다르다는 것입니다!)


답변

하스켈 , 74 66 바이트

편집하다:

  • -2 이용하여 바이트 H.PWiz <>후, -6을 이동 (10*)<$>.

이제 새로 무료 <>연산자를 사용합니다 ( Semigroup곱셈, 가져 오기없이 작동하려면 GHC 8.4 필요).

main=putStr$fst<>show$(10*)<$>("main=putStr$fst<>show$(10*)<$>",1)

온라인으로 사용해보십시오! (TIO에 아직 GHC 8.4가 없기 때문에 가져 오기로 치트합니다.)

작동 원리

  • main=putStr$ 다음 문자열 값을 출력하는 상용구입니다.
  • fst<>show튜플을 가져 오는 함수이며 튜플의 문자열 표현과 연결된 튜플의 첫 번째 요소로 구성된 문자열을 반환합니다. 즉

    (fst<>show)(s,t) = fst(s,t)<>show(s,t) = s++show(s,t)
  • (10*)<$>다음 튜플 의 마지막 요소에 10을 곱하여 숫자 0를 문자열 표현에 추가합니다 .


답변

C (gcc) , 134132 바이트

표준 C quine의 약간의 재 작업. 엄청나게 길다.

x;*s="x;*s=%c%s%c;main(i){for(i=__LINE__;i--;puts(&x));printf(s,34,s,34);}";main(i){for(i=__LINE__;i--;puts(&x));printf(s,34,s,34);}

온라인으로 사용해보십시오!


답변

분열 2 , 7 바이트

'!+OR!"

온라인으로 사용해보십시오!

표준 Fission quine 이지만 !각 반복에서 코드 시작 부분에 추가 0x01을 인쇄하는 추가 기능이 있습니다.


답변

Pari / GP , 35 바이트

(f=(x)->print1("(f="f")("1x")"))(1)

온라인으로 사용해보십시오!


답변

파이썬 2 , 38 바이트

s="print's=%r;exec s'%(s+'#')";exec s

온라인으로 사용해보십시오!