세미 퀸 작성


10

당신이이 개 언어를 가지고, 가정 A및 B. 문자열 s의 semiquine입니다 A및 B다음과 같은 조건이 만족되는 경우 :

  1. s언어의 quine입니다 A.
  2. sA및 의 폴리 글 로트입니다 B.
  3. 실행의 출력 sA와 B프로그램을 다른 문자열 s'에 quine이다 B.

이 과제의 목표는 두 가지 다른 언어로 세미 퀸을 작성하는 것입니다. 이것은 이므로 가장 짧은 코드가 승리하며 가장 빠른 답변은 순위 결정 도구로 사용됩니다.

Quines에 대한 규칙

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

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

또한 소스 코드는 순전히 리터럴 (문자열 리터럴, 숫자 리터럴 등) 및 / 또는 NOP로 구성되어서는 안됩니다. 예를 들어, `12Jelly와 Pyth의 폴리 글 로트이지만 Jelly에서는 NOP와 숫자 리터럴이므로 유효하지 않습니다.

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

폴리 글 로트 규칙

사용 된 두 언어는 분명히 달라야합니다. 특히:

  • 같은 언어의 다른 버전이 아니어야합니다 (예 : Python 2와 Python 3).
  • 같은 언어의 다른 방언이어서는 안됩니다 (예 : Pascal vs. Delphi).
  • 한 언어는 다른 언어의 하위 집합이 아닐 수 있습니다 (예 : C vs. C ++ 1 ).
  • 한 언어는 다른 언어의 사소한 파생물이 아닐 수 있습니다 (예 : Matlab vs. Octave 2 , brainfuck vs boolfuck vs TinyBF vs ShadyAsFuck vs 기타 사소한 brainfuck 파생물).

기타 규칙

  • STDIN (또는 다른 소스)의 입력을 수락 할 수 없습니다. 선택한 언어 가 입력을 받아야하는 경우 입력이 비어 있거나 (빈 문자열, 파이프 /dev/null등) 프로그램의 출력이 입력에 의존해서는 안됩니다.
  • 이 도전을 위해서는 완전한 프로그램을 작성해야합니다. 솔루션을 실행하기 위해 추가 코드를 요구하는 것은 허용되지 않습니다 (예 : 솔루션에 정의 된 람다 함수 할당 및 호출).

1 : 예 C는 실제로 C ++의 하위 집합이 아니라는 것을 알고 있습니다. 그러나 폴리 글 로트의 목적을 위해 하나라고 생각하기에 충분히 가까우므로이 과제를 위해 세고 있습니다.

2 : 위의 1 지점과 마찬가지로 Octave는 기술적으로 Matlab과 100 % 호환되지 않지만 Matlab / Octave 폴리 글 로트를 허용하면 문제를 쉽게 해결할 수있을 정도로 가깝습니다.


ESMin의 복사 차단이 허용됩니까?
— lirtosiast

@ThomasKwa ESMin에 익숙하지 않으므로 빠른 요약을 해줄 수 있습니까?
— Mego

복사 블록을 시작하는 명령이 있는데,이 블록은 과거의 모든 소스 코드를 가져옵니다. 다른 JS 골프 언어들도있을 것 같습니다.
— lirtosiast

@ThomasKwa quine 규칙의 첫 번째 규칙 (소스 코드를 직접 또는 간접적으로 읽을 수 없음)에서는 허용되지 않습니다.
— Mego

1
@Downgoat 다른 규칙을 위반하지 않는 한 절대적으로. 변덕스러운 단점은이 사이트의 목표입니다. :)
— Mego

답변:


6

GolfScript + Fission , 19 18 바이트

{".~
'!+OR"
2<}.~

후행 줄 바꿈이 필요합니다.

이것은 GolfScript의 진정한 퀴즈입니다. 온라인으로 사용해보십시오!

분열에서 그것은 인쇄

'!+OR"

이것은 Fission의 진정한 소동입니다 . 온라인으로 사용해보십시오!

설명

GolfScript에서 모든 형태의

{...}.~

스택에 ...문자열을 남기는 한 quine ".~"입니다. 그만큼. 말에 인쇄됩니다 사본 거기 있도록, 블록을 복제하고, ~우리가 인쇄 할 내용을 사용할 수 있도록, 그것을 실행하는 .~자신을. 이 경우 블록이 문자열을 푸시합니다

".~
'!+OR"

를 사용하여 처음 두 문자로 자릅니다 2<.

핵분열 프로그램은 실제로 는 quine 자체 와 정확히 동일 하게 작동 합니다. 첫 번째와 세 번째 줄은 프로그램에 의해 완전히 무시되기 때문입니다.


6

루비 + (자바 스크립트 또는 Python 3), 76 바이트

이것은 제가 가장 좋아하는 언어 인 루비, 자바 스크립트, 파이썬 3의 거의 공통적 인 부분을 사용하여 해결할 수있는 또 다른 도전입니다. 우리는 아직 외래 언어로 답을 얻지 못하고 많은 사람들이 비 골프 언어 솔루션을보고 싶어한다고 생각합니다. 더 좋은 점은 동일한 답변이 동시에 다양한 방법으로 문제를 해결한다는 것입니다.

여기 있습니다 s:

s="'";d='"';n='print("s="+d+s+d+";d="+s+d+s+";n="+s+n+s+";eval(n)")';eval(n)

루비에서 퀴네입니다. JavaScript 나 Python 3에서는 엉망이 아닙니다. 해당 언어 중 하나로 실행하면 출력에 s'줄 바꿈 문자가 표시되므로 다릅니다.

s = " '"; d =' " '; n ='print ("s = "+ d + s + d +"; d = "+ s + d + s +"; n = "+ s + n + s +" ; eval (n) ") '; eval (n)

그러나 s'JavaScript 및 Python 3의 폴리 글로 키잉입니다! (저는 평소와 같이 편의성을 위해 (브라우저가 아닌 명령 줄에서 실행하기 때문에 print) 표준 출력에 쓰는 이상한 표준 라이브러리가 있기 때문에 JavaScript의 Rhino 구현을 사용하고 있습니다.) 두 언어 모두 s'프로그램을 실행 한 결과 로 생성 됩니다.

보너스로이 프로그램은 문제를 반대로 해결합니다. s'Ruby에서 실행하기로 결정 하면 원래 프로그램이 s다시 인쇄 됩니다. 따라서 s'질문에 대한 유효한 (그러나 77 바이트에서 약간 더 길다) 답변입니다.

이 시점에서 나는 "두 줄의 프로그램을 다른 것으로 간주하기에 충분한 줄 바꿈으로 출력이 끝나는가의 차이"가 표준 허점으로 간주되어야한다고 생각하기 시작했다. (잘 알려진 GolfScript / CJam을 넘어서) 트릭을 풀 수 있습니다.


2

Vitsy (안전 모드) 및 Y, 9 바이트, 비경쟁.

' Ugrd3*Z

Vitsy에서 이것은 퀴네입니다. Y에서 이것은 인쇄합니다 Ugrd3*Z'. 실행되면이 메시지가 인쇄 Ugrd3*Z'되며 Y로 표시됩니다. Y는 질문을 게시합니다.

Vitsy가 보는 것 :

 ' Ugrd3*Z
 '         Heyyyy a string! Let's do this!
  ........ Capturing a string! Oh, not done? Hm, let's go back to the start.
 '         There we go.
           (space) ...
   U       (no op)
    g      use count, disabled in safe mode
     r     reverse stack
      d3*  push a '
         Z print it all!

Y가 보는 것 :

' Ugrd3*Z
'         Push a space.
  U       Wrap around and capture.
   g      Print that. (Nothing else is printed.)

1
이것은 안전 모드에서만 작동하거나 오히려 안전하지 않은 모드에서는 의도하지 않은 부작용이 있습니다.
— 애디슨 크럼

1

CJam + GolfScript, 9 바이트

"0$p"
0$p

이것은 CJam의 퀴네입니다. GolfScript에서는 GolfScript에서 quine 인 후행 줄 바꿈으로 출력됩니다.

CJam이 GolfScript의 사소한 파생물로 간주되어야하는지 잘 모르겠습니다. 그러나 나는 그것들이 상당히 다르고 최소한 사소한 것이 아니라고 생각합니다.

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