Đơn hàng


10

Viết chương trình, khi chạy bằng các ngôn ngữ khác nhau, sẽ tạo ra một hoán vị byte khác nhau của mã trong mỗi ngôn ngữ. Mã nguồn chính xác được tính là một hoán vị.

Ở đây "ngôn ngữ khác nhau" có thể là phiên bản khác nhau (Py 2 và Py 3) hoặc các cờ tiêu chuẩn khác nhau. Đó là đầu ra khác nhau buộc các phiên bản khác nhau.

Quy tắc quine thích hợp áp dụng cho chương trình trong mỗi ngôn ngữ. Điểm của bạn được tính như (Language count)^6/(Code length in bytes), với điểm cao hơn sẽ tốt hơn.

Mẫu vật:

Nếu mã của bạn đang AABvà chạy bằng ba ngôn ngữ khác nhau ABA, AABAAB, thì điểm của nó là 2^6/3(chỉ một trong hai AABsố). Nó là tốt nếu ABAlà vô nghĩa.


1
Những gì được coi là một ngôn ngữ khác nhau?
Laikoni

4
Định nghĩa nào của một quine thích hợp áp dụng? ( Martin , hoặc ais523 của , hoặc có thể một số định nghĩa khác trong những chủ đề meta?) Do các quy tắc Quine thích hợp chỉ áp dụng cho những giải thích của chương trình đó thực sự quines? (Đối với những gì đáng giá, tôi không nghĩ rằng thách thức này được cải thiện nhiều bằng cách thực thi các quy tắc đúng đắn.)
Lynn

Để làm rõ, làm việc với ví dụ của bạn - nếu mã của tôi AABin AABbằng ngôn ngữ-1 và ABAngôn ngữ-2, tôi cho rằng đó phải là một câu hỏi thích hợp khi được xem như là một chương trình ngôn ngữ-1 và không có hạn chế nào nữa liên quan đến việc giải thích nó như một chương trình ngôn ngữ-2. Có đúng không?
Lynn

1
Là độ dài mã được tính bằng ký tự hoặc byte? Chúng ta nên làm gì với các bảng mã ký tự khác nhau?
dylnan

1
Điều gì về byte so với ký tự?
dylnan

Câu trả lời:


10

Befunge-98 , > <> , Gol> <> , Fission , Wumpus , Đức Hồng Y , Sáp ongAlice Điểm: 8 6 /88 = 2978,909

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

Hãy thử nó trong Befunge! Hãy thử trong> <>! Hãy thử nó trong Gol> <>! Hãy thử nó trong phân hạch! Hãy thử nó trong Wumpus! Hãy thử nó trong Hồng y! Hãy thử nó trong sáp ong! Hãy thử nó trong Alice!

Xác minh!

Rất nhiều ngôn ngữ 2D, tất cả lạm dụng chuỗi ký tự chuỗi. Do đó, sự khác biệt trong đầu ra là:

