더블 슬릿 퀸


11

객관적인:

각 프로그램이 지퍼 (더블 슬릿 Quine)와 같이 문자마다 인터레이스 된 두 소스 코드를 모두 출력하는 두 개의 프로그램을 코딩하십시오. Double-slit Quine의 출력은 첫 번째 프로그램의 소스 코드에서 첫 번째 문자로 시작합니다. 프로그램 중 하나의 소스 코드가 다른 프로그램보다 길이가 짧으면 나머지 출력은 더 긴 소스 코드로 채워 져야합니다.

규칙 :

  1. 두 프로그램 모두에 대해 동일한 프로그래밍 언어가 아닌 두 프로그램에 대해 모든 프로그래밍 언어를 사용할 수 있습니다.
  2. 프로그램은 파일, 파일 이름, 네트워크, 다른 프로그램 또는 다른 어떤 것도 입력하지 않아야합니다.

필수 기준 :

  • 출력의 어딘가에 QUINE대문자로 된 단어 가 중단없이 있어야합니다.
  • 사용중인 두 프로그래밍 언어를 명시해야합니다. 둘 다에 동일한 프로그래밍 언어를 사용하는 경우 하나의 프로그래밍 언어 만 명시하면됩니다.
  • 두 프로그램 모두 다른 프로그램과 독립적으로 실행하거나 해석 할 수 있어야합니다.

예:

프로그램 1 의 소스 코드 예제 :

"QIE"

프로그램 2 의 소스 코드 예제 :

"UN"

그런 다음 두 프로그램의 유효한 Double-slit Quine 출력은 다음과 같아야합니다.

""QUINE""

이것은 코드 골프입니다. 두 소스 코드의 길이를 합할 때 가장 적은 바이트이며 분명히 각 프로그램 출력의 길이가 이깁니다!


각각의 개별 프로그램도 엉망 일 필요는 없습니다. 맞습니까? 그리고 각 프로그램에는 적어도 하나의 문자가 포함되어야합니까?
mbomb007

@ mbomb007 맞습니다. 각 개별 프로그램은 처음부터 끝까지 지퍼와 같은 두 가지 소스 코드 문자를 출력해야합니다. 글쎄, 당신은 QUINE을 출력하기 위해 프로그래밍 언어로 적어도 1 바이트가 필요하다고 생각합니까? 두 프로그램의 출력은 동일해야합니다.
Plarsen

나머지 출력이 더 긴 소스 코드로 올바르게 채워 져야한다는 것을 잘 모르겠습니다 . 어떻게 것입니다 AXYZ인터리브? AXYZ?
Dennis

@Dennis 좋아요 .+또는 z작동
Optimizer

@ 데니스 수정. 더 짧은 바이트가 부족할 때 더 긴 소스 코드에서 남은 것은 두 프로그램의 출력에 추가되어야합니다.
Plarsen

답변:


9

CJam, 49 47 바이트

{`:_"__~~e#QUINE"}_~

{`:_"__~~e#QUINE"}_~e#QUINE

둘 다 인쇄

