세미 퀸 작성


10

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

  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.