Thêm một ngôn ngữ cho một polyglot


239

Đây là một thách thức trong đó mỗi câu trả lời được xây dựng dựa trên câu trả lời trước đó. Tôi khuyên bạn nên sắp xếp chuỗi theo "cũ nhất" để chắc chắn về thứ tự mà bài viết được thực hiện.

Lưu ý : Điều này đã trở thành một thách thức khá lâu dài và việc đăng câu trả lời mới là khá khó khăn. Như vậy, giờ đây đã có một phòng trò chuyện dành cho thử thách này, trong trường hợp bạn muốn tư vấn về một phần cụ thể của câu trả lời tiềm năng, hãy có ý tưởng cho các ngôn ngữ có thể được thêm hoặc tương tự. Hãy ghé qua nếu bạn có bất cứ điều gì muốn hỏi hoặc nói!

Nhiệm vụ

Các n chương trình phải nộp phải chạy trong th n ngôn ngữ khác nhau; cụ thể, tất cả các ngôn ngữ được thêm vào trong các chương trình trước đó sẽ được gửi, cộng thêm một ngôn ngữ nữa. Chương trình phải xuất 1 khi chạy bằng ngôn ngữ đầu tiên được sử dụng trong câu trả lời cho câu hỏi này, 2 khi chạy bằng ngôn ngữ thứ hai, v.v. Ví dụ: câu trả lời đầu tiên có thể in 1 khi chạy trong Python 3 và câu trả lời thứ hai có thể xuất 1 khi chạy trong Python 3 và 2 khi chạy bằng JavaScript; trong trường hợp này, câu trả lời thứ ba sẽ phải xuất 1 khi chạy bằng Python 3, 2 khi chạy bằng JavaScript và 3 khi chạy bằng một số ngôn ngữ khác.

Quy tắc bổ sung

  • Chương trình của bạn phải chạy mà không bị lỗi hoặc gặp sự cố. Cảnh báo (và đầu ra stderr khác) có thể được chấp nhận, nhưng chương trình phải thoát bình thường (ví dụ: bằng cách chạy hết chương trình hoặc thông qua một lệnh như exitthực hiện chấm dứt chương trình bình thường).

  • Đầu ra phải chỉ là số nguyên, nhưng các dòng mới theo dõi là OK. Đầu ra thiết bị xuất chuẩn không thể tránh khỏi khác cũng được cho phép. Ví dụ: tên và phiên bản thông dịch trong Befunge-93, khoảng trắng sau chuỗi in trong Zephyr. Một số ngôn ngữ cung cấp hai phương pháp in - có và không có dấu cách; trong trường hợp này phương pháp không có dấu cách phải được sử dụng.

  • Mỗi câu trả lời phải dài hơn 20% hoặc 20 byte (tùy theo giá trị nào lớn hơn) so với câu trả lời trước đó. (Điều này là để ngăn chặn việc sử dụng các ngôn ngữ như Lenguage gửi thư rác và để khuyến khích ít nhất một số lượng nhỏ việc chơi gôn.)

  • Sử dụng các phiên bản khác nhau của cùng một ngôn ngữ (mặc dù rõ ràng họ sẽ phải in các số khác nhau, vì vậy bạn sẽ cần phải kiểm tra phiên bản vào polyglot). Tuy nhiên, bạn không được sử dụng tính năng ngôn ngữ trả về số phiên bản của ngôn ngữ. Rõ ràng việc lặp lại cùng một ngôn ngữ là điều hiển nhiên là không thể (vì chương trình sẽ phải in một cách xác định một trong hai số khác nhau).
  • Thủ thuật như lạm dụng bình luận quá mức, mặc dù bị cấm trong một số cuộc thi polyglot, chỉ tốt ở đây.
  • Bạn không phải sử dụng các câu trả lời trước như một hướng dẫn để tự viết (bạn có thể viết lại toàn bộ chương trình nếu bạn muốn, miễn là nó tuân thủ thông số kỹ thuật); tuy nhiên, căn cứ vào câu trả lời của bạn chủ yếu dựa trên câu trả lời trước được cho phép và có lẽ là cách dễ nhất để đưa ra giải pháp.
  • Bạn không thể gửi hai câu trả lời liên tiếp. Hãy để người khác đăng ở giữa. Quy tắc này được áp dụng cho đến khi điều kiện chiến thắng được đáp ứng.
  • Vì thử thách này yêu cầu các đối thủ khác đăng bài bằng chính ngôn ngữ của bạn, bạn chỉ có thể sử dụng các ngôn ngữ có triển khai miễn phí (giống như đây là một cuộc thi ).
  • Trong trường hợp một ngôn ngữ có nhiều hơn một trình thông dịch, bạn có thể chọn bất kỳ trình thông dịch nào cho bất kỳ ngôn ngữ nào, miễn là tất cả các chương trình chạy thành công trong ngôn ngữ đó sẽ làm như vậy trong trình thông dịch đó. (Nói cách khác, nếu một chương trình hoạt động ở nhiều hơn một thông dịch viên, các bài đăng trong tương lai có thể chọn một trong những thông dịch viên đó, thay vì một bài đăng "khóa" một lựa chọn thông dịch viên cụ thể cho một ngôn ngữ.)
  • Thử thách này hiện sử dụng các quy tắc PPCG mới về lựa chọn ngôn ngữ : bạn có thể sử dụng ngôn ngữ hoặc trình thông dịch ngôn ngữ, ngay cả khi nó mới hơn câu hỏi. Tuy nhiên, bạn không được sử dụng ngôn ngữ / trình thông dịch mới hơn câu hỏi nếu a) ngôn ngữ được thiết kế cho mục đích đa âm hoặc b) ngôn ngữ được lấy cảm hứng từ câu hỏi này. (Thiết kế Vì vậy mới ngôn ngữ lập trình thực tế đang gần như chắc chắn sẽ là OK, như là esolangs không liên quan, nhưng những thứ như một cây lê , được lấy cảm hứng từ câu hỏi này, bị cấm.) Lưu ý rằng điều này không thay đổi giá trị của ngôn ngữ thiết kế cho đa hình cũ hơn câu hỏi này.
  • Lưu ý rằng điều kiện chiến thắng (xem bên dưới) được thiết kế sao cho việc phá vỡ chuỗi (nghĩa là không ai có thể trả lời sau khi bạn sử dụng ngôn ngữ khó đa âm với các ngôn ngữ khác) sẽ khiến bạn không đủ điều kiện để chiến thắng. Mục đích là để tiếp tục miễn là chúng tôi có thể, và nếu bạn muốn giành chiến thắng, bạn sẽ phải tôn trọng điều đó.

Định dạng câu trả lời

Vì tất cả các câu trả lời phụ thuộc vào nhau, có một định dạng câu trả lời nhất quán sẽ hữu ích. Tôi khuyên bạn nên định dạng câu trả lời của mình giống như thế này (đây là ví dụ cho liên kết thứ hai trong chuỗi):

2. JavaScript, 40 byte

(program goes here)

Chương trình này in 1 bằng Python 3 và 2 bằng JavaScript.

(nếu bạn muốn giải thích chương trình, các kỹ thuật đa âm, v.v., hãy đặt chúng ở đây)

Điều kiện chiến thắng

Một khi không có câu trả lời mới trong 14 ngày, người chiến thắng sẽ là người đăng câu trả lời mới nhất thứ hai , tức là polyglot lớn nhất đã được chứng minh là không phá vỡ chuỗi. Mở rộng chuỗi sau đó vẫn rất được hoan nghênh!

Người chiến thắng là Chance , xem câu trả lời 194 (TemplAt) .

Danh sách ngôn ngữ


3
Đối với những người có thể xem các bài đăng đã bị xóa: bài đăng Sandbox đã ở đây .

5
Không cần phải sao chép chương trình trước đó, mặc dù tất nhiên bạn có thể sử dụng nó làm hướng dẫn; làm lại chương trình từ đầu có thể sẽ mất nhiều thời gian hơn! Không cần phải thấm vào câu trả lời; sắp xếp theo cũ nhất sẽ hiển thị tất cả các câu trả lời theo thứ tự.

3
@ ais523 Tôi nghĩ những gì có nghĩa là câu trả lời mới có nên thử liên kết với mã mới không?
Màu xanh

5
Tôi nghĩ rằng chúng ta cần một tập lệnh lấy kết xuất mã hex và tự động chạy nó bằng tất cả các ngôn ngữ ...
mbomb007

3
Đây là máy in số nguyên đa năng được đăng dưới dạng một loại thử thách khác. (Cảm hứng?) Câu trả lời cuối cùng (hiện tại) sẽ được ghi điểm 0.0127, chỉ bị đánh bại bởi bài nộp 30 ngôn ngữ của Sp3000 ... :)
Stewie Griffin

Câu trả lời:


80

Lưu ý: Nếu bạn thấy cái này trước, bạn có thể muốn sắp xếp theo thứ tự cũ nhất

17. Julia (128 byte)

#v`16 "<" 6/b0\ .q@#;n4"14""
#>3N9@15o|R"12"*^
#=|
print((1/2and 9 or 13)-(0and+4)^1<<65>>62);# =#;print(17)
#gg99ddi2` |1|1+6

Có hai ESC trên dòng cuối cùng, một trước đầu tiên gvà một sau 2. Điều này có thể được đánh gôn nhiều hơn, nhưng mọi thứ trở nên lộn xộn không nhờ vào V và Pyth.

In 1 trong Python 3, 2 in V, 3 in Minkolang, 4 in> <>, 5 in Python 2, 6 in SMBF, 7 in Japt, 8 in Retina, 9 in Perl, 10 in Befunge-93, 11 in Befunge -98, 12 ở Fudge, 13 ở Ruby, 14 ở Turtléd, 15 ở Haystack, 16 ở Pyth và 17 ở Julia .


Gợi ý:

  • Bắt đầu của dòng thứ tư là Python 2/3, Perl, Ruby. Kết thúc là Julia, nhờ #=những bình luận đa dòng (lưu ý rằng Julia không có and/or).
  • V là <ESC>gg99ddi2<ESC>, chắc chắn là có thể chơi được nhưng V rất khó chịu khi thử nghiệm trực tuyến! vì thông dịch viên khá chậm.
  • Lúc đầu, Minkolang và Haystack đi xuống v. Befunge-93 và -98 không, và phụ thuộc vào a b.
  • Retina đếm số lượng khoảng trắng và 1 trong dòng thứ tư và V ẩn trong cấu hình cho Retina (tức là trước khi backtick).
  • Theo gợi ý của mỗi @ ETHproduction, Japt sử dụng backticks để ẩn phần lớn mã trong một chuỗi.
  • Phân hạch là R"12"*.
  • SMBF đã được chơi golf <.ở dòng đầu tiên, cộng với trận chung kết 6.

24
Mã của mọi người đã đi đâu mặc dù
Alfie Goodacre

13
159 byte đến 128 byte? Wow, đó là một số golf tuyệt vời!
Bò lang băm

6
Thật tuyệt, 2 ^ 7 byte
tomsmeding

7
Wow ... thật không thể tin được! Chúng ta sẽ phải viết ra một lời giải thích mới cho mọi ngôn ngữ khi tất cả đã nói và thực hiện ;-)
ETHproductions 7/12/2016

4
@Alfieoodacre "Bạn không cần phải sử dụng các câu trả lời trước đây làm hướng dẫn để tự viết (bạn có thể viết lại toàn bộ chương trình nếu bạn thích, miễn là nó tuân thủ thông số kỹ thuật)"
mbomb007 7/12/2016

52

23. Lục giác , 186 byte

Xin lỗi nếu điều này làm xáo trộn kế hoạch ...

#v`16/"<"6/b.q@"(::):::  (22)S#;n4"14"
#>3N6@15o|> ^*ttt*~++~~~%
#=~nJ<R"12";
#[

print((1/2and 9 or 13)-(0and+4)^1<<65>>62)#46(89999+++++!)=#print(17)#0\32=""<0]#echo 21
#8␛dggi2␛` |1|6

Được sử dụng để thể hiện một ký tự ESC theo nghĩa đen.

Bản in:

23 ở Hexagony , 22 ở Underload, 21 ở Nim, 20 ở Prelude, 19 ở Reng (có thể kiểm chứng ở đây ), 18 ở Hồng y, 17 ở Julia, 16 ở Pyth, 15 ở Haystack, 14 ở Turtlèd, 13 ở Ruby, 12 ở Phân hạch, 11 ở Befunge-98, 10 ở Befunge-93, 9 ở Perl, 8 ở Retina, 7 ở Japt , 6 ở SMBF, 5 ở Python 2, 4 ở> <>, 3 ở Minkolang, 2 ở Vim / V và 1 trong Python 3.

Để truy cập các ngôn ngữ chưa được liên kết, nhấp vào change languagenút ở phía trên bên phải của liên kết Hexagony.


Hexagony không thể đọc được (ở TẤT CẢ) ở định dạng này. Chúng ta cần nhìn vào nó ở dạng lục giác.
Lưu ý rằng 2 ký tự ESC đã được thay thế bằng s để bạn có thể thấy chúng - chúng bị bỏ qua, vì vậy không có ai khác trong chương trình:

        # v 1 6 / " < " 6
       / b . q @ " ( : : )      A lot more readable, right?? No?
      : : : ( 2 2 ) S # ; n
     4 " 1 4 " # > 3 N 6 @ 1
    5 o | > ^ * t t t * ~ + +
   ~ ~ ~ % # = ~ n J < R " 1 2
  " ; # [ p r i n t ( ( 1 / 2 a
 n d 9 o r 1 3 ) - ( 0 a n d + 4
) ^ 1 < < 6 5 > > 6 2 ) # 4 6 ( 8   | Note that the 0s below can be replaced
 9 9 9 9 + + + + + ! ) = # p r i    | With anything (except "`" or " "), 
  n t ( 1 7 ) # 0 \ 3 2 = " " <     V as far as Hexagony is concerned
   0 ] # e c h o 2 1 # 8 ␛ d g
    g i 2 ␛ | 1 | 6 . . . . .    <-- the ␛ represents an esc
     . . . . . . . . . . . .         character
      . . . . . . . . . . .
       . . . . . . . . . .       A "." is a no-op
        . . . . . . . . .
                ^
                | Mirror wraps to here, going NW

Đối với những người không quen thuộc với Hexagony , có 6 IP, bắt đầu ở 6 góc. Chỉ có 1 hoạt động tại một thời điểm và được chuyển đổi bằng cách sử dụng #][. Mô hình bộ nhớ không quan trọng đối với chương trình này, nhưng có thể cần phải hiểu trong tương lai. Tất cả những gì bạn cần biết là 1 int được lưu trữ trong "cạnh bộ nhớ" (viết tắt là ME) và '"}{thay đổi ME đang hoạt động.

\/|_>< là những tấm gương điều khiển dòng chương trình.

Đây là cách nó hoạt động:

Dòng đầu tiên được thực hiện:

#       A no-op (sets active IP to 0, the currently active one)
 v      letter chars set the ME to their ASCII value - so ME is now 118
  16    Like Labyrinth, 0-9 multiplies ME by 10 and is added - ME now 11816
    /   A mirror that sends IP going NW by wrapping to the bottom

Phần dưới (đoạn trích được lật theo chiều dọc để bạn có thể đọc lên xuống):

    .   
   .    A series of no-ops. The IP is going NW now,
  .     because of the mirror on the top.
 .
|       Another mirror. This one sends the IP NE, into the h
 h      sets the ME to 104, the ASCII value for h
  #     104 % 6 == 2, so IP 2 is now active instead of 0

Cạnh phải:

        8  IP #2 is moving SW, starting in the right corner 
       i   Sets the ME to 105
      <    Mirror. Sends the IP going due West
    ""     These change the Active ME - just know that the new edge is 0
   =       Changes the MP (more in specs) - effectively a no-op used to fill space
\32        pushes 23, and mirrors up NE to the !

Bit cuối cùng của mã có liên quan:

