메타 퀸 작성


19

메타 퀸은 quine은 아니지만 같은 언어로 프로그램으로 실행될 때 quine 인 프로그램입니다.

이 과제의 목표는 메타 퀸을 작성하는 것입니다. 이것은 이므로 가장 짧은 코드가 승리하며 가장 빠른 답변은 순위 결정 도구로 사용됩니다. 퀴인 정의로 인해 전체 프로그램 만 허용됩니다.

Quines에 대한 규칙

사실 quines 허용됩니다. 즉, 당신은 STDOUT에 그대로 전체 소스 코드를 인쇄 할 필요 없이 :

  • 직접 또는 간접적으로 소스 코드를 읽습니다.
  • 단순히 먹이를주는 모든 표현을 평가하고 인쇄하는 REPL 환경에 의존합니다.
  • 어떤 경우에는 소스를 인쇄하는 언어 기능에 의존합니다.
  • 오류 메시지 또는 STDERR을 사용하여 quine의 일부 또는 전부를 쓰십시오. STDOUT이 유효한 quine이고 오류 메시지가 포함되지 않는 한 STDERR에 내용을 쓰거나 경고 / 치명적이지 않은 오류가 발생할 수 있습니다.
  • 순전히 리터럴 (문자열 리터럴, 숫자 리터럴 등) 및 / 또는 NOP로 구성된 소스 코드

quine의 유효성을 위해 출력에서 ​​억제 할 수없는 출력 (예 : 저작권 표시, 시작 / 종료 메시지 또는 후행 줄 바꿈)이 무시 될 수 있습니다.

리터럴 전용 프로그램과 내장 된 quining을 금지하는 규칙을 무시하면 심각하게 메타 퀸이됩니다.

"Q"

이 프로그램은 단일 문자열 리터럴로 구성 "Q"되며 출력시 암시 적으로 인쇄됩니다. 출력 ( Q)이 실행되면 퀴인입니다 ( Q내장 퀴인 기능입니다).


2
리터럴 / 설명 / NOP 규칙이 메타 인용의 출력 (즉, 실제 퀴인)에도 적용됩니까? 그렇지 않으면 ex. T쉬운 1 바이트 Pyth 답변입니다.
Doorknob

@Doorknob 예, 명확히하겠습니다.
Mego

8
나는이 도전의 어려운 점이 어디에 있는지 실제로 알지 못합니다. 전략은 "가장 짧은 알려진 quine을 포함하는 문자열을 인쇄하는 것"이 ​​각 언어에 대해이기는 것이 거의 보장되지 않습니까?
Fatalize

1
@Fatalize 글쎄, 흥미로운 질문은 quine 자체와 동일한 양 또는 적은 바이트로 수행 할 수 있다는 것입니다.
Martin Ender

3
@Fatalize 길지만 유효한 quine을 인쇄하는 짧은 메타 퀸을 작성할 수 있습니까?
Rhyzomatic 2019

답변:


15

CJam, 6 바이트

"_p"_p

인쇄물

"_p"
_p

CJam에서 가장 짧은 적절한 quine입니다.

여기에서 테스트하십시오.

설명

적절한 퀴인 내부의 줄 바꿈은 작동하지 않으며 출력에서 ​​제거하는 것이 더 비싸기 때문에 포함되어 있기 때문에 두 프로그램 모두 정확히 동일하게 작동합니다. 프로그램 작동 방식 :

"_p"  e# Push this string.
_     e# Duplicate it.
p     e# Print a string representation of the top of the stack (i.e. the string with
      e# quotes) followed by a linefeed.
      e# The other copy is then printed automatically at the end of the program, without
      e# stringifying it.

사이드 노트

GolfScript에서와 동일한 기능

".p".p

인쇄

".p"
.p

후행 줄 바꿈으로, 가장 짧은 알려진 퀴 중 하나입니다.


10

Pyth, 12 11 10 9 바이트

@ Pietu1998 덕분에 1 바이트 더 떨어졌습니다.

jN B".[9N

이것은 인쇄

.[9N".[9N

이것은 Pyth에서 퀴네입니다. 여기서 시도해 볼 수 있습니다 .


가장 짧은 Pyth quine에 대한 출력이 새로운 레코드입니까? 내가 본 적이 없다고 생각합니다.
ETHproductions

다른 곳에서는 찾을 수 없었습니다. 나는 메타 퀸을 얻으려고 노력했다.
Rhyzomatic 2012

1
아마도 당신은 원래의
quine

2
당신은 사용하여 9이 아래를 얻을 수 있습니다 jN B".[9N또는 .[9N"jN B. ( jN B"jN B다른 9에서 참 quine이다 갈래 식별 기능에 의해 조인 ".)
PurkkaKoodari

@ Pietu1998 감사합니다! Pyth에 9 바이트보다 짧은 quine이 있습니까?
Rhyzomatic



4

파이썬 2, 29 바이트

_="_=%r;print _%%_";print _%_

잘 알려진 짧은 파이썬 퀴니는 쉽게 메타 퀸으로 변합니다. :)

