메타 폴리 글로 퀘인


18

PPCG를 사용하는 동안, 나는 quine 문제와 polyglot 문제가 매우 인기가 있음을 알게되었습니다. 또한 문제에 대한 메타 솔루션, 즉 문제에 대한 솔루션 인 프로그램을 생성하는 스크립트는 커뮤니티로부터 많은 긍정적 인 피드백을받는 경향이 있습니다. 따라서이 세 가지 아이디어를 구현하는이 과제를 만들었습니다.

그러면 독자와 애호가는 가능한 한 두 언어 A와 B로 실행되어 A와 B에 대한 퀴인을 생성 할 수있는 스크립트를 가능한 짧게 작성해야합니다. 프로그램이 언어 A로 실행될 때 언어 B에서는 퀴네 이지만 언어 A에서는 그렇지 않으며 그 반대도 마찬가지입니다. 생성 된 퀴는 버전 중 하나에서만 작동해야한다는 점을 명심하면 언어 A와 B는 동일한 언어의 다른 버전 일 수 있습니다.

것을 명심 표준 허점이 폐쇄 고려해야 만 적절한 quines이 허용됩니다.

행운을 빈다.


1
퀴인은 기본적으로 메타-메타-메타-메타-메타-메타-메타 등입니다. 어쨌든 프로그램 :)
Esolanging 과일

두 언어가 다른 문자 인코딩을 사용하는 경우 바이트를 계산하는 방법은 무엇입니까? 당신은 아마 바이트가 아닌 문자로 점수를 매길 것입니다
Luis Mendo

1
언어 A에서 quine을 실행하여 언어 B에 대한 quine을 생성하면 A에서 실행할 수 있어야합니까?
corvus_192

2
@LuisMendo 인코딩이 다른 언어에 대한 폴리 글 로트를 작성할 때 둘 다 동일한 바이트 스트림 (동일한 문자의 다른 인코딩이 아님)을 수신한다고 가정합니다.
Martin Ender

1
@Pavel 나는 실제로 비슷한 도전을 여기 에 썼지 만 복제본으로 닫혔습니다.
Oliver Ni

답변:


5

CJam 0.6.6 dev / GolfScript, 15 14 12 바이트

"0$p"0$~a:n;

2 바이트를 골라내는 @ jimmy23013에게 감사드립니다!

나머지는 업데이트됩니다.

확인

제출에는 상당한 공백이 포함되므로 16 진 덤프를 비교하는 것이 가장 좋습니다.

$ xxd -g 1 mpquine
0000000: 22 60 30 24 7e 22 30 24 7e 4e 4d 3a 6e 3b        "`0$~"0$~NM:n;
$
$ cjam mpquine | tee quine.gs | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e 0a                 "`0$~"`0$~.
$ golfscript quine.gs | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e 0a                 "`0$~"`0$~.
$ cjam quine.gs | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e                    "`0$~"`0$~
$
$ golfscript mpquine | tee quine.cjam | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e                    "`0$~"`0$~
$ cjam quine.cjam | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e                    "`0$~"`0$~
$ golfscript quine.cjam | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e 0a                 "`0$~"`0$~.

CJam

CJam 인쇄 "`0$~"0$~및 후행 줄 바꿈. 온라인으로 사용해보십시오!

생성 된 프로그램 "`0$~"0$~은 GolfScript의 마지막 줄 바꿈 ( 온라인 시도! )으로 인쇄되지만 CJam의 줄 바꿈 ( 온라인 시도! )없이 인쇄됩니다.

메타 퀸의 작동 방식

"`0$~"         e# Push that string on the stack.
      0$~      e# Push a copy and evaluate it:
               e#   `     Inspect the string, pushing "\"`0$~\"".
               e#    0$   Push a copy.
               e#      ~  Evaluate, pushing "`0$~".
               e# Both "\"`0$~\"" and "`0$~" are now on the stack.
         NM    e# Push "\n" and "".
           :n; e# Map print over the elements of "" (none) and pop the result.
               e# "\"`0$~\"", "`0$~", and "\n" are now on the stack, and the
               e# characters they represent will be printed implicitly.

quine의 작동 원리

