이중 의무 quine : quine! dlroW, olleH


13

실행될 때 자체 소스 코드를 출력하는 프로그램을 작성하십시오. 쉬운 것 같아요?

중요한 점은 소스 코드가 바뀌면 프로그램이 "Hello, World!"를 출력해야한다는 것입니다. 따옴표없이 정확하게.

이것은 코드 골프이므로 바이트 수가 가장 적습니다.

편집 : 당신의 quine은 적절한 quine이어야합니다.



4
@Mego는 공정하게 말하지만, 이것은 "내 소스 코드의 인쇄 기능 X"가 아니기 때문에 내가 이야기하고있는 일반화 된 종류가 아닙니다. 그것은 아마도 우리가 가진 "프로그램을 뒤집을 때 ..."도전과는 다른 방식으로 재생되지 않을 것이라고 말했다.
Martin Ender

1
@ MartinBüttner 그것은 동일한 추론이 적용된다고 생각하는 도전과 충분히 유사합니다.
Mego

답변:


8

Y, 19 바이트

Upxp"!dlroW ,olleH"

UU다음 U에 충족 될 때까지 ( 이 경우 소스 코드) 까지 문자열을 캡처합니다 . p항목을 인쇄 x하며 종료 링크입니다. 반대로하면 다음과 같습니다.

"Hello, World!"pxpU

이 문자열을 캡처하고로 인쇄하여 p다시 프로그램을 종료합니다 x.

여기 사용해보십시오!


4
UU암시 적으로 푸시 합니까? ಠ_ಠ
Sp3000

1
@ Sp3000 프로그램 자체가 수정 될 수 있도록 만들어졌습니다. 보다 기술적으로이 U명령은 "체인 링크 캡처 명령"입니다. quining을 위해 만들어지지는 않았지만 quining에 사용하지는 않습니다. : P
Conor O'Brien

1
나는 이것이 올바른 quine으로 계산되는지 확실하지 않습니다. 우리의 정의 에는 프로그램의 다른 부분을U... 인코딩 하지만 단지 인코딩 하는 프로그램 섹션이 필요 합니다 U....
Dennis

@Dennis는 인코딩을 정의합니까? 나는 p비트가 인코딩의 일부인 출력을 했다고 생각했다 .
Conor O'Brien

1
나는했다 인코딩을 출력을 생성하는 무언가로, 그렇게 p하고 x계산하지 않을 것입니다. 예를 들어, 가장 짧은 SMBF quine은 코드에서 인쇄해야하더라도 여전히 부정 행위 quine으로 간주됩니다. 그러나 Martin에게 설명을 요구할 가치가 있습니다.
Dennis

20

자바 스크립트 (ES6), 42 38 바이트

f=_=>/\//g&&"f="+f||"!dlroW ,olleH">=_

반전

_=>"Hello, World!"||f+"=f"&&g//\/>=_=f

설명

반대로하면 문자열을 반환하는 익명 함수가됩니다 Hello, World!.

정규식 /\//g은 역순 >=_=f으로 주석이되어 역 코드에서 구문 상 유효하지 않은 주석을 주석 처리 할 수 ​​있습니다.


이것은 매우 영리합니다. :) 나는 이것을 생각하지 않았을 것입니다.
ericw31415

3
교활한 눈에만 +1 : =_=.
Darrel Hoffman

6

자바 스크립트 (ES6), 71 바이트

trela=a=>alert("trela="+trela+"\ntrela\n``")//
`!dlroW ,olleH`
trela
``

작동 방식 :

1 행은 trela실행될 때 프로그램의 소스 코드를 출력하는 기능 을 정의합니다 . 2 행은 할당되지 않은 문자열이며 아무 것도 수행하지 않습니다. 3 번과 4 번 줄 trela은 템플릿 문자열 구문을 남용합니다.

역전 :

``
alert
`Hello, World!`
//)"``n\alertn\"+alert+"=alert"(trela>=a=alert

작동 방식 :