!          Prints the current value of the ME as an int. Success!
 20(R~     Does things to the ME - irrelevant now
      @    Ends the program!

Những điều cần lưu ý:

  • Hexagony giảm tất cả s và `s trước khi thực hiện, vì vậy mọi thay đổi đối với Hexagony sẽ không ảnh hưởng đến Hexagony
  • Tôi cần phải đệm mã để nó được hiểu là một hình lục giác có chiều dài 9, thay vì hình thứ 8 - hãy cẩn thận khi chơi gôn dưới 169 hoặc trên 217 ký tự có liên quan
  • Do đó, ~~~và 2 0giây ở cuối có thể được thay đổi mà không gây hại cho mã
  • Chỉ =""cần di chuyển ME ra khỏi cái trước để có thể sửa đổi ME mới. Chúng có thể được thay thế bằng các ký tự khác làm điều tương tự mà không gây hại cho ( 'các ví dụ về chương trình lục giác )
  • Về mặt kỹ thuật, điều này không phù hợp với thông số kỹ thuật của Befunge 93, bởi vì nó giới hạn hộp giới hạn của mã ở mức 80 bởi 25 bộ điều khiển. Tuy nhiên, hầu hết những người can thiệp đều bỏ qua thông số này (như TIO), vì vậy cá nhân tôi không nghĩ đó là vấn đề lớn. Nếu bạn làm, hãy để lại nhận xét. (Nếu đủ thực sự muốn tôi thay đổi nó, thì tôi sẽ thử)
  • Hy vọng nó không quá khó bây giờ.

1
Điều này có thể dễ dàng trở thành luồng chương trình điên rồ nhất nếu được thực hiện đúng. Tôi đã gần hoàn thành nó với một hình lục giác kích thước 8 thông qua một số phương pháp @ ## crazy, nhưng 9 đã dễ dàng hơn rất nhiều khi tôi thử điều đó. Ngoài ra, v1 của TIO hoạt động nhanh hơn rất nhiều, nhưng bạn không thể chuyển đổi ngôn ngữ dễ dàng.
MildlyMilquetoast

Tôi sẽ đề nghị Labyrinth tiếp theo, nhưng tôi muốn làm điều đó.
MildlyMilquetoast

Bản thân tôi không đủ kỹ năng để viết bất cứ điều gì như thế này, nhưng trong thời gian đó, tôi đang chờ đợi Cubix bật lên.
Pavel

@pavel Tôi không quen với ngôn ngữ đó. Tôi cho rằng đó là 3D. Nghe hay đấy. Ngoài ra còn có một số loại nấm là 3D, có thể là một sự bổ sung thú vị
MildlyMilquetoast

Tôi nghi ngờ việc duy trì thứ gì đó như dòng chảy này là dễ nhất miễn là chúng ta vẫn ở độ dài bên này và chỉ cần viết lại mã Hexagony khi chúng ta đi lên kích thước tiếp theo. Đối với các ngôn ngữ 3D, Trefunge khá dễ phù hợp, giả sử rằng không có ngôn ngữ hiện tại nào hoảng loạn khi nhìn thấy các biểu mẫu. (Ngoài ra, Cubix đã được đăng trước đó nhưng đã bị xóa vì poster nghĩ rằng nó có thể là quá khó khăn; duy trì Hexagony và Cubix cùng một lúc có thể là khá khó hiểu ...)

52

50. bash, 1024 byte

#16  "(}23!@)" 3//v\D(@;'[af2.qc]GkGGZ'#)"14";n4
#/*` "[!PPP(22)SP(>7 7*,;68*,@;'1,@ ␉␉␉␉ q
#>␉
# >36!@␉
#`<`
#<]+<[.>-]>[
#{
#z}
#
#=<xR+++++[D>+++++++L+++<-][pPLEASE,2<-#2DO,2SUB#1<-#52PLEASE,2SUB#2<-#32DOREADOUT,2DOGIVEUPDOiiipsddsdoh@O6O4/]>+.-- -. >][
#Rx%>~~~+ +~*ttt*.x
#D>xU/-<+++L
#R+.----\).>]|
#[#[/v/v(/0l0v01k1kx0l0ix0jor0h0h1d111x0eU0bx0b0o1d0b0e0e00m1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10vx0v0l111111^_)  0046(8+9+9+9+9+=!)
###|
'\';echo 50;exit;';print((eval("1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or"'x"or'({({1})({1}[(0)])}{1}\{1})'#}#(prin 45)(bye)|/=1/24=x<$+@+-@@@@=>+<@@@=>+<?#d>+.--./
__DATA__=1#"'x"//
#.\."12"__*'
###;console.log 39
""""#//
=begin //
#ssseemeePaeueewuuweeeeeeeeeeCisajjapppp/*/
#define z sizeof'c'-1?"38":"37"
#include<stdio.h>
main(  )/*/
#()`#`\'*/{puts(z );}/*'``
<>{# }//
#}
disp 49#//
#{
1}<>//
$'main'//
#-3o4o#$$$
#< >"3"O.
=end #//
"""#"#//
#}
#|o51~nJ;#:p'34'\
#ss8␛dggi2␛ `|1|6$//''25  =#print(17)#>27.say#]#print(47)#]#echo 21#ss*///nd^_^_Z222999"26

Muốn tìm hiểu thêm? Hãy thử trò chuyện polygot !

Hãy thử chúng trực tuyến!

Như thường lệ, tôi đã thay thế các tab bằng chữ và ký tự ESC bằng chữ , do các hạn chế của Stack Exchange. Bạn có thể nhận được một phiên bản dễ dàng của chương trình từ hộp "đầu vào" của liên kết TIO ở trên.

Chạy xuống

Chương trình này in 50 in bash, 49 in Octave, 48 in Deadfish ~, 47 in Lily, 46 in Cubix, 45 in PicoLisp, 44 in alphuck, 43 in reticular, 42 in evil, 41 in brainf ***, 40 in Minimal -2D, 39 trong CoffeeScript, 38 in C, 37 in C ++, 36 in Labyrinth, 35 in INTERCAL, 34 in Rail, 33 in Incident, 32 in Whirl, 31 in Modular SNUSP,30 ở Whitespace, 29 ở Trigger, 28 ở Brain-Flak, 27 ở Perl 6, 26 ở 05AB1E, 25 ở Pip, 24 ở Thutu, 23 ở Hexagony, 22 ở Underload, 21 ở Nim, 20 ở Prelude, 19 ở Reng , 18 ở Hồng y, 17 ở Julia, 16 ở Pyth, 15 ở Haystack, 14 ở Turtlèd, 13 ở Ruby, 12 ở Fudge, 11 ở Befunge-98, 10 ở Befunge-93,9 ở Perl 5, 8 ở Retina, 7 ở Japt, 6 ở SMBF, 5 ở Python 2, 4 ở> <>, 3 ở Minkolang, 2 ở V / Vim và 1 ở Python 3.

xác minh

Hầu hết các ngôn ngữ được kiểm tra bởi trình điều khiển thử nghiệm ở trên. Bốn thủ phạm thông thường cần thử nghiệm riêng:

  • Sự cố đã được kiểm tra bằng trình thông dịch chính thức, ngoại tuyến;

  • Deadfish ~ cũng đã được thử nghiệm bằng trình thông dịch chính thức của nó, ngoại tuyến;

  • Mô-đun SNUSP đã được thử nghiệm trực tuyến tại đây ;

  • Reng đã được thử nghiệm trực tuyến tại đây .

Giải trình

Tôi đã xem xét các khách hàng tiềm năng khác nhau để thêm ngôn ngữ. Một khả năng là tìm một ngôn ngữ có #dòng chú thích có thể được thêm vào dòng "ngôn ngữ kịch bản" (xử lý Perl, Python 2 và 3 và Ruby). Tuy nhiên, tôi phải mất một thời gian để nghĩ ra một ngôn ngữ phù hợp có thể tương thích cú pháp với những ngôn ngữ đã có ở đó.

Hóa ra câu trả lời đã nhìn chằm chằm vào mặt tôi từ lâu. Nếu bạn nhấp vào liên kết TIO ở trên, nó sẽ mở trình điều khiển kiểm tra polyglot, được viết bằng bash. Vì vậy, tất cả thời gian này, tôi đã có một tab có nội dung "Bash - TIO Nexus". Bạn đã nghĩ rằng đó là một gợi ý, nhưng dường như tôi đã bỏ lỡ nó. Là một phần thưởng, bash cũng là một ngôn ngữ kịch bản, vì vậy thuật ngữ "dòng ngôn ngữ kịch bản" vẫn phù hợp.

Chương trình bash bắt đầu ở cùng một nơi với các ngôn ngữ script khác. Tuy nhiên, có một cách khá đơn giản để tách nó ra khỏi chúng; trong các chuỗi trích dẫn đơn, \là một ký tự thoát trong hầu hết các ngôn ngữ, nhưng không phải trong bash. Vì vậy, chúng ta có thể ẩn mã bash khỏi các ngôn ngữ khác thông qua '\'…';, đó là một câu lệnh suy biến (không có tác dụng) trong Perl, Python và Ruby, nhưng được thực thi trong bash. echo 50;exitlà một cách khá đơn giản để kết thúc chương trình bash. Vâng, gần như vậy.

Vấn đề lớn nhất ở đây là bash sẽ, khi chạy exit, tiếp tục phân tích cú pháp cho đến hết dòng hiện tại (mặc dù nó không thực thi mã được đề cập), vì vậy chúng tôi cần đảm bảo không có lỗi cú pháp trên phần còn lại của dòng. Chúng tôi có 'ngay sau exit;đó không (và không thể) được khớp ngay lập tức. Sau đó, trên dòng, '…'được sử dụng để ẩn một số mã Brain-Flak khỏi các ngôn ngữ kịch bản, nhưng điều đó sẽ làm cho nó không bị bash. Do đó, chúng ta cần thay đổi loại chuỗi ký tự mà chúng ta đang sử dụng để ẩn mã, đi từ chuỗi trích dẫn đơn sang chuỗi trích dẫn kép. or"'"thực hiện thủ thuật mà không làm phiền Perl, Python hoặc Ruby (vì đối số bên trái là trung thực trong mọi trường hợp).

Bây giờ chúng tôi có một trích dẫn kép chưa từng có kéo dài đến một dòng trong tương lai. Thật khó để đóng nó mà không làm phiền ít nhất một ngôn ngữ khác; những gì chúng ta thực sự làm là thay đổi cách chúng ta ẩn mã khỏi bash từ trích dẫn kép trở lại thành một trích dẫn duy nhất chưa từng có trong một nhận xét Python / Ruby trên dòng tiếp theo và cuối cùng đóng trích dẫn duy nhất ở cuối dòng sau đó.

Bình và 05AB1E

Loay hoay với dấu ngoặc kép cũng làm xáo trộn các ngôn ngữ đang sử dụng chuỗi trích dẫn kép để ẩn mã, Pyth và 05AB1E. Thủ thuật chính mà chúng tôi sử dụng ở đây là đảm bảo rằng mỗi trích dẫn kép mà chúng tôi thêm sẽ có một trích dẫn kép khác ngay sau đó để hiển thị càng ít mã càng tốt. (Điều này giải thích thêm trích dẫn kép trên __DATA__dòng, không cần thiết cho bash.) Pyth sử dụng \như một ký tự thoát; kết quả chính của điều này là nó đã giới hạn phạm vi tôi có để làm rối các chuỗi trong các ngôn ngữ kịch bản, buộc tôi phải sử dụng phương thức khá phức tạp ở trên (vì tôi không thể dễ dàng sử dụng sự khác biệt trong \hành vi giữa bash và mọi thứ khác). Trong 05AB1E, 'hoạt động như một nhân vật thoát ra bên ngoàichuỗi, và có nó thoát khỏi hàng đầu "sẽ không làm. Vì vậy, cuối cùng tôi cần đặt một ký tự đệm vô dụng (mặc định là thông thường của tôi x; nó giúp mọi thứ dễ đọc hơn!) Bên trong các "'"cấu trúc được sử dụng để thay đổi giữa các kiểu trích dẫn bash.

Mở đầu

Cho đến nay, ngôn ngữ khó nhất để sửa chữa ở đây. Vấn đề là dòng kịch bản, với tất cả các dấu ngoặc đơn của nó, đã bị dịch chuyển sang một bên, và do đó luồng điều khiển Prelude (quan tâm rất nhiều về cách mà dấu ngoặc được căn chỉnh theo chiều dọc) đã bị phá hủy hoàn toàn. Do đó tôi đã phải cố gắng xây dựng lại một cái gì đó hoạt động.

Tồi tệ hơn, dòng đầu tiên hiện tại (mà tôi thực sự không muốn viết lại) đặt một cái gì đó có giới hạn cứng vào nơi dấu ngoặc đơn có thể xuất hiện. Nó bắt đầu với một chữ số khác (thực tế là hai trong số chúng!), Và ngay sau đó là dấu ngoặc đơn mở. Đó là một vòng lặp trong Prelude và các vòng lặp sớm trong luồng điều khiển trong Prelude gây ra một số vấn đề khác nhau (chủ yếu là do chúng gây ra nhiều mã hơn để chạy, thay vì ít hơn). Như vậy, tôi rất cần phải mở một vòng lặp 0 trên một số dòng khác để bỏ qua mã đó. Các maindòng cho chương trình C là rất phù hợp, nhưng chúng ta cần phải rất cẩn thận với nơi phù hợp với khung đóng cửa là; quá xa bên phải và khung chưa từng có trên#R+dòng sẽ gây rắc rối, quá xa trái và nó sẽ không nhận xét đủ mã. (Hãy nhớ rằng dấu ngoặc đơn mở trên một dòng có thể khớp với dấu ngoặc đơn đóng oa dòng khác nhau.)

Khi đã xong, chúng tôi có đủ không gian để gắn vào dấu ngoặc đơn mở trên dòng Sự cố và cuối cùng chúng tôi đã vượt qua một vài ký tự đầu tiên của chương trình. Tuy nhiên, sự khác biệt trong các vị trí dấu ngoặc đơn kết thúc có nghĩa là một số mã Sự cố / Vòng xoáy thực sự chạy trong Prelude, làm hỏng ngăn xếp. Thay vì cố gắng ngăn chặn điều này, tôi đã di chuyển một số số 0 của Whirl sang bên phải, cho phép họ cung cấp cho chúng tôi một chương trình Prelude hoạt động trở lại.

Một thay đổi nhỏ khác là trên dòng đầu tiên của chương trình; dấu ngoặc đơn cuối cùng của dòng là ở một vị trí rất khó tránh. Tôi đã thêm một phần bổ sung cngay sau mã Pyth để chuyển nó sang bên phải. (Nhiều ngôn ngữ đang phân tích điểm đó của chương trình, do đó, phải mất một lượng thử nghiệm và lỗi đáng kinh ngạc để tìm một ký tự đệm không phá vỡ ít nhất một ngôn ngữ!)

Biến cố

Prelude đã đủ khó, nhưng việc Prelude và Incident hoạt động cùng một lúc là ác mộng. Mở đầu đã đặt ra rất nhiều ràng buộc đối với mã khiến tôi không thể tự do di chuyển mọi thứ xung quanh, và do đó khiến việc xây dựng mã thông báo vô tình trở nên khó khăn hơn khi chơi golf. Ví dụ: Prelude chỉ thực sự cần một người 0chuyển sang bên phải, nhưng điều đó đã 00trở thành một mã thông báo thất bại, phá vỡ một số mã thông báo mà chúng tôi muốn là một phần của chương trình Sự cố (vì nếu hai mã thông báo trùng nhau, cả hai đều bị từ chối và sự 00chồng chéo mã thông báo mà chúng tôi muốn ngoài việc chồng chéo chính nó). Tôi đã phải chuyển cả hai ra để tạo một bản sao thứ tư và ngăn chặn nó thậm chí được coi là một mã thông báo.

Tinh tế hơn là các mã thông báo ;'␠␠(tức là hai ký tự không gian). Vấn đề là cả hai đều xuất hiện trước khi chương trình kGđang được sử dụng để bắt đầu chương trình, và do đó sẽ phá vỡ dòng kiểm soát của Sự cố (ngoài việc phá vỡ điểm trung tâm của chương trình).

Loại bỏ một bản sao ␠␠bằng cách phá vỡ nó dường như không khả thi. Loại bỏ nó thông qua chồng chéo có thể là có thể ( ␠=là một sự chồng chéo tiềm năng đầy hứa hẹn), nhưng gần như chắc chắn sẽ ít dài dòng hơn khi chỉ thêm một bản sao thứ tư, đó là những gì tôi đã làm ở đây.

Trong khi đó, chúng ta có thể sử dụng một thủ thuật khác cho ;'. Phá vỡ nó không phải là thứ tôi muốn thử, vì nó được sử dụng trong các tình huống khá nhạy cảm. Tuy nhiên, nó không phải gần khi bắt đầu chương trình (mặc dù xuất hiện trên dòng đầu tiên), vì vậy thật hợp lý khi chúng tôi có thể nhảy qua nó (do đó làm cho nó không ảnh hưởng đến dòng điều khiển) thay vì không cần nó tồn tại. Tôi đã tìm kiếm một mã thông báo phù hợp để sử dụng cho bước nhảy mà sẽ không làm hỏng bất kỳ ngôn ngữ nào khác. /vxuất hiện sớm hơn một chút trên dòng đầu tiên và không phá vỡ bất cứ thứ gì, và do đó, đó là những gì tôi đã sử dụng.

50 ngôn ngữ trong 1 Kib mã

@MistahFiggins đã chỉ ra rằng việc gửi 1025 byte của tôi sẽ gọn gàng hơn nếu nó là 1024 byte (đặc biệt là ngôn ngữ fiftieth là một cột mốc theo đúng nghĩa của nó). Điều này đòi hỏi phải tìm một byte tiết kiệm ở đâu đó. Trong trường hợp này, tôi đã lưu ba byte trong Deadfish ~, với chi phí của hai byte bổ sung được sử dụng để làm cho các mã thông báo sự cố được xếp chính xác và do đó đưa chương trình xuống chính xác tới 1024 byte.

Trước đây, công thức mà mã Deadfish ~ đã sử dụng là (2² + 2) ² + 10 × 1 + 2 = 48. Công thức mới là (3²-2) ²-1, cũng tạo ra 48. Đáng ngạc nhiên, đó không phải là viết ngắn hơn nhiều trong Deadfish ~, mặc dù đơn giản hơn đáng kể.

Điều này cũng cho chúng tôi điểm VIP là 0,008192. Đây không chỉ là một kỷ lục mới, nó còn là một số tròn độc đáo theo đúng nghĩa của nó (rõ ràng, đó là hệ quả của việc có các số tròn đẹp làm đầu vào cho công thức).


2
Xin lỗi vì không có TIO> _> (Trân trọng, người tạo ra Reng)
Conor O'Brien

@ ConorO'Brien Ping Dennis? Ngoài ra, ais523, bạn nên thử chơi một byte tắt;)
MildlyMilquetoast

1
Bạn có thể cắt không gian trong puts(z )nếu bạn trao đổi (Ptrong dòng 2, cảm ơn bạn về độ trễ mở đầu bạn đã tạo. Bravo về câu trả lời này. # 50in1k
Cơ hội

1
Khi nó xảy ra, tôi đánh gôn một byte khác. Bây giờ là 1024, chính xác là tôi không thực sự muốn thay đổi nó :-) Có lẽ câu trả lời sau có thể tiết kiệm một số tiền tiết kiệm chúng ta có; có khả năng nhiều hơn nữa (ví dụ như có khả năng đệm / phát ngôn sự cố cũ nằm xung quanh không còn cần thiết nữa).

6
@ ais523 đồng ý. Câu trả lời này luôn có nghĩa là 1024 byte.
Cơ hội

38

37. C ++ (gcc), 776 byte

#  1"16" 2//v\(;@#/;n4"14"
#/*`3 auaaZ<>16/"<"6/b.q@")(22)S#  ␉␉␉␉ 
#yy␉;36!@
# ␉
#=␉>
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#`<`␉|
print((eval("1\x2f2")and( 9 )or(13 ))-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"*␉
""""#//
=begin␉//
#*/
#include<iostream>␉
int main()  /*/
#()"`#"\'*/{std::cout<<37;}/*'"`"
$'main'␉//
#-3o4o#$$$
<>3N.<>␉//
#xx
#x%~~~+␉+~*ttt*.x
#xx
=end   #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE)  ap
#_~nJ|#o51\   
#0␛dggi2␛`␉|1|6$//''25  >>>>>#>27.say# =#print(17)#^_^_7LEintndus({})!<>+]/*///Z222999/3!@"26

là một tab theo nghĩa đen, một ký tự ESC theo nghĩa đen; Stack Exchange sẽ quản lý chương trình khác. Tôi khuyên bạn nên sao chép chương trình từ hộp "đầu vào" của liên kết TIO bên dưới, nếu bạn muốn làm việc với nó.

Hãy thử chúng trực tuyến!

Chạy xuống

Chương trình này in 37 in C ++, 36 in Labyrinth, 35 in INTERCAL, 34 in Rail, 33 in Incident, 32 in Whirl, 31 in Modular SNUSP, 30 in Whitespace, 29 in Trigger, 28 in Brain-Flak, 27 in Perl 6 , 26 trong 05AB1E, 25 ở Pip, 24 ở Thutu, 23 ở Hexagony, 22 ở Underload, 21 ở Nim, 20 ở Prelude, 19 ở Reng, 18 ở Hồng y,17 ở Julia, 16 ở Pyth, 15 ở Haystack, 14 ở Turtlèd, 13 ở Ruby, 12 ở Fudge, 11 ở Befunge-98, 10 ở Befunge-93, 9 ở Perl 5, 8 ở Retina, 7 ở Japt, 6 trong SMBF, 5 trong Python 2, 4 in> <>, 3 trong Minkolang, 2 trong V / Vim và 1 trong Python 3.

xác minh

Hầu hết các ngôn ngữ được kiểm tra bởi trình điều khiển thử nghiệm được hiển thị ở trên. Bạn có thể kiểm tra Reng tại đây và Modular SNUSP tại đây ; họ xuất 19 và 31 tương ứng, theo yêu cầu.

Tôi đã thêm một định dạng khác vào đầu ra trình điều khiển thử nghiệm để thoát dấu ngoặc kép cũng như thực hiện thay thế nguồn cấp dữ liệu. Điều này là để tôi có thể cung cấp chuỗi dòng đơn cho chương trình ac (gcc) mà tôi đã bao quanh hàm được tạo bởi @feersum tại đây . Hy vọng những người khác có thể sử dụng nó như là.

Đây là chương trình mã thông báo sự cố . Lý tưởng nhất là tôi muốn phân định các mã thông báo vì chúng hơi khó đọc, chỉ ra mã thông báo "trung tâm" và đưa nó vào trình điều khiển thử nghiệm. Nhưng tôi thực sự không biết làm bất cứ điều gì ngoài việc tạo ra các chương trình khác nhau in các số nguyên tuần tự, vì vậy điều này theo như tôi đã nhận được.

Tôi đã cố gắng giải quyết các sự cố rõ ràng, như mã thông báo sau khi bắt đầu và kết thúc mã thông báo nhảy và bất cứ thứ gì trông có vẻ không liên quan, nhưng tôi đã không cân bằng các mã thông báo để đặt 0oở trung tâm. Tôi không thực sự chắc chắn logic chính xác là gì để xác định trung tâm. Tôi hy vọng @ ais523 sẽ giúp đỡ ở đó. Chuỗi này gần cuối 7LEintndus({})!<>+tất cả sẽ là mã thông báo nếu không có mã thứ 4 này. Tất cả những thứ này có thể được gỡ bỏ (và được thay thế bằng .căn chỉnh Hexagony) để điều chỉnh mã thông báo trung tâm.

Tôi sẽ cập nhật bài đăng này trong một hoặc hai ngày tiếp theo để duyệt mã, (giả sử sự cố có thể được xác minh / sửa chữa mà không cần vượt quá số byte). Nhưng bây giờ thì đã quá muộn và tôi hầu như muốn đưa nó ra khỏi đó trước khi tôi phải giải quyết một vấn đề như Mê cung khác. : P

Giải trình

Cách mã C ++ hoạt động.

Tôi nghĩ rằng hầu hết mọi người đều đủ quen thuộc với C ++, vì vậy tôi sẽ không đi sâu vào chi tiết. Chặn ý kiến ​​đến ở dạng /* comment */. Dòng ý kiến ​​đến trong các hình thức //comment. Mã thực tế được sử dụng bởi C ++ để tạo ra câu trả lời là int main() {std::cout<<37;}. Và thư viện được sử dụng để giao tiếp với STDOUT được tham chiếu bởi tuyên bố này #include<iostream>.

/ * Lạm dụng bình luận * /

Đối với tôi, câu chuyện về C ++ trở lại câu trả lời Brain-Flak của tôi.

Cuối cùng sau khi tìm thấy # 28, tôi bắt đầu nghiên cứu một số đa âm khác được đăng trong PPCG và tất cả những nghiên cứu đó đã đưa tôi đến một vài câu trả lời dễ dàng (hầu hết trong số này vẫn có sẵn để tìm thấy nếu có ai khác nghiêng như vậy). Nhưng quan trọng hơn, tôi đã đi đến một kết luận về polyglots nói chung: polyglots lớn có xu hướng rơi vào một trong hai loại chính: #lạm dụng /*bình luận hoặc lạm dụng bình luận.

Dù sao đây không phải là một sự thật hay hạn chế, mà là một khuôn khổ tinh thần cá nhân hướng dẫn một số câu trả lời tiếp theo của tôi.

Từ đây tôi đã lý luận rằng nếu điều này trở thành polyglot lớn nhất thế giới, mà tôi cho là hiện tại, sẽ tốt nhất nếu nó có thể thúc đẩy lạm dụng bình luận từ cả hai gia đình bình luận. Vì vậy, tôi bắt đầu tìm cách kết hợp một /*ngôn ngữ bình luận và hướng về gia đình C chủ yếu là do sự quen thuộc cá nhân.

Thử nghiệm ban đầu C ++

Quá trình suy nghĩ ban đầu của tôi cho việc này là sử dụng C # chủ yếu là do sự quen thuộc của tôi và trở ngại đầu tiên cho C # là đưa polyglot vào trạng thái nơi nó có thể chấp nhận một dòng không bắt đầu #mà không được xử lý như mã bởi các ngôn ngữ kịch bản lệnh . Câu trả lời Rail, cùng với một số câu trả lời thổi phồng dẫn đến nó, đã giải quyết phần này.

Tiếp đến là vấn đề làm thế nào để bắt đầu /*khối bình luận đầu tiên . Tôi biết dòng này sẽ phải bắt đầu dòng với một ẩn số #đối với Perl, Ruby và Python, nhưng bất cứ điều gì đến trước /*sẽ được đọc bởi C #. Tôi đã thử #regionthẻ C # lúc đầu, nhưng điều đó hóa ra quá lố đối với các ngôn ngữ 2D. Nhập C ++.

C ++ có một số chỉ thị tiền xử lý bắt đầu bằng #, cung cấp rất nhiều tùy chọn cho các ngôn ngữ 2D đi qua. Nhưng hóa ra tất cả chúng đều không tương thích với ít nhất một ngôn ngữ và trong không gian mã tiếp xúc với C ++, tôi đã hạn chế cách giải quyết. Vì thất vọng và tuyệt vọng, tôi vấp phải sự thật rằng C ++ sẽ chỉ chấp nhận một lần duy nhất #trước khối bình luận. Được rồi, sao cũng được. Vì vậy, tôi đã tiến lên phía trước với giả định #/*có thể hoạt động như ba ký tự đầu tiên trong đa âm.

Phần xác minh cơ bản thứ hai là đảm bảo rằng bản in thực tế có thể sống hạnh phúc với các mã khác. Tôi biết từ câu trả lời của Brain-Flak rằng Japt không thích những người không trốn thoát {và điều đó là cần thiết để C ++ nói int main() {std::cout<<37;}và C ++ sẽ không cho phép nhân vật trốn thoát của Japt ở giữa mã của nó. Lần này tôi đã may mắn phát hiện ra rằng nếu tôi bỏ chuỗi ký tự của Japt chỉ vì câu nói này, Japt vẫn sẽ vui vẻ tạo ra kết quả tương tự.

Trong khi đó, Brain-Flak không thích {}một trong hai, nhưng tôi đã một lần nữa may mắn để thấy rằng C ++ là ok với một #giữa mình int main(){std::cout<<37;}báo cáo, cho phép các dấu ngoặc nhọn để lấy ý kiến ra khỏi quan điểm Brain-Flak của.

Vì vậy, với các vấn đề chính của C ++ đã được chứng minh là có thể giải quyết được về mặt lý thuyết, tôi đã bắt đầu quá trình giải quyết tất cả các lỗi tôi đã giới thiệu.

Phong cảnh 2D

Phần khó nhất của câu trả lời này là cho đến nay việc cấu hình lại hai dòng trên cùng của polyglot. Và vấn đề quan trọng nhất là *. Underload sẽ không cho phép *trước a (. Nó coi đây là hoạt động toán học trên một ngăn xếp trống, mà nó cảm thấy là một lỗi. Vì vậy, polyglot cần có (trước /*nhưng C ++ không thể cho phép điều này. Vì vậy, giải pháp là cho chúng tôi một nhận xét dòng C ++ //trên dòng đầu tiên để ẩn a (và sau đó bắt đầu dòng thứ hai với a #/*.

Tiếp theo, Befunge thực sự không thích ý tưởng về việc /không có gì đó bị chia rẽ, nhưng sau khi nghiên cứu câu trả lời Begunge hiện có của 16/"<"6/b.q@tôi, tôi vấp phải ý tưởng về một con số và một chuỗi bị đập vỡ trước đó //. Nó hoạt động và tôi không biết tại sao C ++ vẫn ổn với điều này nhưng nó chấp nhận # 1"16" 2như là tuyên bố mở đầu. Tôi sẽ không đặt câu hỏi, nhưng tôi biết rằng không gian cần thiết để nó hoạt động.

Dòng một

Japt hóa ra khá nhạy cảm với không gian và không thực sự muốn nhập vào chuỗi backtick của nó trên dòng trên cùng, do đó, backtick của Pip đã chuyển sang dòng thứ hai, buộc rất nhiều môn thể dục ngôn ngữ trên dòng 1.

  • Pip không giống như hầu hết dòng 1, vì vậy, một không gian thứ hai được đặt sau dòng thứ nhất #để chỉ ra một nhận xét.
  • The (Underload phải được thoát ra khỏi Japt trước đó \.
  • #là một bộ kết thúc bước nhảy trong Turtlèd vì vậy nó được yêu cầu, nhưng Pyth coi đây là một vòng lặp kết thúc lỗi, vì vậy Pyth cần chia cho null / sau#
  • Tôi không chắc những gì @trong dòng đầu tiên đang làm nữa, nhưng Pyth và Japt dường như thích sự hiện diện của nó hơn là không, mặc dù đó @không phải là một nhân vật có ý nghĩa theo tài liệu của Pyth.
  • Và có vẻ như lần đầu tiên ;có thể được gỡ bỏ vào thời điểm này mà không có hậu quả, vì vậy tôi không chắc điều gì đã được giải quyết ở đó nữa, mặc dù tôi nghi ngờ nó có liên quan đến Pyth. Nhưng có vẻ như các giải pháp trong tương lai có thể tiết kiệm một byte bằng cách bỏ qua cái đó.
  • <> <và Turtlèd cả hai về cơ bản hoạt động giống như trước đây với <> <phản ánh trên đầu tiên #và gói đến cuối dòng một. Và Turtlèd nhảy #như tôi đã đề cập và kết thúc bằng "14"chuỗi mà nó in.

Định tuyến 2D

Với những vấn đề được giải quyết, giai đoạn tiếp theo là định tuyến các ngôn ngữ 2D. Trước đây, ban đầu vđã bị Befunges bỏ qua do trước đó #, nhưng đã gửi Haystack và Minkolang xuống. Bây giờ, không gian ban đầu cố gắng gửi Minkolang dọc theo chiều thứ 3, mà tài liệu của nó gọi là chiều thời gian.

Bỏ qua khía cạnh thứ 3 của Minolang: với tôi, đó là một cách hiểu sai khi gọi đây là chiều thời gian, nó thực sự có vẻ không gian hơn là tạm thời đối với tôi. Tôi đã không thực sự hiểu nó cho đến khi tôi tìm thấy liên kết này minh họa khái niệm này và nó có vẻ giống như nhiều lớp của bàn cờ 3D. Tôi tin rằng đây là cách ngôn ngữ 3D thường hoạt động. Nhưng vì đây là một khái niệm mới đối với tôi, tôi nghĩ tôi sẽ ném thông tin này cho người khác.

Vì vậy, nhiều lớp của Minkolang được phân định bởi các dòng kết thúc trong $$$đó tôi đã ném vào cuối mã Rail ở đây : #-3o4o#$$$. Bây giờ, Minkolang chạm không gian và rơi xuống đầu tiên ><>3N.<> ␉//và tiền thu được ở bên phải xuất ra 3. #>có thể không được phép để bắt đầu dòng này bởi vì nó sẽ cố gắng để chấm dứt một khối bình luận Perl6, vì vậy <được sử dụng thay vì #để cân bằng cho SMBF và Brain -Flak. Tuy nhiên, đây là thủ tục hoán đổi ngăn xếp Brain-Flak, do đó, một bộ thứ hai <>được sử dụng sau khi Minkolang chấm dứt để hoán đổi trở lại câu trả lời đúng của Brain-Flak.

Labrynth tương tự va vào không gian nhưng nó khiến Labrynth di chuyển xuống cột 1. Sau đó, nó quay xuống dòng 2, nơi nó di chuyển xuống các 3bức tường khác, khiến nó quay về phía nam và đánh vào ;đó khiến cho 3 bị bật ra . Sau đó, chương trình tiếp tục ở bên phải nơi 36 được lưu trữ và in, trước khi cuối cùng tìm thấy một @lối thoát. Đường dẫn này dài hơn mức cần thiết, nhưng tôi thấy rằng Prelude sẽ xuất ra một byte nul trước đầu ra 20 bình thường nếu nó !nằm xa bên trái hơn bây giờ, bất kể dòng nào xuất hiện. Vì vậy, tôi đã làm cho nó chính xác hơn, bởi vì tôi có không gian để làm như vậy.

Tiếp theo, định tuyến của Haystack đã thay đổi vì /bây giờ xuất hiện trước vdòng 1 và phản ánh đường dẫn của nó lên như Reng. May mắn thay, Reng sống chung khá yên bình. Một trở ngại là kim của Haystack |là một vật phản xạ ở Reng, do đó, Reng sử dụng Befunge như nhảy ( #) qua kim để kết luận Reng chính xác.

Befunges tiếp tục dọc theo dòng 1 cho đến khi vvà được chuyển xuống và sau đó sang bên phải trên dòng thứ hai để kết luận với cùng một mã được sử dụng trước đó. Ý thức của tôi là phần này có thể được chơi xuống một chút bây giờ vì có ít ngôn ngữ đang cố gắng vượt qua mã một cách có ý nghĩa, nhưng tôi không cần thêm bất kỳ bức tường nào để đập đầu mình, vì vậy tôi đã để nó như vậy.

Cuối cùng, điểm khởi đầu của Hồng y là %không có nhu cầu đặc biệt được gộp vào hai dòng trên cùng dày đặc. Vì vậy, tôi đã chuyển nó xuống chuỗi của Python. Nhiều đường dẫn mã của nó hiện cũng bị giới hạn bởi x's, kết thúc chuyển động của con trỏ.

Dòng 2 & 3

Sự thay đổi đáng kể duy nhất ở đây là tất cả những người :bị đánh golf vì lý do này hay lý do khác. Có thể (nhu cầu của Prelude hoặc có thể đó là vấn đề đếm byte đơn giản - có thể là cả hai. Một điều khác là mã nhảy của trình kích hoạt đã được chuyển trở lại và đổi tên thành auaaZ. Tôi có không gian để điền vào để đáp ứng đường dẫn mã của Befunge và điều này có vẻ tốt nhất. Ngoài ra phần <sau đây là để cân bằng sau SMBF >. Về mặt tài chính, sự đơn độc ở gần cuối dòng thứ hai là để duy trì chuỗi 05AB1E. Ngoài ra, yytrên dòng 3 chỉ là các ký tự phụ cho Labyrinth.

Chuỗi lớn Esolang

Với hai dòng trên cùng được giải quyết, đã đến lúc bắt đầu đào sâu vào các esolang phân tích cú pháp đầy đủ hơn, và Pip hóa ra có vấn đề. Nếu bạn còn nhớ, chúng tôi đã xử lý các dấu ngoặc nhọn {std::cout<<37;}bằng cách bỏ chuỗi Japt để cho Japt coi đây là mã. Chà, Pip đang sử dụng cú pháp chuỗi giống nhau và không thích dòng này như mã và Pip có các tùy chọn khai báo chuỗi rất giống với Japt. Cả hai đều sử dụng một chuỗi 'để khai báo một chuỗi ký tự, cả hai đều sử dụng cùng một khai báo thoát \và cả hai sẽ chấp nhận "làm định danh chuỗi. Vì vậy, thật khó để khiến Pip tin rằng đây là một chuỗi mà không khiến Japt tin như vậy.

Hóa ra Japt thực sự có một điểm khác biệt có thể khai thác - #lấy giá trị ascii của nhân vật tiếp theo. Vì vậy, #"`sẽ chấm dứt chuỗi Japt / pip, sau đó báo cho Japt lấy giá trị asci của ", đồng thời bảo Pip bắt đầu một chuỗi mới. Các "có thể có thể đã là một backtick thay vào đó, và có lẽ sẽ tốt hơn, nhưng dòng tôi suy nghĩ là sử dụng một định danh chuỗi khác nhau ở bên trong như một góc độ khác thao tác chuỗi. Vì vậy, đây là một nơi khác mà bạn có thể lưu một vài byte trên đường.

Tiếp theo, tôi phải khởi tạo chuỗi Japt sau dấu ngoặc nhọn trong khi cho phép Pip duy trì trong chuỗi. Tôi đã làm điều này với '"`đó là một trích dẫn, trích dẫn kép và một backtick. Đối với Japt, 'nó không nằm trong một chuỗi và do đó là một chỉ báo để lấy ký tự tiếp theo làm một chuỗi char duy nhất. Pip xem 'như là một phần của chuỗi và chấm dứt chuỗi của nó với ". Và cuối cùng, `được chỉ ra cho cả Pip và Japt rằng một chuỗi khác đang bắt đầu diễn ra trong suốt polyglot cho đến dòng cuối cùng nơi cả hai ngôn ngữ hoàn thành một cách vui vẻ.

Bây giờ, cả Japt và Pip đều hoạt động vào thời điểm này, nhưng 05AB1E đã thất bại vì việc sử dụng "gây ra một số lỗi gây ra phơi nhiễm mã. May mắn là điều này đủ dễ để giải quyết bằng cách đặt một tập hợp khác "xung quanh toàn bộ, để lại tập hợp các thao tác chuỗi như "`#"\\'*/{std::cout<<37;}/*'"`".

Cuối cùng, với dòng bây giờ trông như thế này, int main() #/*"`#"\'*/{std::cout<<37;}/*'"`"điều mà Underload có vấn đề. Các lỗi liên tiếp *, là một lỗi cú pháp khác nên tôi đã ném một cái ()ở giữa của *để xoa dịu nó.

Esolang mong manh

Rào cản lớn bây giờ là Không gian trắng. Tôi sẽ không đi sâu vào chi tiết ở đây vì hầu hết các giải pháp Whitespace được tích hợp vào các giải thích đã được đưa ra và tôi chỉ đề cập đến các trường hợp trong đó khoảng trắng buộc một vài quyết định. Tôi đang nhìn bạn Labyrinth. Tuy nhiên, sự thay đổi lớn là mã thực tế để xuất câu trả lời của Whitespace nằm trên dòng 2-4 thay vì 1-3. Điều này phần lớn là do tiếp xúc mã của Japt trong dòng 1.

Thutu ban đầu có vấn đề với những gì đã có dòng này : int main() #/*()"`#"\'*/{std::cout<<37;}/*'"`". Vì vậy, tôi đã ném vào một nguồn cấp dữ liệu ngay trước lần đầu tiên #để che giấu tất cả các vấn đề đằng sau một chỉ báo nhận xét và sau đó gửi đi một loạt các dấu vết /ở mọi nơi khác mà mã bị lộ.

Tại thời điểm này, tôi đã căn chỉnh Hexagony và tìm thấy vấn đề mới. Mã vào đầu rất, mà bắt đầu cuộc sống như # 1"16" 1đã +/+23!@không còn rõ ràng stack. Vì vậy, tôi vừa gỡ bỏ +và tìm thấy nó bây giờ là đầu ra 123. Điều này đủ dễ để khắc phục bằng cách thay đổi gambit mở # 1"16" 2và chơi golf mảnh Hexagony xuống /3!@.

Whirl đã có một số thay đổi, nhưng chủ yếu là vấn đề đảm bảo đúng số lượng 1 người dẫn đầu xuất hiện trước dòng Whirl-Incident. Sự cố mặc dù có một mã thông báo đặc biệt khó khăn. Tôi đã có chính xác 3 bản sao /**/.

Ban đầu, tôi chỉ muốn ném *//*bất kỳ vị trí cũ nào vào mã để tạo một bản sao thứ 4 của mỗi bản, nhưng Underload đã thấy *một lần nữa, điều đó là không nên. Cuối cùng, tôi đã ném /vào cuối dòng này int main() /*để kết thúc /*/, nghĩ rằng tôi sẽ làm cho các mã thông báo trùng nhau, nhưng tôi chỉ thành công trong việc tạo ra 4 bản sao của một trong hai mã thông báo. Đúng đúng. Đó là cách nó hoạt động. Ồ, tôi sẽ ném một trận tương tự /vào trận chung kết */để giành hạng 4 ở đó. Sau này, tôi đã thay thế một loạt các hình lục giác bằng một bản sao thứ 4 của một số mã thông báo sự cố trong chuỗi này trên dòng cuối cùng 7LEintndus({})!<>+.

Phần kết luận

Ok, đó là tất cả các chi tiết tôi có cho công cụ tái cấu trúc khổng lồ này. Tôi hứa sẽ không có quá nhiều để viết về lần sau. Tôi thực sự không biết C ++ là lựa chọn tốt hay xấu cho polyglot này, nhưng ý nghĩa của tôi là nó mở ra một số tùy chọn. Hy vọng điều này dẫn đến những điều tốt đẹp.

Chúc mừng mã hóa.


2
Có vẻ như g++yêu cầu một .cpp, vì vậy tôi đã thêm nó vào phần cụ thể mở rộng tập tin. Sau đó chỉ cần sử dụng run-wrapper.shđể xử lý nó. Tôi sẽ chỉnh sửa nó.
SnoringFrog

1
Tôi muốn thêm brainfuck tượng trưng cho điều này vì đây là một bổ sung dễ dàng, nhưng các ký tự unicode sụp đổ python2 - _ -
SnoringFrog

1
@SnoringFrog Tôi cũng cảm thấy như vậy về biểu tượng cảm xúc
Cơ hội

1
Ngoài ra, **không phải là một lỗi cú pháp trong Underload; nó chỉ tiêu tốn rất nhiều stack, mà tôi cho rằng không có sẵn tại thời điểm đó (có thể là do bạn đã đánh bại các dấu hai chấm). Bạn có thể nạp chồng với các nhóm hoặc dấu hai chấm được đặt trước hoặc giữa chúng hoặc đôi khi ẩn mã khỏi Underload bằng cách ngoặc đơn.

2
@ ais523 Trong những ngày đầu của C, để tiết kiệm thời gian trong trường hợp không cần thiết, bộ tiền xử lý đã không chạy trừ khi dòng đầu tiên bắt đầu bằng #. Nhưng nếu bạn không muốn dòng đầu tiên của mình là một câu lệnh tiền xử lý, do đó bạn sẽ cần một cách để dòng đầu tiên bắt đầu bằng # mà không thực sự làm gì cả, vì vậy bạn đã có lệnh null. Tôi hoàn toàn nghi ngờ khả năng tương thích ngược với mã đã sử dụng đây là lý do căn bản để đưa nó vào tiêu chuẩn.
Muzer

34

3. Minkolang v0.15 (26 byte)

#>>>>>>>>v
print(1)#>3N.i2

Chương trình này in 1 bằng Python 3, 2 bằng Vim và 3 bằng Minkolang v0.15

Tôi hy vọng tôi không làm mọi thứ rối tung lên bằng cách giới thiệu một ngôn ngữ 2d

Hãy thử trực tuyến!

Giải trình

#                     stops program from moving through time (really does nothing)
 >>>>>>>>             I can't use a space because then the program will move through time
         v            go down
         >            go right
          3N.         Outputs 3 and end program
                      Anything afterward is ignored since program has ended

Vim bằng cách nào đó bỏ qua Minkolang, vì vậy đó là tốt

Và thực sự không có vấn đề gì với Python vì nó bỏ qua các bình luận #

Kế tiếp...

Đối với ngôn ngữ tiếp theo, tôi đề xuất một cái gì đó như> <> vì #hoạt động như một gương phản xạ (để hướng sẽ thay đổi sang trái và nó sẽ bao bọc sang bên phải) để bạn có thể thêm mã mà các ngôn ngữ khác có thể bỏ qua


16
Di chuyển qua thời gian wat wat?
TuxCrafting

5
@ TùxCräftîñg Minkolang có 3 chiều (2d = bình thường, thứ 3 là thời gian). TBH, tôi không hiểu điều đó, nó chỉ nói rằng trong phần giải thích về liên kết TIO
Bò lang băm

@ mbomb007 Chính xác thì bạn đang đề cập đến điều gì?
Bò lang băm

1
@ TùxCräftîñg Tôi không nghĩ mình có thể làm điều đó
dkudriavtsev

1
@wat Hừm, điều này khiến tôi mất quá nhiều thời gian để hiểu
Thiền vào

34

5. Python 2 (35 byte)

#3N.;n4
print('1'if 1/2else'5')
#i2

Chương trình này in 1 trong Python 3, 2 trong Vim, 3 trong Minkolang v0.15, 4 in> <> và 5 trong Python 2.

Dùng thử bản beta trực tuyến!

Trong Python 2, 1/2 là 0, là giá trị giả, làm cho Python in 5. Trong Python 3, 1/2 là 0,5, là giá trị trung thực, làm cho Python in 1.


1
Tôi có thể xác nhận nó hoạt động trong Minkolang
Bò quạc

1
print('1'if 1/2else'5')phá vỡ hệ thống của tôi mà không có khoảng cách giữa 1/2 và khác
Tasos Papastylianou

Vâng, nó hoạt động với cả hai phiên bản trên TIO.
betseg

28

4.> <> (29 byte)

#>>>>>>>>v;n4
print(1)#>3N.i2

Chương trình này in 1 trong Python 3, 2 in Vim, 3 in Minkolang v0.15 và 4 in> <>

Hãy thử trực tuyến!

Mã đã chạy

#             - change direction to left
            4 - add 4 to stack
           n  - print as a number
          ;   - end the program

Một ngôn ngữ 2D khác.

Không có tác dụng với Minkolang vì nó thêm nhân vật sau khi thay đổi hướng, bị Vim bỏ qua vì một số lý do. #là một nhận xét trong Python để không thay đổi.


28

28. Brain-Flak , 280 byte

#v`16/"<"6/b.q@"(::):::   (22)S#;n4"14"
#>3N6@15o|> ^*ttt*~++~~~%
#=~nJ<R"12";
#[
#`<`|
print((eval("1\x2f2")and (9) or (13))-(0and 4)^(1)<<(65)>>62)or'(\{(\{})(\{}\/^23!@[()])}\{})(\{}\{})'#@46(8+9+9+9+9+=!)=#print(17)#]#echo 21#|/=1/24=x=90/
#8␛dggi2␛` |1|6$//''25  #>say 27#"26

Đại diện cho một ký tự ESC theo nghĩa đen, như thường lệ.

Chương trình này in 28 in Brain-Flak , 27 in Perl 6 , 26 in 05AB1E , 25 in Pip , 24 in Thutu , 23 in Hexagony , 22 in Underload , 21 in Nim , 20 in Prelude , 19 in Reng (thử nghiệm tại đây ), 18 ở Hồng y , 17 ở Julia , 16 ở Pyth , 15 ở Haystack , 14 ở Turtlèd ,13 ở Ruby , 12 ở phân hạch , 11 ở Befunge-98 , 10 ở Befunge-93 , 9 ở Perl 5 , 8 ở Retina , 7 ở Japt , 6 ở SMBF , 5 ở Python 2 , 4 ở> <> , 3 ở Chồn , 2 trong Vim / V , 1 trong Python 3

Trước hết, tôi muốn nói thật là một đặc ân để có thể đóng góp cho thử thách này. Tôi chỉ nghe nói về môn đánh gôn vài tuần trước và tôi đã hoàn toàn bị cuốn hút kể từ đó. Điều đầu tiên tôi làm khi tìm thấy thử thách này là thử chạy mã như trong các ngôn ngữ khác nhau chỉ để xem liệu tôi có thể tìm thấy bất cứ điều gì tôi có thể làm việc với. Điều này đã trở lại khi chúng tôi ở số 6. Tôi thành thật nghĩ rằng thử thách này là không thể, nhưng ở đây chúng tôi (# 28 Wow!). Những gì tôi tìm thấy tại thời điểm đó là Brain-Flak tạo ra giá trị 2. Vì vậy, tôi bắt đầu tìm hiểu nó.

Brain-Flak hóa ra khá tuyệt vời cho loại thử thách này bởi vì nó khá dễ học và nó bỏ qua khá nhiều nhân vật ngoại trừ (){}[]<>. #cũng xảy ra bình luận bất cứ điều gì sau khi nó trên cùng một dòng, vì vậy phần duy nhất của bài nộp cuối cùng được xem xét cho Brain-Flak là print((eval("1\x2f2")and 9 or 13)-(0and 4)^1<<65>>62)sau đó được ghép nối với ((())()<<>>). Vì vậy, kế hoạch đã trở thành thêm dấu ngoặc đơn cho những gì tôi nghĩ là mã trăn.

Tôi đã sửa đổi các bit python để phân tích cú pháp trong Brain-Flak ((() () ())()()<<()>>)tương đương với 2 ngăn xếp thứ nhất là 5 và thứ hai là 3. Sau đó, tôi bình phương 5 với ({({})({}[()])}{})và thêm kết quả vào 3 với ({}{}). Việc bình phương và thêm này đang diễn ra trong một chuỗi từ phối cảnh Python. Tôi không thể tuyên bố để hiểu lý do của Python ở đây, nhưng tôi khá tự tin rằng chuỗi này không được đánh giá bởi các ngôn ngữ khác theo cách có ý nghĩa, chỉ có một vài ngoại lệ.

Japt, hóa ra, diễn giải các dấu ngoặc nhọn trong một chuỗi là chứa mã, nhưng chúng đủ dễ thoát ra \trước mỗi {chuỗi trong chuỗi này. Nhưng điều này làm tăng số byte. Cuộc sống là thế.

Mở đầu là khá tha thứ với tất cả các dấu ngoặc đơn của tôi. Một nhận xét trước đó đã chỉ ra rằng Prelude sẽ phù hợp với Pparentheses được sắp xếp theo chiều dọc và tôi tình cờ chỉ tạo một. Ngọt! Các (dòng trên cùng xếp hàng với và (9trong dòng lớn. Vì vậy, tôi đã phải thêm một không gian bổ sung trước (dòng trên cùng. Giả định của tôi ở đây là không gian kép là một chỉ báo nhận xét cho một cái gì đó, vì vậy việc thêm một không gian bổ sung có vẻ tầm thường, và nó đã hoạt động. Tôi nên chỉ ra rằng tôi đã cố gắng thêm một khoảng trắng (9)thay vào đó, nhưng Hồng y đã không hợp tác.

05AB1E không thích nỗ lực đầu tiên của tôi về chuỗi Python được gói gọn trong dấu ngoặc kép, nhưng mọi người dường như đồng ý sử dụng dấu ngoặc đơn. Không phải là một vấn đề lớn ở đó.

Hexagony là ngôn ngữ duy nhất còn lại tại thời điểm này, và rõ ràng là tôi đã vượt qua ngưỡng kích thước hex tiếp theo, vì vậy đã đến lúc bị bẩn. Các /^23!@là mã Hexagony và tôi là siêu vui mừng về điều đó, bởi vì tôi nghĩ rằng nó sẽ làm cho bổ sung trong tương lai dễ dàng hơn nhiều. Mảnh nhỏ này về cơ bản có thể được di chuyển bất cứ nơi nào trong chuỗi python mà không làm hỏng bất kỳ mã nào. Đây là chuỗi đầy đủ chỉ để tất cả chúng ta trên cùng một trang '(\{(\{})(\{}\/^23!@[()])}\{})(\{}\{})'. Ở /đây thiết lập đường dẫn của Hexagony từ SE -> NW đến W-> E xuống chuỗi này, mà chúng ta có rất nhiều thời gian. (Trước đó \là để thoát/cho thutu BTW). Ý tưởng của tôi ở đây là nếu bạn thực hiện thay đổi, tỷ lệ cược là cuối cùng bạn sẽ đi qua chuỗi này và bạn có thể trượt đoạn Hexagony xung quanh trong chuỗi để bắt đường dẫn mã và đưa ra kết luận chính xác. Chỉ cần lưu ý không đến giữa Japt \{. Nếu bạn gặp rắc rối với điều này, @bên phải của chuỗi chỉ còn lại từ một giải pháp Hexagony khác và có thể được loại bỏ mà không dẫn đến các ngôn ngữ khác. Và tất nhiên nếu bạn tình cờ bắt được đường dẫn mã của Hexagony đi ngược chiều, tất nhiên bạn có thể sử dụng @!32^\thay vì /^23!@. Ngoài ra, bạn có thể nhận thấy rằng giải pháp của tôi đã loại bỏ===2từ mã để giữ mọi thứ dưới giới hạn byte. Ai đó đã đề cập ở đây rằng đây là sự liên kết của Hexagony và tôi không cần nó nữa.

Cuối cùng, đây là một đoạn mã nhỏ mà tôi tìm thấy khi khám phá codegolf chuyển đổi một dòng văn bản thành hình lục giác có thể đọc được Hexagony để bạn có thể gỡ lỗi. Tôi chắc chắn có nhiều người biết về điều này, nhưng tôi đã không thấy nó được đăng ở đây, vì vậy nó cũng có thể giúp đỡ người khác. Cảnh báo công bằng, bạn phải thay đổi đầu vào để loại bỏ backticks và trả lại vận chuyển cũng như trao đổi lối thoát theo nghĩa đen cho một cái gì đó chiếm dung lượng bình thường để lấy mã để sắp xếp mọi thứ trong một hình lục giác đẹp.

Tái bút: Trong khi tôi viết nó ra, tôi nhận ra mình có lỗi. Tôi đã tin rằng tôi đã xóa cạnh bộ nhớ của Hexagony bằng ^, nhưng rõ ràng tôi có thể thay thế nó bằng cách không có kết quả. Đó ^có lẽ là một +nếu bạn cố gắng thao tác phần này. Tôi dường như đã vượt qua +trước đó, nhưng các polyglotters trong tương lai có thể không may mắn như vậy.

Chúc may mắn!


Tôi đã chờ đợi rundown và giải thích trước khi bỏ phiếu, nhưng rundown có vẻ tốt, vì vậy tôi sẽ bỏ phiếu trong khi chờ giải thích :-). Tôi giả sử rằng tất cả các dấu gạch chéo ngược là để tránh lỗi cú pháp trong Thutu? Ngoài ra, cách tiếp cận thú vị về nơi bạn đã thêm mã của mình, điều mà tôi đoán có liên quan đến Hexagony. Sẽ thật tuyệt khi thấy lời giải thích đầy đủ. (Ngoài ra, chào mừng bạn đến với PPCG!)

Và bây giờ tôi thấy lời giải thích; Tôi rất thích đọc nó. "Mã Python" thực sự được sử dụng bởi một số ngôn ngữ script (Python, Perl 5, Ruby), nhưng tất cả chúng đều diễn giải andorcùng một cách, vì vậy phương pháp nhận xét mã của bạn trong các ngôn ngữ scripting nhưng không phải Brain-Flak hoạt động. trong tất cả chúng

1
Cảm ơn @ ais523. Bạn đã đề cập đến vị trí của mã của tôi. Vì vậy, tôi biết rằng tôi phải đặt các toán tử não bộ ở một nơi có thể nhìn thấy bằng các ngôn ngữ kịch bản và giả định ban đầu, không chính xác của tôi là nó sẽ dễ nhất trên một dòng mới. Điều này không hiệu quả với Retina và tôi không muốn giải quyết cả vấn đề đó và vấn đề ngôn ngữ 2D mà tôi tạo ra khi cố gắng khắc phục Retina, nếu có thể. Tôi đã may mắn vấp ngã vào vị trí hiện tại.
Cơ hội

2
Câu trả lời tuyệt vời, và một lời giải thích rất kỹ lưỡng! Tôi thực sự rất vui khi biết rằng bạn thích trò chơi trí tuệ. : D
DJMcMayhem

25

38. C, 804 byte

#  1"16" 3//v\(@#/;n4"14"
#/*`3 auaaZ<>16/"<"6/b.q@")(22)S#  ␉␉␉␉ 
#yy␉;36!@
# ␉
#=␉>
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#`<`␉|
print((eval("1\x2f2")and( 9 )or(13 ))-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"*␉
""""#//
=begin␉//
#
#*/␉
#define␉z  sizeof 'c'-1?"38":"37"
#include␉<stdio.h>
int main()  /*/
#()`#`\'*/{puts(z);;}/*'``
$'main'␉//
#-3o4o#$$$
<>3N.<>␉//
#xx
#x%~~~+␉+~*ttt*.x
#xx
=end   #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE)  ap
#_~nJ|#o51\   
#0␛dggi2␛`␉|1|6$//''25  >>>#>27.say# =#print(17)#^_^_7LEintndus({})!<>+]/*///Z222999/(3!@)"26

là một tab theo nghĩa đen, một ký tự ESC theo nghĩa đen; Stack Exchange sẽ quản lý chương trình khác. Tôi khuyên bạn nên sao chép chương trình từ hộp "đầu vào" của liên kết TIO bên dưới, nếu bạn muốn làm việc với nó.

Hãy thử chúng trực tuyến!

Chạy xuống

Chương trình này in 38 in C, 37 in C ++, 36 in Labyrinth, 35 in INTERCAL, 34 in Rail, 33 in Incident, 32 in Whirl, 31 in Modular SNUSP, 30 in Whitespace, 29 in Trigger, 28 in Brain-Flak, 27 ở Perl 6, 26 ở 05AB1E, 25 ở Pip, 24 ở Thutu, 23 ở Hexagony, 22 ở Underload, 21 ở Nim, 20 ở Prelude, 19 ở Reng, 18ở Hồng y, 17 ở Julia, 16 ở Pyth, 15 ở Haystack, 14 ở Turtlèd, 13 ở Ruby, 12 ở Fudge, 11 ở Befunge-98, 10 ở Befunge-93, 9 ở Perl 5, 8 ở Retina, 7 ở Japt, 6 trong SMBF, 5 trong Python 2, 4 in> <>, 3 trong Minkolang, 2 trong V / Vim và 1 trong Python 3.

xác minh

Hầu hết các ngôn ngữ được kiểm tra bởi trình điều khiển thử nghiệm được hiển thị ở trên. Bạn có thể kiểm tra Reng tại đây và Modular SNUSP tại đây ; họ xuất 19 và 31 tương ứng, theo yêu cầu.

Đây là phiên bản hơi tinh chỉnh của tôi về sự cố tokeniser , được thiết kế để có một chút ít golfed nhưng một chút hữu dụng hơn.

Giải trình

Tôi luôn thích tạo ra các đa giác nhỏ nhưng không bao giờ lớn như thế này; Tôi nghĩ có lẽ tôi nên cho nó đi!

Sau câu trả lời C ++ tuyệt vời của @ Chance, C dường như là lựa chọn hợp lý tiếp theo và được đưa ra (so với một số câu trả lời trước đó) về sự dễ dàng tương đối của việc thêm nó, tôi quyết định chọn nó khi có cơ hội!

Tôi đã sử dụng một thủ thuật rất nổi tiếng để nói lên sự khác biệt giữa C và C ++; sizeof của hằng ký tự là 1 byte trong C ++ nhưng sizeof của một int (được bảo đảm ít nhất là 16 bit) trong C. Mã này phải rất dễ mang theo (ngoại trừ các hệ thống sử dụng byte có đủ bit để phù hợp với int) trừ khi Tôi đã phạm một sai lầm ngu ngốc.

Trước tiên tôi đã cố gắng thực hiện printfvới tất cả mọi thứ nội tuyến, nhưng nhiều dấu ngoặc dường như gây ra sự cố cho Japt, vì vậy tôi đã làm cho dòng đơn giản hơn, dường như để sửa nó.

Tiếp theo, Hồng y không thích nó, tôi đoán là do %trong printf, vì vậy tôi phải giải quyết vấn đề đó bằng cách chuyển sang thao tác chuỗi.

Nỗ lực tiếp theo của tôi, cố gắng gán một chuỗi sau đó thay đổi nhóm byte thứ hai trên hành vi C, kết thúc quá lâu và sẽ đẩy Hexagony lên kích thước tiếp theo; Tôi muốn tránh làm lại điều đó bằng cách giữ nó trong các nhân vật phụ tôi phải chơi cùng! Tôi cần mọi byte tôi có thể nhận được cho việc này, vì vậy tôi đã triển khai các thay đổi tiết kiệm byte được đề xuất bởi @Chance.

Vì vậy, tôi đã đánh mã mã C xuống một chút và đưa ra puts(sizeof'c'-1?"38":"37");cái gần như đã hoạt động, ngoại trừ việc Underload bị phân tách, có lẽ là do biểu thức phức tạp trong ngoặc.

Ngay cả sau khi loại bỏ phần bổ sung >>được yêu cầu để khớp với <<Perl6, tôi không thể có một cách đủ ngắn gọn để tách phần phức tạp hơn của nó thành một phép gán mảng char. Vì vậy, cuối cùng tôi đã xem xét việc sử dụng bộ tiền xử lý.

Sau rất nhiều thử nghiệm và sai sót, tôi đã tìm thấy một giải pháp mà Retina có vẻ thích. Mở đầu đã gây ra sự cố cho tôi trong suốt quá trình, cuối cùng đã tự khắc phục trước khi tôi đi vòng quanh để xem tại sao nó bị phá vỡ (tôi đoán là dấu ngoặc hoặc cái !tôi có trong ternary ở một giai đoạn, nhìn vào câu trả lời trước).

Trong khi tôi đang vá khoảng trắng để có được thứ gì đó mà Whitespace muốn; Tôi thấy rằng khá dễ dàng. Cụ thể, tab space space spacelà một sự kết hợp rất hữu ích (hướng dẫn thêm hai mục trên cùng vào ngăn xếp), vì điều đó có nghĩa là tôi có thể thêm khoảng trắng vào các dòng mà không có khoảng trắng nào khác mà không bị mất đồng bộ (tôi đoán vị trí của nó trong chương trình có nghĩa là nó không bao giờ thực sự được thực thi nên tôi không lo lắng về ngăn xếp dưới đây ở đây).

Bây giờ tôi đã thử nghiệm Sự cố và nó hoạt động! Rất cám ơn @Chance và @LliwTelracs, điều mà tôi vừa nhận ra KHÔNG phải là một tên tiếng Wales, vì đã giúp tôi nắm bắt được nó. Xem đánh dấu cú pháp này . Tôi đã xóa ;mã thông báo xuất hiện trước #yymã thông báo. Tôi đã làm điều này bằng cách thêm một bổ sung ;sau getscâu lệnh (nỗ lực trước đây của tôi liên quan đến việc thay thế s(hiện đã xuất hiện nhiều hơn trong chương trình C so với trước đó) trong chuỗi "phát ngôn" bằng một ;, nhưng hóa ra tôi đã thực sự là một ký tự viết tắt của Hexagony (cảm ơn @Chance), vì vậy sau khi cố gắng thêm một ký tự phụ vào dòng cuối cùng này không thành công, tôi chỉ thay đổi lại và thêm dấu chấm phẩy ở nơi khác).

Tôi cũng đã điều chỉnh khoảng trắng một chút để thay đổi một số mã thông báo khác để thực hiện một số nỗ lực định tâm, để mã hóa lại Tabfeedfeed (bằng cách di chuyển tab ở cuối #includedòng sang giữa, do đó tạo ra ba mã thông báo) và khử mã thông báo ba không gian bằng cách di chuyển một không gian trong definedòng.

Cuối cùng, một ngày sau khi đệ trình ban đầu, tôi quyết định đi đến tận cùng của cảnh báo tiền xử lý đáng sợ mà gcc tạo ra (và điều đó khiến Clang thất bại). Tôi xác định rằng lý do dòng đầu tiên hoạt động hoàn toàn là vì đó là đầu ra từ bộ tiền xử lý cung cấp thông tin gỡ lỗi như tên tệp gốc và đánh số dòng. Họ không thích "2" đầu tiên trên dòng đầu tiên, bởi vì điều này có nghĩa là "trở về từ một tệp được bao gồm trong tệp đã cho" và rõ ràng điều đó là không thể nếu không có bất kỳ tệp nào được bao gồm. Sau khi thay đổi nó thành "1" (bắt đầu tiêu đề bình thường) khiến quá nhiều ngôn ngữ bị nghẹt thở, tôi đã đổi nó thành "3" (bắt đầu tiêu đề thành phần nội bộ), chỉ phá vỡ Hexagony, vì giờ đây nó chỉ dựa vào 2. Vì vậy, khi bắt đầu mã Hexagony, tôi đã thêm một dấu ngoặc mở(để giảm 3 thành 2, sau đó đóng dấu ngoặc )sau khi kết thúc ( @) mã lục giác để đáp ứng Retina, Prelude và Underload mà tất cả các dấu ngoặc phù hợp dự kiến. Thử nghiệm lại Reng và SNUSP Modular không tạo ra vấn đề gì và mã thông báo sự cố có vẻ đúng, vì vậy tôi đã sửa nó! Tôi đã thử nghiệm nó trên một loạt các kiến ​​trúc kỳ lạ và nó dường như hoạt động. Tôi biết điều đó không quan trọng đối với môn đánh gôn và tôi sẽ không phiền nếu những người gửi trong tương lai phải phá vỡ điều này một lần nữa để giữ trong số byte hoặc bất cứ điều gì (hoặc nếu ai đó đã bắt đầu dựa trên giải pháp này và không muốn thay đổi họ quá nhiều), nhưng có một lý do chính đáng để tôi thực hiện điều này - trình biên dịch Objective-C của TIO chỉ hỗ trợ Clang, vì vậy điều này sẽ rất hữu ích nếu có ai muốn thêm điều đó!

Hãy nhớ rằng tôi chưa bao giờ sử dụng hầu hết các ngôn ngữ này, tôi hy vọng thành công của tôi khuyến khích nhiều người mới tham gia thử nghiệm này!


@LliwTelracs Huh, chương trình C. ^ _ ^ _
Muzer

Lỗi là tôi đã sao chép dán giá trị vào chương trình của mình để nó không thể nhận ra các tab hoặc thoát
fəˈnɛtɪk

@LliwTelracs Chỉ cần cố gắng tự mình tìm ra mã thông báo, có vẻ như tôi đã có một dấu chấm phẩy xuất hiện ba lần. Tôi có thể thêm một cái ngoại trừ tôi không nghĩ rằng tôi có thể sử dụng byte vì điều đó sẽ làm sai lệch Hexagony. Hmm ...
Muzer

1
Sự cố hoạt động!
Muzer

1
@Chance Tôi vừa mới xem dòng đầu tiên đó hợp lệ như thế nào trong Bộ tiền xử lý C, có vẻ như đó là đầu ra từ Bộ tiền xử lý được sử dụng cho thông tin gỡ lỗi, v.v. Nó có nghĩa là "bây giờ trả lại (2) cho tệp có tên" 16 " dòng 1". Tôi nghĩ rằng đó là 2 thứ khiến Clang nghẹt thở (và gcc cảnh báo) vì nó không bao giờ đi vào bất kỳ tệp nào ở vị trí đầu tiên, vì vậy không có gì để quay lại. Khi tôi có cơ hội tôi có thể thử nghiệm thay đổi nó thành một thứ khác để làm cho nó được biên dịch trong Clang. Xem gcc.gnu.org/onlinesocs/cpp/ Kẻ
Muzer

25

65. ALGOL 68 (Genie) , 1634 byte

#16  "(}+?23!@)-("//*\Dv;'[af2.q]PkPPX'#CO)"14";n4
#/*0|7//```"`   [-'][!(>77*,;68*,@;'1,@10␉␉11)(22)S␉␉(1 P''53'S^'q
#>␉
# 36!@␉`
#
#_>++++.>.}+?
#`<`
#<]}} +<[<.>>-]>[
#{
#z}
#
#=x<R+++++[D>+++++++59L+++<-][pPLEASE,2<-#2DO,2SUB#1<-#52DO,2SUB#2<-#32DOREADOUT,2PLEASEGIVEUPFACiiipsddsd4O6O@oh]>@@+.---@.>][
#x%+>+=ttt Z_*.
#D>xU/-<+++L
#R+.----\).>]|
#[#[(?2?20l0v0x1k1kMoOMoOMoOMoOMOO0l0ix0jor0h0h1d111x0eU0yx0y0moO1d0y0e0e00m1d0i0fx0g0n0n11MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOmOoMOo0moo0n0tx0t0moO0f0t0gOOM0g0f0h0j0j0i0001k1x0vx0v0l111111^_00)
[ "]56p26q[puts 59][exit]" ,'\[' ];#/s\\/;print"24";exit}}__DATA__/
#
###x<$+@+-@@@@=>+<@@@=>+<?#d>+.--.

#
'(((p\';a=a;case $argv[1]+${a:u} in *1*)echo 50;;*A)echo 54;;*)echo 58;;esac;exit;';print((eval("1\x2f2")and 9or 13)-(0and 4)^1<<(65)>>62)or"'x"or'{}{}{}{}({}<(((((()()())){}{})){}{})>){(<{}(({}){})>)}{}({}())wWWWwWWWWwvwWWwWWWwvwWWWwWWWWWWWWwWWWWwWWWWWWWwWWWWWWWW li ha '#}#(prin 45)(bye)46(8+9+9+9+9+=!)((("'3)3)3)"'
__DATA__=1#"'x"
#.;R"12"'
###;console.log 39
""""
=begin
<>{nd
#sseeeemPaeueewuuweeeeeeeeeeCis:ajjap*///;.int 2298589328,898451655,12,178790,1018168591,84934449,12597/*
#define p sizeof'p'-1?"38":"37"
#include<stdio.h>
main ( ){puts(p);}/*
print 61
#}
disp 49;
#{
}<>
$'main'3
#-3o4o#$$$
#<T>"3"O.s
=end
"""#"
#}
#s|o51~nJ;#:p'34'3\=#print (17)#>27.say#]#print(47)#]#echo 21# xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi xi ax fwwvwWWWwWWWWwvwWWwWWWwvwWWwWWWwvwWWwWWWwvwWWwwwwwwwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwvm 
# sss8␛dggi2␛`|$// ''25  16*///~-<~-<~-<<<~-XCOprint("65")#s^_^_2229996#

Điểm VIP ( Máy in số nguyên đa năng ): .005949 (để cải thiện, mục tiếp theo nên không quá 1710 byte)

Hãy thử trực tuyến!

Chạy xuống

Chương trình này in 65 ở ALGOL 68, 64 ở Agony, 63 ở Brian & Chuck, 62 ở Grass, 61 ở SILOS , 60 ở Moorhens 2.0, 59 ở Tcl, 58 ở Ksh, 57 ở Wise, 56 ở dc, 55 ở Brain -Flak Classic, 54 in Zsh, 53 in Shove, 52 in COW, 51 in hội, 50 in Bash, 49 in Octave, 48 in Deadfish ~, 47 in Lily, 46 in Cubix, 45trong PicoLisp, 44 in alphuck, 43 in reticular, 42 in evil, 41 in brainfuck, 40 in Minimal-2D, 39 in CoffeeScript, 38 in C, 37 in C ++, 36 in Labyrinth, 35 in INTERCAL, 34 in Rail, 33 trong sự cố, 32 ở Whirl, 31 ở Modular SNUSP, 30 ở Whitespace, 29 ở Trigger, 28 ở Brain-Flak, 27 ở Perl 6, 26 ở 05AB1E, 25 ở Pip,24 ở Thutu, 23 ở Hexagony, 22 ở Underload, 21 ở Nim, 20 ở Prelude, 19 ở Reng, 18 ở Hồng y, 17 ở Julia, 16 ở Pyth, 15 ở Haystack, 14 ở Turtlèd, 13 ở Ruby, 12 ở Phân hạch, 11 trong Befunge-98, 10 trong Befunge-93, 9 trong Perl 5, 8 ở Retina, 7 trong Japt, 6 trong SMBF, 5 trong Python 2, 4 trong> <>, 3trong Minkolang, 2 trong V / Vim và 1 trong Python 3.

xác minh

Hầu hết các ngôn ngữ có thể được kiểm tra với trình điều khiển kiểm tra ở trên, nhưng 6 ngôn ngữ phải được kiểm tra cục bộ.

  • Reng có thể được thử nghiệm để xuất 19 ở đây .

  • Mô-đun SNUSP có thể được kiểm tra để xuất 31 tại đây .

  • Sự cố đã được xác minh để kiểm tra 33 thông qua việc cân bằng thủ công các mã thông báo.

  • Deadfish ~ có thể được kiểm tra để xuất 48 cục bộ, sử dụng trình thông dịch này . Lưu ý rằng Deadfish ~ lấy polyglot để được cho ăn trên stdin, nhưng in một số >>lời nhắc đến đầu ra tiêu chuẩn, đây là hệ quả không thể tránh khỏi khi chạy bất kỳ chương trình Deadfish ~ nào.

  • Moorhens 2.0 có thể được kiểm tra để xuất 60 bằng trình thông dịch này .

ALGOL 68

ALGOL có lẽ là ngôn ngữ lập trình cấp cao ít được biết đến nhất từ ​​những ngày đầu lập trình - các ngôn ngữ còn lại của sự khác biệt mơ hồ này là COBOL, FORTRAN và Lisp. ALGOL được biết đến nhiều hơn trong giới học thuật và toán học vào thời điểm đó, nhưng ngày nay được biết đến nhiều nhất vì ảnh hưởng rất lớn đến các ngôn ngữ hiện đại. Trong thực tế, hầu hết các ngôn ngữ hiện đại, thực tế có thể được mô tả là giống như Alg Algol, không phải là ngôn ngữ ít nhất là C, tất nhiên có dòng ảnh hưởng và dẫn xuất riêng.

Tôi khá hào hứng khi đưa ALGOL vào vì đó là một bước đệm lớn khác trong lịch sử máy tính mà chúng ta có thể thêm vào tượng đài này mà chúng ta gọi là một polyglot. Đó là thứ tuyệt vời.

ALGOL68 là phiên bản mới nhất trong ba thông số kỹ thuật chính của ALGOL, còn lại là ALGOL60 và ALGOL58. Thật thú vị, đặc tả không có cú pháp cố định, có nghĩa là các mã thông báo được xác định, nhưng không phải là cách viết. Điều này làm cho ngôn ngữ phụ thuộc nhiều vào trình thông dịch bởi vì bất kỳ trình thông dịch cụ thể nào cũng có thể sử dụng một ký hiệu khác để khởi tạo một khối nhận xét chẳng hạn. Các đặc điểm kỹ thuật mô tả ¢như là bắt đầu một khối nhận xét. Nhưng vì ¢không nằm trong số 127 mã ascii cơ bản nên nó không thể sử dụng nhiều làm chỉ số nhận xét trong số các thông dịch viên có sẵn. Vâng nó chỉ ra rằng người phiên dịch Genie thích rõ ràng ¢như #, đó là tất cả việc mở chúng ta cần phải nhận được nhân vật trong quá khứ 1 và thực hiện một nhiều thứ tiếng.

Genie trong thực tế có ba tùy chọn cú pháp nhận xét, hai tùy chọn còn lại cocommentcả hai đều được chỉ định là được in đậm. Vâng, táo bạo. Nếu chúng ta sử dụng chữ nghiêng, đó là một biến. Genie đã giải quyết điều đó cho chúng tôi một lần nữa bằng cách đánh vần in đậm trong tất cả các chữ hoa. Và vì COkhông có trong polyglot ở bất cứ đâu, chúng tôi đã có một phương pháp dễ dàng để ẩn polyglot khỏi trình phân tích cú pháp. Nếu COcần một ngôn ngữ, chúng ta có thể chuyển sang COMMENTcú pháp dài dòng hơn .

Không có nhận xét dòng nào trong ALGOL - tất cả đều theo kiểu khối, có nghĩa là chúng cần được chấm dứt. Với trạng thái ban đầu của polyglot, nhận xét khối ALGOL của chúng tôi được mở ngay lập tức và bị chấm dứt ở gần cuối dòng 1 vì Turtlèd sử dụng tương tự #như một mã thông báo nhảy. Rất may là Turtlèd không gặp vấn đề gì khi đi qua Cvà các Oký tự, vì vậy trong dòng 1, chúng ta có thể chỉ cần chèn COngay sau lần thứ hai #để bắt đầu nhận xét khối béo cho ALGOL68.

Từ đây chúng ta chỉ cần đặt COprint("65")một nơi nào đó. Tôi đã chọn dòng cuối cùng vì tôi thích kết thúc dòng này bằng một #bình luận khác và tôi không muốn bình luận đó chấm dứt ở #đầu dòng cuối cùng. Vì vậy, chúng tôi theo dõi tuyên bố in ALGOL của chúng tôi với #s#là ký tự cuối cùng trong polyglot. Các s#slà dành cho alphuck để cân bằng ptrong in ấn.

Cảm ơn @ ais523 vì đã mở ra phần cuối của polyglot với câu trả lời 59 và làm cho tất cả điều này có thể.

SMBF

Chúng tôi đã thêm một ký tự khác vào cuối polyglot để chấm dứt nhận xét cuối cùng của ALGOL và SMBF trước đó đã đọc ký tự cuối cùng cho câu trả lời của nó. Để khắc phục điều này, tôi đã phải thay đổi SMBF để đọc ký tự thứ hai thành ký tự cuối cùng bằng cách thay đổi mã này trên dòng 8 thành dòng [.>-]này [<.>>-]. Đây là khối mã riêng SMBF vì MP của BF ở mức 0 khi vòng lặp được bắt đầu.

Kích hoạt

Tại thời điểm này, tôi nhận thấy một số hành vi kỳ lạ với SMBF và nó phải liên quan đến các mối quan hệ giữa các phân đoạn mã này quảng cáo kết thúc polyglot.

• Điểm đến của sự cố: ^_^_

• Điểm đến Jump của Trigger cộng với câu trả lời: X222999

• Câu trả lời của ALGOL68: COprint("65")#s

Câu trả lời của ALGOL đã mã hóa một vài mã thông báo Sự cố trong phân đoạn mã của nó, vì vậy mã của ALGOL phải đi trước phân đoạn mã của Sự cố. ALGOL cũng gây ra vấn đề căn chỉnh khúc dạo đầu nếu nó đi trước theo thứ tự để nó phải đi thứ hai hoặc thứ ba. SMBF trong khi đó đã có một thất bại không thể giải thích được khi mã của Sự cố đi qua, vì vậy Sự cố phải đi trước hoặc thứ hai. Chà, tôi nhận ra đây là một vấn đề logic giới thiệu có vẻ như không thể giải quyết được, vì vậy tôi đã đặt ra để làm cho không thể giải thích được nhiều hơn nữa.

Sau khi đi qua SMBF, tôi thấy rằng vấn đề với việc có ^ _ ^ _ ở cuối là do Wise. Mã của Wise ( ~-<~-<~-<<<~-) không bị ẩn đằng sau một vòng lặp không thực thi, không giống như hầu hết các polyglot. Nhưng không có mã in SMBF liên quan đến mã của Wise. Nó chỉ thay đổi giá trị bộ nhớ. Nó có vẻ vô hại. Vậy vấn đề là gì? Đó là SM chết tiệt trước BF.

Mã của Wise đang thay đổi các ký tự trong mã sắp được thực thi và bạn có thể đoán hàng xóm giá trị ascii ^là gì không? Đó là ]. Wise đã đặt một bộ kết thúc vòng lặp SMBF vào cuối polyglot, khiến SMBF rơi vào một vòng lặp vô hạn. Đó là mojo xấu.

Sau một số suy nghĩ, tôi đã đưa giải pháp 0 byte vào vấn đề và tách đích nhảy của Trigger ( X) khỏi câu trả lời của nó ( 222999) và kết thúc polyglot như vậy : ~-<~-<~-<<<~-XCOprint("65")#s^_^_2229996#. Điều này chỉ hoạt động vì không có nhân vật nào xuất hiện liên tiếp sau bước nhảy của Trigger mà không phải là câu trả lời của Trigger.

Gói lại

Đó là tất cả những thay đổi lớn trong vòng này. Tôi đã thực hiện một thay đổi nhỏ để cắt giảm nhiều thảo luận ctrong dòng 1, nhưng đó là thay đổi hoàn toàn cho việc chơi golf.

Chúc may mắn!

Báo cáo sự cố

#<q>"3"O.strở nên #<T>"3"O.svì cách nói Tthay vì qhiệu quả hơn trong việc cân bằng

<>{trở nên <>{ndđể nói nd{␊

Đặt một khoảng trống giữa }}+trong #<]}} +<[<.>>-]>[để phát ngôn }}+rẻ hơn.


25

2. V (11 byte)

print(1)#i2

Chương trình này in 1 trong Python 3 và 2 trong V.

Chỉ để có được quả bóng lăn và ném ngôn ngữ yêu thích của tôi vào hỗn hợp sớm. :)

Đó là một câu trả lời rất đơn giản.

print(1)#

thật tình cờ là một NOP trong V. (may mắn cho tôi) Sau đó i2vào chế độ chèn và chèn '2'. Bạn có thể thử V trực tuyến tại đây

Tất nhiên, ở trăn

print(1)

in '1' và

#i2

là một bình luận.


2
Đây là V hay Vim? Trình thông dịch mà bạn liên kết đến là "V".
mbomb007

@ mbomb007 Chà, V gần như hoàn toàn tương thích ngược, nên ý định là vim. Tôi cho rằng về mặt kỹ thuật là V mặc dù. Có quá muộn để thay đổi?
DJMcMayhem

2
Không thực sự, chỉ cần chỉnh sửa tiêu đề trong câu trả lời.
mbomb007

1
@ mbomb007 Một nhân vật ESC theo nghĩa đen sẽ làm điều đó (đó là lý do tại sao tôi phải sử dụng một ký tự trong bài nộp của mình).

1
Lưu ý cho những người thử nghiệm điều này: Bạn cần đảm bảo rằng bạn không có bảng điều khiển được mang từ phiên Vim trước.
Đi xe đạp

24

20. Mở đầu, 167 byte

#v`16 "<" 6/b0\ .q@#;n4"14""
#>3N9@15o|R"12"*^*ttt*~++%
#=|
print((1/2and 9 or 13)-(0and+4)^1<<65>>62);#35(99999+++++!) =#;print(17)
#       ~nJ<
#
#gg99ddi2` |1|1+6

Các ký tự ESC bằng chữ ở cùng một vị trí như trong các lần gửi trước (giữa #g, và giữa 2`, trên dòng cuối cùng), vì bạn không thể đưa Vim ra khỏi chế độ chèn với các ký tự có thể in được.

Chương trình này in 20 in Prelude , 19 in Reng (có thể kiểm tra tại đây ), 18 in Cardinal , 17 in Julia , 16 in Pyth , 15 in Haystack , 14 in Turtlèd , 13 in Ruby , 12 in Fudge , 11 in Befunge-98 , 10 trong Befunge-93 , 9 ở Perl , 8 ở Retina , 7 ở Japt , 6 ở SMBF ,5 trong Python 2 , 4 in> <> , 3 trong Minkolang , 2 trong Vim / V , 1 trong Python 3a partridgetrong A Pear Tree .

Mã hiện tại đã hủy bỏ khá nhiều trong Prelude, chỉ bao gồm các vòng lặp với các đối số falsey và một số thao tác ngăn xếp trên các ngăn xếp mà chúng ta không quan tâm. Thậm chí tốt hơn, có một điểm trong mã đó là một nhận xét trong tất cả các ngôn ngữ có chúng (giữa #=#lần gửi trước đó). Phần khó của việc lắp Prelude vào đây là tạo ra các số chỉ có một ngăn xếp và không làm tăng số byte. Chương trình này sử dụng một vòng lặp thêm 45 cho mỗi phần tử ngăn xếp và xuất nó dưới dạng ASCII, do đó bằng cách đặt 5 trên 3 trên ngăn xếp, chúng ta sẽ nhận được 20như là đầu ra. (Nhanh chóng, 20 là một con số dễ dàng hơn để xuất ra so với 19 trong Prelude, vì vậy câu trả lời 19 được đăng thực sự giúp tôi một chút.)


Mở đầu nên khá dễ dàng để làm việc trong các chương trình trong tương lai. Một số lời khuyên cho bất kỳ ai có thể gây rắc rối cho: đừng để dấu ngoặc đơn xếp hàng theo chiều dọc; đảm bảo bạn không cho phép dấu chấm than bên ngoài dấu ngoặc đơn; và một khi bạn đã đặt các chữ số bên ngoài dấu ngoặc đơn, đừng đặt nhiều dấu ngoặc đơn hơn nữa trên cùng một dòng. Khoảng trống mà tôi đặt chương trình Prelude vẫn còn mở và có vẻ như đó là một nơi hiệu quả cho các ngôn ngữ 1D khác (Prelude là loại 1½D và hoạt động giống như ngôn ngữ 1D trong chương trình này).

Thật tuyệt, đánh bại tôi bằng cú đấm Prelude :) Tôi thực sự nghĩ rằng V chỉ có ASCII có thể :%sthay thế được, nhưng ngay cả khi đó nó hơi khó (và V rất khó kiểm tra)
Sp3000

Nếu bạn sử dụng lệnh :để bắt đầu một lệnh trong vim, bạn sẽ cần trả lại vận chuyển, điều này cũng không thể thực hiện được. : /
Zwei

4
+10000000000 cho a partridgetrong Cây lê. Nhưng nó có in 5 GOLDtrong RING không?
Immibis

23

30. Khoảng trắng , 296 byte

#v`16/"<"6/b.q@"(: ::T):  ␉␉␉␉ :(22)S#;n4"14"
#>3N6@15o|>␉^*ttt*~++~~~%
#=~nJ<R"12"; ␉
#[␉
#`<`|
print((eval("1\x2f2")and (9)or(13))-(0and 4)^(1)<<(65)>>62)or'(\{(\{})(\{\/+23!@}[()])}\{})(\{}\{})'#46(8+9+9+9+9+=!)=#print(17)#]#echo 21#|/=1/24=x=90/
#8␛dggi2␛␉` |1|6$//''25  #>say␉␉ 27#T222999"26

Đại diện cho lối thoát theo nghĩa đen.

Đại diện cho các tab theo nghĩa đen.

Chương trình này in 30 in Whitespace , 29 in Trigger , 28 in Brain-Flak , 27 in Perl 6 , 26 in 05AB1E , 25 in Pip , 24 in Thutu , 23 in Hexagony , 22 in Underload , 21 in Nim , 20 in Nim , 20 in Primude , 19 ở Reng (đã thử nghiệm ở đây ), 18 ở Hồng y , 17 ở Julia , 16 ở Pyth ,15 ở Haystack , 14 ở Turtlèd , 13 ở Ruby , 12 ở Fudge , 11 ở Befunge-98 , 10 ở Befunge-93 , 9 ở Perl 5 , 8 ở Retina , 7 ở Japt , 6 ở SMBF , 5 ở Python 2 , 4 trong> <> , 3 trong Minkolang , 2 trong V / Vim 1 trong Python 3 .

Khoảng trắng là một esolang khác với bộ ký tự giới hạn. Cái này chỉ đọc các tab, dấu cách và nguồn cấp dữ liệu.

Vì vậy, một khi chúng tôi loại bỏ tất cả những thứ mà Whitespace không đọc, chúng tôi sẽ để lại đoạn mã sau:

[space][space][space][LF]
[space][LF]
[LF]
[LF]
[LF]
[space][space][space][space][space][LF]
[space][space][space][space]

Và mã cho đầu ra 30 là đây:

[space][space][space][tab][tab][tab][tab][space][LF]
[tab][LF]
[space][tab]

Vì vậy, 3 dòng trên cùng của mã hiện tại đã được cung cấp thêm khoảng trắng ở cuối dòng để đáp ứng các yêu cầu. Lưu ý rằng các tab và dấu cách của dòng 1 nằm ở giữa dòng để đáp ứng nhu cầu của <>.

Không gian của Dòng 2 đã được thay đổi thành một tab ở đây. Điều này dường như hoạt động giống hệt một không gian cho các ngôn ngữ 2D, nhưng về mặt trực quan, nó không còn xếp hàng nữa. ¯ \ _ (ツ) _ /

Sau các hướng dẫn để xuất 30, trò chơi trở thành phần còn lại của các không gian và nguồn cấp dữ liệu cần thiết để thực hiện những điều vô nghĩa và biên dịch chính xác.

Không gian màu trắng có các hướng dẫn đánh dấu / goto một vị trí mã bằng nhãn cho phép số lượng tab và khoảng trắng tùy ý, do đó đã giúp che đi khoảng trắng của dòng dài. Nó cũng bắt đầu và kết thúc với một nguồn cấp dữ liệu, do đó, điều đó đã giúp chúng tôi tăng một số nguồn cấp dữ liệu trong các dòng 3-6.

Dòng cuối cùng không thể có nguồn cấp dữ liệu mà không phá vỡ Retina, vì vậy hướng dẫn của nó là thực hiện một số thao tác toán học và ngăn xếp tùy ý.

Đây là mã đầy đủ với khoảng trắng, tab và nguồn cấp dữ liệu được thay thế bằng ký hiệu của chúng tôi:

#v`16/"<"6/b.q@"(:[Space]::T):[Space][Space][Tab][Tab][Tab][Tab][Space]:(22)S#;n4"14"[LF]
#>3N6@15o|>[Tab]^*ttt*~++~~~%[LF]
#=~nJ<R"12";[Space][Tab][LF]
#[[Tab][LF]
#`<`|[LF]
print((eval("1\x2f2")and[Space](9)or(13))-(0and[Space]4)^(1)<<(65)>>62)or'(\{(\{})(\{\/+23!@}[()])}\{})(\{}\{})'#46(8+9+9+9+9+=!)=#print(17)#]#echo[Space]21#|/=1/24=x=90/[LF]
#8␛dggi2␛[Tab]`[Space]|1|6$//''25[Space][Space]#>say[Tab][Tab][Space]27#T222999"26[LF]

Và đây là phiên bản nhận xét của Chỉ khoảng trắng:

Push 30 onto the stack
[space][space][space][tab][tab][tab][tab][space][LF]

Output the number at the top of the stack
[tab][LF][space][tab] 

Jump to label null if the top of the stack is negative. (it's not)
[LF][Tab][LF]

Label this location as [Space]
[LF][Space][Space][Space][LF]

Add the top two items on the stack and replace them with the result. 
[Tab][Space][Space][Space]

Store the stack.
[Tab][Tab][Space]

Chỉnh sửa: Hexagony hóa ra bỏ qua các tab giống như khoảng trắng, trái với khẳng định trước đây của tôi. @ ais523 đã đủ tốt bụng để cập nhật @ Hexeyizer của Kenney để giải thích cho các lối thoát và các tab theo nghĩa đen. Tôi đã phải sửa đổi nó để sửa chữa khẳng định trước đó của mình về các tab được đọc là no-op và để thay thế thoát theo nghĩa đen .bởi vì ký tự rộng hơn các ký tự khác, làm cho hex bị lệch một chút. Đây là đường dẫn .

Và đây là Hex hiện tại đã được sửa của chúng tôi:

          # v 1 6 / " < " 6 /
         b . q @ " ( : : : T )
        : : ( 2 2 ) S # ; n 4 "
       1 4 " # > 3 N 6 @ 1 5 o |
      > ^ * t t t * ~ + + ~ ~ ~ %
     # = ~ n J < R " 1 2 " ; # [ #
    < | p r i n t ( ( e v a l ( " 1
   \ x 2 f 2 " ) a n d ( 9 ) o r ( 1
  3 ) ) - ( 0 a n d 4 ) ^ ( 1 ) < < (
 6 5 ) > > 6 2 ) o r ' ( \ { ( \ { } )
  ( \ { \ / + 2 3 ! @ } [ ( ) ] ) } \
   { } ) ( \ { } \ { } ) ' # 4 6 ( 8
    + 9 + 9 + 9 + 9 + = ! ) = # p r
     i n t ( 1 7 ) # ] # e c h o 2
      1 # | / = 1 / 2 4 = x = 9 0
       / # 8 . d g g i 2 . | 1 |
        6 $ / / ' ' 2 5 # > s a
         y 2 7 # T 2 2 2 9 9 9
          " 2 6 . . . . . . .

Cuối cùng, tôi đã đánh ra một số nhân vật không cần thiết, chủ yếu được thêm vào trước đây để sắp xếp dấu ngoặc đơn Prelude và hexagony.

Mã của Nim trở lại echo 21từecho 5+5+11

Hexagony #@46bây giờ#46

Mã của Hexagony trở lại /+23!@=từ/+23!@

Liên kết cha mẹ của Prelude (9) or (13)đã trở thành(9)and(13)

Chà, đó là tất cả những gì tôi có. Chúc mọi người may mắn!


1
Tôi nghĩ rằng tôi đã sửa tất cả các liên kết và thêm vào các vị trí của không gian bắt nguồn từ các bản sao dán của tôi. Không chắc chắn làm thế nào để có được các tab thành tab trong SE, mã trong Tio sẽ phân tán. Tôi cũng đã phải tạo lại giải pháp của mình từ các hướng dẫn trong câu trả lời này, nhưng bằng cách nào đó đã kết thúc với 2 bit ít hơn ... Rất tiếc?
Cơ hội

1
Chỉ cần nhận thấy một lỗi trong lời giải thích của bạn: lợi nhuận vận chuyển (ASCII 13) là một ký tự khác với nguồn cấp dữ liệu (ASCII 10). Phần lớn các ngôn ngữ (bao gồm cả khoảng trắng) quan tâm đến số 10, chứ không phải số 13 (và giả định rằng ngắt dòng trong bản đệ trình PPCG chỉ là một ASCII 10 trừ khi có quy định khác, vì số 13 có xu hướng làm tăng số byte của bạn thành không lợi ích).

1
Hình ảnh giải thích hình lục giác của bạn là sai ( ine23 ) vì ;sau e khi đến NW sau lần phản chiếu đầu tiên. Các liên kết trên hoạt động tho ...?
MildlyMilquetoast

1
Tôi đã đi đến kết luận rằng TIO cho Hexagony coi các ký tự tab là khoảng trắng / dòng mới. Hình ảnh bạn cung cấp của chương trình hexagony không có gì ngoài thoát nếu bạn theo dõi nó (hoặc đưa nó vào TIO, thay thế các tab bằng .s). Tuy nhiên, sao chép mã trong hình ảnh vào TIO, ngoại trừ loại bỏ các khóa đào tạo .(không phải là một phần của mã thực tế) và tất cả các s. Nó in 23.
MildlyMilquetoast

1
Ồ, cảm ơn @MistahFiggins! Có vẻ như tôi đã thực hiện một số lỗi suy diễn và tuyên truyền chúng cho lời giải thích của tôi. Tôi đã sửa lỗi giải thích Hexagony, sơ đồ hex và tập lệnh Hexagonoizer Perl, cũng như kiểm tra chéo kết quả với Hexagony trực tiếp. Mọi thứ nên tốt ngay bây giờ. Tìm tốt!
Cơ hội

23

100. brainbool, 2953 byte

#16  "?63(o?23!*# #@"/*\DZZCv;'[af2.q]PkPPX)\('#CO"14"; */
#/*0|7//```"`  [>.>.])[-'][(>77*;,68*,@,1',;# l1011)(22)S\4n;iiipsddpsdoh coding:utf8ââââ(1P''53'S^'????!?!??!??!!!!???!?!??!!?!?!!!!!?!!!!?????!????????????????????!) (qx
#>â
# 36!@â`  e++++++::@ 
#~
#y
#`<`
#<<<#>>]}}+-[.+..]+-+<[<<.>>x>-]>[
#{
#x}
#2""/*\*
#=x<R+++++[D>+++++++q   L+++<-][pPLEASE,2<-#2FAC,2SUB#1<-#52FAC,2SUB#2<-#32FACREADOUT,2PLEASEGIVEUPFACs]>@@+.---@.>][
#x%+>+=ttt Z_*.
#D>xU/-<+++L
#R+.----\   \).>]4O6O@|
#[#[(?2?20l0v01k1kMoOMoOMoOMoO MOO0l0ix0jor0h0h1d111x0eU0y0yx0moO1d0y0e0e00m1d0i0fx0g0n0n11MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOmOoMOo0moo0n0tx0t0moO0f0t0gOOM0g0f0h0j0j0i0001k1x0vx0v0l111111^_0 )0\\
[  "]56p26q[puts 59][exit]" ,'\[999'];#/s\\/;print"24";exit}}__DATA__/
###x<$+@+-@@@@=>+<@@@=>+<?#d>+.--.<!\
'(wWWWwWWWWwvwWWwWWWwvwWWWw WWWWWWWWwWW/"78"oo@WWwWWWWWWWwWWWWWWWWwwwwvwWWWwWWWWwvwWWwWWWwvwWWwWWWwvwWWwWWWw              (([5]{})))â\';';print((eval("1\x2f 2")and 9or 13<< (65)>>65or 68)-(0and 4)^1<<(65)>>62)or"'x"or' {}{}{}{}({}<(((((()()())){}{})){}{})>)(({})5){}x{(x<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>)wWW no no no no no no no no no no no no no no no no no no no no no no no no no no no no no no os sp '#}#(prin 45)(bye)46(8+9+9+9+9+=!)((("3'3)))"'a'[[@*3*74[?]*]*(<*.*\>]xxxxxxxxxxxxx)'# \\
__DATA__=1#"'x"
#.;R"12"'
###;console.log 39;'(******* **********819+*+@[*99[?]*]***|!)'
#\\
""""#\
' ( <><        (          )>  ){ ({}[()]  )}{\';      a=$(printf \\x00    );b=${#a};#\\
" }"';           ((   ( (';case "{"$ar[1]"}"${b} in *1)echo 54;;*4)echo 78;; *1*)echo 50;;*)echo 58;;esac;exit;# (((('))))#\
=begin
#p             +555/2+55x%6E2x
;set print "-";print 89;exit#ss 9
utpb now 70 dollar off!
utpb has been selling out worldwide!
#9999 9 seeeemPaeueewuuweeeeeeeeeeCis:ajjappppppp😆😨😒😨💬95💬👥➡
👋🔢🌚🌝🌝🌚🌚🌚🌚🌚

set ! 57
set ! 51
More 91 of thiset of re9
How much is it*/
#if 0
.int 2298589328,898451655,12,178790,1018168591,84934449, 12597
#endif//*
#1"" //*
#include<stdio.h> 
#defineâ x(d)â#d
#define u8 "38\0 "
main ( ) {puts( sizeof (0,u8)-5?u8"67":*u8""?"37":     x( 0'0  "'\"")[9]?"75":'??-'&1? "79":"77");"eg5""6 27""e ' Zing  ";}//*/
#if 0
#endif//* --... ...--
/*/
p=sizeof("9( 999 99\"    ); print'(''72'')';end!"            );main( ){puts(  "92");return(9-9+9 -9);}
#if 0â
#endif//* rk:start | print: "69" rk:end<(9    >5b*:,1-,@
print 61
#}
disp 49 ;9;
#{
}{}<>
$'main'3
#-3o4o#$$$
#<T>"3"O.</+++++++>/+++<-\>+++.---.
#<<<#>>> /
reg end="";print(85);reg s#++++++++++++++++++++++++++++++++++++++++++++++++++++++++.-.
=end
;"""#"#xxxxxxxy"78"\++++>/<~#class P{        function:Main(a:String[] )~Nil{83->Print();} }
#}pS9^7^8^MUOUOF@:8:8\\
#s|)o51~nJ;#:p'34'3  \=#print(17)#>27.say#]# print(47) #]#echo 21#fwwwwwWWWwWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWWWWWWWwWWWWWWWWWWWWwvm>++++
#s8âdggi2âM`|$//''  1$6~-<~-<~-<<<~-COprint ("65")#asss^_^_#
#9 "25"  +/ *///X222999686#

Điểm VIP ( Máy in số nguyên đa năng ): .002953 (để cải thiện, mục tiếp theo nên không quá 3042 byte)

Chạy xuống

Chương trình này in 1 in Python 3, 2 in V / Vim, 3 in Minkolang, 4 in> <>, 5 in Python 2, 6 in SMBF, 7 in Japt, 8 in Retina, 9 in Perl 5, 10 in Befunge- 93, 11 ở Befunge-98, 12 ở Phân hạch, 13 ở Ruby, 14 ở Turtlèd, 15 ở Haystack, 16 ở Pyth, 17 ở Julia, 18 ở Hồng y, 19 ở Reng, 20 ở Prelude, 21 ở Nim, 22 ở Underload, 23ở Hexagony, 24 ở Thutu, 25 ở Pip, 26 ở 05AB1E, 27 ở Perl 6, 28 ở Brain-Flak, 29 ở Trigger, 30 ở Whitespace, 31 ở Modular SNUSP, 32 ở Whirl, 33 ở Incident, 34 ở Rail , 35 ở INTERCAL, 36 ở Mê cung, 37 ở C ++ 03, 38 ở C99, 39 ở CoffeeScript, 42 ở ác, 43 ở lưới, 44 ở bảng chữ cái, 45 ở PicoLisp, 40 in Minimal-2D, 41 in brainfuck, 46 ở Cubix, 47 ở Lily, 48 ở Deadfish ~, 49 ở Octave, 50 ở Bash, 51 ở hội, 52 ở COW, 53 ở Shove, 54 ở Zsh, 55 ở Brain-Flak Classic, 56 ở dc, 57 ở Wise, 58 ở Ksh, 59 ở Tcl, 60 ở Moorhens, 61 ở SILOS , 62 ở Grass, 63trong Brian & Chuck, 64 ở Agony, 65 ở ALGOL 68, 66 ở Surface, 67 ở C11, 68 ở Python 1, 69 ở rk-lang, 70 ở Thương mại, 71 ở gì, 72 ở Fortran, 73 ở Morse, 74 trong Archway, 75 ở C ++ 11, 76 ở Trefunge-98, 77 ở C ++ 14, 78 ở dash, 79 ở C ++ 17, 80 ở Klein 201, 81 ở Klein 100, 82 ở Brain-Flueue, 83 ở Objeck, 84 ở Klein 001, 85 ở zkl, 86 ở Solitairelak, 87 ở Alice, 88 ở PingPong, 89 ở gnuplot, 90 ở RunR, 91 ở Cood, 92 . 100 trong brainbooltrong C89, 93 ở Set, 94 ở Emotinomicon, 95 ở Emoji, 96 ở EmojiCoder, 97 ở Cubally, 98 ở Archway2, 9999

xác minh

Hãy thử trực tuyến! Ngôn ngữ không có trên TIO:

Giải trình

Tôi không thể tin rằng chúng tôi đã làm được tới 100 ngôn ngữ. Tôi chỉ muốn dành thời gian để cảm ơn tất cả mọi người đã tham gia vào quá trình này. Đó là một chuyến đi vui vẻ và tôi hy vọng sẽ thêm 100 người nữa với các bạn.

Brainbool đã ở trong mắt tôi một thời gian. Tuy nhiên, vì brainbool chỉ có thể xuất ra hai số 10tôi đã không thể thêm nó cho đến bây giờ (tôi không có khoảng 10 và 11).

Brainbool giống như Brainfuck, ngoại trừ thay vì bọc ở mức 256, nó kết thúc ở mức 2. Brainbool cũng không có -vì nó là dư thừa với +. Mã brainbool của chúng tôi để xuất 100 khá đơn giản:

+.+..

Để che dấu các đầu ra cho brainfuck, chúng tôi thêm một vòng lặp và một điểm trừ:

+-[.+..]

Bây giờ tất cả những gì cần thiết là tìm một nơi để mã đi. Vị trí lựa chọn của tôi là đầu tiên +ở cấp cao nhất của mã brainfuck trên dòng 8. Để thay thế cộng, chúng tôi đã thêm mã của chúng tôi và +-+hoạt động như một bộ +não và noop trong brainbool.

+-[.+..]+-+

Đàn con

Tôi đặt mã của mình trước viên nang Cubix khiến một chiếc gương di chuyển vào đường dẫn của con trỏ. Để khắc phục điều này, tôi đã di chuyển viên nang một vài bước về phía trước gương phản cảm và tất cả đều ổn.

Đáng ngạc nhiên là không có gì khác phá vỡ ngay cả sự cố đáng chú ý.


Trên thực tế, brainbool có thể xuất văn bản aribtrary. Nếu bạn truyền cho nó -bđối số, nó sẽ xây dựng 1 và 0 thành byte và sau đó xuất ra dưới dạng ký tự.
Pavel

1
@WheatWizard Tôi xác nhận rằng nó hoạt động trong Archway2.
stasoid

1
Chúc mừng! Tôi nhận thấy điểm VIP chỉ giảm dưới 0,003 là tốt.
Ørjan Johansen

1
Tôi phải thú nhận, trở lại khi ban đầu bạn đăng về việc thêm cái này cho 100/101, tôi thực sự không nghĩ rằng chúng tôi đã từng đến đây. Điều này là khá nguy hiểm mát mẻ.
Ngáy ngủ

1
@stasoid Tôi đang làm việc để có Archway trên TIO, chỉ FYI.
MD XF

21

27. Perl 6 , 235 byte

#v`16/"<"6/b.q@"(::):::  (22)S#;n4"14"
#>3N6@15o|> ^*ttt*~++~~~%
#=~nJ<R"12";
#[
#`<`|
print((eval("1\x2f2")and 9 or 13)-(0and 4)^1<<65>>62)#@46(8+9+9+9+9+=!)=#print(17)#3]#echo 21#===2|/=1/24=x=90/
#8␛dggi2␛` |1|6$//''25  #>say 27#"26

Đại diện cho một ký tự ESC theo nghĩa đen, như thường lệ.

Chương trình này in 27 in Perl 6 , 26 in 05AB1E , 25 in Pip , 24 in Thutu , 23 in Hexagony , 22 in Underload , 21 in Nim , 20 in Prelude , 19 in Reng (thử nghiệm tại đây ), 18 in Cardinal , 17 in Julia , 16 ở Pyth , 15 ở Haystack , 14 ở Turtlèd , 13 ở Ruby ,12 ở phân hạch., 11 ở Befunge-98 , 10 ở Befunge-93 , 9 ở Perl 5 , 8 ở Retina , 7 ở Japt , 6 ở SMBF , 5 ở Python 2 , 4 ở> <> , 3 ở Minkolang , 2 ở Vim / V , 1 trong Python 3 và (như Giáng sinh) a partridgetrong Cây lê

Cú pháp tô sáng mà Stack Exchange tạo ra cho câu trả lời này là hoàn toàn sai. #`<là một trong nhiều dấu hiệu nhận xét đa dòng của Perl 6 và kết thúc tại #>, do đó, mã duy nhất thực sự chạy trong Perl 6 là rất đơn giản say 27. Tôi đã chọn điểm đánh dấu nhận xét cụ thể này vì <>không phải là một cặp phù hợp trong hầu hết các ngôn ngữ và do đó, không thể so sánh được< ngôn ngữ không thể sẽ không phá vỡ ngôn ngữ, chẳng hạn như Retina, cố gắng phân tích nó.

Tôi không hoàn toàn chắc chắn làm thế nào Hexagony hoạt động nữa. Khi nó bị vỡ, tôi đã thay đổi một trong những ký tự mà nó đang sử dụng từ a +sang a 0để xem nó có bị đánh không; Hóa ra là như vậy, và hóa ra chương trình này đã sửa lỗi chương trình, nhưng tôi không chắc tại sao (tôi biết nó bị hỏng do #trong một dòng thực thi, nhưng không rõ tại sao lại gỡ bỏ các +thứ đã sửa). (Nhân vật trong câu hỏi cũng được Thutu phân tích cú pháp, nhưng may mắn là điều này không tạo ra sự khác biệt đối với chức năng của chương trình Thutu, vì tại thời điểm đó trong chương trình, bất cứ điều gì không có trước đó =đều được sao chép theo nghĩa đen chuỗi.) Lưu ý rằng 0and+4từ một dòng trước đó đã trở thành0and 4, để làm cho nó ngắn hơn một ký tự theo quan điểm của Hexagony (Hexagony không nhìn thấy khoảng trắng); điều này là để bù đắp cho việc #|trở thành một dòng trước đó#`<`|, dài hơn một ký tự theo quan điểm của Hexagony (vì nó cũng không thấy backquote). Lưu ý rằng mã bây giờ chỉ còn năm byte để mở rộng độ dài cạnh Hexagony và phá vỡ mọi thứ về mã Hexagony hiện tại. Tôi khuyên bạn nên làm điều này bằng mọi cách và chỉ cần làm lại phần Hexagony của mã; có lẽ sẽ dễ dàng hơn thay vì khó hơn để phù hợp với mọi thứ sau khi mở rộng.

Một số ngôn ngữ khác cũng thay đổi, chủ yếu là để thêm đủ mạnh mẽ mà tôi có thể phù hợp với mã tùy ý ở dòng cuối cùng. $//là một điểm đánh dấu nhận xét trong Japt, cho phép các khoảng trắng sau này trên dòng, làm cho chương trình được thêm vào trở nên dễ vỡ hơn trong Japt (trong khi đó, là dành cho Retina); nó phân tích cú pháp khác với dòng tương ứng trong mục trước, nhưng theo cách đó cũng phù hợp. Đức Hồng Y cũng đơn giản hơn một chút so với các mục trước, nhưng đây chỉ là sự trùng hợp hoàn toàn với cách mọi thứ sắp xếp theo chiều dọc, và thay đổi là mã không làm gì cả.// ngắt nếu có bất kỳ dấu ngoặc đơn đóng nào sau đó trên dòng và dấu cách là một dấu ngoặc đơn đóng trong Japt). Một cặp dấu cách là một dấu hiệu nhận xét trong Pip, có nghĩa là mã Pip có thể được đơn giản hóa đáng kể ở đây. Điều này cũng có nghĩa là chúng ta có thể đơn giản hóa 05AB1E xuống một cách tầm thường "26. Retina cần dòng thứ năm để trở thành một regex hợp pháp, phù hợp với mọi thứ (dấu vết|

Giả sử bạn làm lại Hexagony (có thể bạn sẽ phải), có những nơi an toàn để thêm mã trên tất cả ba dòng cuối cùng: 3in #3]#chỉ dành cho Hexagony (và dễ dàng thay đổi); không gian giữa #"trên dòng cuối cùng bị bỏ qua bởi đại đa số các ngôn ngữ; và không có gì thực sự phân tích cú pháp cuối dòng thứ năm ngoài Retina. (Có rất nhiều nơi khác cũng có thể thêm mã, nhưng đây có thể là những nơi thuận tiện nhất.)


1
Tôi đã vô tình hạ cấp câu trả lời này và nhận thấy tôi đã hạ cấp khi tôi nhận thấy đại diện của mình giảm xuống 1. Bạn có thể chỉnh sửa câu trả lời để tôi có thể upvote không? : D
betseg

4
@betseg: Tôi đã thêm một chút thảo luận về Hexagony, chỉ dành cho bạn.

2
Chúc mừng tiền thưởng! Tôi muốn chuyển bài đăng này một lần nữa: P
FlipTack

Tôi đã lên kế hoạch để tiếp tục nó từ lâu, đó chỉ là một trường hợp cố gắng tìm thời gian. (Tôi thực sự đã thực hiện một nỗ lực thất bại tại Perl 6 một thời gian trước đó, trước đó trong chuỗi và đã không đăng nó vì nó không hoạt động. May mắn thay, tôi đã học được từ những sai lầm và lần này nó hoạt động.)

21

31. SNUSP mô-đun , 326 byte

Chương trình

#v`16/"<"6/b.q@"(: ::T):  ␉␉␉␉ :(22)S#;n4"14"
#>3N6@15o|>␉^*ttt*~++~~~%
#=~nJ<R"12"; ␉
#[␉
#`<`|
print((eval("1\x2f2")and (9)or(13))-(0and 4)^(1)<<(65)>>62)or'(\{(\{})(\{}[()])}\{})(\{}\{})'#46(8+9+9+9+9+=!)=#print(17)#]#echo 21#|/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
#8␛dggi2␛␉` |1|6$//''25  #>say␉␉ 27#T222999+/+23!@"26

Như thường lệ, là một ký tự ESC theo nghĩa đen và là một tab theo nghĩa đen.

Chạy xuống

Chương trình này in 31 trong Modular SNUSP, 30 in Whitespace, 29 in Trigger, 28 in Brain-Flak, 27 in Perl 6, 26 in 05AB1E, 25 in Pip, 24 in Thutu, 23 in Hexagony, 22 in Under, 21 in Nim , 20 ở Prelude, 19 ở Reng, 18 ở Hồng y, 17 ở Julia, 16 ở Pyth, 15 ở Haystack, 14 ở Turtlèd, 13 ở Ruby, 12 ở Fudge,11trong Befunge-98, 10 ở Befunge-93, 9 ở Perl 5, 8 ở Retina, 7 ở Japt, 6 ở SMBF, 5 ở Python 2, 4 ở> <>, 3 ở Minkolang, 2 ở V / Vim và 1 trong Python 3.

xác minh

Tại sao không có liên kết trong rundown? Bởi vì tôi đã làm việc trên một cái gì đó để làm cho việc kiểm tra dễ dàng hơn nhiều, trình điều khiển thử nghiệm chạy chương trình ở hầu hết các ngôn ngữ được liệt kê ở đây và in kết quả. Điều này hy vọng sẽ làm cho việc thêm các ngôn ngữ trong tương lai vào polyglot dễ dàng hơn nhiều. Bạn có thể nhận kết quả của chương trình này cho 28 trong số 31 ngôn ngữ thông qua việc chạy liên kết TIO sau (là trình điều khiển thử nghiệm được viết bằng hỗn hợp Bash, Perl và A Pear Tree):

Hãy thử chúng trực tuyến!

Liên kết cũng tạo ra khối mã / định dạng được nhìn thấy ở trên và định dạng mã thành hình lục giác cho bạn:

          # v 1 6 / " < " 6 / b
         . q @ " ( : : : T ) : :
        ( 2 2 ) S # ; n 4 " 1 4 "
       # > 3 N 6 @ 1 5 o | > ^ * t
      t t * ~ + + ~ ~ ~ % # = ~ n J
     < R " 1 2 " ; # [ # < | p r i n
    t ( ( e v a l ( " 1 \ x 2 f 2 " )
   a n d ( 9 ) o r ( 1 3 ) ) - ( 0 a n
  d 4 ) ^ ( 1 ) < < ( 6 5 ) > > 6 2 ) o
 r ' ( \ { ( \ { } ) ( \ { } [ ( ) ] ) }
\ { } ) ( \ { } \ { } ) ' # 4 6 ( 8 + 9 +
 9 + 9 + 9 + = ! ) = # p r i n t ( 1 7 )
  # ] # e c h o 2 1 # | / = 1 / 2 4 = x
   = 9 [ < $ + @ + - @ @ @ @ = > + < @
    @ @ = > + < ? # > + . - - . ] / #
     8 . d g g i 2 . | 1 | 6 $ / / '
      ' 2 5 # > s a y 2 7 # T 2 2 2
       9 9 9 + / + 2 3 ! @ " 2 6 .
        . . . . . . . . . . . . .
         . . . . . . . . . . . .
          . . . . . . . . . . .

Thiếu ba ngôn ngữ: V quá chậm và RUS và Modular SNUSP không được cài đặt trên TIO. May mắn thay, cả ba đều có phiên dịch trực tuyến:

  • Bạn có thể kiểm tra chương trình trong V / Vim (đầu ra dự định: 2) tại đây trên TIO.
  • Có một trình thông dịch Reng trực tuyến (đầu ra dự định: 19) tại đây .
  • Có một trình thông dịch SNUSP mô-đun trực tuyến (đầu ra dự định: 31) tại đây . (Nó được quảng cáo là chỉ là một trình thông dịch SNUSP, nhưng Modular SNUSP là phương ngữ mà nó thực sự thực hiện, như được thấy bởi các @dấu hiệu trên khắp trang.)

Tất cả ba sản xuất đầu ra dự định, vì vậy tất cả 31 chương trình được kiểm tra đúng. (Một điều khiến tôi hơi lo ngại là liệu chương trình Whitespace có kết thúc chính xác hay không; tuy nhiên, khoảng trắng ở đây giống hệt với lần gửi trước, vì vậy cả hai đều đúng hoặc cả hai đều sai. không chính xác, cả hai chương trình đều có thể sửa được theo cùng một cách.)

Giải trình

Trước hết, Hexagony, dường như luôn cần thay đổi. Nó thực sự đơn giản hơn nhiều so với trước đây; Tôi đã chuyển mã Hexagony sang ngay sau mã Kích hoạt, nghĩa là nó ở gần cuối chương trình và "viên nang" Hexagony in 23 và thoát ra sẽ chạy gần như ngay lập tức. Dòng cuối cùng thường trông giống như một nơi tốt để đặt viên nang, vì điều đó có nghĩa là ít lệnh hơn có khả năng phá vỡ Hexagony sẽ chạy.

Tất cả những thay đổi khác là để bổ sung mã SNUSP Modular. Điều đầu tiên cần lưu ý là SNUSP bắt đầu thực thi ở $ký tự đầu tiên trong chương trình và là một ngôn ngữ 2D thoát ra sau khi ra khỏi rìa chương trình, và do đó bằng cách đặt chương trình SNUSP ở cuối dòng dài (bên trong mã Thutu, tại thời điểm mà Thutu sẽ chấp nhận hầu hết mọi thứ), chúng tôi có thể đảm bảo rằng SNUSP không thấy bất kỳ mã nào từ các ngôn ngữ khác và hầu hết các ngôn ngữ khác sẽ không quan tâm đến SNUSP. Một ngôn ngữ mà đã chăm sóc là Perl 6, được phân tích dấu ngoặc nhọn; Tôi đã đặt <ngay trước mã SNUSP để giữ cho nó luôn vui vẻ (vì các dấu ngoặc tự nhiên gần như khớp với nhau). Ngôn ngữ khác quan tâm là SMBF;.đầu ra trong cả SMBF và SNUSP và chúng tôi không muốn tạo thêm đầu ra. May mắn thay, như SMBF đã thấy, chương trình này được <.>>[…]theo sau bởi mã SNUSP, tức là phần tử băng hiện tại là 0. Vì vậy, việc đặt mã SNUSP trong ngoặc vuông "nhận xét" theo quan điểm của SMBF.

Đối với bản thân mã, nó sử dụng một thủ thuật nổi tiếng để viết các hằng số trong Modular SNUSP, trong đó bạn viết rất nhiều lệnh "thủ tục bắt đầu" liên tiếp và tạo ra một loại số Fibonacci cơ bản. Ý tưởng cơ bản là +mã hóa số 1; @cộng các số được biểu thị bằng mã sau nó và số được biểu thị bằng mã sau khi trừ ký tự đầu tiên; và =là số không (do đó @=sẽ nhân đôi số sang phải). Trong hệ thống này, tôi đã chọn @@@@=+@@@=+#làm đại diện cho số 48.

Có một vấn đề ở đây, mặc dù; phương pháp viết hằng số tiêu chuẩn trong SNUSP để lại luồng điều khiển phía sau chương trình bắt đầu và với một oneliner (mà tôi muốn viết ở đây vì lý do rõ ràng), không có cách nào để thay đổi IP theo hướng bất kỳ nhưng phải. Điều này có nghĩa là bằng cách nào đó chúng ta sẽ phải lấy IP để vượt qua toàn bộ định nghĩa không đổi và tiếp tục sang phải, mà không cần thoát khỏi chương trình (điều #thường sẽ làm). Để giải quyết vấn đề này, tôi cẩn thận sử dụng định nghĩa về số +luôn được đặt trước =. Điều này có nghĩa là tôi có thể viết mã để đặt ô thứ hai thành 48 thông qua @@@@=>+<@@@=>+<#, an toàn với kiến ​​thức rằng không có >lệnh nào sẽ bị bỏ qua bởi một@lệnh (và do đó chúng tôi giữ quyền kiểm soát con trỏ băng). Ngoài ra, chúng tôi biết rằng tại trận chung kết #, ô băng đầu tiên sẽ vẫn có giá trị ban đầu. Do đó, chúng ta có thể sử dụng ô băng đầu tiên làm điểm đánh dấu để biết liệu có quay trở lại từ định nghĩa thủ tục hay không hoặc tiếp tục sang phải (chúng ta đang ở trong hàng tấn thủ tục khi thực hiện điều đó, nhưng chúng ta thoát khỏi chương trình bằng cách thoát khỏi cạnh để nó không thành vấn đề).

Mã SNUSP cuối cùng, do đó, là $+@+-@@@@=>+<@@@=>+<?#>+.--.. Các $đánh dấu sự bắt đầu của chương trình. +@+-đặt phần tử băng đầu tiên thành 1 ( ++-nhưng một khi quy trình bắt đầu bằng @trả về, nó sẽ bắt đầu chạy mã từ đó -trở đi, do đó, đặt phần tử băng trở lại 0. chỉ ?#kết thúc quy trình nếu phần tử băng đầu tiên không khác; Cuối cùng chúng ta kết thúc sau #phần tử băng thứ hai được đặt thành 50 (48 từ định nghĩa không đổi, cộng với 2 từ hai >+<gặp phải khi đi sang bên phải sau đó). Sau đó, tất cả những gì chúng ta cần làm là >+.--.xuất mã ASCII 51 ( 3) và 49 ( 1) và rơi ra khỏi chương trình ( ]là không có trong SNUSP, và /phản ánh luồng điều khiển theo chiều dọc để nó chạy ra khỏi cạnh trên của chương trình); bit này hoạt động giống hệt để brainfuck.


20

11. Befunge 98 , 102 byte

#v;2^0;7||"<+0+0+0+<;n4
#v0#_q@
#>3N.
#|\w*
#8  ^1b0<
#|
#M`
print(None and 9or 1/2and 1or 5)
#jd5ki2

Bản in:

Thành thật mà nói, tôi không biết tại sao mã Vim mất 1 phút để xuất ra. Ngoài ra, không có manh mối làm thế nào Retina hoạt động.

Giải trình:

#v          Skips the v, which would send the IP down
  ;         Unlike '93, where ; is a no-op, '98 skips to the next ;
            and doesn't execute anything in between
   2^0;     Not executed, unlike Befunge 93
       7|   Pushes 7 onto the stack, and then sends the IP up, because 7 is not 0
n0b1        n clears the stack, and #s are pushed until the stack is [0, 11, 1
    *.      multiplies the top 2 values of the stack to give 11, and prints it (yay!)
      _     Sends the IP right, because the top value of the stack is 0
       q    Ends the program (no-op for '93, which continues to @)

Những điều cần lưu ý:

  • Bên 0cạnh bkhông thực sự cần thiết trong trạng thái hiện tại của mã và ngăn xếp đã bị xóa. Nó có thể được gỡ bỏ nếu cần thiết, nhưng cho phép thao tác ngăn xếp khác trước đó như là một phần của chương trình tương lai có thể.
  • Đây _q@là một phần của Retina (Nó không hoạt động mà không có nó, đừng hỏi tôi tại sao). Việc bổ sung qcũng cho phép mã '98 chạy một thoạt động, phân tách IP (cùng với việc tạo chương trình Retina in 8 thay vì 7)
  • Điều _này không đơn giản >bởi vì điều đó sẽ làm rối tung phần SMBF.

Chỉnh sửa: Chỉ cần nhận ra rằng _q@có lẽ nên @00(Trường hợp 0 ​​có thể là ~ bất kỳ char nào) để làm cho chương trình linh hoạt hơn trong tương lai. Tôi quá lười biếng (và mệt mỏi) để thay đổi tất cả các liên kết ngay bây giờ. Cuối cùng sẽ đi đến đó ...

Chỉnh sửa 2: Tôi không mong đợi thêm 6 câu trả lời này nhanh chóng. Tôi đoán nó vẫn như cũ. Làm tốt lắm mọi người!


Heh, tôi đã viết câu trả lời thứ 11 của mình, chỉ để nhận ra rằng nó đã được đăng, bây giờ tôi đã thay đổi nó thành câu trả lời thứ 12 :)
Bò lang băm

Bất cứ ý tưởng tại sao Vim mất quá nhiều thời gian để thực hiện?
MildlyMilquetoast

@MistahFiggins Tôi đoán là do mã phải được chuyển đổi thành tổ hợp phím, nhưng ngoài ra, tôi không có manh mối
Bò quạc

Tôi đã viết thông dịch viên vim đó, và tôi không biết tại sao nó lại mất nhiều thời gian như vậy. Tôi chưa nhận thấy nhiều vấn đề về hiệu suất trước đây, nhưng đó là vì hầu hết các câu trả lời V / Vim của tôi đều dưới 40 byte. Không thực sự chắc chắn những gì gây ra nó, nhưng nhiều người đã phàn nàn về điều đó trên chủ đề này.
DJMcMayhem

20

35. INTERCAL (C-INTERCAL), 631 byte

#v`16/"<"6/b.q@"(: ::Q):  ␉␉␉␉ :(22)S#;n4"14"
#>3N6@15o|>␉^*ttt*~++~~~%
#= >␉1#v#v0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#[␉
#`<`|
print((eval(" 1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or' (\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
""""#//
=begin␉//
$'main'//
#-3o4o#␉
=end   #//
"""#"#//
#0]#echo 21#/ (\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE) a
#   +/Jn~
#8␛dggi2␛`␉|1|6$//''25  >>>#>27.say# =#print(17)#$nd^_^_.]Q222999/+23!@1#"26

là một tab theo nghĩa đen, một ký tự ESC theo nghĩa đen; Stack Exchange sẽ quản lý chương trình khác. Tôi khuyên bạn nên sao chép chương trình từ hộp "đầu vào" của liên kết TIO bên dưới, nếu bạn muốn làm việc với nó.

Hãy thử chúng trực tuyến!

Chạy xuống

Chương trình này in 35 in INTERCAL, 34 in Rail, 33 in Incident, 32 in Whirl, 31 in Modular SNUSP, 30 in Whitespace, 29 in Trigger, 28 in Brain-Flak, 27 in Perl 6, 26 in 05AB1E, 25 in Pip , 24 ở Thutu, 23 ở Hexagony, 22 ở Underload, 21 ở Nim, 20 ở Prelude, 19 ở Reng, 18 ở Hồng y, 17 ở Julia, 16 ở Pyth,15 ở Haystack, 14 ở Turtlèd, 13 ở Ruby, 12 ở Fudge, 11 ở Befunge-98, 10 ở Befunge-93, 9 ở Perl 5, 8 ở Retina, 7 ở Japt, 6 ở SMBF, 5 ở Python 2, 4 trong> <>, 3 trong Minkolang, 2 trong V / Vim và 1 trong Python 3.

xác minh

Hầu hết các ngôn ngữ được kiểm tra bởi trình điều khiển thử nghiệm được hiển thị ở trên. Bạn có thể kiểm tra Reng tại đây và Modular SNUSP tại đây ; họ xuất 19 và 31 tương ứng, theo yêu cầu. Tôi đã thử nghiệm Sự cố cục bộ trên hệ thống của mình, sử dụng trình thông dịch chính thức.

Lưu ý rằng tôi đã thêm một vài thay đổi cho trình điều khiển thử nghiệm để giúp phát hiện các ký tự ẩn dễ dàng hơn; nhiều byte NUL đã len lỏi vào đầu ra của chương trình bằng một số ngôn ngữ nhất định. Tôi đã quyết định rằng đây có lẽ không phải là vấn đề, bởi vì a) một loạt các bài nộp đã được thực hiện và b) các trình thông dịch Befunge dường như thêm các byte NUL bổ sung mặc dù không có gì trong chương trình ngụ ý rằng (trừ khi tôi Tôi đã bỏ lỡ điều gì đó), vì vậy nó phải diễn ra từ lâu và có lẽ là một phần trong cách phiên dịch viên hoạt động. (Lưu ý rằng các ngôn ngữ vẫn xuất ra byte NUL - Befunges và Minkolang - đã không thay đổi mã của chúng cho lần gửi này.)

Việc gửi Rail trước đó thoát qua sự cố, không được phép, nhưng điều này có thể khắc phục dễ dàng (bằng cách thêm #vào cuối chương trình Rail và điều chỉnh Hexagony cho phù hợp) và vì vậy tôi không coi đó là vấn đề lớn. Đường sắt trong giải pháp này thoát ra một cách chính xác.

Giải trình

Mã INTERCAL hoạt động như thế nào

INTERCAL phân tích toàn bộ chương trình. Tuy nhiên, lỗi cú pháp là một điều thời gian chạy trong INTERCAL, không phải thời gian biên dịch và điều này thường được sử dụng để tạo bình luận. (Nếu một lỗi cú pháp cố thực thi, nó sẽ làm hỏng chương trình với lỗi ICL000I, trái với những gì Wikipedia tuyên bố không chính xác. Nhưng nếu bạn có thể ngăn nó thực thi bằng cách nào đó - và INTERCAL có rất nhiều cách để ngăn chặn các lệnh chạy - nó sẽ khá vui vẻ không thực hiện mà không gây ra vấn đề.)

Như vậy, chúng ta có thể ngăn chặn rác ở cuối tệp đang chạy đơn giản bằng cách thoát khỏi chương trình một cách rõ ràng trước tiên (dù sao đó cũng là điều bắt buộc, vì INTERCAL gặp sự cố nếu kết thúc chương trình mà không có lệnh thoát rõ ràng). Xử lý bắt đầu chương trình thú vị hơn và khai thác lỗi trình phân tích cú pháp. Bạn có thể viết một cái gì đó như DO %20 READ OUT #8đầu ra VIIIvới xác suất 20% (và nếu không thì không làm gì cả). Theo như tôi có thể nói, C-INTERCAL phân tích% đơn độc trên dòng thứ hai như chỉ ra xác suất 0% cho lệnh đầu tiên chạy, và do đó cuối cùng không chạy nó liên tục. (Tôi không chắc tại sao nó phân tích cú pháp như vậy, nhưng nhìn vào mã được biên dịch cho thấy nó tạo ra một số ngẫu nhiên và so sánh nó với 0.)

Đây là cách chương trình INTERCAL đã xem xét trước khi khớp với phần còn lại của polyglot:

DO,1<-#2
DO,1SUB#1<-#52
DO,1SUB#2<-#32
DOREADOUT,1
PLEASEGIVEUP

Điều này khá đơn giản: khởi tạo một mảng 2 phần tử; đặt các phần tử thành 52 và 32 (thập phân) tương ứng (mã hóa chuỗi của INTERCAL tốt nhất không được đề cập đến; tôi đã quên cách nó hoạt động và phải thực hiện nhiều thử nghiệm khác nhau để tìm ra lý do tại sao các số này mã hóa 35); đọc nó ra đầu ra tiêu chuẩn; và thoát khỏi chương trình. Tôi đã thêm một VUI LÒNG bổ sung vào cuối để chấm dứt tuyên bố GIVE UP, bắt đầu một tuyên bố mới về rác vào cuối chương trình, trong khi giữ các giới hạn chấp nhận được cho cuộc trò chuyện lịch sự. Tất nhiên, INTERCAL không giống như trong sản phẩm hoàn chỉnh; Tôi sẽ giải thích tại sao khi chúng ta đi.

Chôn dưới một tải Ses

Vấn đề rõ ràng nhất với chương trình INTERCAL là nó có chứa chữ cái S. Điều này là khá nhiều không thể tránh khỏi, vì không có cách nào để lập chỉ mục một mảng mà không sử dụng chữ cái trong câu hỏi. Tuy nhiên, Slà một lệnh đầu ra trong Underload và không có cách nào để ngăn chặn nó phân tích toàn bộ chương trình. Giải pháp duy nhất là đặt mã INTERCAL bên trong dấu ngoặc đơn, Underload tương đương với một chuỗi ký tự, để nó không chạy ngay lập tức.

Tuy nhiên, chúng tôi có hai ^ký tự ở cuối chương trình, thực thi mã Underload; Vì vậy, những Ses đó sẽ được thực hiện nếu chúng ta không làm gì đó với nó. Tôi có thể đã thay đổi nó thành một nhân vật khác, nhưng quyết định bảo vệ mã dễ dàng hơn để nó trở nên vô nghĩa. athoát một chuỗi trong Underload (có nghĩa là ^, khi thực hiện chuỗi, đơn giản là sẽ hủy hiển thị lại chuỗi đó thay vì tạo ra các tác dụng phụ có hại). Chúng tôi đã có một acái sayđược sử dụng trong mã Perl 6 (trong cách sắp xếp mã này, thực sự là đủ do những thay đổi không liên quan). Tuy nhiên, để mọi người không phải phụ thuộc vào điều đó, tôi đã thêm mộtaở cuối dòng (dù sao tôi cũng muốn có một nhân vật để làm cho những gì khác có thể nhìn thấy các khoảng trống ở đó, và bởi vì Hexagony cần đệm như vậy; lưu ý rằng Hexagony khá dễ sửa trong chương trình này, và thực sự không phải vậy cần thảo luận riêng). Vì vậy, mã Underload ít mong manh hơn so với nó có thể có được.

Mở đầu cho rất nhiều công việc và nhầm lẫn

À, khúc dạo đầu. Bình thường không phải là ngôn ngữ khó nhất, nhưng chắc chắn là lần này. Có hai vấn đề thực sự: một là việc thêm dấu ngoặc đơn trên một hàng dài rất xa có nguy cơ làm xáo trộn luồng điều khiển của chương trình Prelude (vì chúng tạo ra tương đương với một whilevòng lặp) và một là vấn đề đơn giản là ngăn chặn chúng lên theo chiều dọc (chịu trách nhiệm cho hầu hết các di chuyển ngẫu nhiên xung quanh khoảng trắng trên các dòng). Lưu ý rằng Whitespace cũng gây cho tôi một số rắc rối, nhưng chương trình này tương đương với chương trình trước theo quan điểm của Whitespace, do đó, rất nhiều trường hợp "sửa Prelude mà không phá vỡ Whitespace".

Tôi không chắc chắn làm thế nào Prelude thực sự hoạt động tại thời điểm này. Có một số bản sửa lỗi dành cho nó, như số 0 ở góc dưới bên trái, nhưng rõ ràng chúng không hoạt động theo cách tôi dự định. (Mã Julia cuối cùng cũng di chuyển xuống cuối dòng vì dấu ngoặc đơn trong printtuyên bố của nó thực sự khó đối phó.) Có lẽ chúng ta sẽ phải để lại cho nó một bí ẩn.

Sự cố trong lò phản ứng phân hạch

Mặc dù những thay đổi ở trên là cho các vấn đề khá tinh vi khó khắc phục, nhưng có một vấn đề rõ ràng hơn nhiều; DOREADOUTphù hợp với biểu thức chính quy R...Ovà do đó sẽ khiến Phân hạch tạo ra đầu ra không mong muốn ở chu kỳ thứ tư, không đủ thời gian để xuất đầu ra dự định của 12. Và INTERCAL chỉ có một lệnh tạo đầu ra (trừ khi bạn tính sự cố là đầu ra). Một cách khắc phục cho vấn đề này là cố gắng thêm khoảng trắng giữa READOUT, để chúng ta có thời gian chặn đầu ra, nhưng điều đó khiến Whitespace tức giận. Vì vậy, trong một thời gian, tôi nghĩ rằng chương trình này là không thể; R, L, U, Và Dlà tất cả các điểm mục trong Fission, và tất cả các khả năng tiềm tàng chạy mã có vấn đề, và từ khóa INTERCAL phải viết hoa.

Tuy nhiên, có một sửa chữa, và một điều khá ngạc nhiên. Là một phần của nỗ lực quốc tế hóa, C-INTERCAL thực sự chấp nhận các từ khóa bằng nhiều ngôn ngữ, với sự hỗ trợ cho cả tiếng Anh và tiếng Latin. Chúng ta không thể tránh Snhư thế này, nhưng chúng ta có thể tránh O; FAClà một sự thay thế hoàn toàn tốt cho DO, và tương tự như vậy LEGERE EXcó nghĩa là điều tương tự như READ OUT. (Do đó, chương trình kết thúc bằng tiếng Anh và tiếng Latin, nhưng điều đó không sao; hầu như không làm cho nó dễ đọc hơn.) Như vậy, chúng ta có thể vui vẻ để Fudge phát điên ở góc dưới bên phải, và không để nó tạo ra đầu ra. Chúng ta có thể thay đổi mã phân hạch thực tế để kết thúc bằng *thay vì;, mà thoát khỏi toàn bộ chương trình chứ không chỉ một chủ đề; mã này chạy khá nhanh, vì vậy nó thoát khỏi chương trình trước khi tất cả các điểm vào đi lạc có thời gian để gây ra bất kỳ thiệt hại nào.

Đan 6, Perl 6

Vấn đề tiếp theo: 6 bình luận Perl hoạt động bằng cách khớp <>. Toán tử gán của INTERCAL là <-. May mắn thay, điều đó bổ sung thêm dấu ngoặc mở , vì vậy tôi chỉ có thể thêm một vài dấu ngoặc đóng để hủy chúng ra ở một vị trí chưa được chỉnh sửa trong chương trình (ngay sau mã Pip, trong trường hợp này).

Tuy nhiên, tôi không muốn thay đổi ngân sách khoảng trắng của chương trình, nhưng việc chuyển mã Julia (cho Prelude) cuối cùng đã thêm một khoảng trắng vào dòng cuối cùng; Tôi đã phải loại bỏ một từ đâu đó. Không gian kép là một điểm đánh dấu nhận xét trong Pip, vì vậy tôi khó có thể thay đổi chúng; lựa chọn duy nhất còn lại là không gian trong say 27. Người chơi golf Perl 5 sẽ ngay lập tức nghĩ rằng "cứ làm đi say+27" (unary +có ích thường xuyên một cách đáng ngạc nhiên!), Nhưng thật không may, đây không phải là cú pháp Perl 6 hợp lệ.

Tuy nhiên, những gì chúng ta có thể làm là thay đổi saytừ cú pháp hàm sang cú pháp phương thức. Các chữ nguyên có một loạt các phương thức, bao gồm một phương thức để in chúng ra, vì vậy đây 27.saylà một chương trình hoàn toàn hợp lệ có cùng độ dài.

Là hình vuông? Đừng ở đó

Vì vậy, vấn đề tiếp theo là tôi đã thêm một .chương trình bổ sung . Người dùng SMBF sẽ biết rằng đó rõ ràng là một vấn đề trong ngôn ngữ đó, tạo ra đầu ra đi lạc (byte NUL trong trường hợp này). Đã một .sản phẩm đi lạc sản xuất chương trình trước, nhưng điều đó không có nghĩa là tôi không nên tận dụng cơ hội để sửa nó.

Ý tưởng cơ bản ở đây là tạo ra một vòng lặp SMBF để bình luận các hướng dẫn vi phạm. Điều này có nghĩa là di chuyển các dấu ngoặc vuông xung quanh. Tôi đã lấy chúng từ xung quanh mã SNUSP (vì dù sao chúng chỉ ở đó vì sự cố và Incident không quan tâm đến việc chúng ở đâu trong chương trình) và đặt dấu ngoặc mở ở đầu mã INTERCAL và đóng khung ngay trước Kích hoạt (do đó ẩn gọn gàng cả hai .).

Thật không may, dấu ngoặc vuông có ý nghĩa với Retina; nó nhìn thấy […<-#…và nói rằng "điều đó vô nghĩa, bạn không thể tạo ra phạm vi đó bởi vì <không đến trước #". May mắn thay, điều này có thể dễ dàng sửa chữa với một dấu gạch chéo được đặt một cách chiến lược.

Sự cố trung tâm của chương trình

Điều này đã xảy ra câu trả lời cuối cùng, và nó có thể sẽ xảy ra lặp đi lặp lại từ bây giờ; nhiều chuỗi khác nhau đã xảy ra ngẫu nhiên ba lần và thay đổi xung quanh trung tâm của chương trình theo quan điểm của Sự cố.

Mã thông báo khẩn cấp nhất để xử lý là 1#, xuất hiện ba lần nếu bạn thực hiện những thay đổi này một cách ngây thơ: #= >␉1#ở đầu dòng thứ ba __DATA__=1#, và echo 21#. Tại sao điều này là một vấn đề? Bởi vì 1#trên dòng thứ ba trùng lặp #vngay sau nó và hai mã thông báo chồng chéo khiến cho cả hai không được tính. Và #vlà mã thông báo chúng tôi đã sử dụng để nhận xét mã trước khi chương trình Sự cố xảy ra! Tôi đã sửa lỗi này bằng cách lẻn vào một phần 1#rất gần cuối chương trình (chỉ có ba nhân vật theo dõi nó); không có ngôn ngữ nào phân tích phần đó của chương trình làm bất cứ điều gì với nó.

Có nhiều mã thông báo có vấn đề khác để giải quyết. Một cặp vợ chồng là những lá thư đơn, PU; Tôi đã giải quyết những vấn đề này thông qua việc thay đổi một vài filler no-op trong mã Sự cố từ xthành Phoặc Utương ứng, đưa ra một bản sao thứ tư. Việc thay đổi mã Phân hạch để lại *dưới dạng mã thông báo, nhưng đáng chú ý, mã này được phân tách khác với thông thường, xuất hiện hai lần trước mã Sự cố và chỉ một lần sau đó. Do đó, thay vì xóa nó, tôi đã sử dụng nó để cân bằng một phần LEmã thông báo mới xuất hiện trong mã INTERCAL. Thế là đủ để đưa trung tâm của chương trình trở lại0omã thông báo. Tất nhiên, những thay đổi đối với chương trình hoàn toàn có khả năng làm phiền điều này. (Những nỗ lực của tôi để có được sự cố vào TIO thất bại do libdivsufsort không phải là sẵn có, vì vậy nó trông giống như chúng ta có thể hưởng lợi từ một thông dịch viên mới, đặc biệt là trong hoạt Javascript để nó có thể chạy trên mạng. Nếu bạn quan tâm, hãy xem này câu hỏi .)


1
Wow, thử thách này đã đi một chặng đường dài đáng ngạc nhiên. Bạn đã làm rất tốt!
MildlyMilquetoast

Latin?! Wow, thật là một giải pháp tuyệt vời! Tôi thích rằng mã nói "hãy từ bỏ" ngay bây giờ. Nó giống như nó dám cho tôi bỏ.
Cơ hội

19

1. Python 3 (8 byte)

print(1)

Chương trình này in 1 trong Python 3.

Bắt đầu điều này với Python 3 vì tôi biết rằng nó tốt cho các đa âm và có thể được thực hiện theo một số hướng khác nhau (ngoài ra, tôi muốn đảm bảo rằng câu trả lời đầu tiên là bằng một ngôn ngữ tương đối bình thường, thay vì một esolang ngớ ngẩn khó có thể đa âm với).


Sẽ> <> là một lựa chọn tốt cho ngôn ngữ thứ 2 (để chúng ta bắt đầu không gian 2d)?
Bò lang băm

Vì vậy, điều đó có nghĩa là câu trả lời tiếp theo không thể nhiều hơn 9 byte? Điều đó sẽ rất khó để đến với một người khác.
DJMcMayhem

1
@DJMcMayhem Mỗi câu trả lời phải dài không quá 20% hoặc 20 byte (tùy theo giá trị nào lớn hơn)
Bò lang băm

19

10. Befunge , 95 byte

#v02^0;7||"<+0+0+0+<;n4
#v0#@00
#>3N.
#|\w*
#8
#|
#M`
print(None and 9or 1/2and 1or 5)
#jd5ki2

Có một ký tự ESC theo nghĩa đen giữa jdtrên dòng cuối cùng (grr, @ ais523). Nó không được bao gồm trong mã này. Để có được mã thực tế, vui lòng truy cập Try it onlineliên kết.

Bản in này in 1 trong Python 3, 2 in Vim, 3 in Minkolang, 4 in <> <, 5 in Python 2, 6 in SMBF, 7 in Japt, 8 in Retina, 9 in Perl và 10 in Befunge.

Mã này chia sẻ *với Retina và .với Minkolang và SMBF.

Dùng thử trực tuyến

Giải trình

Chương trình thực tế

#v02^
    @
    .
    *



    t
    5
#v02^

Dòng cuối cùng được viết cho rõ ràng ( sân chơi Befunge là chu kỳ.)

#

Trampoline, bỏ qua v

02^

Đẩy 0và sau đó 2trong ngăn xếp và đi lên.

5t*.@

Đẩy 5, không op, nhân hai phần tử trong stack ( 25), in, kết thúc chương trình.


1
Điều này làm cho SMBF in một byte null lúc đầu ..
PurkkaKoodari

@ Đã sửa lỗi!
JungHwan tối

Này, không phải tôi đã chọn sử dụng một ngôn ngữ trong đó nhiều lệnh quan trọng nhất là các ký tự không thể in được. (Trong một tin khác, tôi đã xem Befunge là một khả năng mạnh mẽ để thêm vào polyglot này, nó có vẻ phù hợp với các ngôn ngữ khác. Tôi thích cách bạn đã làm nó, mặc dù nó có thể cần sửa đổi để phù hợp hơn.)

@ ais523 Tôi đồng ý rằng việc sửa đổi mã này có thể khó khăn. Để giảm bớt điều này, tôi đưa vào một số 0s để chỉ ra rằng các ký tự đó có thể là bất cứ thứ gì (ngoại trừ "<+0+0+0+<;n4phần) và các phần của mã Befunge có thể được di chuyển xung quanh. Và một lời khuyên cho người tiếp theo: hầu hết các nhân vật đều không hoạt động trong Befunge, vì vậy việc thêm nhiều dòng không có khả năng sẽ ảnh hưởng đến mã Befunge.
JungHwan tối

Suy nghĩ về việc thực hiện đệ trình befunge-98 (hoặc funge tương tự khác), bởi vì họ thêm một số lượng hoạt động hợp lý mà không có hoạt động thường xuyên '93. Mặc dù có thể khó phù hợp và tôi cần phải tìm ra cách tất cả các ngôn ngữ khác hoạt động để tôi có thể làm việc xung quanh chúng ...
MildlyMilquetoast

19

21. Nim (161 byte)

#v`16/"<"6/b.q@#;n4"14""
#>3N6@15o|> ^*ttt*~++ %
#=~nJ<R"12";
#[

print((1/2and 9 or 13)-(0and+4)^1<<65>>62)#46(89999+++++!)=#print(17)#]#echo 21
#8dggi2` |1|6

Hai <ESC>s, giữa 8dvà giữa 2`trên dòng cuối cùng. Bạn có thể nói rằng người trước của tôi đã chơi golf vội vàng, bởi vì tôi thức dậy sáng nay và nhận ra rằng tôi có thể nghỉ nhiều hơn. Tôi đã có 152 byte nhưng dường như chỉ hoạt động trong Perl 5.24.0, vì vậy vì lợi ích tương thích với TIO tôi đã giữ biểu thức ban đầu cho đến bây giờ.

In 1 trong Python 3, 2 in V, 3 in Minkolang, 4 in> <>, 5 in Python 2, 6 in SMBF, 7 in Japt, 8 in Retina, 9 in Perl, 10 in Befunge-93, 11 in Befunge -98, 12 trong Phân hạch, 13 ở Ruby, 14 ở Turtléd, 15 ở Haystack, 16 ở Pyth, 17 ở Julia, 18 ở Hồng y, 19 ở Reng, 20 ở Prelude và 21 ở Nim .

Lưu ý rằng Nim trên ideone.com sử dụng phiên bản 0.11.2, một phiên bản quá cũ, vì chương trình này dựa trên các #[ ... ]#nhận xét đa dòng được thêm vào đầu năm 2016.

Nhờ trình thông dịch Windows của Cardinal, quy trình làm việc của tôi hiện có hai máy tính xách tay và Python http.serverở giữa.


Chỉnh sửa - một số gợi ý khác:

  • 8đầu dòng cuối cùng là đặt giới hạn của Retina cho 8 trận đấu đầu tiên, nếu không, nếu không có nó, Retina sẽ xuất ra 2. Lưu ý rằng điều này có nghĩa là regex dòng cuối cùng chỉ cần khớp ít nhất 8 lần trong dòng cuối cùng thứ hai, trái ngược với chính xác 8 - trong khi tôi can thiệp, tôi đã sửa đổi Prelude để có Retina đúng, nhưng cuối cùng hóa ra là không cần thiết .
  • Trích dẫn không khớp ở cuối dòng đầu tiên là để Pyth không phàn nàn về cú pháp không hợp lệ cho phần còn lại của mã.
  • Nếu bạn sửa đổi dòng thứ hai, bạn có thể phải thay đổi 6@cho Minkolang, điều này làm cho con trỏ nhảy 6 dấu cách để hạ cánh trên ^.
  • Hiện tại đã có một cặp [], vì vậy SMBF cần phải ở trên một ô 0 trước khi chạm vào [hoặc thay thế nội thất cần để xóa ô.

Có lẽ có nhiều hơn để chơi golf (ngay cả bây giờ tôi thấy một không gian đi lạc trước %Hồng y), nhưng tôi thực sự nên dừng chơi golf vào lúc nửa đêm về sáng.


1
TIO hiện hỗ trợ Hồng y
MildlyMilquetoast

19

51. Hội (x64, Linux, AS) , 1086 byte

#16  "(}23!@)(" 3//*v\D@;'[af2.qc]'#)"14";n4
#/*` PkPPZ (22)S"[!(>7 7*,;68*,@;'1,@␉␉␉␉ q
#>␉
# >36!@␉
#`<`
#<]+<[.>-]>[
#{
#z}
#
#=x<R+++++[D>+++++++EAL+++<-][pPLEASE,2<-#2DO,2SUB#1<-#52PLEASE,2SUB#2<-#32DOREADOUT,2DOGIVEUPDOiiipsddsdoh]>+.-- -. >][
#x%+>+=+~tt .
#D>xU/-<+++L
#R+.----\).>]|
#[#[(}2}20l0v01k1kx0l0ix0jor0h0h1d111x0eU0bx0b0o1d0b0e0e0@O6O4/0m1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10vx0v0l111111^_)  0046(8+9+9+9+9+=!)
###|
'\';echo 50;exit;';print((eval("1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or"'x"or'({({1})({1}[(0)])}{1}\{1})'#}#(prin 45)(bye)|/=1/24=x<$+@+-@@@@=>+<@@@=>+<?#d>+.--./
__DATA__=1#"'x"//
#.\."12"__*'
###;console.log 39
""""#//
=begin //
#sseemeePaeueewuuweeeeeeeeeeCisajjap*///;.int 2298589328,898451655,12,178790,1018168591,84934449,12597/*
#define p sizeof'p'-1?"38":"37"
#include<stdio.h>
main ( )/*/
#
#"`#"\'*/{puts (p);}/*'"`"
/*
<>{#65}//
#}
disp 49#//
#{
1}<>//
$'main'//
#-3o4o#$$$
#<R>"3"O.
=end #//
"""#"#//
#}
#s|o51~nJ;#:p'34'\=#print (17)#>27.say#]#print(47)#]#echo  21
#sss8␛dggi2␛ `|1|6$//''25  16*///89^_^_Z222999"26

là một tab theo nghĩa đen, một ký tự ESC theo nghĩa đen; Stack Exchange sẽ quản lý chương trình khác. Tôi khuyên bạn nên sao chép chương trình từ hộp "đầu vào" của liên kết TIO bên dưới, nếu bạn muốn làm việc với nó.

Muốn tìm hiểu thêm? Hãy thử trò chuyện polygot !

Hãy thử trực tuyến!

Điểm VIP ( Máy in số nguyên đa năng ): .008186 (để cải thiện, mục tiếp theo nên không quá 1151 byte)

Chương trình này in 51 in hội, 50 in Bash, 49 in Octave, 48 in Deadfish ~, 47 in Lily, 46 in Cubix, 45 in PicoLisp, 44 in alphuck, 43 in reticular, 42 in evil, 41 in brainf *** , 40 ở Minimal-2D, 39 ở CoffeeScript, 38 ở C, 37 ở C ++, 36 ở Labyrinth, 35 ở INTERCAL, 34 ở Rail, 33 ở Incident, 32 ở Whirl,31 ở Modular SNUSP, 30 ở Whitespace, 29 ở Trigger, 28 ở Brain-Flak, 27 ở Perl 6, 26 ở 05AB1E, 25 ở Pip, 24 ở Thutu, 23 ở Hexagony, 22 ở Underload, 21 ở Nim, 20 ở Mở đầu, 19 ở Reng, 18 ở Hồng y, 17 ở Julia, 16 ở Pyth, 15 ở Haystack, 14 ở Turtlèd, 13 ở Ruby, 12 ở Fudge, 11 ở Befunge-98,10 ở Befunge-93, 9 ở Perl 5, 8 ở Retina, 7 ở Japt, 6 ở SMBF, 5 ở Python 2, 4 ở> <>, 3 ở Minkolang, 2 ở V / Vim và 1 ở Python 3.

xác minh

Hầu hết các ngôn ngữ được kiểm tra bởi trình điều khiển thử nghiệm được hiển thị ở trên.

  • Reng có thể được thử nghiệm để xuất 19 ở đây .

  • Mô-đun SNUSP có thể được kiểm tra để xuất 31 tại đây .

  • Hình dạng khối lập phương của Cubix xem tại đây

  • Sự cố được kiểm tra bằng cách giữ cho các mã thông báo cân bằng như được mô tả trong các câu trả lời trước.

  • Đối với Deadfish ~, có thể được thử nghiệm để xuất 48 với điều này . Lưu ý rằng Deadfish ~ lấy polyglot để được cho ăn trên stdin, nhưng in một số >>lời nhắc đến đầu ra tiêu chuẩn, đó là hậu quả không thể tránh khỏi khi chạy bất kỳ chương trình Deadfish ~ nào.

  • Hội có thể được kiểm tra để đầu ra 51 ở đây

Cảm ơn và chúc mừng

Khi câu trả lời 50 trong 1-k của @ ais523 rơi xuống 2 tuần trước, một giọt nước mắt lăn dài trên má tôi. Nó quá đẹp Và đó là ở Bash. Nó quá hoàn hảo.

Tôi quay sang nói với vợ tôi và nói rằng tôi nghĩ rằng polyglot đã được thực hiện, cảm giác tự hào vô cùng.

Cô ấy quay lại nhìn vào mắt tôi, dừng lại một lúc, và nói Good Good. Bây giờ hãy vứt rác đi.

Điều cô ấy muốn nói là cô ấy cảm thấy niềm vui sâu sắc cho tôi và những người bạn internet của tôi. Cảm ơn và chúc mừng tất cả mọi người.

Giải thích hội

Trong những ngày sau đó, tâm trí tôi cứ lang thang trở lại một cái gì đó @ ais523 đã nói trong trò chuyện polyglot ngay trước khi đăng Bash. Ông chỉ ra rằng một số hương vị của lắp ráp sử dụng #nhận xét dòng dựa trên và /*nhận xét khối. Chà đó là đủ để tôi dần mất trí trong 2 tuần tới.

Có một loại thách thức ngầm trong đa âm để bao gồm các ngôn ngữ hợp pháp. Tôi đang sử dụng thuật ngữ hợp pháp ở đây rất lỏng lẻo, nhưng tôi nghĩ tất cả chúng ta có thể tìm hiểu những gì tôi đang làm. Đó là một điều bao gồm Brainf ***, nhưng đó là một điều khác hoàn toàn bao gồm những thứ như Mathlab hoặc R. Hội chắc chắn rơi vào loại thứ hai, và tâm trí tôi không thể để nó đi. Nhưng tôi không biết gì về hội, vì vậy đây là một trận chiến khó khăn.

Sau khi đập đầu vào vấn đề một lúc, tìm cách để Hội và C / C ++ cùng tồn tại, tôi thấy đây là tài liệu cho trình biên dịch GNU:

Để tương thích với các trình lắp ráp trước đây, các dòng bắt đầu bằng '#' có một cách hiểu đặc biệt. Theo sau '#' phải là một biểu thức tuyệt đối (xem Biểu thức): số dòng logic của dòng tiếp theo. Sau đó, một chuỗi (xem Chuỗi) được cho phép: nếu có thì đó là một tên tệp logic mới. Phần còn lại của dòng, nếu có, nên là khoảng trắng.

Điều này tôi nhận thấy đã xảy ra khá giống với chỉ thị tiền xử lý của chúng tôi đối với C / C ++ trong dòng 1 của polyglot. Sau một số thử nghiệm và lỗi tôi thấy rằng #1 “bla” 1//*sẽ chỉ nhập một bình luận khối cho hội.

Và do đó, một polyglot đã được thực hiện.

Với những vấn đề ngăn chặn lớn nhất đã được giải quyết, tôi bắt đầu chơi golf với ví dụ xin chào thế giới này.

.intel_syntax noprefix
.section .data
     msg: .asciz "51"
.section .text
.global _start
_start:
    # write syscall
    mov     rax, 1
    # file descriptor, standard output
    mov     rdi, 1
    # message address
    mov     rsi, OFFSET FLAT:msg
    # length of message
    mov     rdx, 14
    # call write syscall
    syscall
    #End the Program
    mov    rax, 60
    mov    rdi, 0
    syscall

Tín dụng chính của tác giả

Thật ra tôi đã nói dối một phút trước, phiên bản đầu tiên của mã hội mà tôi đã sử dụng là theo cú pháp AT & T, đây là một trong hai nhánh cú pháp của hội. Một trong những yếu tố chính của cú pháp AT & T là các tài liệu tham khảo đăng ký sử dụng %tiền tố và đây là một vấn đề đối với polyglot. Hồng y sử dụng %như một nguồn gốc con trỏ, vì vậy nếu chúng ta xả rác một loạt %về, nó sẽ giống như một phản ứng phân hạch thứ hai.

Nhánh cú pháp khác, không sử dụng %làm tiền tố đăng ký, được gọi là cú pháp Intel. Khai thác mà chúng tôi đang sử dụng trong polyglot để vượt qua dòng đầu tiên và nhập một nhận xét khối là trong Trình biên dịch GNU (viết tắt là GAS hoặc AS). AS có tính năng hạnh phúc khi cho phép cả hai nhánh cú pháp. Bạn chỉ cần khai báo rằng bạn muốn sử dụng cú pháp Intel, điều này xảy ra trên Dòng 1 của mã hội.

Hội sử dụng các thanh ghi, là một số lượng nhỏ các vị trí bộ nhớ nằm trên CPU theo đúng nghĩa đen để tăng tốc độ truy cập. Điều này không phải là duy nhất đối với hội ngoài thực tế là việc sử dụng chúng không bị trừu tượng hóa khỏi mối quan tâm của nhà phát triển.

Có nhiều loại thanh ghi khác nhau được sử dụng cho các mục đích khác nhau. Từ Wikipedia:

• AX nhân / chia, tải chuỗi & lưu trữ

• Số CX cho các hoạt động và thay đổi chuỗi

• Địa chỉ cổng DX cho IN và OUT

• Đăng ký chỉ số BX cho DI CHUYỂN

• SP chỉ lên đỉnh ngăn xếp

• Điểm BP đến cơ sở của khung ngăn xếp

• SI trỏ đến một nguồn trong các hoạt động truyền phát

• DI trỏ đến đích trong các hoạt động truyền phát

AX được sử dụng trong dòng của Hàm _start tại đây : mov rax, 1. Dấu rtrong raxchỉ ra rằng bộ nhớ là 64 bit. Nếu chúng ta hoán đổi điều này cho một e, điều đó sẽ chỉ ra bộ nhớ 32 bit, điều này hoàn toàn hợp lệ để thực hiện với bộ xử lý 64 bit. Chúng tôi sẽ không sử dụng nửa trên của bộ nhớ có sẵn. Để chỉ ra bộ nhớ 16 bit, bạn chỉ cần sử dụng ax, điều này tốt cho chúng tôi vì chúng tôi chỉ in số nguyên. Vì vậy, chúng ta có thể chơi một vài byte bằng cách thay đổi tất cả các tham chiếu đăng ký thành 16 bit.

Được rồi, không hoàn toàn tất cả các tài liệu tham khảo đăng ký có thể bỏ r. mov rsi, OFFSET FLAT:msg. Nếu bạn quen thuộc với hội, nhưng không phải là tuyên bố này, thì đó là vì đây là bán duy nhất cho AS. Ít nhất, rằng những gì tôi lượm lặt được từ điều này , điều đó đã giúp tôi giảm bớt tuyên bố lea rsi,m.

Sau này, tôi có kinh nghiệm thấy rằng tôi có thể hạ gục _start:chỉ _pvà cắt .global _starthoàn toàn chỉ với một cảnh báo được đưa ra. Thứ hai, msg:đã được giảm xuống chỉ còn một biến ký tự p:. Tôi đã chọn pcho cả biến chuỗi và hàm bắt đầu để bù cho một số shội được thêm vào vì lợi ích của Alphuck.

Sau đó, tôi đưa vào ;để phân định các hướng dẫn để đặt tất cả chúng trên một dòng. Điều này chủ yếu là để tránh các dấu vết quá mức #//trên mỗi dòng vì lợi ích của Thutu. Ngoài ra, tôi nhận thấy rằng Trình biên dịch của chúng tôi không xuất hiện phân biệt chữ hoa chữ thường, vì vậy tôi chỉ chọn các ký tự khác nhau trên hoặc dưới để tránh sự mất cân bằng Sự cố.

Golf này chúng tôi xuống:

.intel_syntax noprefix;.text;mov ax,1;mov di,1;lea rsi,m;mov dx,2;syscall;mov ax,60;mov di,0;syscall;m:.asciz "51"

Sau tất cả, Japt và Underload là vấn đề duy nhất của trẻ em trong câu trả lời này. Japt có một ít thịt bò *được thêm vào dòng 1, nhưng dường như nó đã được sửa bằng cách quay lại puts(p);dòng từ câu trả lời C ++. (Cuối cùng tôi cũng đã ném một dòng này và sau đó đóng nó trên dòng của Octive. Điều này là như vậy Underload sẽ ngừng sefaulting. Một điều trị tương tự đã có trên dòng 1 để thêm vào *đó.

Điều này là đủ để đáp ứng các yêu cầu byte của thách thức này. Trong thực tế, tôi đã xác minh điều này bằng cách sản xuất phiên bản polyglot này. Nhưng tôi cũng muốn cố gắng cải thiện điểm VIP nếu có thể. Và vì tôi đã hoàn thành tất cả các yêu cầu của thử thách, tôi cảm thấy ổn khi hợp tác để đánh golf. Vì vậy, tôi dừng lại ở trò chuyện polyglot để tìm kiếm sự giúp đỡ chơi gôn.

Chúng ta phải đi sâu hơn

@ ais523 đã trình diễn một kỹ thuật chuyển các hướng dẫn cho trình biên dịch mã dưới dạng mã máy với câu lệnh này.

.text;.long 2298589328,898451655,12,178790,1018168591,84934449,12597 Mã máy là một chuỗi các lệnh số được CPU thực thi trực tiếp, có thể được biểu diễn dưới dạng thập phân, thập lục phân hoặc Octal. Đối với mục đích của chúng tôi, số thập phân là ngắn nhất kể từ khi (hex mất một vị trí dẫn đầu 0xđể đại diện). Các.long tuyên bố ở đây là đưa ra tuyên bố rằng những gì sau là một loạt các hướng dẫn mã máy số thập phân.

Vâng, tôi đã chọc vào tuyên bố này một chút để xem những gì trình biên dịch sẽ cho phép, và thực hiện một vài thay đổi. Đầu tiên, tôi thấy rằng tôi có thể loại bỏ .text;tất cả cùng nhau, chỉ với các vấn đề cảnh báo, đó là một cách tiết kiệm byte được bán khá nhiều. Rồi một lúc sau tôi cũng thấy, tuyên bố này trong tài liệu đặc tả AS

.long cũng giống như .int

Mát mẻ. Vì vậy, chúng ta có thể thực hiện trao đổi đó cho một byte nhanh chóng. Bây giờ lắp ráp của chúng tôi, nhưng thực sự mã máy, đã được cắt giảm này:

.int 2298589328,898451655,12,178790,1018168591,84934449,12597.

Mặc dù điều này rất tốt và tốt, nhưng thật khó để làm việc trực tiếp với mã máy và tôi ít nhất muốn xem cách thực hiện tất cả các bản dịch. Vì vậy, lý tưởng nhất, chúng tôi muốn tháo mã máy trở lại để lắp ráp. Cách dễ nhất để làm điều đó là lấy một bãi chứa đối tượng, mà @ ais523 đã chứng minh cho tôi với đoạn mã này.

Đây là đoạn mã.

Và đây chỉ là hội.

nop
mov    $0x1,%al
mov    %eax,%edi
lea    0xc(%rip),%rsi
mov    $0x2,%dx
syscall 
mov    $0x3c,%al
xor    %edi,%edi
syscall 
.byte 0x35
xor    %eax,(%rax)

Liên kết đó cũng hiển thị một số số hex 2 ký tự bên cạnh mỗi dòng lắp ráp. Những người tương ứng với các hướng dẫn thập phân. Ví dụ, nếu bạn đặt 2298589328vào đây thập phân để chuyển đổi hex, bạn sẽ có được 8901B090trở lại. Và nếu bạn nhìn kỹ, đó là 4 hướng dẫn hex đầu tiên từ kết xuất đối tượng (theo thứ tự ngược lại).

Từ những gì tôi có thể nói, các bộ gồm 4 số thập lục phân luôn được sử dụng để chuyển đổi thành số thập phân và thủ thuật tiết kiệm byte chính đang được sử dụng ở đây là cấu trúc tổ hợp sao cho một số số thập lục phân cuối cùng trong 4 bộ của chúng tôi là 00. Sau đó chúng sẽ biến đổi để dẫn đầu số không khi chúng ta đặt chúng vào .int câu lệnh vừa bị bỏ qua.

Đây là những gì xảy ra trong 12tuyên bố. Trong phần hex của bãi chứa đối tượng này là 0c 00 00 00.

Điều này theo như sự hiểu biết của tôi về hội đã nhận được trong 2 tuần. Thật là một khóa học sụp đổ!

Biến cố

Sự cố là một giải pháp khó khăn hơn trong việc triển khai lắp ráp ngắn hơn vì nó làm cho các mã thông báo polyglot nặng hơn nhiều so với đầu. Đây là báo cáo sự cố.

  • ! trong dòng 2 nói !

  • Dòng đầu tiên EAtrên dòng INTERCAL tự thể hiện

  • Không gian cuối cùng trên dòng thứ hai đến dòng cuối cùng thể hiện mã thông báo không gian-không gian.

  • 85 trên dòng cuối cùng lên tiếng

  • Các Rtrong #<R>"3"O.detokenizesR

  • 65trong <>{#65 }//mã thông báo65

  • 16 trên dòng cuối cùng tự thể hiện

  • 89 trên dòng cuối cùng tự token hóa

Đức hồng y

Tôi chỉ nhận ra rằng tôi đã thay đổi Hồng y mà tôi quên tài liệu. Tôi đã dành một chút thời gian để tìm cách tiết kiệm byte và quyết định học Cardinal. Sau một thời gian với tài liệu, tôi thấy dòng này.

= sao chép giá trị hoạt động của con trỏ thành giá trị không hoạt động của nó.

Đây không phải là một mẹo được sử dụng trong polyglot. Giải pháp cũ bao gồm những hướng dẫn này: `++ ~ * t

++ lên tới 2.

~ thay đổi ngăn xếp hoạt động

* thêm các ngăn xếp.

Tôi nhận ra rằng ~*có thể đạt được chỉ bằng =hướng dẫn, vì vậy tôi đã làm lại giải pháp để loại bỏ một số hoán đổi ngăn xếp vô dụng và thêm vào tiết kiệm byte nhỏ này.


3
Tôi tò mò về cách bạn thậm chí có thể tiếp tục đa thê đến giai đoạn tuyệt vời này. Làm sao???
Qwerp-Derp

3
Đây thực sự là một điều của vẻ đẹp thuần khiết.
Muzer

Unary nên là người tiếp theo
Christopher

Không, điều đó sẽ giết chết điểm VIP (trừ khi mã có 3 byte trở xuống)
CalculatorFeline

19

6. SMBF , 45 byte

#v<++++<;n4
#>3N.
print('1'if 1/2else'5')
#i2

Dùng thử trực tuyến

Chương trình này in 1 trong Python 3, 2 in V, 3 trong Minkolang v0.15, 4 in> <>, 5 trong Python 2 và 6 trong SMBF.

SMBF (còn gọi là Brainfuck tự sửa đổi) sử dụng <++++<>.. Con trỏ được di chuyển sang trái (đến ký tự cuối cùng của mã nguồn) và ô được tăng bốn lần sau đó được in.


17

13. Ruby (129 byte)

#v;2^0;7||"<+0+0+0+<*!2'!1'L;n4
#v0#_q@
#>3N.
#|\w*
#8  ^1b0<
#|
#M`
print ((0 and'13')or(None and 9 or 1/2 and 1 or 5))
#jd5ki2

Vui lòng lưu ý Escký tự chữ trên dòng cuối cùng giữa jd, theo câu trả lời Perl của ais523 .

Hãy thử trực tuyến!

Bản in này in 1 trong Python 3, 2 in Vim, 3 in Minkolang, 4 in <> <, 5 in Python 2, 6 in SMBF, 7 in Japt, 8 in Retina, 9 in Perl, 10 in Befunge, 11 in Befunge- 98, 12 trong Phân hạch và 13 trong Ruby.

Chỉ là một sửa đổi nhỏ cho printtuyên bố hiện có để lạm dụng thực tế đó 0là sự thật trong Ruby. Tôi đã phải thêm một số khoảng trắng vào các câu lệnh khác để làm cho nó phân tích chính xác.


17

15. Haystack (141 byte)

#v;2^0;7||"<+0+0+0+<*!2'!1'L#'1r'4;n4
#v0#_q@
#>3N.15o|1
#|\w*
#8  ^1b0<
#|
#M`
print ((0 and'13')or(None and 9 or 1/2 and 1 or 5))
#jd5ki2

Lưu ý: có một ESCsau otrong dòng thứ ba và sau jtrong dòng cuối cùng

Bản in này in 1 trong Python 3 , 2 in Vim, 3 in Minkolang, 4 in <> <, 5 in Python 2 , 6 in SMBF, 7 in Japt, 8 in Retina, 9 in Perl, 10 in Befunge, 11 in Befunge- 98 , 12 trong Phân hạch, 13 ở Ruby, 14 ở Turtlèd và 15 ở Haystack.

Hãy thử trực tuyến!

Giải trình

#v                           go down
 v
 >                           go right
  3N.                        does nothing important
     15o|                    outputs 15 and ends program
                             there is an <ESC> after 'o' since 'o' in Vim enters insert mode
         1                   I added this to satisfy Retina

Tuyệt vời, cảm ơn bạn đã kiểm tra Haystack! :)
Kade

@Kade Đó là một ngôn ngữ 2D đẹp, một trình thông dịch trực tuyến sẽ hữu ích hơn (mặc dù tôi đã tải xuống trình thông dịch Python) :)
Bò lang băm

@Kade Hiện có liên kết TIO cho haystack!
Bò lang băm

@MistahFiggins Liên kết hoạt động với tôi và xuất ra 15
Bò quack

@MistahFiggins Cache? Bởi vì nó hoạt động với tôi mà không có bất kỳ vấn đề hoặc bất kỳ thông báo lỗi nào
Bò quack

17

9. Perl, 84 byte

#v;7||"<+0+0+0+<;n4
#>3N.
#|\w*
#8
#|

#M`
print(None and 9or 1/2and 1or 5)
#j␛d5ki2

Có một ký tự ESC theo nghĩa đen trong mã thực tế giữa jd; nó đã được thay thế bằng ␛ ở đây để hiển thị.

Điều này in 1 bằng Python 3 , 2 bằng Vim (được thử nghiệm cục bộ, nhưng đây là một liên kết cho ngôn ngữ rất giống V), 3 trong Minkolang , 4 trong <> < , 5 trong Python 2 , 6 trong SMBF , 7 trong Japt , 8 ở Retina9 ở Perl .

Chúng ta hãy có thêm một số ngôn ngữ công khai, thông qua việc lạm dụng số học hoạt động khác nhau trong các ngôn ngữ khác nhau. ( Nonelà falsey trong Python nhưng trung thực trong Perl và and/ orchuỗi hoạt động theo cùng một cách trong cả hai ngôn ngữ.)

Ngoài Python, tôi cũng phải thay đổi mã vim. Thay vì biến nó thành một chuỗi no-op, tôi chỉ để nó chèn rác, sau đó xóa lại rác ở cuối.


4
Nghiêm túc? Bạn sẽ làm cho người khác cực kỳ khó khăn trong việc tạo câu trả lời nếu bạn đặt ESC theo nghĩa đen. Chúng tôi phải có thể kiểm tra mã.
mbomb007

1
Bạn không cần phải đưa ESC theo nghĩa đen vào câu trả lời của riêng bạn; Tôi chỉ thấy nó là cách dễ nhất để viết cái này. (Ngoài ra, nó hoạt động tốt trong Firefox và trong thử nghiệm cục bộ; điều duy nhất ngăn tôi đưa nó vào bài viết là Chromium, mà tôi sử dụng cho SE, không muốn đưa nó vào hộp nhập.)

1
Ngoài ra, bạn không thể kiểm tra Vim cục bộ. Ngôn ngữ được xác định bởi trình thông dịch được sử dụng. Vì vậy, đó thực sự là V mà chúng ta đã có tất cả thời gian này.
mbomb007

1
Err, không phải vimlà một thông dịch viên cho Vim? (Tuy nhiên, nó hoạt động ở cả hai vimvà V.)

4
@ ais523 có lẽ bạn có thể đặt ␛ để biểu thị byte 0x1B?
betseg

17

36. Mê cung , 647 byte

#v`16/"<"6/b.q@"(: ::Q):  ␉␉␉␉ :(22)S#;n4"14"
#>3N36!@@15o|>␉^?.*ttt*~++~~~%
#= >␉1#v#v0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#[␉
#`<`|
print((eval(" 1\x2f2")and(9)or(13))-(0and 4)^1<<(65)>>(62))or' (\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
""""#//
=begin␉//
$'main'//
#-3o4o#␉
=end   #//
"""#"#//
#0]#echo 21#/ (\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE) a
#   +/Jn~
#0␛dggi2␛`␉|1|6$//''25  >>>#>27.say# =#print(17)#$nd^_^_.]Q2229991#;abcd!fghij/+23!@"26

là một tab theo nghĩa đen, một ký tự ESC theo nghĩa đen; Stack Exchange sẽ quản lý chương trình khác. Tôi khuyên bạn nên sao chép chương trình từ hộp "đầu vào" của liên kết TIO bên dưới, nếu bạn muốn làm việc với nó.

Hãy thử chúng trực tuyến!

Chạy xuống

Chương trình này in 36 in Labyrinth, 35 in INTERCAL, 34 in Rail, 33 in Incident, 32 in Whirl, 31 in Modular SNUSP, 30 in Whitespace, 29 in Trigger, 28 in Brain-Flak, 27 in Perl 6, 26 in 05AB1E , 25 ở Pip, 24 ở Thutu, 23 ở Hexagony, 22 ở Underload, 21 ở Nim, 20 ở Prelude, 19 ở Reng, 18 ở Hồng y, 17 ở Julia, 16 ở Pyth, 15 ở Haystack, 14 ở Turtlèd, 13 ở Ruby, 12 ở phân hạch, 11 ở Befunge-98, 10 ở Befunge-93, 9 ở Perl 5, 8 ở Retina, 7 ở Japt, 6 ở SMBF, 5 ở Python 2, 4 ở> <>, 3 ở Minkolang , 2 trong V / Vim và 1 trong Python 3.

xác minh

Hầu hết các ngôn ngữ được kiểm tra bởi trình điều khiển thử nghiệm được hiển thị ở trên. Bạn có thể kiểm tra Reng tại đây và Modular SNUSP tại đây ; họ đầu ra 19 và 31 tương ứng. @ ais523 đã giúp gỡ lỗi và sửa mã Sự cố, hiện đang hoạt động.

Cách thức hoạt động của mê cung

Labyrinth bắt đầu dịch chuyển một số cột trong nguồn xung quanh một chút, nhưng sau một vài bước, con trỏ sẽ đến vị trí của Ndòng thứ 2 (ban đầu, khi con trỏ đến đó, nó không còn Nở đó nữa), di chuyển sang phải , với số 0 ở đầu ngăn xếp. Sau đó, nó chỉ cần đẩy và in 36 và kết thúc bằng36!@

Những điều tôi đã làm xong

Tôi biết tôi muốn thêm Labyrinth, vì đó là một trong số ít esolang mà tôi biết một chút. Với trình gỡ lỗi của nó, tôi thấy rằng bằng cách thay đổi số 8 ở dòng cuối cùng thành 0, Labyrinth đã không bị kẹt trong một vòng lặp vô hạn và thật kỳ lạ, dường như không có gì khác bị phá vỡ. Từ đó tôi chỉ cần bỏ 36 lệnh thô và lệnh đầu ra mà tôi cần, và những thứ đó thuận tiện dẫn đến @việc chấm dứt mọi thứ.

Sau đó, nó đã được sửa chữa những gì tôi đã phá vỡ: Minkolang, Hồng y và Hexagony.

Việc !làm cho Minko bỏ qua nhân vật tiếp theo, cần phải chấm dứt, vì vậy tôi chỉ cần thêm một phụ @. Càng xa càng tốt.

Sự thay đổi độ dài của dòng thứ 2 khiến Cardinal bỏ lỡ tuyên bố đầu ra. Cố gắng thêm một dòng bổ sung .vào dòng đầu tiên đã khiến Prelude mất trí (không hiểu tại sao, thành thật mà nói), vì vậy tôi đã đi một phương pháp khác và chỉ bỏ nó ở dòng thứ hai. Điều đó đã vô tình sinh ra một con trỏ Hồng y thứ 3, vì vậy tôi đã đệm mọi thứ bằng một ?(không phải là sự lựa chọn cần thiết, chỉ là điều đầu tiên tôi thấy rằng đã sửa cả Phân hạch và Hồng y).

Hexagony may mắn là một sửa chữa tương đối đơn giản, tôi chỉ cần ném một chuỗi các chữ cái để con trỏ tìm thấy mã. Tôi cho rằng bảng chữ cái không nên xuất hiện trước đây và sẽ không gây ra sự cố với Sự cố. Đây cũng là lúc tôi nhận ra mình chưa thử nghiệm Sự cố. Nhờ @ ai523, tôi phát hiện ra mình chỉ cần thêm một dấu chấm than, vì vậy chuỗi etrong bảng chữ cái đã được đổi thành a !.

Điểm từ máy in số nguyên đa năng

Chỉ cần đá và tắt bình luận của @Stewie Griffin về câu hỏi, đây là đoạn trích cho biết mỗi câu trả lời sẽ được ghi như thế nào nếu được nhập vào "Máy in Integer Verstiverse".


1
OK, có vẻ như điều này chỉ gây ra một chút vấn đề với Sự cố; chương trình ngoài trung tâm do hiện tại có chính xác ba dấu chấm than, nhưng điều này có thể dễ dàng được sửa bằng cách thay đổi ký tự điền thành dấu chấm than thứ tư. Tôi đã thay đổi etrong bảng chữ cái bạn thêm vào dấu chấm than; điều đó dường như làm việc

1
Đẹp! Tôi đã bí mật chờ đợi mê cung, rất tốt cho bạn. Trên một lưu ý riêng, phần tốt nhất của mã cho đến nay (đối với tôi) là thông báo "PLEASEGIVEUPPLEASE", nói với bạn rằng hãy ngừng thử. ;)
MildlyMilquetoast

17

41. brainf *** , 916 byte

#  4"16" 3//v\(@#/;\D"14"<;n4
#/*`3 afaaZ">;[77*,68*,@;'1,'1,q)(22)S#   ␉␉␉␉ (
#yy␉;36!@
#`<` ␉
#=␉x
#<]+<[.>-]>[
#␉<
###xR+++++[D>+++++++L+++<-][<<<]>+.---.>][
#px%>~~~+␉+~*ttt*.x
#D>xU/-<+++L)
#R+.----.R␉>]|
#[#yy#yy0l0mx01k1k0l0ix0jx0h0h1d111P0eU0bx0b0o1d0b0e0e00x1d0i0fx0g0n0n11x0o0n0cx0c0o0f0c0gx0g0f0h0j0j0i0001k10mx0m0l11111100(^_)
#|␉
print((eval("1\x2f2")and(9)or(13   ) )-(0and 4)^1<<(65)>>(62))or'(\{(\{})(\{}[()])}\{}\{}\{})'#46(8+9+9+9+9+=!)#1111|=/=1/24=x=9[<$+@+-@@@@=>+<@@@=>+<?#>+.--.]/
__DATA__=1#//
#.\."12"␉*
###; console.log  39
""""#//
=begin␉//
#*/
#define␉z  sizeof 'c'-1?"38":"37"
#include<stdio.h>
int main()  /*/
#()`#`\'*/{puts(z);}/*'``
$'main'␉//
#-3o4o#$$$
<>"3"O.<␉>//
#
=end   #//
"""#"#//
#0]#echo 21#/(\[FAC,1<-#2FAC,1SUB#1<-#52FAC,1SUB#2<-#32FACLEGEREEX,1PLEASEGIVEUPPLEASE)  a>>>
#>27.say# /7Jn~15o|  
#8␛dggi2␛`␉|1|6$//''25  =#print(17) ###^_^_LEintnd"3"z!]/}23!@/*///Z222999"26

là một tab theo nghĩa đen, một ký tự ESC theo nghĩa đen; Stack Exchange sẽ quản lý chương trình khác. Tôi khuyên bạn nên sao chép chương trình từ hộp "đầu vào" của liên kết TIO bên dưới, nếu bạn muốn làm việc với nó.

Hãy thử trực tuyến!

Điểm VIP (Máy in số nguyên đa năng): 0,01329

Chạy xuống

Chương trình này in 41 in brainf ***, 40 in Minimal-2D, 39 in CoffeeScript, 38 in C, 37 in C ++, 36 in Labyrinth, 35 in INTERCAL, 34 in Rail, 33 in Incident, 32 in Whirl, 31 in Mô-đun SNUSP, 30 ở khoảng trắng, 29 ở Kích hoạt, 28 ở Brain-Flak, 27 ở Perl 6, 26 ở 05AB1E, 25 ở Pip, 24 ở Thutu, 23 ở Hexagony, 22 ở Underload,21 ở Nim, 20 ở Prelude, 19 ở Reng, 18 ở Hồng y, 17 ở Julia, 16 ở Pyth, 15 ở Haystack, 14 ở Turtlèd, 13 ở Ruby, 12 ở Fudge, 11 ở Befunge-98, 10 ở Befunge- 93, 9 trong Perl 5, 8 ở Retina, 7 ở Japt, 6 ở SMBF, 5 ở Python 2, 4 ở> <>, 3 ở Minkolang, 2 ở V / Vim và 1 ở Python 3.

xác minh

Hầu hết các ngôn ngữ được kiểm tra bởi trình điều khiển thử nghiệm được hiển thị ở trên. Bạn có thể kiểm tra Reng tại đây và Modular SNUSP tại đây ; họ xuất 19 và 31 tương ứng, theo yêu cầu.

Trình điều khiển thử nghiệm đã được cập nhật để bao gồm Tokenizer, cuối cùng. Tất cả các mã C được lưu trữ dưới dạng đối số theo quan điểm của Bash Script. Tôi cũng đã thay đổi đầu ra để bọc theo chiều ngang với một khoảng trắng ở sau mỗi mã thông báo thay vì xuất ra theo chiều dọc. Đây chỉ là sở thích của tôi, để làm cho nó phù hợp với đầu ra Whitespace. Nhưng bất cứ ai khác có thể thay đổi nó nếu họ cảm thấy nó quá khó hiểu.

Tôi cũng đã thực hiện điều chỉnh Trình điều khiển thử nghiệm để xử lý khoảng cách cột cho char UFT8 của Turtlèd trong danh sách. Sự sai lệch đó đã khiến tôi phát điên! Bản sửa lỗi của Wap là khá hack-ish vì nó chỉ tìm kiếm một è và thay đổi độ rộng cột cho trường hợp đó, nhưng nó đã hoàn thành công việc.

Giải trình

Trước hết, tôi muốn nói rằng đoạn mã số máy in đa năng linh hoạt của @ SnoringFrog tuyệt vời như thế nào từ bài đăng cuối cùng. Tôi đã tính toán câu trả lời trước khi đăng một thời gian và điều này đã truyền cảm hứng cho tôi giữ cho nó nhỏ. Tôi nghĩ rằng cuối cùng chúng ta có thể đánh bại câu trả lời của @ sp3000.

Vì vậy, tôi bắt đầu thực hiện câu trả lời này bằng cách cố gắng đánh bại những gì tôi có thể và tôi đã khá thành công. Tôi thậm chí đã có một câu trả lời bằng một ngôn ngữ khác với tổng số byte nhỏ hơn # 40. Nhưng khi tôi cố gắng chơi gôn Minimal-2D, tôi đã phải học BF để tôi có thể làm việc tốt hơn với các dẫn xuất của nó và trong quá trình tôi đã tìm thấy kỷ lục @ Primo phá vỡ Hello, World! . Tôi đã yêu sự thanh lịch.

Tối thiểu 2D, hóa ra, không đủ hiệu quả để sử dụng kỹ thuật khởi tạo băng được sử dụng bởi @Primo, nhưng tôi cho rằng bây giờ có lẽ nó sẽ quá nặng byte. Chúng tôi chỉ cố gắng in một số nguyên sau khi tất cả. Nhưng @Primo đã gửi cho tôi con đường học cách nhân lên trong BF, thứ mà tôi đã mang đến mã tối thiểu 2D.

Sau tất cả những điều này, tôi đã đọc lại nhận xét của @ SnoringFrog về cách bao gồm BF và nhận ra rằng tôi không chỉ có thể làm điều đó mà còn có thể sử dụng nhiều mã Minimal-2D mà tôi đã đánh vào câu trả lời BF. Vì vậy, tôi đã đào sâu để trả lời với BF, và chúng ta ở đây.

Một điều nữa trước khi tôi đi vào chi tiết. Có một vài thay đổi tôi đã thực hiện vì lý do không chơi gôn. Đầu tiên, tôi đã chuyển phần lớn mã @SnoringFrog được thêm vào ngay bên dưới các ngôn ngữ 2D ở một số hàng trên cùng. Đối với tôi, đây là một động thái chiến lược dài hạn để ngăn chặn các lang 2D đi qua trung tâm của polyglot để ngăn chặn các lỗi trong tương lai nếu có thể. Lượt truy cập byte thấp cho di chuyển này, vì vậy tôi đã thực hiện nó.

Thứ hai, trong các yếu tố lại khác nhau, tôi đã biết rằng Begunges và Minkolang tạo ra một khoảng trống sau các đầu ra số và đây là nguyên nhân của các byte rỗng mà chúng ta đã thấy trong Trình điều khiển thử nghiệm cho các ngôn ngữ này. Tôi đã sửa những lỗi này bằng cách xuất giá trị của ngăn xếp dưới dạng mã ascii (không bao gồm tính năng dấu cách), thay vì trực tiếp giá trị. Cũng có một byte nhỏ cho thay đổi này, nhưng bây giờ đầu ra của Trình điều khiển thử nghiệm rất đồng đều. Làm sao tôi có thể không?

SM / BF

Hãy nhanh chóng đi qua những điều cơ bản. Đây là các lệnh hợp lệ duy nhất cho SMBF và BF:

>   Move the pointer to the right
<   Move the pointer to the left
+   Increment the memory cell under the pointer
-   Decrement the memory cell under the pointer
.   Output the character signified by the cell at the pointer
,   Input a character and store it in the cell at the pointer
[   Jump past the matching ] if the cell under the pointer is 0
]   Jump back to the matching [ if the cell under the pointer is nonzero

Cả hai ngôn ngữ đều có một băng nhớ nơi các giá trị được lưu trữ và thay đổi. Sự khác biệt duy nhất của SMBF là bất kỳ mã nào đang được thực thi cũng được lưu trữ trên băng nhớ ở bên trái của điểm bắt đầu. Như @SnoringFrog đã chỉ ra, việc đưa SMBF và BF tạo ra các kết quả khác nhau để di chuyển con trỏ bộ nhớ sang bên trái của điểm gốc. Trong trình thông dịch BF của Tio, con trỏ bộ nhớ có khả năng di chuyển sang trái của nguồn gốc và sẽ tìm thấy 0 thay vì mã ascii của Polyglot mà SMBF nhìn thấy. Dưới đây là một ví dụ có thể chạy trong cả SMBF và BF để minh họa cho sự khác biệt.

Khi bắt đầu polyglot, Befunges yêu cầu >hàng thứ hai chạy đến khi hoàn thành và Perl6 yêu cầu mọi thứ >phải đi trước a <. Vì vậy, SM / BF bắt đầu bằng <>cách để con trỏ bộ nhớ ở gốc, sau đó nhấn một [ký tự nhảy một số ký tự gây khó chịu cho cả hai ngôn ngữ sang ]hàng thứ 6.

Tiếp theo, chúng tôi tăng ô nhớ gốc cho cả hai ngôn ngữ và di chuyển con trỏ bộ nhớ sang trái bằng +<. (Đối với quy ước hội thoại, chúng ta sẽ gọi ô nhớ gốc là ô 0, các ô ở bên phải của gốc 1, 2, ... Và các ô ở bên trái -1, -2, Khắc). Ô -1 chứa mã asci của ký tự cuối cùng trong polyglot trong SMBF và 0 trong BF, vì vậy khi [gặp tiếp theo , chỉ BF nhảy sang tiếp theo ]trong khi SMBF chuyển vào mã.

Khi SMBF di chuyển ngang, [.>-]nó in 6 được tìm thấy ở cuối polyglot và sau đó di chuyển con trỏ bộ nhớ trở về ô 0, đặt giá trị của nó trở về 0 để thoát khỏi ]. Để xem xét, các băng ở pint này là: các tế bào âm của SMBF giữ đa âm và 0 và các ô dương giữ 0. Các tế bào âm tính và dương tính của BF giữ bằng 0 trong khi tế bào gốc của nó giữ 1.

Tiếp theo, >di chuyển SMBF sang ô 1 và BF trở lại ô 0 cho phép BF nhập khối mã riêng: [<+++++[>++++++++++<-][<<<]>+.---.>](Tôi đã xóa các ký tự không phải BF từ đây). Ở đây, chúng tôi quay trở lại ô -1 và khởi tạo biến điều khiển vòng lặp của chúng tôi (ô -1) thành giá trị 5. Sau đó, chúng tôi nhập vào vòng lặp nơi chúng tôi thêm 10 vào ô 0 và giảm ô -1 năm lần trước khi thoát khỏi vòng lặp chúng ta sẽ chỉ vào ô -1 với giá trị 0.

Tiếp theo chúng ta bắt gặp [<<<]trong khi chỉ vào số 0, vì vậy BF không vượt qua điều này. Mục đích ở đây là để cân bằng một số lượng >với trước đó <để Perl6 không bị lỗi.

Tại thời điểm này, ô 0 có giá trị 51. Giá trị ascii của 4 là 52, vì vậy chúng tôi di chuyển con trỏ đến ô 0 thêm 1, sau đó in giá trị. Và cuối cùng, chúng ta giảm ô 0 trở lại ký tự ascii 1 và in lại trước khi đặt con trỏ bộ nhớ thành ô 1 (giá trị 0) để thoát qua ].

Cả SMBF và BF đều đạt điểm cuối cùng [trên dòng 8 tiếp theo trong khi cả hai đều nằm trên giá trị 0. Vì vậy, cả hai đều nhảy qua mã Minimal-2D còn lại cho đến khi ]gặp phải trên dòng 11. Nhưng điều này chỉ tồn tại trong thời gian ngắn bởi vì dòng 12 bắt đầu bằng một [ngôn ngữ khác đưa cả hai ngôn ngữ đến gần hết phần đa âm mà không gặp phải hướng dẫn nào nữa.

Máy tái cấu trúc

Tối thiểu 2D

Viết lại của Minimal-2D chủ yếu là để lưu một số byte theo cách tương tự như thủ thuật nhân của BF. Tuy nhiên, Minimal-2D không có các ký tự []điều khiển vòng lặp. Thay vào đó, nó có các lệnh sau:

/   Skips next instruction if the data pointer is set to 0.
U   Tells the program to switch to the up direction of processing instructions.
D   Tells the program to switch to the down direction of processing instructions.
L   Tells the program to switch to the left direction of processing instructions.
R   Tells the program to switch to the right direction of processing instructions.

Chúng có thể được sử dụng để tạo ra cấu trúc logic tương tự, mặc dù trong trang viên 2D, giống như của BF. Ví dụ, BF ++++++[>++++++<-]>.tương đương với điều này trong Minimal-2D.

Đây là một phiên bản đơn giản của mã Minimal-2D trong polyglot, với tất cả các mã ngoại lai được loại bỏ và tất cả các ký tự giữ chỗ được thay thế bằng #.

###################D
###R+++++[D>+++++++L
###>
D>#U/-<+++L)
R+.----.R

Các Dphù hợp 1 gửi con trỏ chỉ dẫn xuống Lở dòng 8 của nhiều thứ tiếng mà gửi con trỏ sang trái. Ở đây chúng ta đặt biến điều khiển vòng lặp (ô 0) thành 7, di chuyển con trỏ bộ nhớ đến ô 1 và nhập một vòng lặp. Trong vòng lặp, chúng ta thêm 3 vào ô 1, giảm ô 0 rồi kiểm tra xem giá trị của ô 0 có bằng không chưa. Nếu không, chúng ta thêm 8 vào ô 1 sau đó giảm dần và kiểm tra lại. Kết quả của vòng lặp này là giá trị của ô 1 được đặt thành 51 ở cuối vòng lặp (6 * 8 + 3).

Chúng ta thoát khỏi vòng lặp bằng cách nhảy U, di chuyển con trỏ bộ nhớ đến ô 1 và đi xuống bên phải trên dòng 11 của polyglot. Và cuối cùng, chúng tôi tăng đến giá trị ascii cho 4 rồi giảm xuống giá trị ascii cho 0 trước khi chạy sang bên phải để kết thúc chương trình.

Võng mạc

Retina có rất nhiều yêu cầu khó thực hiện đối với tất cả các dẫn xuất BF. Nó không giống như liên tiếp +hoặc không khớp ()hoặc []. Nhưng đây thực sự chỉ là những yêu cầu cho mọi dòng khác, vì vậy rất nhiều công việc cho BF, SMBF và Minimal-2D xoay quanh việc đưa phần lớn mã vào các dòng được đánh số chẵn.

Một byte được cam kết duy nhất cho Retina mặc dù là |ở cuối dòng 11. Để trích dẫn @ ais523, hầu hết các biểu thức kết thúc bằng | sẽ phù hợp với bất cứ điều gì. Không có cái này, Retina trả về 0. Tại sao cái này sửa nó, tôi không biết. Tôi đã không phải đào sâu vào Retina quá nhiều, có lẽ vì tôi đã tránh được hàng dài. Nhưng giống như Prelude, tôi thấy tôi không cần phải hiểu nó nhiều như tôi cần hiểu cách gỡ lỗi, trong trường hợp này chủ yếu bao gồm xóa các dòng (trong bội số 2) cho đến khi tôi tìm thấy dòng Điều đó khiến nó bị phá vỡ. Tôi đoán cách khắc phục này dựa trên nhận xét của @ ais523 và đã được khen thưởng. Tôi đoán là tôi quá tuyệt vời cho trường học.

Đức hồng y

Tôi tình cờ thích vị trí Tối thiểu 2D của @ SnoringFrog so với mã của Hồng y. Đây là một vị trí tốt khi xem xét Cardinal không làm phiền Retina và dường như cho phép một số đan xen với Minimal-2D. Vì vậy, khi tôi bắt đầu ghép Minimal-2D lên đất 2D, tôi đã mang theo Hồng y đi cùng. Có một vài thay đổi mỹ phẩm cho Hồng y mặc dù. Đầu tiên, tôi đã ném >gần đầu câu lệnh #p x%>~~~+ +~*ttt*.xcho Minimal-2D để thay đổi các con trỏ bộ nhớ trong vòng lặp của nó / Thứ hai, tôi chuyển mọi thứ một ký tự sang bên phải để tạo cho phòng Minimal-2D để thoát khỏi vòng lặp một cách duyên dáng. Các psting này là cho đệm nhân vật này.

Befunge / 98

Các Befunges thực sự là nơi tôi bắt đầu cố gắng chơi golf xuống polyglot, vì bộ tái cấu trúc C ++ đã thay đổi tất cả các mã lang 2D khác, ngoại trừ mã này. Khi cố gắng học WTF đã diễn ra trong mã này, tôi đã tìm thấy điều này trong tài liệu Begunge:

Các .lệnh sẽ bật một giá trị ra khỏi ngăn xếp và đầu ra nó như là một số nguyên thập phân, theo sau là một không gian , một chút như Forth. ,sẽ bật một giá trị, diễn giải nó thành giá trị ASCII của một ký tự và xuất ra ký tự đó ( không được theo sau bởi khoảng trắng. )

Không hiểu! Chúng ta có thể dọn sạch các byte rỗng trên đầu ra. Sau này, tất cả chỉ là vấn đề tìm ra cách nhập các giá trị asci lớn hơn và tách biệt mã. Befunge-98 có một mã nhảy ;bảo nó bỏ qua phần [77*,68*,@trong ;[77*,68*,@;'1,'1,q, điều này cho chúng ta sự phân biệt.

Befunge-98 cũng có lệnh ( ') để lấy mã ascii của ký tự tiếp theo. Vì vậy, '1,lấy mã asci mã cho ký tự 1, đặt nó vào ngăn xếp và sau đó in ký tự ascii cho giá trị hàng đầu trên ngăn xếp với ,. Chỉ cần làm điều này hai lần để in 11 và thả một qđể thoát ra một cách duyên dáng.

Befunge thích hợp là một chút ít thuận tiện, nhưng chỉ. Ở đây chúng ta phải thực hiện một phép tính để đặt mã mong muốn vào ngăn xếp. May mắn thay, mã của chúng tôi đã dễ dàng được nhân với 7 * 7 và 6 * 8 trước cùng một lệnh đầu ra ,. Sau đó, chúng tôi rời khỏi Befunge @trước khi mã của anh trai nó làm ô nhiễm đầu ra.

Chồn

Sau khi tìm ra cách khắc phục cho các khoảng trống ở Befunge, tôi đã nảy ra ý tưởng tìm kiếm một bản sửa lỗi của Minkolang và tài liệu của Minkolang nói rằng lệnh đầu ra đã được sử dụng cho đến khi điểm này hoạt động giống như Trình thông dịch Befunge. Otình cờ được ghi nhận là một lệnh đầu ra khác, không được mô tả là chia sẻ tính năng Bắt đầu này, vì vậy tôi chỉ chụp trong bóng tối và thử xuất chuỗi "3". Chiến thắng hoàn mỹ.

> <>

Một trong những điều đầu tiên tôi nhìn vào khi di chuyển mã Minimal-2D là xác minh rằng tôi có thể di chuyển> <> cùng với nó. Nếu tôi định đối phó với sự chuyển đổi đa hình 2D, tôi sẽ đối phó với mọi sự vi phạm. Về cơ bản, tôi đã may mắn tìm được giải pháp đặt ;n4 ở cuối dòng 1 và di chuyển \Dxa hơn về dòng 1. BTW, tôi không biết rằng> <> có thể được chuyển xuống trước câu trả lời 40 vì nó được chứa rất tốt . Tôi muốn nghĩ rằng điều này có thể được sử dụng sau này để phân kỳ> <> từ một ngôn ngữ tương tự khác.

Perl6

Tôi đã nói về một số <>vấn đề cân bằng của Perl6 ở nơi khác trong câu trả lời này, vì vậy tôi sẽ không đề cập đến nó nữa. Nhưng tôi muốn chỉ ra rằng tôi đã chuyển #>27.say#sang dòng thứ hai đến dòng cuối cùng. Điều này không có một mục đích chức năng trong câu trả lời này. Tôi thực sự đã thực hiện động thái này để đáp ứng một câu trả lời khác mà cuối cùng tôi không sử dụng vòng này. Tôi quyết định bỏ nó đi vì tôi dự định đăng câu trả lời đó vào cơ hội tiếp theo của mình và tôi không muốn làm phiền và làm lại nó.

Sửa lỗi

05as1e

05as1e chắc chắn không thích mã Begunge mới nhiều như phiên bản cũ. Tôi cho rằng đó ,là vì đó là nhân vật cách mạng duy nhất. Trong mọi trường hợp, tôi phải di chuyển "trở lại dòng hai để ẩn các lệnh tấn công và tôi biết rằng "phải đi trước đường dẫn mã Befunge vì "cả hai ngôn ngữ đều có. (Tôi chỉ có thể tạo ra các thuật ngữ như yes-op phải không?) Tính 2 chiều của Dòng 2 khá cứng nhắc, nhưng tôi đã có thể thay thế <đường dẫn mã trước của Begunge bằng ". Các <tuy nhiên là một yêu cầu của Perl6. (Nó phải có <trước tất cả >.) Tôi đã có thể thả <dòng thứ nhất tại một địa điểm được phân chia theo bản năng và biết trước giải quyết bất đồng của 05ab1e và Perl6.

Vòng xoáy

Các thay đổi Befunge trên dòng 2 đã thêm một phần bổ sung 1cho polyglot trước dòng Incident / Whirl. Điều này thêm 1khiến Whirl bắt đầu chỉ vào các hướng dẫn sai trên bánh xe. Lần đầu tiên 1trong chỉ thị tiền xử lý của C / C ++ chỉ là một tham chiếu số dòng trong mã và điều này có thể dễ dàng giống như bất kỳ số dòng nào khác, vì vậy tôi tùy ý thay đổi điều này 4để đáp ứng Whirl.

Biến cố

Chuỗi phát âm ở cuối polyglot được biết đến nhiều vào thời điểm này, vì vậy tôi sẽ không đi sâu vào nó. Tôi đã xóa khỏi chuỗi những gì tôi có thể và thêm các mã thông báo mới được yêu cầu. Có 2 nhân vật không nói trong chuỗi này mặc dù tôi nên chỉ ra. Đầu tiên, thứ hai Rtrong #R+.----.R >]|là cần thiết ở đây vì đó là một điểm khởi đầu Fusion, và nó đã được an toàn hơn trên dòng này vì đã có được một điểm heading Fusion bắt đầu theo cùng một hướng. Thứ hai, xtrong #= xlà để loại bỏ một mã thông báo liên quan đến một ␉␊#mẫu, đã trở nên phổ biến hơn.

Khác

Hexagony, Whitespace và Prelude đều có những điều chỉnh nhỏ thông thường, nhưng không có gì đặc biệt đáng nói.

Suy nghĩ cuối cùng

Đó là tất cả những gì tôi có cho câu trả lời này. Đối với những người tìm kiếm một điểm khởi đầu cho câu trả lời tiếp theo, tôi đề nghị điều ác. Có vẻ như có thể thực hiện được, mặc dù tôi đã không xem xét nó quá kỹ, nhưng tôi nghi ngờ rằng nó sẽ không quá khó để tích hợp. Tôi biết nó có một lệnh nhảy sẽ giúp bỏ qua phần lớn polyglot. Chúc may mắn.


Thất bại trong sự cố (nó in 3333sau đó chờ đầu vào), nhưng có thể dễ dàng sửa chữa. Vấn đề là bạn đã đặt một mã thông báo ( -]) sau khi các ^-dấu hiệu mà trước đây được sử dụng để nhảy đến phần cuối của chương trình. Hai cách sử dụng -]khác là liên tiếp, do đó tạo thành một mẫu hình xx góc xx, đó là một bước nhảy lùi. Tuy nhiên, việc di chuyển kéo dài -]sớm hơn một chút (hoặc ^_sa một chút hoặc cả hai) có vẻ khá dễ dàng.

@ ais523 Cảm ơn. Đây là những gì tôi nhận được để chơi golf trong khi viết. Luôn nhớ kiểm tra những đứa trẻ sự cố. May mắn thay, tôi đã có thể sửa lỗi này bằng phép trừ, vì vậy tôi nghĩ tổng thể thắng.
Cơ hội

1
Nếu bạn chạy V bằng -v(cho verbose), bạn có thể thay thế một charater thoát theo nghĩa đen <esc>, điều này có thể giúp làm việc với mã trong tương lai dễ dàng hơn một chút. (Tôi nghĩ)
Pavel

Ồ Cảm ơn @ ais523 vì tiền thưởng. Thật là một cách tuyệt vời để bắt đầu sáng thứ Hai!
Cơ hội

Befunge-98 cũ hơn Befunge-93?
Máy

17

183. Hình ảnh khởi động Intel 8080 (ZEMU), 9870 byte

Hãy thử trực tuyến!

Giải trình

Nhờ Potato44 cho ý tưởng thêm mã máy, thật thú vị khi thực hiện câu trả lời này.

Tôi đã không làm tệp COM CP / M vì nó giới hạn kích thước của polyglot ở khoảng 60KB mà tôi muốn tránh. Hình ảnh khởi động hóa ra thậm chí còn dễ thực hiện hơn COM vì ZEMU tải khu vực khởi động từ khu vực thứ 6 theo mặc định (các khu vực logic 128 dựa trên 1 byte), do đó không cần phải thực hiện bắt đầu polyglot. Mã khởi động phải ở offset 0x280 ((6-1) * 128) trong polyglot.

Tôi sử dụng trình giả lập ZEMU được liên kết từ trang này . Để chạy polyglot trong ZEMU:

  • Đĩa> A: chọn tệp polyglot
  • Tùy chọn> Tập lệnh I8080
  • Nhấn nút Khởi động

Chức năng in một char sang console ( cns$ot) đã được sao chép từ BIOS22Dv221.ASM từ bản phân phối ZEMU. Tôi đã thực hiện hai thay đổi: ký tự không bị che khuất thành 7 bit ASCII vì chúng tôi kiểm soát các tham số và jrz cns$otđược thay thế bằng jz cns$otjrz(bước nhảy tương đối nếu không) là lệnh Zilog Z80 không có trong Intel 8080.

Chương trình ban đầu ( cú pháp Intel , trình biên dịch được liên kết từ đây ):

    org 3120h    ; chosen so that cns$ot == 0x3131, easier to generate
                 ; this program will be generated at this offset
                 ; to run it directly specify org 0100h

    mvi c,31h    ; '1'
    call cns$ot
    mvi c,38h    ; '8'
    call cns$ot
    db 38h       ; for answer 188, NOP in I8080
    mvi c,33h    ; '3'
    call cns$ot
    hlt          ; halt processor

;;;;;;;;; copied from BIOS22Dv221.ASM
cno$sp equ 7dh
cno$sb equ 01h
cno$si equ 00h
cno$dp equ 7ch

; print char to console, receives char in c register
cns$ot:
    in cno$sp    ; in status
    xri cno$si   ; adjust polarity
    ani cno$sb   ; mask status bit
    jz cns$ot    ; repeat until ready
    mov a,c      ; get character in a
    out cno$dp   ; out character
    ret

Chương trình này chứa các ký tự không thể được sử dụng trực tiếp trong polyglot. Hầu hết các ký tự kiểm soát ASCII (mã <0x20) đều bị cấm trong Simula, các ký tự không phải ASCII (mã> = 0x80) không thể xuất hiện một mình vì tệp phải là UTF-8 hợp lệ. Vì vậy, chương trình trên được tạo bởi một chương trình khác là UTF-8 hợp lệ.

Chương trình sau đây tạo mã cần thiết và nhảy vào nó. ld (hl),akhông thể được sử dụng vì Grass ( 'w'==0x77). sub h(0x94) và xor a(0xAF) là các byte tiếp tục UTF-8, chúng phải được thêm vào bằng byte dẫn UTF-8. Hướng dẫn ret nc(= 0xD0, trả về nếu không mang theo) được sử dụng làm byte dẫn UTF-8. Để làm cho nó không làm gì, nó đi trước với scfhướng dẫn (đặt cờ mang). Cũng tránh ','(0x2C) và '.'(0x2E) cho DOBELA. org 0100hlệnh không được sử dụng vì trình biên dịch được sử dụng không hiểu nó (org được đặt trong GUI). Chương trình này là vị trí độc lập nào. Tôi thích ghi nhớ Zilog hơn, vì vậy tôi đã sử dụng chúng cho chương trình dài hơn.

Cú pháp Zilog , trình biên dịch được liên kết từ đây :

  ; generate: 0E 31 CD 31 31 0E 38 CD 31 31 38 0E 33 CD 31 31 76 DB 7D EE 00 E6 01 CA 31 31 79 D3 7C C9

  ld hl,3120h

  ld a,3Fh
  scf       ; set carry flag so that ret nc does nothing
  ret nc    ; utf8 lead byte for next insn
  sub h     ; a -= h; a = 0Eh;  utf8 cont byte (opcode 0x94)
  ld c,a

  ld (hl),c ; 0Eh    ; not using ld (hl),a because it is 'w'
  inc hl

  ld (hl),h ; 31h
  inc hl

  ld a,32h
  cpl       ; a = ~a; a = 0xCD
  ld d,a
  ld (hl),d ; CDh
  inc hl

  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),c ; 0Eh
  inc hl
  ld (hl),38h ; 38h
  inc hl

  ld (hl),d ; CDh
  inc hl
  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),38h ; 38h
  inc hl

  ld (hl),c ; 0Eh
  inc hl
  ld (hl),33h ; 33h
  inc hl

  ld (hl),d ; CDh
  inc hl
  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),76h ; 76h
  inc hl

  ld a,23h  ; not using ld a,24h because it has '$' (breaks SNUSP)
  inc a
  cpl       ; a = ~a; a = 0xDB
  ld d,a
  ld (hl),d ; DBh
  inc hl

  ld (hl),7Dh ; 7Dh
  inc hl

  ld a,c    ; a = 0Eh
  cpl       ; a = F1h
  dec a
  dec a
  dec a     ; a = EEh
  ld d,a
  ld (hl),d ; EEh
  inc hl

  scf
  ret nc
  xor a     ; a ^= a; a = 0; utf8 cont byte
  ld c,a
  ld (hl),c ; 00h
  inc hl

  ld a,4Ah
  scf
  ret nc
  sub h     ; a -= h; a = 0x19;  utf8 cont byte
  cpl       ; a = ~a; a = 0xE6
  ld d,a
  ld (hl),d ; E6h
  inc hl

  ld a,c
  inc a
  ld d,a
  ld (hl),d ; 01h
  inc hl

  ld a,35h
  cpl       ; a = 0xCA
  ld d,a
  ld (hl),d ; CAh
  inc hl
  ld (hl),h ; 31h
  inc hl
  ld (hl),h ; 31h
  inc hl

  ld (hl),79h ; 79h
  inc hl

  ld a,2Dh  ; not using ld a,2Ch because it has ','
  dec a
  cpl       ; a = 0xD3
  ld d,a
  ld (hl),d ; D3h
  inc hl

  ld (hl),7Ch ; 7Ch
  inc hl

  ld a,36h
  cpl       ; a = 0xC9
  ld d,a
  ld (hl),d ; C9h

  ld sp,3232h  ; set up stack for generated program

  ld hl,3120h  ; not using ld l,20h because it has '.'
  jp (hl)      ; go to generated program 
               ; confusing mnemonic - actually it is jp hl, ie. PC = HL
               ; opcode 0xE9, utf8 lead byte (0xE9 = 0b11101001), must be followed by 2 cont bytes
  db 80h,80h

Chương trình này được tập hợp thành:

! 1>?7ДOq#t#>2/Wr#t#t#q#68#r#t#t#68#q#63#r#t#t#6v#>#</Wr#6}#y/===Wr#7ЯOq#>J7Д/Wr#y<Wr#>5/Wr#t#t#6y#>-=/Wr#6|#>6/Wr122! 1退

Nó phải ở offset 0x280 trong polyglot (xem dòng 2). Kiểm tra trừu tượng trong trình điều khiển kiểm tra kiểm tra rằng.

Tái cấu trúc

Vỏ ốc

Di chuyển vỏ trở lại dòng dài nhất. Tôi thích cách bố trí này hơn vì parens không được liên kết với các lang khác. Đã di chuyển Moorhenses và Flaks trước khi đạn pháo, vì vậy chúng không bị vỡ khi thay đổi vỏ. Dòng dài nhất có bố cục này bây giờ:

Grass  Moorhenses  Flaks  Shells  Rubies/Pythons/Perl5  PicoLisp  Prelude  Klein001

Mã shell mới:

a=$(printf \\x00)
b=$(echo -n $a | wc -c)
case $b[1] in 1*)echo 54;; 4*)echo 78;; 8*)echo 166;; *1*)echo 50;; *)echo 58;; esac
exit

Mã vỏ cũ:

a=$(printf \\x00)
b=${#a}
case "{"$ar[1]"}"${b} in *1)echo 54;; *4)echo $((19629227668178112600/ 118248359446856100));; *1*)echo 50;; *)echo 58;; esac
exit