"`0$~"          # Push that string on the stack.
      0$~       # As in CJam.
         <LF>   # Does nothing.
                # "\"`0$~\"" and "`0$~" are now on the stack, and the characters
                # they represent will be printed implicitly, plus a linefeed.

GolfScript와 달리 CJam은 기본적으로 후행 줄 바꿈을 인쇄하지 않으므로 CJam에서 quine이 아닙니다.

GolfScript

"`0$~"0$~후행 공백없이 GolfScript가 인쇄합니다 . 온라인으로 사용해보십시오!

생성 된 프로그램 "`0$~"0$~은 CJam에서 공백을 남기지 않고 인쇄 하지만 ( 온라인 시도! ) GolfScript는 줄 바꿈을 추가합니다 ( 온라인 시도! ).

메타 퀸의 작동 방식

"`0$~"0$~       # As in CJam.
         NM     # Unrecognized token. Does nothing.
           :n   # Store the top of the stack – "`0$~" – in the variable n. n holds
                # "\n" by default. When the program finishes, the interpreter
                # prints n implicitly, usually resulting in a trailing linefeed.
                # By redefining n, it will print "0$~" instead.
             ;  # Pop the string from the stack so it won't be printed twice.

quine의 작동 원리

"`0$~"0$~      e# Works as in GolfScript.

CJam과 달리 GolfScript는 스택 내용에 줄 바꿈을 추가하므로 GolfScript의 퀴엔은 아닙니다.


CJam과 GolfScript의 차이점은 무엇이며, 코드가 왜 작동합니까?
Pavel

CJam은 GolfScript에서 많은 영감을 받았으며 대부분 이전 버전과 호환됩니다. 한 가지 큰 차이점은 기본적으로 GolfScript가 출력에 줄 바꿈을 추가하는 반면 CJam은 그렇지 않습니다. 최대한 자세한 설명을 추가하겠습니다.
Dennis

1
"0$p"0$~a:n;.
jimmy23013

감사합니다! 나는 장난감을 가지고 a:n있었지만 사용 p은 나에게 일어나지 않았다.
Dennis

8

CJam / 분열, 22 바이트

"'!+OR'")5-"{'_'~}_~";

CJam에서 사용해보십시오. 분열에서 사용해보십시오.

CJam에서는 표준 Fission quine을 인쇄 합니다 .

'!+OR"

핵분열 퀴네를 사용해보십시오.

Fission에서는 "표준 CJam quine의 변형을 인쇄합니다 .

{'_'~}_~

CJam quine을 사용해보십시오.

이것은 22 바이트에서도 작동합니다 (같은 quines 인쇄).

"& *NQ!":)R"{'_'~}_~";

설명

CJam에서 :

"'!+OR'"    e# Push this string.
)           e# Pull off the last character.
5-          e# Subtract 5, turning ' into ".
"{'_'~}_~"  e# Push this string.
;           e# And discard it again.

따라서 프로그램 끝에서 스택에는 문자열 "'!+OR"과 문자가 포함 "되며 모두 암시 적으로 인쇄됩니다.

핵분열에서 프로그램 흐름은 R오른쪽 원자로 시작합니다. '"다만, 원자의 질량을 변경 ), 5그리고 -여러 가지 이유로 무시됩니다. 그런 다음 아톰이에서 인쇄 모드로 들어가서 인쇄 "합니다 {'_'~}_~. ;원자를 파괴하고 프로그램을 종료합니다.


4
이모티콘 +1{'_'~}
betseg

5
내가 일어날 때 근처에 있지 않을 원자를 파괴합니다
Luis Mendo

6

클로저 / 커먼 리스프, 274 바이트

(defmacro t []"((fn [s] (print (list s (list (quote quote) s)))) (quote (fn [s] (print (list s (list (quote quote) s))))))")(if '()(print(let[s clojure.string/replace](.toUpperCase(s(s(s(s(s(t)"fn""lambda")"[s]""(s)")"(quote ""'")"e)""e")")))))""))))"))))(eval '(princ(t))))

가독성을 위해 추가 된 공간

(defmacro t []"((fn [s] (print (list s (list (quote quote) s))))
     (quote (fn [s] (print (list s (list (quote quote) s))))))")
