주문의 여왕


10

다른 언어로 실행될 때 각 언어로 코드의 다른 바이트 순열을 출력하는 프로그램을 작성하십시오. 정확한 소스 코드는 하나의 순열로 계산됩니다.

여기서 "다른 언어"는 다른 버전 (Py 2 및 Py 3) 또는 다른 표준 플래그 일 수 있습니다. 다른 버전을 강요하는 출력이 다릅니다.

각 언어의 프로그램에 적절한 퀴니 규칙이 적용됩니다. 점수는로 계산되며 점수가 (Language count)^6/(Code length in bytes)높을수록 좋습니다.

견본:

코드가 AAB3 개의 다른 언어로 실행되고 ABA, AAB및을 반환 AAB하는 경우 점수는 2^6/32 개 중 하나입니다 AAB. ABA의미가 없다면 괜찮습니다 .


1
다른 언어로 간주되는 것은 무엇입니까?
Laikoni

4
적절한 quine의 어떤 정의가 적용됩니까? ( 마틴 , 또는 ais523 , 또는 이러한 메타 스레드의 다른 정의?) 적절한 퀴닝 규칙 실제로 퀴인 프로그램의 해석에만 적용 됩니까? (가치가있는 것은 적절한 퀴닝 규칙을 시행함으로써이 도전이 많이 개선되지는 않는다고 생각합니다.)
Lynn

명확히하기 위해 예제 작업-코드 가 언어 1과 언어 2 로 AAB인쇄 AAB되는 경우 언어 ABA1 프로그램으로 볼 때 적절한 퀴인이어야한다고 가정하고 해석과 관련하여 더 이상의 제한이 없습니다. 언어 -2 프로그램. 맞습니까?
Lynn

1
코드 길이는 문자 또는 바이트로 계산됩니까? 다른 문자 인코딩으로 무엇을해야합니까?
dylnan

1
바이트 대 문자는 어떻습니까?
dylnan

답변:


10

비 펀지-98 , > <> , Gol의> <> , 분열 , wumpus 사 , 카디날 , 밀랍앨리스 점수 : 8 6 / 88 = 2978.909

"65*4+059*$!#.39*0jp2+'Wk,@ ''5&.'\d&o@o&88#+\@ol?!,'.'0.6'!+Ox,++tttt=++%-$#}.6~.F4*`*R

Befunge에서 사용해보십시오! > <>에서 사용해보십시오! Gol> <>에서 사용해보십시오! 분열에서 사용해보십시오! Wumpus에서 사용해보십시오! 추기경에서 사용해보십시오! 밀랍에서 사용해보십시오! 앨리스에서 사용해보십시오!

확인!

많은 2D 언어, 줄 바꿈 문자열 리터럴을 모두 남용 출력 차이는 다음과 같습니다.