Độ dài $ađược tính bằng $(echo -n $a | wc -c)bây giờ (từ đây ). Ban đầu tôi đã sử dụng nó để loại bỏ #, nhưng bây giờ nó được sử dụng vì mã ngắn hơn. Vỏ có thể chứa #vì Flaks là trước vỏ.

Yash (166) sử dụng lệnh echo tích hợp không hỗ trợ các tùy chọn theo mặc định, do đó "-n" và linefeed cuối cùng là một phần của đầu ra, cung cấp thêm 4 byte. Khi không được đặt ECHO_STYLEmặc định thành SYSV( -ntùy chọn không được chấp nhận).

Liên kết TIO này kiểm tra mã trong tất cả các shell.

Bổ sung (((((trước khi shell sửa chữa Underload và Retina. Thêm một cặp parens được thêm vào để ẩn 58khỏi Prelude (đóng với #)sau exit). {trước đây ((((((là dành cho Japt, không có nó Japt bị treo.

Flak

Do việc di chuyển mã khởi động Flaks có thể được đơn giản hóa - chỉ ([])còn lại:

     line 21      (Grass(([5]{})))    scripting langs                  clear stack     Flaks main code                                                                                      begin skip code      the rest of polyglot   end skip code   print(85)
old: []{}[][][]   ((([]{})))          ((()()<<()>>)((()([])))<<()>>)   {}{}{}{}{}{}{}  ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>)   (<><()>){({}[()])}{           ...           }{}<>              ()
new: []{}[][][]     ([]  )                                                             ({}<(((((()()())){}{})){}{})>)(({})){}{(<(<()>)({})({}<{}>({}){})>){({}[()])}}({}){}({}()<()()()>)   (<><()>){({}[()])}{           ...           }{}<>              ()

Liên kết TIO này kiểm tra mã trong tất cả các Flaks.

Phân hạch & Hồng y

Phân hạch đã được chuyển vào LNUSP : R"12"R _*. Con trỏ thứ hai được sử dụng để chấm dứt Phân hạch càng sớm càng tốt - ở bước thứ 3, xem câu trả lời 54 để biết thêm thông tin.

Hồng y đã được chuyển vào LNUSP : @ %"18". Như trong Phân hạch, con trỏ thứ hai được sử dụng để chấm dứt Hồng y càng sớm càng tốt - ở bước thứ 3.

MarioLANG

Sử dụng ####...thay vì ====...như một nền tảng:

nhập mô tả hình ảnh ở đây

Tối thiểu 2D

Polyglot với MarioLANG:

nhập mô tả hình ảnh ở đây

Wierd & 1L_a

Wierd: sử dụng không gian ở dòng 10 cột 79 để phản ánh IP.
1L_a, Wierd: khoảng trắng ở dòng 9 cột 79 rất quan trọng.

nhập mô tả hình ảnh ở đây

Cơ bản

Mã mới: :1*23!/5x%6E0

:1*23!/5x%6E0
! - skip over / in Klein 201
x - destroy Cardinal pointer before it hits /

pure:
:1*23/5%6E0

faceval:
0 0
1 9
2 18
3 27
4 36
5 45

program:
:1   mem = 9
*23  mem *= 18; mem *= 27
/5   mem /= 45
%6   print mem
E0   exit

9*18*27/45 == 97 (integer division)

6 in %6 is used to print mem because 0-5 are used to print faceval (eg. %3 prints 27)
0 in E0 is not an exit code, it is present just to trigger E instruction

Klein 201/100

Mã mới: !|*****[[[828+*+@+*99]]]*****|!

Sau khi tất cả các ngăn xếp nhân chứa một số 0 duy nhất bởi vì xuất hiện từ ngăn xếp trống sẽ cho số không. Số không này được thêm vào số chính với +bên cạnh @. Trước đây nó đã bị loại bỏ ?, xem câu trả lời của Klein 001 .

Cửa hoạt động như thế nào ở Klein:

nhập mô tả hình ảnh ở đây

Vòng xoáy

Whirl về cơ bản là giống nhau, thay đổi duy nhất là mã chính giả định rằng hoạt động hiện tại là ops.one (2), không phải ops.load (4).

Whirl có hiệu quả có thể được coi là có 3 hoạt động:

  • 1 xoay một bước
  • 0 chuyển hướng quay
  • 00 thực hiện lệnh hiện tại và chuyển đổi vòng

Các hoạt động kết hợp để đơn giản hóa lý luận về chương trình:

  • 0000 Nếu op hiện tại của vòng không hoạt động là noop thì chỉ cần thực hiện op hiện tại của vòng hoạt động mà không có bất kỳ tác dụng phụ nào
  • 11..11 xoay n bước
  • 011..11 chuyển hướng và xoay n bước

0000thực hiện lệnh hiện tại của vòng hoạt động, nhưng cũng thực hiện lệnh hiện tại của vòng không hoạt động như một tác dụng phụ. Nếu hướng dẫn hiện tại về vòng không hoạt động là vô hại thì chúng ta chỉ có thể tập trung vào các hoạt động trên vòng hoạt động mà không nghĩ điều gì đang xảy ra với vòng không hoạt động. Điều này đặc biệt hữu ích với chương trình này vì nó có sự phân tách rõ ràng: đầu tiên số 32 được tạo chỉ bằng vòng toán học và sau đó chúng tôi chuyển sang vòng ops và thực hiện 2 lệnh ở đó (in và thoát).

Đầu tiên tôi muốn có hoạt động hiện tại trên ops ring là noop khi mã chính bắt đầu thực thi. Nó có 2 ưu điểm: 1) Mã Whirl chính có thể được thực thi độc lập và 2) chúng ta hoàn toàn có thể quên đi vòng op khi tạo số 32 bằng vòng toán học. Tuy nhiên, nó làm cho mã dài hơn so với trước đây, vì vậy thay vào đó, mã chính giả định rằng hoạt động hiện tại là ops.one (2). Điều đó có nghĩa là ops.value được đặt thành 1 là tác dụng phụ của các phép toán, sau đó được sử dụng để in. Mã cũ đạt được hiệu quả tương tự với lệnh ops.load, nhưng sử dụng ops.one thể hiện rõ hơn ý định - để đặt ops.value thành nonzero.

at this point current ring is ops, dir = clockwise, cur op = ops.one
00    switch to math ring
011   rotate to math.not
0000  math.not (math.val = 1)
01111 rotate to math.store
0000  math.store (mem[0] = 1)
1     rotate to math.add
0000  math.add (math.val = 2)
01    rotate to math.store
0000  math.store (mem[0] = 2)
011   rotate to math.mult
0000  math.mult (math.val = 4)
0000  math.mult (math.val = 8)
0000  math.mult (math.val = 16)
0000  math.mult (math.val = 32)
011   rotate to math.store
00    math.store (mem[0] = 32), switch to ops ring
up to this point the program is the same as before

01111 rotate to ops.intio
0000  ops.intio - print mem[0] as number
0111  rotate to ops.exit
00    ops.exit

Mã mới ngắn hơn vì mã cũ có một vài công tắc chuyển hướng dự phòng trong phần thứ hai của chương trình, không phải vì giả định mới.

old: (1111) 00011000001111000010000010000011000000000000000001100 01111110000011100
new: (11)   00011000001111000010000010000011000000000000000001100   011110000011100

Cách giữ Whirl đúng khi thay đổi thứ gì đó trước dòng Sự cố / Whirl:

  • đảm bảo có số chẵn 0trước mã Whirl chính
  • đảm bảo không có hai 0s liên tiếp
  • thêm / xóa đủ 1s cho đến khi Whirl hoạt động trở lại; thêm n 1s tương đương với loại bỏ 12 1giây và ngược lại

Tôi vô tình phá vỡ quy tắc đầu tiên khi thêm Ropy. Khi có số lẻ 0mã chính s bắt đầu thực thi với hướng ops ring không chính xác sẽ phá vỡ lệnh thoát. Vì vậy, bây giờ có 0dòng 3 bù 0vào dòng 1.

Khác

CoffeeScript : console.log a&&39||180(từ đây )

INTERCAL : chuyển đến dòng 37
Brainfuck , Agony : chuyển sang các dẫn xuất brainfuck khác trên dòng 10

xEec : chuyển vào 1L_a ( h#115# o#)

CSL : được chuyển sang dòng 80
Trefunge : được chuyển sang dòng 120
Gaot ++ , Stones : được đặt trên các dòng riêng biệt


4
Thật tuyệt, đó là rất nhiều byte để chơi golf.
Khoai tây44

16

16. Pyth (159 byte)

#v\;2^0\;7||"<+0+0+0+<*!2'!1'L#'1r'4;n4
#v0#_q@
#>3N.15o|1
#|\w*
#8  ^<1b0 <
#|
#M`
print ((0 and'13')or(None and 9 or 1/2 and 1 or 5))
#"07|5//00;16 "jd5ki2

Lưu ý: có một ESCbyte ( 0x1B) sau odòng thứ ba và sau jdòng cuối cùng.

Đây là một kinh nghiệm khá thú vị. Japt và Pyth đều là ngôn ngữ golf, nhưng Japt là infix và Pyth là tiền tố, và Pyth tự động yêu cầu nhập và thất bại nếu thiếu đối số.

Trước câu trả lời của Haystack, tôi đã có một giải pháp gần như hoạt động bằng cách sử dụng #, nó nhận được mã char trong Japt và loop-Until-error trong Pyth. Pyth tình cờ rất hữu ích trong các polyglots, vì char bình luận chung #về cơ bản hoạt động như một bộ giảm thanh lỗi.

Khi tôi về nhà, tôi đã tìm được một đoạn mã hoạt động trong cả hai cách sử dụng //, nó hoạt động như một nhận xét trong Japt và hai bộ phận trong Pyth. Sau đó, đó chỉ là vấn đề khiến Befunges định tuyến chính xác.

Điều này rất khó có thể là tối ưu, nhưng bây giờ nó đủ tốt. Tôi đã thử kiểm tra tất cả, nhưng tôi đánh giá cao ai đó kiểm tra xem kết quả đầu ra có khớp không.

In 1 trong Python 3 , 2 in V , 3 in Minkolang , 4 in> <> , 5 in Python 2 , 6 in Brainfuck tự sửa đổi , 7 in Japt , 8 in Retina , 9 in Perl , 10 in Befunge (-93 ) , 11 ở Befunge-98 , 12 ở Phân hạch , 13 ở Ruby , 14 ở Turtléd , 15 ở Haystack , và

16 trong Pyth .

Giải trình

Những gì Pyth thấy ở đây là:

#v\;2^0\;7||"string
multiline
string"07|5//00;16 "string

Điều này dịch sang mã giả sau:

while no errors occur:
    evaluate ";"
    print 2
    print 0 to the power ";"
    print 7
    print "string\nmultiline\nstring" or 0 or 7
    print 5 or 0 divided by 0 divided by (missing)
print 16
do nothing with "string"

Vòng lặp đầu tiên thoát khỏi việc cố gắng đánh giá ;đó không phải là biểu thức hợp lệ. Sau đó Pyth chỉ in 16.


Mở rộng theo cách nào? Tôi vẫn cần thêm 5 byte nữa cho câu trả lời của mình;)
Alfie Goodacre

@Alfieoodacre Bằng cách thêm phần còn lại của chi tiết vào bài đăng. Tôi chỉ muốn duy trì sự tỉnh táo và do đó đã đăng mã của mình trước khi bất cứ ai đánh cắp vị trí của tôi. : D
PurkkaKoodari
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.