{{``""__~~""++::__""ee##QQUUIINNEE""}}__~~e#QUINE

온라인 시도 : 프로그램 1 , 프로그램 2 , 유효성 증명

작동 방식

{                }   e# Push a code block.
                  _~ e# Execute a copy.
 `                   e# Convert the code block into a string.
  :_                 e# Duplicate each character of the resulting string.
    "__~~e#QUINE"    e# Push this string.

프로그램 1은 여기에서 완료되며 전체 소스 코드 (각 문자가 두 번 반복됨)와 스택 의 문자열 e # QUINE 의 문자열 표현을 갖습니다 .

프로그램 2 e#QUINE는 주석 인 추가 구문 분석을 수행 합니다.

두 경우 모두 CJam은 두 문자열을 자동으로 인쇄하여 위에서 언급 한 출력을 생성합니다.


4

진심으로, 46 56 42 바이트

QUNX;RZtdXεj.ƒ£REIQ

육각 덤프 :

51554e583b525a746458ee6a2e7f9f9c524549510a

두 번째 프로그램은이 정확한 프로그램의 반대입니다. 보이지 않는 문자가 포함되어 있지만 바이트 수는 정확합니다. 두 프로그램 모두이 회문 문자열을 출력합니다.


QQUINEXR;£RƒZ⌂t.djXεεXjd.t⌂ZƒR£;RXENIUQQ

(어떤 이유로 터미널에서 출력 할 때 보이지 않는 문자를 표시합니다. 실제로 7F 바이트를 이해하지 못합니다.)

작동 방식 :

Q                     Push the source to the stack
 U                    Nop
  NX                  Push and pop lyrics to 99 bottles of beer
    ;R                Make a copy of the source reversed.
      Z               Zip them together.
       t              Completely flatten the list.
        dX            Delete the trailing newline
          εj          Join it into a string.
            .         Print it with a trailing newline.
             ⌂        (This is that 7F byte that won't show up. It halts.)

나머지 프로그램은 실행되지 않습니다.

그런 다음 다른 방향 :

\n                   Nop
  Q                  Push the source code.
   IE                Nops
     R               Reverse source code to get source of first program
      £              Eval it into a function
       ƒ             Call it.

이제 위의 첫 번째 프로그램을 실행 중이므로 여기에 설명 된대로 실행이 계속됩니다.

여러 명령이 문자열이나 빈 스택에 아무것도하지 않는다는 사실을 많이 사용하고 있습니다. 또한 t스택에 항목이 하나만있을 때 예기치 않은 동작을 이용하고 있습니다. 이 프로그램이 향후 버전의 심각하게 작동하지 않을 것으로 예상합니다.

심각하게 인터프리터의 온라인 버전이 계속 손상되면 인터프리터다운로드 하여 자신의 컴퓨터에서 실행하여 테스트해야합니다.


@Dennis 컴퓨터에서 테스트 했습니까? 그것은 내 자신의 빌드 환경의 인공물 일 수 있습니다.
quintopia

@Dennis nvm 당신이 맞아요. Seriously의 모든 출력 방법은 줄 바꿈을 추가합니다. 8 바이트의 비용으로 해결할 수 있습니다. 방법이 더 짧은 것 같습니다 (이 방법은 더 차가운 IMO이기 때문에 슬프습니다).
quintopia

1

GolfScript, 46 바이트

{`{.}%"..~~QUINE"}.~

{`{.}%"..~~QUINE"}.~QUINE

둘 다 인쇄

{{``{{..}}%%""....~~~~QQUUIINNEE""}}..~~QUINE

온라인 시도 : 프로그램 1 , 프로그램 2 , 유효성 증명

작동 원리

{`{.}%"..~~QUINE"}.~

{                }    # Push a code block.
                  .~  # Execute a copy.
 `                    # Convert the code block into a string.
  {.}%                # Duplicate each character of the resulting string.
      "..~~QUINE"     # Push that string.

프로그램 2의 소스 코드 QUINE\n는 두 개의 정의되지 않은 토큰 인 추가로 구문 분석 합니다.


1

Perl, 61 + 60 = 121 바이트

프로그램 1 :

$x=q<print"\$x=q<$x>;eval\$x#"=~s/./$&$&/gr,QUINE>;eval$x#QIE

프로그램 2 :

$x=q<print"\$x=q<$x>;eval\$x#"=~s/./$&$&/gr,QUINE>;eval$x#UN

나는 이것을 골프가 아닌 언어로 바꾸겠다고 생각했다. 이것은 기본적으로 Perl의 범용 quine 생성자이며 인쇄하기 전에 모든 문자를 두 배로 늘리고 QUINE끝에 추가 합니다. 그런 다음 코드 끝에 주석을 붙여 추가 된 텍스트를 보완해야합니다.

(나는 실제로 다른 답변을 보지 않고 이것을 썼다. 하나의 프로그램에 전체 주석을 넣어서 바이트를 저장할 수는 있지만, 그런 알고리즘을 뻔뻔스럽게 복사 해야하는지 확실하지 않습니다.)

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