그리고 우리는 후행 줄 바꿈과 일치하는 것에 대해 걱정할 필요가 없으므로 메타 퀸은 실제로 더 짧습니다!


다시 날 이길 :( 래퍼를 생각했지만 당신이 더 낫다
Outgolfer Erik

3

apt, 15 13 바이트

Q+"+Q ³s7J" ²

온라인으로 테스트하십시오!

이 프로그램은 출력

"+Q ³s7J"+Q ³s7J

Japt에서 가장 짧은 알려진 퀴네입니다.

작동 원리

Q+"..." // Take a quotation mark plus this string.  "+Q ³s7J
²       // Repeat it twice.                         "+Q ³s7J"+Q ³s7J
        // Implicit output

비경쟁 버전, 11 바이트

Q+"+Q ²é" ²

나는 한 방금 추가 é 하는 "회전"명령을. 그래서

"+Q ²é"+Q ²é

이제 유효한 quine입니다.


1

루비, 25 23

puts"puts <<2*2,2
"*2,2

클래식 Ruby HEREdoc quine을 생성합니다

puts <<2*2,2
puts <<2*2,2
2

오래된 솔루션

_='_=%p;$><<_%%_';$><<_%_

작은 따옴표를 큰 따옴표로 대체 한 것을 제외하고는 자체를 생성합니다.



1

물고기 (> <>), 17 바이트

이것은 고전적인 물고기 quine을 사용하여 작동 "r00g!;oooooooo|하지만 {원래 프로그램이 quine이 아니라 실행시 출력이되도록 전체 스택을 왼쪽으로 이동시키는 a 를 추가합니다 .

"{r00g!;oooooooo|

출력 :

"r00g!;oooooooo|

이것은 물고기 quine입니다!


1

젤리 , 3 바이트 (비경쟁)

불행히도, 필요한 원자는 도전보다 대략 2 주 더 젊습니다.

메타 퀸

”Ṙv

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

작동 원리

”Ṙv  Main link. No arguments.

”Ṙ   Set the left argument and the return value to the character 'Ṙ'.
  v  Dyadic eval; evaluate the return value with the left argument as argument.
     Executing the atom Ṙ on the argument 'Ṙ' prints a string representation of
     the character, i.e., the string "”Ṙ".
     Finally, v returns its unaltered argument, which is printed implicitly.

”ṘṘ

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

작동 원리

”ṘṘ  Main link. No arguments.

”Ṙ   Set the left argument and the return value to the character 'Ṙ'.
  Ṙ  Print a string representation of the character, i.e., the string "”Ṙ".
     (implicit) Print the unaltered return value.

두 번째 는 첫 두 문자 ( ”Ṙ)를 인쇄 하기 때문에 이것은 우리의 정의에 따른 적절한 퀴즈입니다.


1

Octopen-Baru, 22 바이트

** 비경쟁 답변

愛[35211].pack歩U')

루비 출력

puts [35211].pack(' U')

어떤 출력 . Octopen-Baru에서 퀴니입니다!


1

7 , 2 바이트, 언어 날짜 도전

프로그램은 2 바이트 길이이며 여러 가지 방식으로 해석 될 수 있습니다. 16 진 덤프로 :

00000000: 4ff4                                     O.

코드 페이지 437로 :

O⌠

또는 가장 읽기 쉬운 8 진수 (7은 기본적으로 사용) :

237723

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

이 작업은 매우 간단합니다. 두 개의 절반 사이에 no-op 스택 요소를 삽입 하여 표준 7 퀴네 로 다른 점으로 만듭니다 (이 문맥에서는 7스택 요소를 분리 함). (또한 시작 부분에 삽입 할 723723수있었습니다. 후행 7은 후행 공백과 같으므로 묶음 인코딩에서 무시되므로 출력 프로그램과 다르지 않기 때문에 끝에서 해석 할 수 없었습니다. )

또한이 프로그램은 16 진수 로 된 이지만 대부분 우연의 일치입니다.


1

언더로드, 11 바이트

(:aSS)::aSS

꽤 간단합니다. 그것은 출력한다 (:aSS):aSS표준 저 부하 quine이다.


1

Brachylog , 12 바이트

"~k;?w₁"gjw₃

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

Fatalize의 Brachylog v1 (비 속임) quine에서 번역quine I 의 132 개의 동일 길이 metaquine 변형 중 하나입니다 . 실제로 (골프가 아닌 전체적으로 바보 같은) 프로그램을 작성하여 모두 인쇄했습니다.

{[[";?","gj","jḍ"],"₁₃₅₇"]j∋ᵐ{ḍ≠&};"\"~~k~ww~w\"~ww~w~n"}ᶠ{lw" metaquines generated:
"ẉ&}w₁ᵐ

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

: inconsequentially 대체 될 수 원래 quine의 두 부분이있다 ;?할 수가 변경 gj또는 jḍ, 및 변경할 수 있습니다 , 또는이 . 문자열 리터럴 외부와 다른 방법으로 문자열 리터럴 내부를 유지하거나 변경하면 문자열 리터럴 내에 존재하는 변형이 내부와 외부에 모두 인쇄되므로 소스와 일치하지 않습니다. 초기 프로그램 실행이 아닌 quine이 발생합니다.

;?,, gjjḍ세 개 모두가 문자열 리터럴 자체와 쌍을 이루기 때문에 상호 교환 가능합니다. 프로그램의 레이아웃으로 인해 입력 변수 ?가 문자열과 통합되므로 ;?문자열과 자체를 쌍으로합니다. 레이아웃에 관계없이 gj문자열을 목록으로 묶은 다음 그 자체로 연결합니다. 마찬가지로 jḍ문자열을 자체에 연결 한 다음 절반으로 나눕니다.

홀수 번호 w첨자는 원래 w0 또는 1 만 사용할 수 있지만 0은 입력을 w인쇄하고 1은 첫 번째 요소를 두 번째로 서식을 지정하여 인쇄하므로 첨자 인벤토리 w는 외부에서 비트 필드로 작동하는 것으로 커졌습니다. 아래 첨자의 하위 비트는 직접 또는 형식인지 여부를 인코딩하고 중간 비트는 출력 변수의w제한되지 않거나 입력으로 설정되며, 높은 비트는 인쇄가 즉시 수행되는지 또는 프로그램이 끝날 때까지 지연되는지 여부에 따라 역 추적 될 수 있습니다. (이 첨자는 Brachylog에 대한 첫 번째이자 지금까지 가장 큰 기여를했습니다.) quine과 metaquine은 출력 변수를 사용하지 않고 역 추적하지 않기 때문에 4 개의 홀수 첨자가 모두 같습니다.


0

Befunge-93, 22 바이트

"+1_@#`+39:,g0:">:#,_@

방금 표준 quine을 가져 와서 따옴표로 묶어 뒤집어서 (스택에 올바르게로드) 끝 부분에 스택 인쇄를 추가했습니다.

일반 quine에 8자가 추가되었으므로 더 나은 해결책이있을 가능성이 큽니다.


표준 종료를하고 개행을 추가 할 수는 없습니까? 줄 바꿈은 구문 분석 단계에서 사라지고 표준 quine (자체 인쇄) 만 남습니다.

0

Turtlèd , 52 바이트 (비경쟁)

원래 퀴네보다 1 적음

@##'@r,r,r-{ +.r_}r{ +.r_}"#'@r,r,r-{ +.r_}r{ +.r_}"

끝에 문자가없는 경우를 제외하고는 같은 방식으로 작동합니다. 실행시 끝에 문자가 있으며 결과에 영향을 미치지 않습니다. #에 #을 쓰므로 출력에 영향을 미치지 않습니다. 출력은 quine challenge에 대해 만든 quine과 약간 다르지만 동일한 방식으로 작동합니다. "#는 quine과 같은 마지막 문자입니다. 여기서 설명을 확인하십시오 .



0

Pushy , 7 바이트

언어가 도전을하면서 경쟁이되지 않습니다.

이것은 표준 quine이지만 줄 바꿈이 제거되었습니다. 줄 바꿈은 Pushy에서 아무 의미도 없지만 인쇄 연산자의 표준 구분 기호이므로 진정한 퀴네에 필요합니다.

95 34_"

온라인으로 사용해보십시오! 이 결과는 다음과 같습니다.

95 34
_ "

가장 짧은 Pushy quine-작동 방식에 대한 설명은 여기를 참조하십시오 .

또는 H5-34_"동일한 바이트 수로 작동합니다.


0

거품 , 14 바이트

[. .'|: ~|]: ~

여기 에서 찾을 수있는 두 번째 거품 퀴인이 인쇄 됩니다 . .각 요소 사이에 항상 공백이 있기 때문에 실제로는 짧지 만 세 번째 토큰의 막대는 공백을 생략 할 수 있습니다.


사이트 정책에 따라 최신 언어가 자동으로 경쟁하지 않기 때문에 경쟁하지 않는 비트를 제거했습니다.
Mego

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