(if '()(print(let[s clojure.string/replace](.toUpperCase
    (s(s(s(s(s(t)"fn""lambda")"[s]""(s)")"(quote ""'")"e)""e")")))))""))))"))))
    (eval '(princ(t))))

기본적으로 Clojure에서 quine을 반환하는 매크로를 정의합니다. Clojure는 vector ( []) 로 제공되는 macro definition에 대한 매개 변수를 요구 하지만 Common Lisp는 (고맙게도) 그냥 무시합니다. 그 후 우리 는 Common Lisp와 같고 따라서 Clojure에 '()있는 것과 같은 nil거짓 을 평가함으로써 2 개의 언어가 다릅니다 true. 그런 다음 Common Lisp이 다른 if브랜치 로 갈 때 평가하려고 시도하지 않는 Clojure를 사용하여 문자열 조작을 수행합니다 . 반면 Clojure는 실행하기 전에 다른 브랜치가 적어도 올바른지 확인하려고 시도하므로 evalClojure에서 정확하고 Common Lisp에서 올바른 문자열을 출력해야합니다.

참고 : 두 개의 다른 문자열을 반환하는 것이 더 짧을 수도 있지만 다른 언어로 다른 문자열을 출력하는 것에 대한 폴리 글 로트 도전과 다르지 않습니다. ¯ \ _ (ツ) _ / ¯

Clojure 원본 소스 실행 : https://ideone.com/SiQhPf

일반적인 Lisp 원본 소스 실행 : https://ideone.com/huLcty

클로저 출력 : ((LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))) '(LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))))

일반적인 Lisp 출력 : ((fn [s] (print (list s (list (quote quote) s)))) (quote (fn [s] (print (list s (list (quote quote) s))))))

공통 Lisp에서 Clojure 출력 실행 : https://ideone.com/T1DF7H

그 반대의 경우 : https://ideone.com/Fezayq


4

젤리 / 골프 스크립트, 18 16 바이트

0000000: 3a 6e 22 ff cc cc 22 7d 7f fe 22 3a 6e 60 ff 3b  :n"..."}..":n`.;

확인

정확한 바이트 스트림으로 모든 관련 프로그램을 테스트하는 것은 로컬에서만 수행 할 수 있습니다.

$ LANG=en_US # Latin-1. Jelly doesn't care about the exact encoding,
$            # as longs as it's not UTF-8.
$
$ xxd -g 1 mpquine
0000000: 3a 6e 22 ff cc cc 22 7d 7f fe 22 3a 6e 60 ff 3b  :n"..."}..":n`.;
$
$ jelly f mpquine | tee quine.gs | xxd -g 1
0000000: 22 3a 6e 60 22 3a 6e 60                          ":n`":n`
$ golfscript quine.gs | xxd -g 1
0000000: 22 3a 6e 60 22 3a 6e 60                          ":n`":n`
$ jelly f quine.gs 2> /dev/null | xxd -g 1
$
$ golfscript mpquine | tee quine.jelly | xxd -g 1
0000000: ff cc cc                                         ...
$ jelly f quine.jelly | xxd -g 1
0000000: ff cc cc                                         ...
$ golfscript quine.jelly | xxd -g 1
0000000: 0a

젤리

젤리의 코드 페이지 는 다음과 같이 프로그램이 보인다.

:n"”ṘṘ"}
“":n`”;

이것은 인쇄 ( 온라인 시도! )

":n`":n`

이것은 GolfScript에서 quine이지만 ( 온라인으로 시도하십시오! ), Jelly에서 파서 오류입니다 ( 온라인으로 시도하십시오! ).

GolfScript

라틴 -1, 프로그램 사이에 인쇄 할 수없는 DEL 문자로, 같은 모양은 다음 }þ.

:n"ÿÌÌ"} þ":n`ÿ;

이것은 인쇄 ( 온라인 시도! )

ÿÌÌ

또는 젤리의 코드 페이지로 시각화

”ṘṘ

이는 젤리 (의 quine입니다 온라인으로보십시오! ),하지만 GolfScript에서 줄 바꿈 인쇄 ( 온라인으로보십시오! ).