> <>의 Gol> <> 및 비 펀지-98 모든합니다 (제외 코드 거꾸로 인쇄 ", 다른 위치에서 마지막 세 문자) R*", O"*"R*각각. Beeswax에도 코드가 거꾸로 있지만 마지막 세 문자는 출력의 첫 번째 섹션에 산재됩니다. 이스케이프 된 문자 ( ', \")가 모두 앞쪽으로 이동 된 것을 제외하고 Alice는 대부분 뒤로 이동합니다.

Wumpus는 유일한 실제 퀴즈이고 Fission은 "시작 대신 코드의 끝 부분 에을 , 카디널은 시작 과 니어 시작 "사이에 씁니다 .05

다른 순열의 증거

설명 :

Befunge-98 :

"  Wrapping string literal pushes all other characters + a space to the stack
 65*4+  Push " to the stack
      059*$!#.39*0j   Push 1,27 to the stack
                   p  Pops the top three values of the stack (27,1,34)
                    2+  Adds 2 to the space to make "
                      'Wk,@  Prints the top 88 characters of the stack and terminates

> <> 및 골> <> :

솔직히 말해서, 나는 여기서 많이하지 않았다. 이 두 언어의 실행 간의 유일한 차이점은 @각 언어마다 다른 방식으로 스택의 상위 3 개 값을 회전시키는 명령입니다.

"  Wrapping string literal pushes all other characters to the stack
 65*4+  Push 34 (") to the stack
      059*$!#.  Jump to cell 45,0
                                   \@  Rotate the top three values of the stack 
                                     ol?!,'.'0.  Output the whole stack, ending in a divide by 0/stack underflow error

분열:

 "............R  Spawn a pointer going right

 "  Switch to printing mode and print every other character
 "  Switch off printing mode
  6  Teleport to other 6
 "........6'!+O   Print the "

부 푸스 :

"  Bouncing string literal
 65*4+  Push a (")
      059*$!#.   Push 0 and jump to cell 0,45
                                        \  Reflect off mirror
                                       +   Add 0 to top of stack
                                 @o&88#    Print the top 88 characters of the stack

추기경:

                                 %   Spawn two pointer going left/right (up/down despawn immediately)
                                  -$  Right pointer jumps to cell -1,0
                      x,++tttt=++     Left pointer prints "
"  While right pointer switches to print mode and prints the code

밀랍:

 "................*`*   Spawn pointers going in every direction
                        Every other * also spawns pointers, but they do nothing
                   `    Turn on print mode for two of the pointers going in different directions
                        This prints everything but the `
          #}.6~.F4*     Print a `

앨리스 :

"  Wrapping string literal pushes all other characters to the stack
   Except 's and mirrors
 65*4+  Push " to the stack
      059*$!#.  Does nothing
              39*0j  Jumps to cell 39,0
                         ''5&.    Push ' and duplicate it 5 times
                              '\  Push \
                                d&o@  Print the whole stack

6

Perl 5 , Ruby , JavaScript (Chrome), PHP , Python 2 , Python 3 , 1206 바이트, 점수 6 6 / 1206 = 38.6865671641791

q=1//2;s=+0;s|0;"/.__id__;#";_="""q=1//2;s=+0;s|0;"/.__id__;#";_={0}{1}{0};R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q={0}{2}{0};print(_.format(Q,_,q[0:-12]+R,"%"))""";R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q="""|;#<?ob_end_clean();
eval($_='"$t"?0?[$q=37 .chr+113 .chr+38 .chr,$p=(96 .chr+39 .chr)*4,$n=10 .chr,$s=39 .chr*12,$S=34 .chr*3]:eval("printf=console.log;c=String.fromCharCode;$q=c(96);$p=c(37,113,38,39).repeat(4);$n=c(10);$s=c(39).repeat(12);$S=c(34,34,34)"):[]?[$q=q(!g)^PA,$p=HARHARHARHAR^od2od2od2od2,$n=R^X,$s=bbbbbbbbbbbb^EEEEEEEEEEEE,$S=hhh^JJJ]:[$q=O^h,$p=str_repeat(RHa3^w9GS,4),$n=R^X,$s=str_repeat(b^E,12),$S=HHH^jjj];//#');printf($x='q=1//2;s=+0;s|0;"/.__id__;#";_=%7$sq=1//2;s=+0;s|0;"/.__id__;#";_={0}{1}{0};R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q={0}{2}{0};print(_.format(Q,_,q[0:-12]+R,"%8$s"))%7$s;R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q=%7$s|;#<?ob_end_clean();%5$seval($_=%3$s%1$s%3$s);printf($x=%3$s%2$s%3$s,$_,$x,$q,$p,$n,$s,$S,"%8$s",![]||([]+[])?$n:"");//#%4$s%6$s%7$s;print(_.format(Q,_,q[0:-12]+R,"%8$s"))%9$s',$_,$x,$q,$p,$n,$s,$S,"%",![]||([]+[])?$n:"");//#`q&%`q&%`q&%`q&%''''''''''''""";print(_.format(Q,_,q[0:-12]+R,"%"))

온라인 Perl, Ruby, PHP, Python 2 및 Python 3의 유효성을 검사하십시오!

참고 : Chrome의 Inspector 콘솔에서 위의 프로그램을 실행하면 위치 인수를 지원하는 것으로 표시되어 console.log올바른 프로그램을 반환합니다.

설명

이것은 내가 기대했던 것보다 훨씬 길었고 인생도 조금 더 어려워서 계속 땜질 할 것입니다. 더 많은 언어를 추가하고 싶지만 $시길을 신경 쓰지 않는 것을 찾아야합니다 ...

이것은 인용 부호의 계산이 각 언어마다 약간 다른 표준 퀴니 형식입니다. Ruby %q&에서는 PHP를 사용하고 ', JavaScript (Node.js)를 사용 `하고 Perl 5는 q(...를 사용 )합니다. 따옴표 만 변경되기 때문에 나머지 프로그램은 여전히 ​​각 언어에서 실행 가능하고 유효한 구문입니다. Python 2 및 Python """은 Python 2 및 '''Python 3을 사용하여 이전 프로그램을 래핑합니다 .

결과 Perl 및 Ruby 프로그램은 표준 quine이 아니며 추가 q/ %qs가 반복마다 추가되지만 첫 번째 프로그램은 올바르게 리턴됩니다.

결과는 다음과 같습니다.

  • 펄 5 :
    eval($_=q&... q&);printf($x=q&... q&,... );//#'%`'%`'%`'%`''''''''''''"""...
  • 루비 :
    eval($_=%q&... %q&);printf($x=%q&... %q&,... );//#`'`'`'`'''''''''''''"""...
  • 자바 스크립트 (Chrome) :
    eval($_=`... `);printf($x=`... `,... );//#%q&'%q&'%q&'%q&'''''''''''''"""...
  • PHP :
    eval($_='... ');printf($x='... ',... );//#`q&%`q&%`q&%`q&%''''''''''''"""...
  • 파이썬 2 :
    ... _="""... """;... q="""...''''''''''''""";print(_.format(Q,_,q[0:-12]+R,"%"))
  • 파이썬 3 :
    ... _='''... ''';... q='''...""""""""""""''';print(_.format(Q,_,q[0:-12]+R,"%"))

나는 이것을 많이 재 작업했다. 나는 여기서 중요한 것을 놓치지 않았기를 바란다. 나는 여전히 조 킹의 점수 근처에 갈 수있는 좋은 방법을 가지고 있습니다 ...


2

젤리M 2, 6 / 14 = 4.57

1Ɗṙ@“1Ɗṙ@ȮṾ”ȮṾ

젤리에서 사용해보십시오!

M으로 해보십시오!

Ɗṙ@ȮṾ1“Ɗṙ@ȮṾ1” 젤리에서

1Ɗṙ@ȮṾ“1Ɗṙ@ȮṾ” M에서


잘 모르겠어요 그 적절한 quine로 숯 하나 카운트
H.PWiz

@ H.PWiz 나는 그 말을 추가하려고했습니다. 저는 OP에게 물어볼 것입니다
dylnan

@ l4m2 당신은 숯 프로그램이 적절한 quine이라고 생각합니까? 그렇지 않으면 삭제하겠습니다.
dylnan

QuinePHP 와 같은 것 같아요 ?
l4m2

@ l4m2 확실하지 않습니다, 나는 PHP를 모른다. 그것은 내가 생각하는 대부분의 ASCII 텍스트에서 작동합니다
dylnan

2

파이썬 2파이썬 3 2 6 / 61 = 1.05

s='s=%r;print(s%%s[::(1/2>0)*2-1])';print(s%s[::(1/2>0)*2-1])

파이썬 2에서 사용해보십시오!

파이썬 3에서 사용해보십시오!

Jo King 덕분에 12 바이트를 절약했습니다.

파이썬 2 프린트

s=')]1-2*)0>2/1(::[s%%s(tnirp;r%=s';print(s%s[::(1/2>0)*2-1])

파이썬 3 프린트

s='s=%r;print(s%%s[::(1/2>0)*2-1])';print(s%s[::(1/2>0)*2-1])

이 사실을 사용하는 1/2것입니다 .5파이썬 3에서와 0파이썬 2를.


1

배시 / GolfScript, 72 바이트의 득점 6 / 72 = 8/9 (~ 0.888을 ...)

.~0 () 
{ 
    declare "-f" @* ".~0" " ()
 "+@n.;
    echo '.~0;'
}
.~0;

처음 두 줄에 단일 후행 공간을 포함합니다.

Bash에서 온라인으로 사용해보십시오.
GolfScript에서 온라인으로 사용해보십시오.

" Polyquine 쓰기 "문제에 대한 @ jimmy23013 의 답변을 간단히 수정하십시오 . 수정은 세 번째 줄 뒤의 후행 공백을 제거하고로 변경 \n"+@n.;되었습니다 \n "+@n;.

Bash는 다음과 같이 1 행과 2 행을 인쇄합니다.

.~0 ()    <- Trailing space
{         <- Trailing space

그리고 GolfScript는 다음과 같이 1 행과 2 행을 인쇄합니다.

.~0 ()   <- No trailing space
 {       <- Both leading and trailing space

여기서 기본 프로그램, Bash 출력 및 GolfScript 출력은 각각 줄 바꾸기가 \n다음 과 같이 바뀝니다 .

.~0 () \n{ \n    declare "-f" @* ".~0" " ()\n "+@n.;\n    echo '.~0;'\n}\n.~0;
.~0 () \n{ \n    declare "-f" @* ".~0" " ()\n "+@n.;\n    echo '.~0;'\n}\n.~0;
.~0 ()\n { \n    declare "-f" @* ".~0" " ()\n "+@n.;\n    echo '.~0;'\n}\n.~0;

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