1 행은 할당되지 않은 문자열이며 아무 것도 수행하지 않습니다. 2 행과 3 행은 인쇄 할 템플릿 문자열 구문을 남용합니다 Hello, World!. 4 행은 주석입니다.


JavaScript는 구문에 약간의 여유가있는 것으로 보입니다. 글쎄, 적어도 파이썬보다 더. 좋은 데요
R. Kap

공란이 ``불필요합니까?
Rɪᴋᴇʀ

@EasterlyIrk 아니오, trela전달 버전에서 함수 ( 퀴인 을 인쇄) 를 호출해야 합니다
jrich

@ jrich 아, 나는 그것이 ``논쟁 이라는 것을 몰랐다 . 멋있는.
Rɪᴋᴇʀ

2
trela주변을 둘러 보는 데 익숙해 져야한다고 생각 합니다 ...> _>
Conor O'Brien



2

리턴 , 94 바이트

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'

역전 :

'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"

Try it here.

STDOUT으로 출력합니다. 더 나은 퀴네 프레임 워크를 찾을 때까지 지금은 그렇게해야합니다.

설명

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"

quine 문자열이 포함되어 있습니다. 반대로, 이것은 스택으로 푸시되지만 출력되지는 않습니다.

34¤¤,,,,,,,,,,,,,

따옴표 문자를 스택으로 푸시하고 출력 할 항목이 없을 때까지 결과를 두 번 출력합니다. 반대로, 이것은 이미 스택에있는 문자 코드를 인쇄합니다.

% 'H'e'l'l'o',' 'w'o'r'l'd'!'

이것은 최상위 스택 항목을 팝하고 (역 문자는 공백 문자를 팝) 스택에 일련의 문자 코드를 푸시합니다 (역순으로,이 문자 코드는 나중에 일련의에 의해 인쇄됩니다 ,).


이것이 정말 미친 RETURN 코드인지 아니면 정상적인 RETURN 코드인지 알 수 없습니다 ._.
Downgoat

둘 다; _; 나는 모든 울음 소리
Mama Fun Roll

2

분열 2, 42 바이트

답변 에서 @ MartinBüttner의 탁월한 quine의 부끄러운 적응

'!+O!'!d'!l'!r'!o'!W'! '!,'!o'!!l'!e'!H'R"

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

그리고 반대로

"R'H!'e!'l!!'o!',!' !'W!'o!'r!'l!'d!'!O+!'

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

Quiine 버전에서 원자는 R오른쪽 표제 에서 시작합니다 . "시작 다음에 랩 모드 인쇄 "(자체). 이것은를 제외한 모든 것을 인쇄합니다 ". '!+atom을 char로 설정하십시오 ". O그것을 인쇄하고 프로그램을 끝내는 원자를 파괴합니다.

반전 된 버전은 R다시 시작 Hello, World하여 원자 를 설정하는 각 문자에 대해 원자 !를 파괴하지 않고 인쇄 합니다. 마지막 문자의 !경우 인쇄 O는 원자를 파괴합니다.


1

자바 스크립트 ES6, 55 바이트

$=_=>`$=${$};$()//"!dlroW ,olleH"`;$()//"!dlroW ,olleH"

정말 간단합니다.


0

파이썬 2, 131 바이트

앞으로:

print(lambda x:x+repr(x)+")#'!dlroW ,olleH' tnirp")('print(lambda x:x+repr(x)+")#\'!dlroW ,olleH\' tnirp")(')#'!dlroW ,olleH' tnirp

역:

print 'Hello, World!'#)'()"print '\Hello, World!'\#)"+)x(rper+x:x adbmal(tnirp'()"print 'Hello, World!'#)"+)x(rper+x:x adbmal(tnirp

전반은 한 줄짜리 퀴네 다음에 #간단한 절반과 전반을 분리하는 주석을 형성하기 위해 a를 붙 입니다.


이 Python_='_=%r;print _%%_#"!dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
quine을

0

C, 108 바이트

char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}//};)"!dlroW ,olleH"(stup{)(niam

C99 라고 생각합니까?
Neil

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