1
좋은 오래된 ”ṘṘ, 그래서 ØV사라져야합니까?
Outgolfer Erik

3

자바 스크립트 / C 278 바이트

놀라운 278 바이트에서 :

//\
console.log('int main(){char*A="int main(){char*A=%c%s%c;printf(A,34,A,34);}";printf(A,34,A,34);}');/*
int main(){puts("A='A=;B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));';B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));");}//*/

C quine :

int main(){char*A="int main(){char*A=%c%s%c;printf(A,34,A,34);}";printf(A,34,A,34);}

자바 스크립트 퀴즈 :

A='A=;B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));';B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));


퀴네의 거룩한 어머니 ...
MD XF


1

Python / Retina, 70 65 64 66 바이트

이전 Python / Retina 폴리 글롯 에서 사용한 것과 동일한 전략을 사용했습니다 .

#
print"\nS`((.+))"*2+"\n\n"
#?
#_='_=%r;%_\n';_
#?;
#;print _%
#

파이썬에서보십시오 | 망막에서 시도

#는 파이썬의 주석이므로 간단히 Retina quine을 파이썬으로 인쇄합니다. Retina에서 첫 번째 단계 (2 줄)는 #입력에서 찾을 수 없으므로 아무 것도 수행하지 않습니다 . 다음 단계는 Python quine의 기초로 아무것도 대체하지 않습니다. 세 번째 단계는 각 세미콜론을 #print _%조각으로 바꿉니다 . 마지막 단계는의 모든 것을 제거합니다 #.


망막의 Quine :


S`((.+))
S`((.+))


파이썬의 Quine :

_='_=%r;print _%%_\n';print _%_

사용 된 quines는 이 도전 에서 볼 수 있습니다 . Retina quine은 Python에서 오류이며 Python quine은 Retina에서 출력이 없습니다.


메타 퀸의 작동 방식에 대한 설명을 답변에 추가 할 수 있습니까?
Pavel

@Pavel 추가했습니다.
mbomb007

1

파이썬 3 / 파이썬 2, 62 바이트

_='_=%r;print(_%%_['+'~'*-~int(-1/2)+'int(-1/2):])';print(_%_)

Python 2 , Python 3 에서 사용해보십시오 .

Python quine here 에 기반 합니다 . 두 버전 사이의 구별 요소는 그들이하는 일입니다 int(-1/2). 파이썬 2에서는 /정수 나누기 (내림차순)이며 -1; Python 3에서 /부동 소수점 나누기 ( -0.5)는로 int잘립니다 0.

우리 _는 세 부분 으로 끈 을 만듭니다. '_=%r;print(_%%_['그리고 'int(-1/2):])'항상 동일합니다. 흥미로운 부분은 '~'*-~int(-1/2)다음과 같습니다.

  • Python 2에서는 -~int(-1/2)is 0이며 물결표가 문자열에 추가되지 않습니다.
  • Python 3에서는 -~int(-1/2)is 1이고 물결표가 문자열에 추가됩니다.

따라서 Python 2는 Python 3 quine을 출력합니다.

_='_=%r;print(_%%_[int(-1/2):])';print(_%_[int(-1/2):])

Python 3은 Python 2 quine을 출력합니다.

_='_=%r;print(_%%_[~int(-1/2):])';print(_%_[~int(-1/2):])

각 버전에서 내부 표현식은로 [ :]평가되어 0슬라이스에 전체 문자열이 포함되도록하는 반면 잘못된 언어에서는로 평가되어 -1슬라이스에 마지막 문자 만 포함되도록하여 출력이 잘리지 않도록 전체 quine이 아닙니다.


1

Brain-Flak , brainfuck 4617 4009 바이트