> <>, Gol> <> và Befunge-98 đều in mã ngược (ngoại trừ "), với ba ký tự cuối cùng ở các vị trí khác nhau R*", O"*"R*tương ứng. Sáp ong cũng có mã ngược, nhưng ba ký tự cuối cùng được xen kẽ trong phần đầu tiên của đầu ra. Alice là chủ yếu về phía sau, ngoại trừ cho tất cả các nhân vật thoát ( ', \") chuyển đến phía trước để thay thế.

Wumpus là quine thực tế duy nhất, Phân hạch đặt "ở cuối mã thay vì bắt đầu, và Hồng y đặt "giữa 05gần bắt đầu.

Bằng chứng về hoán vị khác nhau

Giải thích:

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

> <> và Gol> <>:

Thành thật mà nói, tôi đã không làm gì nhiều ở đây. Sự khác biệt duy nhất giữa việc thực thi hai ngôn ngữ này là @lệnh, xoay ba giá trị trên cùng của ngăn xếp theo các cách khác nhau cho mỗi ngôn ngữ.

"  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

Phân hạch:

 "............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 "

Wumpus:

"  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

Hồng y:

                                 %   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

Sáp ong:

 "................*`*   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 `

Alice:

"  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 , của Ruby , JavaScript (Chrome), PHP , Python 2 , Python 3 , 1206 byte, ghi được 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,"%"))

Xác thực Perl, Ruby, PHP, Python 2 và Python 3 trực tuyến!

Lưu ý : chạy chương trình trên trong bảng điều khiển Inspector trong Chrome (có vẻ như hỗ trợ các đối số vị trí để console.log) trả về chương trình chính xác.

Giải trình

Điều này hóa ra lâu hơn nhiều so với tôi mong đợi và tôi cũng khiến cuộc sống của mình khó khăn hơn một chút, vì vậy tôi có khả năng tiếp tục mày mò với nó. Tôi cũng muốn thêm nhiều ngôn ngữ nữa, nhưng tôi cần tìm thứ gì đó không phiền $...

Đây là khá nhiều định dạng Quine tiêu chuẩn mà tính toán của báo giá để sử dụng là một chút khác nhau cho mỗi ngôn ngữ: trong Ruby %q&được sử dụng, sử dụng PHP ', JavaScript (Node.js) tận dụng `và Perl 5 sử dụng q(... ). Vì chỉ có dấu ngoặc kép thay đổi, phần còn lại của chương trình vẫn có thể thực thi và cú pháp hợp lệ trong mỗi ngôn ngữ. Python 2 và 3 được bao bọc xung quanh chương trình trước đó bằng """Python 2 và '''Python 3.

Các chương trình Perl và Ruby kết quả không phải là các tiêu chuẩn, bổ sung q/ %qs được thêm vào mỗi lần lặp, nhưng chương trình đầu tiên trả về chính xác.

Kết quả là:

  • Perl 5:
    eval($_=q&... q&);printf($x=q&... q&,... );//#'%`'%`'%`'%`''''''''''''"""...
  • Ruby:
    eval($_=%q&... %q&);printf($x=%q&... %q&,... );//#`'`'`'`'''''''''''''"""...
  • JavaScript (Chrome):
    eval($_=`... `);printf($x=`... `,... );//#%q&'%q&'%q&'%q&'''''''''''''"""...
  • PHP:
    eval($_='... ');printf($x='... ',... );//#`q&%`q&%`q&%`q&%''''''''''''"""...
  • Con trăn 2:
    ... _="""... """;... q="""...''''''''''''""";print(_.format(Q,_,q[0:-12]+R,"%"))
  • Con trăn 3:
    ... _='''... ''';... q='''...""""""""""""''';print(_.format(Q,_,q[0:-12]+R,"%"))

Tôi đã làm việc này rất nhiều, tôi hy vọng tôi đã không bỏ lỡ bất cứ điều gì quan trọng ở đây. Tôi vẫn còn khá nhiều cách để đến bất cứ nơi nào gần điểm số của Jo King ...


2

Jelly , và M , 2 6 /14 = 4,57

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

Hãy thử nó trong Jelly!

Hãy thử nó trong M!

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

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


Tôi không chắc chắn rằng Người than được tính là một câu hỏi thích hợp
H.PWiz

@ H.PWiz Tôi sắp thêm một bình luận nói rằng. Tôi sẽ hỏi OP
dylnan

@ l4m2 bạn có coi chương trình Than là một quine thích hợp không? Tôi sẽ xóa nếu không.
dylnan

Tôi đoán nó giống như Quinetrong PHP?
l4m2

@ l4m2 Không chắc, tôi không biết PHP. Nó hoạt động cho hầu hết các văn bản ASCII tôi nghĩ
dylnan


1

Bash / GolfScript, 72 byte, điểm 2 6 /72 = 8/9 (~ 0,888 ...)

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

Chứa một không gian dấu duy nhất trên hai dòng đầu tiên.

Hãy thử trực tuyến tại Bash.
Hãy thử trực tuyến trong GolfScript.

Chỉ cần sửa đổi câu trả lời của @ jimmy23013 cho thử thách " Viết một câu hỏi " . Việc sửa đổi đã được thực hiện là loại bỏ khoảng trống sau dòng thứ ba và thay đổi \n"+@n.;thành \n "+@n;.

Bash sẽ in các dòng 1 và 2 như thế này:

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

Và GolfScript sẽ in các dòng 1 và 2 như thế này:

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

Ở đây, chương trình cơ sở, đầu ra Bash và đầu ra GolfScript tương ứng với các dòng mới được thay thế bằng \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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.