((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()()()())))()())[()()])))()()())[()()])))())[()])[()()()()])))))))))))))))))))))))))))))))))))))))))))()()())()())[()()()()])()()())[()()])()())[()()()()])()()()))()()())[()()])[()()()()])))))))))))))))))))()())))()()())[()()()()])()()()()())[()()]))()())[()()()])()())[()()])))()()())[()()])))())[()()])[()()()])))))))))))))))))))))))))))))))))))))))))))()()()())[()()()])()()()())[()()])[()()()]))()()()())[()()()])()()()())[()()])[()()()])()()()())[()()()])()()()())[()()])[()()()]))))))))))))))()()()())[()()()])()()()())[()()])[()()()]))()()()())[()()()])()()()())[()()])[()()()])))))))))))))))))))))))))))))()()()())[()()()])()()()())[()()])[()()()]))()()()())[()()()])()()()()()))))))[()()()])[()])()()))))()()){({}<>)<>}<>([]){({}[()]<(({}[()]<((((((()()()){}())){}{}){}())<>)>)<>){({}[()]<({}()())>){({}[()]<({}())>){({}[()]<({}((()()()){}()){})>){({}[()]<({}()())>){({}[()]<({}(((()()()){}()){}){}())>){(<{}({}()())>)}}}}}}{}([]<({}<{({}<>)<>}<>>)>){({}[()]<({}<>)<>>)}{}{({}[()]<(({}))>)}{}(((({})(((()()())){}{}){}())))<>>)}{}{<>({}<>)}{+++++++>>>+>>>+++++++>>>++++++++>>>+++>>>++++>>>++>>>+++>>>++++>>>++++++++>>>+++>>>++++>>>+>>>+++++>>>++++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+>>>+>>>+>>>+>>>+>>>+>>>+>>>+>>>++>>>+>>>++>>>+>>>++>>>+>>>++>>>+>>>++>>>++>>>+++++++>>>++++++++>>>++>>>+++++++>>>++++++++>>>++>>>+++++++>>>++++++++>>>++>>>+++>>>++++>>>++>>>++>>>+>>>++>>>++>>>++>>>++++>>>++>>>+++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>+>>>+>>>+>>>++>>>+>>>++>>>+>>>++>>>++>>>++>>>+++++++>>>++++++++>>>+++++++>>>++++++++>>>++>>>+++++++>>>++++++++>>>+>>>++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>++>>>+>>>++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>+>>>+>>>+>>>++>>>+>>>++>>>+>>>++>>>++>>>+++++++>>>++++++++>>>+>>>++>>>++>>>+++++++>>>++++++++>>>++>>>+++++++>>>++++++++>>>+>>>++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>++>>>+>>>++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>+>>>+>>>+>>>++>>>+>>>++>>>+>>>++>>>+>>>++>>>+>>>++>>>++>>>++>>>+++++++>>>++++++++>>>+++++++>>>++++++++>>>++>>>+++++++>>>++++++++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++>>>+++++++>>>++++++++>>>+>>>+++++++>>>++++++++>>>+>>>++>>>+>>>++>>>++>>>++++>>>++>>>++++++++>>>++++++++>>>++++++++>>>++++++++>>>++++++++>>>++++++++>>>++++++++>>>+++++++>>>++++++++>>>+>>>+++++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++>>>++++>>>++>>>+++>>>++++>>>++++++++>>>+++>>>++++>>>++++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+++>>>++++>>>++>>>+++>>>++++>>>++++>>>++>>>++++++++>>>+++++++>>>++++++++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>++>>>+>>>++>>>++>>>++>>>++++>>>++>>>++++++++>>>+++++++>>>++++++++>>>+++>>>++++>>>++++>>>++>>>++++++++>>>+++++++>>>++++++++>>>+++>>>++++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++>>>++++>>>++>>>+++>>>++++>>>++++++++>>>+++>>>++++>>><<<[<<<]>>>[>++++++++++++++++++++++++++++++++++++++++.<[->.+.->+<<]>+.[-]>>]<[<<<]>>>[<++++++++++++++++++++++++++++++++++++++++>-[<+>-[<+++++++++++++++++++>-[<++>-[<+++++++++++++++++++++++++++++>-[<++>-[<++++++++++++++++++++++++++++++>-[<++>-]]]]]]]<.>>>>]}{}

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

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

설명이 아직 진행 중입니다.


이것은 brainfuck에서 brainfuck quine을 생성하고 Brain-Flak에서 brain-Flak quine을 생성합니다. 그것은 해야 브레인 퍽에서 실행할 때 뇌 - 플랙과 두뇌 플랙의 quine에서 실행할 때 브레인 퍽의 quine를 생성합니다.
Pavel

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