Máy in số nguyên đa năng


93

Viết một đoạn mã có thể thực thi được bằng ít nhất ba ngôn ngữ khác nhau. Mã phải xuất số nguyên 1ở ngôn ngữ số một, 2bằng ngôn ngữ số hai, 3bằng ngôn ngữ số ba, v.v.

Quy tắc:

  • Đầu ra phải chỉ là số nguyên, nhưng các dòng mới theo dõi là OK.
  • Mã không thể lấy đầu vào của bất kỳ loại nào
  • Các phiên bản chính khác nhau của cùng một ngôn ngữ được coi là duy nhất. Vì vậy, mã của bạn có thể được thực thi trong Python 2 và Python 3, tuy nhiên Python 2.5 và Python 2.7 không được coi là duy nhất.
  • Bạn có thể sử dụng ngôn ngữ mới nếu và chỉ khi nó có bài viết esolang / wiki, thông dịch viên và tài liệu có sẵn và đã được ít nhất hai người dùng trên PPCG sử dụng trước khi sử dụng nó trong thử thách này. Nó cũng phải tuân thủ 4 quy tắc này .

Điểm của bài nộp của bạn là số byte trong mã của bạn chia cho số ngôn ngữ mà nó có thể chạy theo hình khối. Vì vậy, một giải pháp 54 byte có thể thực hiện được bằng 3 ngôn ngữ sẽ có điểm 2:

54 / 3^3 = 2  

Điểm thấp hơn là tốt hơn.


Bảng xếp hạng


6
@muddyfish Bạn có thể có thể lấy phiên bản nhỏ bên trong mã, mà sau đó sẽ cung cấp cho bạn các giải pháp miễn phí cho tất cả 2.7.1để 2.7.n. (Trên thực tế, sweerpotato làm điều đó với các phiên bản chính.)
Martin Ender

14
Tôi nghĩ có lẽ giải pháp ngắn nhất bằng ngôn ngữ không có ý nghĩa ở đây ...: P
FryAmTheEggman

3
@Mego Tôi cũng vậy, đó là lý do tại sao tôi để lại những bình luận mỉa mai về vấn đề này để người khác tìm hiểu về nó: P
FryAmTheEggman

12
Tôi chỉ muốn chúc mừng bạn về mức độ cân bằng của bạn. Khi các thử thách mã trộn hai đại lượng thành một điểm, số dư gần như luôn luôn tắt để câu trả lời tốt nhất sẽ chỉ tối ưu hóa một trong các điểm mà không cần phải xem xét đến số khác. Trọng số khối của số lượng ngôn ngữ là hoàn hảo ở đây ... trong khi luôn có thể thêm một ngôn ngữ khác, đó luôn là một thách thức rất hay (nhưng có thể làm được) để làm như vậy với số lượng byte có sẵn. :)
Martin Ender

20
Trong thử thách PPCG này, chúng tôi đã hợp tác xây dựng một polyglot. Bây giờ nó có điểm số cao hơn ở thử thách này so với các bài dự thi hàng đầu được gửi cho thử thách này, nhưng sẽ không có ý nghĩa gì khi sao chép một nỗ lực nhóm liên tục được cải thiện, vì vậy tôi chỉ bỏ một đề cập trong các bình luận ở đây.

Câu trả lời:


90

30 ngôn ngữ, 248 byte, 248/30 ^ 3 = 0,009185

#|#?15g,@           kkmNmSaIeoe99+{\#/-;n@0ea
#[9!@>.>.eeaww#-1@*"12" L
#{  
###
#`{
25
print(4^2 +7)/2


"""
Jo is here.
$'main'MoO OOM
 7
>Jo, 30
>X Jo
f::=~27
::=]##}#(prin 29)
print (7/6*24)###;alert 2#-[>+<-----]>-.|#(write(if(= 1/5 .2)26 3))"""

Chỉnh sửa: Beatnik đã bị xóa do thử nghiệm nguyên thủy trong Beatnik có thể không thực hiện được.

Mã này có các tab trong đó (được xáo trộn bởi Stack Exchange) và một dòng mới, vì vậy đây là xxd:

00000000: 237c 233f 3135 672c 4020 2020 0920 2020  #|#?15g,@   .   
00000010: 206b 6b6d 4e6d 5361 4965 6f65 3939 2b7b   kkmNmSaIeoe99+{
00000020: 5c23 2f2d 3b6e 4030 6561 0a23 5b39 2140  \#/-;n@0ea.#[9!@
00000030: 3e2e 3e2e 6565 6177 7723 2d31 402a 2231  >.>.eeaww#-1@*"1
00000040: 3222 094c 0a23 7b20 090a 2323 230a 2360  2".L.#{ ..###.#`
00000050: 7b0a 3235 0a70 7269 6e74 2834 5e32 202b  {.25.print(4^2 +
00000060: 3729 2f32 0a0a 0a22 2222 0a4a 6f20 6973  7)/2...""".Jo is
00000070: 2068 6572 652e 0a24 276d 6169 6e27 4d6f   here..$'main'Mo
00000080: 4f20 4f4f 4d0a 2037 0a3e 4a6f 2c20 3330  O OOM. 7.>Jo, 30
00000090: 0a3e 5820 4a6f 0a66 3a3a 3d7e 3237 0a3a  .>X Jo.f::=~27.:
000000a0: 3a3d 5d23 237d 2328 7072 696e 2032 3929  :=]##}#(prin 29)
000000b0: 0a70 7269 6e74 2028 372f 362a 3234 2923  .print (7/6*24)#
000000c0: 2323 3b61 6c65 7274 2032 232d 5b3e 2b3c  ##;alert 2#-[>+<
000000d0: 2d2d 2d2d 2d5d 3e2d 2e7c 2328 7772 6974  -----]>-.|#(writ
000000e0: 6528 6966 283d 2031 2f35 202e 3229 3236  e(if(= 1/5 .2)26
000000f0: 2033 2929 2222 220a                       3))""".

Ngoài ra, bạn có thể sao chép và dán mã từ "Thử trực tuyến!" liên kết .

Điều này khá tệ khi chơi golf, nhưng tôi muốn thể hiện ý tưởng rằng, một khi bạn có đủ ngôn ngữ, số byte không còn quan trọng nữa. Phải nói rằng có một số ngôn ngữ tôi vẫn có thể dễ dàng thêm (ví dụ Objeck) nhưng hiện tại quá dài để không hữu ích. Tôi đang cạn kiệt ngôn ngữ tốt, vì vậy tôi có thể dừng ở đây bây giờ.

Chạy tất cả các chương trình với </dev/null 2>/dev/null(tức là đầu vào trống, STDERR đã thay thế).

Lời giải thích khá dài, vì vậy đây là một bản tóm tắt điều hành:

No.  Lang.              Non-esolang?     2D esolang?      BF/BF-deriv?
--------------------------------------------------------------------------
1    COW                                                       ✓
2    CoffeeScript            ✓
3    Common Lisp             ✓
4    Retina
5    Befunge-93                               ✓
6    Python 2                ✓
7    Rail                                     ✓
8    ETA
9    Prelude
10   Gol><>                                   ✓
11   evil
12   Foo                                                       ✓
13   Ruby                    ✓
14   ><>                                      ✓
15   Brian & Chuck                                             ✓
16   Whitespace
17   3var
18   Axo                                      ✓
19   Labyrinth                                ✓
20   Starry
21   Fission                                  ✓
22   Brainfuck                                                 ✓
23   Julia                   ✓
24   Lily                    ✓
25   GolfScript
26   Chicken Scheme          ✓
27   Thue
28   Perl 6                  ✓
29   Picolisp                ✓
30   TRANSCRIPT

1. COW

COW là một dẫn xuất Brainfuck với các lệnh bổ sung, một trong số đó là đầu ra số. Bất cứ điều gì không hợp lệ đều bị bỏ qua, vì vậy chương trình được thực hiện chỉ là

MoO OOM

làm tăng ô lên 1 rồi in ra dưới dạng số.

2. CoffeeScript (bao gồm trình thông dịch)

CoffeeScript thấy:

# comments
###
multiline comment
###;alert 2# comment

mà chỉ đơn giản là cảnh báo 2.

(Vâng, có lẽ sẽ tốt hơn nếu một ngôn ngữ khác lấy vị trí này, nhưng tôi quá lười để cải tổ lại vào thời điểm này: P)

3. Lisp thường gặp | thần tượng

Lisp thường gặp (clisp) thấy:

#|
multiline comment
|#(write(if(= 1/5 .2)26 3))"""

1/5là một tỷ lệ hợp lý và không bằng 0.2, vì vậy 3 được in. Quá trình tố tụng """là một lỗi cú pháp.

Lưu ý rằng printdường như xuất ra một dòng mới và dấu cách ở trước trong Common Lisp. Tuy nhiên, may mắn thay, writehoạt động trong cả Sơ đồ chung và gà.

4. Võng mạc | Hãy thử trực tuyến!

Giới hạn được giới thiệu : Mỗi dòng thứ hai bắt đầu từ dòng đầu tiên cần phải là một biểu thức chính quy hợp lệ.

Mỗi cặp dòng tạo thành một giai đoạn thay thế, thay thế các trường hợp khớp của biểu thức chính quy của dòng thứ nhất bằng dòng thứ hai. Ở giữa, chúng tôi có cặp

"" "

thay thế chuỗi trống ban đầu bằng """. Dòng trống cuối cùng, không phải là một phần của bất kỳ cặp nào, được coi là giai đoạn khớp, đếm số lượng trận đấu của regex. Có bốn trường hợp của chuỗi rỗng """, cụ thể là 1"2"3"4.

5. Befunge-93 | Thông dịch viên

Befunge là ngôn ngữ 2D và các hướng dẫn liên quan là

# # 15g,@

trong dòng đầu tiên, và 5trong 25dòng. #bỏ qua hướng dẫn tiếp theo, 15glấy char ở vị trí (1, 5)trong mã ( 5trong 25dòng), ,xuất ra char và @tạm dừng.

6. Python 2 | thần tượng

Python thấy:

# comments
25
print(4^2 +7)/2


"""
multiline string
"""

(4^2+7)/2 = (xor(4,2)+7)/2 = (6+7)/2 = 13/2 = 6, được printed.

7. Đường sắt | Hãy thử trực tuyến!

Rail là ngôn ngữ 2D và việc thực thi bắt đầu từ $chức năng chính, hướng về phía đông nam. Do đó, phần liên quan của mã là

$'main'
 7
  o
   J

với oJđến từ các dòng được sử dụng bởi TRANSCRIPT. Sau khi xuất 7, tàu chạm vào một Jhướng dẫn không được nhận dạng , làm hỏng chương trình.

8. ETA | Hãy thử trực tuyến!

Giới hạn được giới thiệu: Không nên đăng ký trước chương trình ETA etaoinsh.

ETA chỉ nhận ra các chữ cái etaoinshvà phiên bản chữ hoa của chúng, có nghĩa là mã bắt đầu bằng

NSaIeoe

n...eđẩy một số cơ sở 7 dựa trên những gì trong delimiters, mà cho SaI624hay 312 trong hệ thập phân. osau đó xuất ra dưới dạng char, rõ ràng là sau modulo 256, đưa ra char 8(mã điểm 56). esau đó cố gắng phân chia với một ngăn xếp trống, thất bại.

9. Mở đầu | Hãy thử trực tuyến!

Giới hạn được giới thiệu: Không quá một ()trong bất kỳ cột nào, ()khớp với việc đọc một cột tại một thời điểm, không có vòng lặp vô hạn gây ra bởi ().

Điều này đòi hỏi trình thông dịch Python phải NUMERIC_OUTPUT = Truethiết lập.

Mở đầu là một ngôn ngữ trong đó mỗi dòng được thực hiện riêng biệt. Rất nhiều ký tự được thực thi, nhưng phần quan trọng là

9!

trên dòng thứ hai, xuất ra 9. ()trong Prelude biểu thị một vòng lặp, nhưng nhờ sự nổi bật của #s (bật ra từ ngăn xếp), các đỉnh của các ngăn xếp luôn bằng 0 tại thời điểm một vòng lặp được đánh, vì vậy không ai trong số chúng đang chạy ()Mặc dù hạn chế mã nguồn của Prelude liên quan đến việc giới thiệu một số không gian bên ngoài.

10. Gol> <> | Thông dịch viên

Phần này (và> <>) hoạt động giống như câu trả lời của Martin . Mã liên quan là

#                                      ;n@0ea

Gol> <> là ngôn ngữ 2D và #phản ánh IP, khiến nó di chuyển sang trái. Nó quấn quanh, đẩy 10, 14 và 0 vào ngăn xếp. @sau đó xoay ngăn xếp, đưa 10 lên trên cùng, nxuất nó và ;tạm dừng chương trình.

11. ác | Hãy thử trực tuyến!

Phần này cũng tương tự như câu trả lời của Martin.

cái ác bỏ qua tất cả mọi thứ trừ chữ thường. Bỏ qua một vài ký tự, phần có liên quan là

aeeeaeeaww

trong đó agia tăng biến A, elà chức năng dệt của cái ác xáo trộn các bit Awđầu ra A. Do đó chúng tôi đầu ra 1hai lần, cho 11.

Nhưng những gì về phần còn lại của các hướng dẫn, và đặc biệt là wtrên dòng cuối cùng? Chúng ta hãy nói rằng đôi khi thật dễ dàng để chỉ lộn xộn với mã và cầu nguyện nó vẫn hoạt động trong mọi thứ mà ở đây, bằng cách nào đó, nó đã ...

12. Foo | Hãy thử trực tuyến!

Foo xuất ra bất cứ thứ gì giữa hai dấu ngoặc kép, vì vậy phần có liên quan là

"12"

trên dòng thứ hai. Tuy nhiên, vì chúng tôi cần trích dẫn kép sau đó, chúng tôi sử dụng một phương pháp tương tự như câu trả lời của Martin để loại bỏ lỗi Foo, cụ thể là trước đó #-1@. Không rõ lý do tại sao nó hoạt động trong một ngôn ngữ mà những người lính đối mặt với ngăn xếp trống rỗng và phân chia bởi các lỗi không, nhưng tôi rất vui vì điều đó.

13. Ruby | thần tượng

Giống như Python, Ruby thấy:

# comments
25
print(4^2 +7)/2


"""
multiline string
"""

Tuy nhiên, nó có giá trị lưu ý rằng chuỗi multiline thực sự là ba chuỗi riêng biệt ( "", "...", "") nối với nhau. Đầu ra dòng in (4^2+7) = xor(4,2)+7 = 6+7 = 13, trước khi lỗi cố gắng chia nilcho 2.

14. > <> | Hãy thử trực tuyến!

Phần này giống như phần Gol> <>, ngoại trừ @đưa phần 14 lên trên thay vào đó, được xuất ra.

15. Brian & Chuck | Hãy thử trực tuyến!

Brian & Chuck là một dẫn xuất BF với hai băng, trong đó con trỏ lệnh của băng là con trỏ bộ nhớ của băng khác. Trong trường hợp không có ```, hai dòng đầu tiên của mã nguồn được sử dụng để khởi tạo các băng.

Các ký tự liên quan trong hai dòng đầu tiên là:

   ?15
#     >.>.

Băng ?trong Brian chuyển giao quyền kiểm soát cho Chuck trong tế bào được chỉ vào (cái #) là khác không. Chuck sau đó thực thi >.>., xuất ra hai ký tự sau dấu chấm hỏi.

16. Khoảng trắng | Thông dịch viên

Sử dụng STLcho không gian, tab và nguồn cấp dữ liệu tương ứng, bắt đầu chương trình là:

SSSTSSSSL
TL
STL
L
L

Dòng đầu tiên đẩy 16 ( +10000cơ sở 2), dòng trước TLSTin nó dưới dạng số. Ba dòng tiếp theo dừng chương trình.

Lưu ý, tuy nhiên, chương trình này là thông dịch viên cụ thể. Phần còn lại của các lỗi cú pháp mã trong hầu hết các trình thông dịch, do đó, cần có một trình thông dịch nhẹ nhàng hơn, giống như một trình thông dịch được liên kết ở trên.

17. 3var | Hãy thử trực tuyến!

Trong dòng đầu tiên, một loạt các lệnh được thực thi, nhưng các lệnh có liên quan là

kkmmao#/

Do hạn chế của ETA, chúng tôi sử dụng kđể giảm biến B thay vì atăng nó. kkgiảm B xuống -2 và mmbình phương B hai lần thành 16, tăng lên 17 với a. Điều này sau đó được xuất ra với o.

#sau đó được sử dụng để đặt lại B về 0 và /khiến chương trình bị lỗi thông qua phép chia cho 0.

18. Axo | Hãy thử trực tuyến!

Giới hạn được giới thiệu: Không có hướng dẫn trước chương trình Axo thay đổi hướng của IP

Một lần nữa, một loạt các lệnh được thực thi trong dòng đầu tiên, nhưng các lệnh có liên quan là

# # 15 ,@            9 9  + {   \

Axo là một ngôn ngữ 2D như Befunge, và #tương tự như một cây cầu bỏ qua hướng dẫn tiếp theo, nhưng chỉ khi đỉnh của ngăn xếp bằng không. 15,đẩy vào ngăn xếp, nhưng ngăn xếp được làm trống với @. 99+sau đó đẩy 18, {đầu ra và \dừng lại.

19. Mê cung | Hãy thử trực tuyến!

Labyrinth là một ngôn ngữ 2D khác và các hướng dẫn được thực hiện là

#|#
 [9!@

#đẩy chiều dài của ngăn xếp, bằng 0 lần đầu tiên. |là bit OR, không thay đổi bất cứ điều gì vì ngăn xếp chỉ có 0s tại thời điểm này và lần thứ hai #bây giờ đẩy 1 do số 0 đơn độc. Chúng tôi rẽ phải do 1, 9chuyển đổi 1 này thành 1*10+9 = 19, !in nó và @tạm dừng.

Chương trình này dựa trên thực tế [hiện tại không phải là một hướng dẫn được công nhận và do đó được coi là một bức tường.

20. Sao | Hãy thử trực tuyến!

Giới hạn được giới thiệu: Tất cả +các phải có ít nhất một không gian trước

Nếu chúng ta loại bỏ các ký tự không được nhận dạng, phần có liên quan của mã là

,       +.. +

,là đầu vào, nhưng vì chúng ta dẫn từ /dev/nullkhông có, đẩy 0 vào ngăn xếp. A +với n >= 5các khoảng trắng trước đẩy n-5, vì vậy lệnh tiếp theo đẩy 2. ..sau đó xuất hai chữ số này theo thứ tự ngược lại.

Tiếp theo chúng ta có một +không gian trước duy nhất, trùng lặp. Tuy nhiên, ngăn xếp trống, vì vậy chúng tôi lỗi.

21. Phân hạch | Hãy thử trực tuyến!

Phần liên quan duy nhất cho phân hạch là

*"12"L

Lsinh ra một nguyên tử di chuyển sang trái, "21"in 21 và *dừng lại.

22. Brainfuck | Hãy thử trực tuyến!

Giới hạn giới thiệu: Không .trước lần đầu tiên[

Điều này đòi hỏi một trình thông dịch cung cấp 0 trên EOF và có các ô 8 bit. Mã liên quan là

,+-[>.>.-+.>,>]-[>+<-----]>-..

Inital -là để bù lại +, và lần đầu tiên [...]không được thực thi vì ô là 0. Phần sau đây -[>+<-----]>-đặt ô thành mã char 2..xuất ra hai lần.

23. Julia | Hãy thử trực tuyến!

Julia thấy:

# comments
25
print(4^2 +7)/2

Những gì được in là 4^2+7 = pow(4,2)+7 = 16+7 = 23và các lỗi chương trình cố gắng chia nothingcho 2. Lưu ý rằng Julia dường như không bận tâm đến thực tế rằng phần còn lại của mã sẽ gây ra lỗi cú pháp.

24. Lily | Thông dịch viên

Lily thấy:

# comment
#[
multiline comment
]## comment
print (7/6*24)# comment

7/6*24 = 1*24 = 24 được in.

25. GolfScript | Hãy thử trực tuyến!

GolfScript thấy:

# comments
25
print(

GolfScript dựa trên ngăn xếp, vì vậy 25 được đẩy lên ngăn xếp, sau đó xuất hiện và in bằng print. (sau đó cố gắng giảm chuỗi rỗng ẩn trên ngăn xếp, lỗi này và lỗi chương trình.

26. Đề án gà | thần tượng

Chicken Scheme có #| ... |#cú pháp nhận xét đa dòng giống như Common Lisp. Tuy nhiên, trong

(write(if(= 1/5 .2)26 3))

1/5là một phao mà tương đương 0.2, vì vậy 26 được outputted thay thế.

27. Thue | Hãy thử trực tuyến!

Thue là một ngôn ngữ dựa trên việc viết lại chuỗi. Phần liên quan đầu tiên là

f::=~27
::=

trong đó xác định một sự thay thế f -> 27sau đó biểu thị sự kết thúc của sự thay thế bằng ::=. Các đơn độc ftrong ifsau đó được thay thế bằng 27, được xuất ra.

28. Perl 6 | thần tượng

Perl 6 có một cú pháp nhận xét mới, cụ thể #`(some bracket)là một nhận xét đa dòng cho đến khung phù hợp. Do đó, Perl 6 thấy:

# comments
#`{
multiline comment
}# comment
print (7/6*24)# comment

mà in 7/6*24 = 28.

29. Picolisp | thần tượng

Picolisp thấy:

# comment
#{
multiline comment
}#(prin 29)

trong đó in 29. Dòng sau đó gây ra lỗi cú pháp.

30. BẢNG | Hãy thử trực tuyến!

TRANSCRIPT là một esolang theo chủ đề được mô phỏng theo các cuộc phiêu lưu văn bản. Các dòng không được nhận dạng bị bỏ qua (cho phép bạn thêm văn bản câu chuyện / hương vị bổ sung trong số các hướng dẫn mã thực tế), vì vậy các dòng có liên quan là:

Jo is here.
>Jo, 30
>X Jo

Dòng đầu tiên khai báo một biến chuỗi Jo, sử dụng tên hai chữ cái vì tên một chữ cái dường như không thành công. Dòng thứ hai đặt chuỗi này thành "30", được xuất ra bởi X("tests") trong dòng thứ ba.


12
Daaaaaaaaaang ...
admBorkBork

9
Tôi nghi ngờ đây có thể là điểm số khác không thấp nhất cho bất kỳ câu hỏi nào ở đây.
Morgan Thrapp

Điều này thật phi thường. Tôi kinh ngạc.
Nic Hartley

2
* tích cực, có một vài điểm tiêu cực cho câu trả lời ngắn với tiền thưởng.
Máy

Mẹo nhỏ trong tương lai: các tab của bạn sẽ không bị rối nếu bạn bao quanh mã của mình trong precác thẻ thay vì sử dụng khối mã kiểu Markdown.
Jakob

148

15 ngôn ngữ, 68 66 65 byte / 15 ^ 3 = 0,009 ...

Retina , Starry , Prelude , ETA , Axo , Labyrinth , Hexagony , Foo , Brian & Chuck , Gol> <> , evil , Whitespace , Fudge , > <> GolfScript .

Sau khi viết lại lớn, tôi đã xoay sở để phù hợp với bốn ngôn ngữ hơn. Mã này chứa một vài tab cho khoảng trắng. Vì Stack Exchange chuyển đổi chúng thành không gian, tôi đã trình bày chúng \tdưới đây:

#I5aeeNTH{\?      \t\t + +3;n@"8"ea9
15}7'`--~!@<"31"LSOe.\t
 \teaww`

Tôi nghĩ rằng tôi đã hoàn thành việc thêm ngôn ngữ (mặc dù chỉ thêm một ngôn ngữ có thể tiết kiệm một số byte trong những gì tôi đã có). Tôi tự hỏi liệu nó có thể chơi được không ... 65 byte cho 15 ngôn ngữ là một bước nhảy vọt từ 32 byte cho 11 ngôn ngữ và giờ đây tôi đã có ít nhất một nhân vật vô dụng trong đó để khiến Foo hoạt động ..

In võng mạc 1

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

May mắn thay, dòng đầu tiên là một regex hợp lệ. Tuy nhiên, regex đó rõ ràng không khớp với đầu vào trống, vì vậy giai đoạn đầu tiên (bao gồm hai dòng đầu tiên) không làm gì cả.

Dòng thứ ba là của riêng nó, do đó, nó được coi là giai đoạn Đối sánh, theo mặc định, sẽ đếm số lượng trận đấu. Tuy nhiên, `một dấu phân cách cho Retina biết rằng phần phía trước của nó là một chuỗi cấu hình (không biết có bất kỳ tùy chọn nào được đưa ra ở đó) và phần sau đó là biểu thức chính quy. Vì vậy, regex trống và Retina tìm thấy chính xác một trận đấu.

Bản in đầy sao 2

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

Starry bỏ qua mọi thứ trừ không gian và +*,'`.. Mỗi lệnh là một trong những ký tự đó kết hợp với khoảng trắng kể từ lần cuối cùng của các ký tự đó. Vì vậy, hãy loại bỏ tất cả các mã không liên quan:

       + +'`. `

Bảy không gian theo sau +đẩy a 2. Một không gian theo sau là một +bản sao nó. 'là một bước nhảy có điều kiện. Nó bật lên trên cùng của ngăn xếp, đó là sự thật (tích cực), do đó, nó nhảy đến nhãn tương ứng (trong đó các nhãn được chỉ định bởi `và "tương ứng" có nghĩa là "có cùng số lượng khoảng trắng hàng đầu"), là số đầu tiên `. .không có khoảng trắng ở phía trước, sau đó in phần trên cùng của ngăn xếp dưới dạng số.

Mở đầu bản in 3

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

Điều này giả sử trình thông dịch Python sử dụng đầu ra số. Hãy xóa tất cả các lệnh cấm:

# 5        ?         + +3    8   9
15 7  -- !   31

Giọng nói đầu tiên thực hiện một loạt các công cụ, nhưng không có gì quan trọng, bởi vì không có !bất kỳ kết quả nào. Giọng nói thứ hai đẩy a 1, rồi a 5, rồi a 7. Chúng tôi lấy sự khác biệt của hai cái cuối cùng để lấy -2, và sau đó trừ đi từ cái 1cần lấy 3. !in nó Giọng nói thứ ba chỉ có không có op.

Bản in ETA 4

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

ETA bỏ qua mọi thứ trừ các ký tự ETAOINSH(trong mọi trường hợp). Vì vậy, mã mà ETA nhìn thấy là:

IaeeNTHneaSOeea

Icố gắng đọc đầu vào nhưng không thể, vì vậy nó đẩy -1. ađẩy số dòng hiện tại cộng với 1, đó là 2. edivmod , thay thế những người có 01(hoặc -1, tôi thực sự không biết, nhưng nó không thành vấn đề). Việc tiếp theo ethay thế cả hai bằng 0.

Bây giờ là phần thú vị. NTHnelà một số cơ sở 7 chữ. Nechỉ là các dấu phân cách, và ba chữ số là THN. Đó là 54(nơi Tlà chữ số 1, H0n5). ađẩy 2một lần nữa. Strừ nó, dẫn đến 52Oxuất nó dưới dạng một ký tự ( 4). Bây giờ ethử lại divmod, nhưng ngăn xếp chứa hai số 0, vì vậy chương trình chấm dứt với một lỗi (nhưng không gây ô nhiễm STDOUT trong khi làm như vậy).

In Axo 5

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

Ngôn ngữ này chịu trách nhiệm một mình cho việc viết lại. Tôi không thể có }dòng đầu tiên vì nó sẽ chặn đầu vào trong Axo (xem lịch sử sửa đổi cho những gì tôi đang nói). Đối với Axo, chỉ phần này của mã có liên quan:

#I5aeeNTH{\

May mắn thay, Axo cũng có ẩn 0ở dưới cùng của ngăn xếp của nó, bởi vì #bật đỉnh của ngăn xếp (để kiểm tra xem có nên bỏ qua hướng dẫn tiếp theo hay không). Các chữ cái đều không có. Sau đó 5đẩy a 5, {in nó, \chấm dứt chương trình. Khá đơn giản, thực sự.

Mê cung in 6

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

Tôi đang cắt bớt mã một chút, bởi vì một nửa bên phải không bao giờ đạt được và tôi cũng đang sử dụng tthay thế \t, để các cột thẳng hàng:

#I5aeeNTH{\
15}7'`--~!@
 teaww`

Bây giờ các chữ cái, dấu cách và tab là các bức tường trong Labyrinth, vì vậy mã có thể truy cập thực sự trông như thế này:

# 5      {\
15}7'`--~!@
      `

Con trỏ lệnh sẽ tự động theo đường dẫn đó. #đẩy độ sâu của ngăn xếp chính ( 0) và 15biến nó thành a 15. }chuyển nó sang ngăn xếp phụ trợ và chúng tôi sẽ không sử dụng nó nữa. Điều đó thuận tiện làm cho đỉnh của ngăn xếp bằng 0, để IP không rẽ trái vào 5. 7biến số không thành a 7, 'là số không. Các `là unary phủ định, vì vậy chúng tôi có được -7. Bây giờ -trừ đi -7từ ẩn 0bên dưới làm cho nó 7. Lần này, IP sẽ chuyển sang quyền `, đó là phủ định đơn phương, vì vậy chúng tôi nhận 7lại. IP đánh vào ngõ cụt một vòng. Điều -này cũng giống như trước đây, vì vậy chúng tôi nhận được7một lần nữa. Vì đỉnh của ngăn xếp bây giờ là dương, IP rẽ phải. Có cái khác -đưa ra -7một lần nữa. Sau đó ~là bitwise KHÔNG, mà cho 6!in nó. Đó chỉ là thời điểm thích hợp để làm điều đó, bởi vì bây giờ ngăn xếp lại trống rỗng để IP sẽ không rẽ trái {mà thay vào đó tiếp tục đi thẳng vào việc @chấm dứt chương trình.

Bản in lục giác 7

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

Mã mở ra trông như thế này:

     # I 5 a e
    e N T H { \
   ? + + 3 ; n @
  " 8 " e a 9 1 5
 } 7 ' - - ~ ! @ <
  " 3 1 " L S O e
   . e a w w . .
    . . . . . .
     . . . . .

Thông thường, đó sẽ là một chương trình Hexagony đáng sợ, nhưng các nhân vật thực sự được sử dụng không quá nhiều. Trên thực tế, chúng khá giống với những gì được sử dụng bởi Labyrinth và tôi nghĩ cách tôi phân biệt giữa 56khá hay. :)

Hàng trên cùng về cơ bản có thể được bỏ qua. #thông thường sẽ chuyển sang một IP khác, nhưng cạnh bộ nhớ hiện tại là 0vậy, vì vậy nó không. Các chữ cái chỉ đặt một giá trị bộ nhớ cố định, nhưng chúng tôi sẽ không sử dụng nó. Sau khi kết thúc hàng đầu tiên, luồng điều khiển tiếp tục ở hàng giữa (bắt đầu từ }, đi bên phải). Việc }di chuyển đến cạnh bộ nhớ khác. 7đặt cạnh đó thành 7. 'di chuyển trở lại nơi chúng tôi đến. -trừ cạnh bộ nhớ mà chúng ta vừa đặt 7từ cạnh bộ nhớ không sử dụng ( 0), để chúng ta có được -7. Tiếp theo -làm điều tương tự một lần nữa, vì vậy đó là một no-op. Cho đến nay, khá giống với Labyrinth (ngoài cách bố trí bộ nhớ). Nhưng bây giờ~không phải là bitwise KHÔNG mà là phủ định đơn phương trong Hexagony. Vì vậy, điều này cho 7thay vì 6. !@, giống như trong Labyrinth in giá trị và chấm dứt chương trình.

Foo in 8

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

Như tất cả chúng ta đều biết vì Foo in Ngôn ngữ lập trình mọi thứ khá tầm thường trong Foo, ngay cả khi hầu hết các mã là một mớ lộn xộn ngẫu nhiên của các ký tự. Không có ký tự nào ảnh hưởng đến đầu ra ngoại trừ "8"bản in 8. Vâng, có "31"sau này, nhưng Foo chấm dứt với một lỗi ở cuối dòng đầu tiên. Tôi không chắc chắn chính xác tại sao điều đó xảy ra, nhưng nó yêu cầu rằng 3(hoặc bất kỳ chữ số nào khác) ở hàng trên cùng, không được sử dụng ở bất kỳ nơi nào khác.

Brian & Chuck in 9

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

Chúng ta hãy làm điều này một lần nữa khi chúng ta xóa dòng thứ ba (nó không bao giờ được phân tích cú pháp) và thay thế tất cả các ký tự không liên quan (ví dụ: không có op hoặc các ô không đọc) bằng dấu cách:

         { ?         + +         9
  }   --   <        .

Cũng như một lời nhắc nhở, mỗi dòng là một Brainfuck - giống như băng của nó là mã nguồn của chương trình khác. Dòng điều khiển bắt đầu trên dòng đầu tiên (được gọi là Brian).

Việc {di chuyển đầu băng từ bên trái sang bên trái (nơi đã có) và ?tay điều khiển chảy qua Chuck (dòng thứ hai). Ở đó, }di chuyển đầu băng sang phải cho đến khi tìm thấy một ô không. Điều đó không xảy ra cho đến khi kết thúc chương trình, vì vậy đầu băng kết thúc một ô sau 9. -làm giảm tế bào đó, nhưng điều đó không liên quan. <di chuyển đầu băng vào 9.in nó. Chuck hết chương trình và chấm dứt.

Gol> <> in 10

Đã thử nghiệm ở đây.

#là một tấm gương, vì vậy IP ngay lập tức bỏ qua đến cuối dòng đầu tiên (và đi sang trái). Có 9thể bỏ qua. ađẩy 10, eđẩy 14, "8"đẩy mã ký tự của 8, @xoay ba phần tử ngăn xếp trên cùng (kéo lên 10), sao cho nin 10;kết thúc chương trình.

Cảm ơn Sp3000 đã đề xuất sử dụng @thay vì !(đã lưu một byte).

bản in ác 11

Cảm ơn Sp3000 đã gửi cho tôi một số danh sách lệnh bắt buộc để tạo số có một chữ số.

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

cái ác bỏ qua mọi thứ trừ chữ thường, vì vậy đoạn mã trông như thế này:

aeeneaeeaww

Ngoài ra, nảnh hưởng đến một số tiểu bang mà chúng tôi không quan tâm vì vậy hãy bỏ qua điều đó. Bây giờ atăng thanh ghi (bắt đầu từ 0) và elà hoạt động "dệt" ma thuật của ác quỷ, cho phép các bit theo một cách cụ thể. aeeeaeeaxảy ra để mang lại giá trị 49là mã ký tự của 1. wwin nó hai lần.

Khoảng trắng in 12

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

Được rồi, chúng tôi biết Whitespace chỉ đọc khoảng trắng, tab và đường dẫn, vì vậy hãy viết mã như Whitespace nhìn thấy với STL:

SSSSSSTTSSLTLST

Đó là hai lệnh:

SSSSSSTTSSL
TLST

Người đầu tiên đẩy số 12. Cụ thể, SSbắt đầu một số bằng chữ. Tiếp theo Slà bit dấu (dương). Sau đó, tất cả mọi thứ lên đến Llà một đại diện nhị phân của số. Có rất nhiều số 0 hàng đầu mà chúng ta cần cho Starry, nhưng chúng không ảnh hưởng đến số lượng. Sau đó, TTSSs là 12trong nhị phân. Sự thật thú vị: nếu tôi thêm ngôn ngữ thứ 16, tôi có thể lưu một byte ở đây, bởi vì Starry có thể sử dụng bốn ngôn ngữ Strong chế độ nhị phân của 16. Tôi nghi ngờ tôi sẽ ...

Chỉ TLSTcần in đầu ngăn xếp dưới dạng số. ( TLđánh dấu lệnh là lệnh I / O và STđang in số.)

Phân hạch in 13

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

Phân hạch chỉ nhìn thấy phần này của mã:

           <"31"L

Lbắt đầu điều khiển dòng chảy với một nguyên tử đi bên trái. "bật chế độ in, để 31chỉ in 13. Sau đó, nguyên tử được bắt giữ trong nêm của <, kết thúc chương trình.

> <> bản in 14

Đã thử nghiệm ở đây.

Phân biệt giữa> <> và Gol> <> không dễ như tôi nghĩ, bởi vì Gol> <> hầu như luôn làm điều tương tự như> <> cho các lệnh tồn tại trong cả hai và các lệnh chỉ tồn tại trong Gol> < > nguyên nhân> <> sụp đổ. Tuy nhiên, @xoay theo chiều ngược lại trong> <>, sao cho nó đẩy xuống 7thay vì kéo lên 10, và sau đó 14được in thay vì 10.

Bản in GolfScript 15

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

Điều này là đơn giản nhất: #bình luận ra dòng đầu tiên. Sau đó 15tự đẩy mình và }là một "siêu bình luận", bỏ qua toàn bộ phần còn lại của chương trình. Vì vậy, 15được in vào cuối chương trình.


34
Điều này thực sự ấn tượng!
sweerpotato

1
@YassinHajaj Cảm ơn, đã sửa.
Martin Ender

2
Không. Công việc tuyệt vời cho 15 ngôn ngữ!
ev3commander

1
@SnoringFrog Vâng, bạn đi.
Martin Ender

1
@Eumel Cảm ơn, nhưng tiền thưởng dành riêng cho các ngôn ngữ "bình thường" được liệt kê trong mô tả của nó, vì vậy tiền thưởng nên đi đến một câu trả lời như vậy (như giải pháp rất hay của Sp3000). Tôi nghĩ rằng tôi đã có đủ đại diện từ điều này anyway. ;)
Martin Ender

42

Python 1.x, 2.x và 3.x, 32 byte / 3 ^ 3 = 1.1851 ...

import sys
print(sys.version[0])

In số đầu tiên của phiên bản, 1trong Python 1.x, 2trong Python 2.x và 3trong Python 3.x.

Vào thời điểm chúng tôi có Python 9.x, điểm số của tôi sẽ rất tuyệt vời 0.04389!

: ~)!


10
Từ trò chuyện: Có, đây là cả giá rẻ và hợp lệ =) Đây là một phần lý do tại sao chỉ các phiên bản chính được coi là đủ độc đáo. Tôi không biết có bao nhiêu phiên bản Python, nhưng có lẽ bạn có thể bị điểm khá thấp khi sử dụng thứ gì đó như thế này ... Đó là một trong số ít giải pháp mà tôi thực sự hiểu những gì đang xảy ra, vì vậy +1 từ tôi; - )
Stewie Griffin

6
Trong python 10.x (khi nó tồn tại) sẽ không in 1vì đó là ký tự đầu tiên của chuỗi "10. what what"?
ev3commander 4/12/2015

1
@ ev3commander Tuy nhiên, bài nộp này không được quy định để tạo ra một đầu ra chính xác trong python10.
Tyzoid 8/12/2015

Đã sửa! Hoạt động trên phiên bản tương lai, nhưng Python 1.x không thân thiện với người dùng như các phiên bản khác: ~)!
sweerpotato

1
Tất cả những gì tôi cần làm là tạo ra một ngôn ngữ có ba phiên bản chính. Trong ba phiên bản chính đó, khi chạy một tệp trống sẽ trả về số phiên bản chính. Kết quả sẽ là 0/3 ^ 3 = 0 Hoàn hảo.
Braden Steffaniak

32

3 ngôn ngữ, 2 byte / 27 = 0,074

1P

Chà, nó đánh bại một nửa số bài nộp ít nhất: P

1. GolfScript

GolfScript bỏ qua P, chỉ xuất ra 1. Hãy thử trực tuyến .

2. Mệnh

Plà 2-to-the-power-of, vì vậy 1P = 2^1 = 2. Hãy thử trực tuyến .

3. Nghiêm túc

Pcho số nguyên tố thứ n, không được lập chỉ mục. Chúng tôi nhận được 3 vì đó là số nguyên tố thứ hai. Hãy thử trực tuyến .


Ghi chú

Mục tiêu ban đầu của tôi là tìm ra câu trả lời hợp lệ trong 1 byte. Thử nghiệm đầu tiên của tôi là \x12hoạt động trong Bubblegumgs2 , nhưng thử thách đòi hỏi tối thiểu ba ngôn ngữ. \x13sẽ hoạt động nếu có ngôn ngữ tạo ra 1.

Đưa ra câu trả lời 1 byte, tôi chuyển sang hai byte. 3ulà một cuộc gọi gần gũi, xuất ra 1 trong Japt , 3 trong GolfScript và 4 trong Nghiêm túc, nhưng thật khó để tìm một ngôn ngữ xuất ra 2 để lấp đầy khoảng trống.

Tất cả điều này đã đưa tôi đi quá lâu: /


20

6 ngôn ngữ - 44 byte / 6 ^ 3 = 0,204 ...

Cảm ơn SnoringFrog vì đã tiết kiệm 10 byte!

Hoạt động trong:

  • Befunge
  • Bình
  • Brainfuck
  • Lục giác
  • Khoảng trắng
  • AniRad v0.2

2# "1",@"-[----->+<]>.*@@@!4<SSTST
T
ST
 >6=

Lưu ý: Trước khi thử trực tuyến, hãy đảm bảo thay thế S bằng dấu cách và T bằng các tab hoặc chuyển đổi hexdump sau thành ASCII

32 23 20 22 31 22 2c 40 22 2d 5b 2d 2d 2d 2d 2d 3e 2b 3c 5d 3e 2e 2a 40 40 40 21 34 3c 20 20 09 20 09 0d 0a 09 0d 0a 20 09 0d 0a 20 3e 36 3d

Tôi sẽ cố gắng sử dụng nhiều ngôn ngữ lập trình hơn :)

Befunge (bản in 1):

Dùng thử trực tuyến

2# "1",@"-[----->+<]>.*@@@!4<
2                             # This puts 2 onto the stack
 #                            # Skips the next op (the space)
   "1"                        # Sets the ASCII value of 1 onto the stack
      ,                       # Pop the last item (1)
       @                      # Terminate program

Pyth (bản in 2):

Dùng thử trực tuyến

2# "1",@"-[----->+<]>.*@@@!4<
2                             # Prints 2
 #                            # Infinite while loop until an error occurs
   "1"                        # String
      ,@                      # This gives the error and terminates the program

Brainfuck (bản in 3):

Dùng thử trực tuyến

2# "1",@"-[----->+<]>.*@@@!4<
2# "1",@"                     # Since these are not brainfuck ops, these will be ignored
         -[----->+<]>         # Puts "3" on the stack
                     .        # Prints the last item (3)     

Hexagony (bản in 4):

Dùng thử trực tuyến

2# "1",@"-[----->+<]>.*@@@!4<   

Một phiên bản dễ đọc hơn:

   2 # " 1       # The steps:
  " , @ " -      # 1 (2) - Hexagony starts at the top-left of the hexagon
 [ - - - - -     #       - This immediately puts 2 onto the stack
> + < ] > . *    # 2 (#) - Since the stack is 2, this makes the 2nd pointer the 
 @ @ @ ! 4 <     #       - new current pointer
  > 6 = . .      # 3 (*) - The position of the 2nd pointer is in the left-most
   . . . .       #       - position. This sets the stack to the product
                         - of the two neighbours which is zero
                 # 4 (<) - Changes the pointer direction to west
                 # 5 (4) - Sets the stack to 4
                 # 6 (!) - Outputs the decimal 4
                 # 7 (@) - Terminates the program

Khoảng trắng (bản in 5):

Dùng thử trực tuyến

Vì các ký tự khác bị bỏ qua nhưng khoảng trắng và tab, chúng tôi chỉ còn lại các mục sau:

SSTST                 # This pushes 5 onto the stack
T                     # 
ST                    # This prints the decimal

Phiên bản AniRad 0.2 (bản in 6):

Bằng cách nào đó, điều này hoạt động cho phiên bản 0.2, nhưng gây ra lỗi cho phiên bản 0.4. Tôi không có đầu mối tại sao. Bạn có thể tìm thấy phiên bản 0.2 tại đây . Để chạy cái này, bạn có thể sao chép và dán mã của trình thông dịch để thay thế và chạy nó. Sau đó, bạn chỉ cần dán chương trình vào STDIN và chạy nó.

2# "1",@"-[----->+<]>.*@@@!4<      # (#)  Starts at the hashtag (starting point)
                                   #      Direction is down
                                   # (>)  When the pointer gets to the '>', it changes
 >6=                               #      its direction
                                   # (6) Puts 6 onto the stack 
                                   # (=) Pushes the result and terminates

1
Nhiều ngôn ngữ chắc chắn là con đường để tôi nghĩ ... mẫu số khối thực sự hào phóng, do đó không quá khó để đánh bại điểm số của tôi một khi bạn có 5 hoặc 6 ngôn ngữ.
Martin Ender

@ MartinBüttner, Có, mặc dù tôi không thể thấy cách thêm ngôn ngữ mới
Adnan

2
@Martin vâng, thật hào phóng. Quan điểm của mẫu số khối là khuyến khích mạnh mẽ nhiều ngôn ngữ hơn. Tôi nghĩ rằng 6 ngôn ngữ trong 50 byte nên có giá trị tương đương với 5 ngôn ngữ trong 30 byte. :-) nó chắc chắn sẽ trở nên khó khăn hơn khi bạn sử dụng nhiều ngôn ngữ hơn.
Stewie Griffin

Mã khoảng trắng của bạn có thể giảm đi một chút (và tôi không nghĩ nó sẽ ảnh hưởng đến bất kỳ ngôn ngữ nào khác của bạn. (Sử dụng L cho nguồn cấp dữ liệu), thay vì SSSSSSSSSSTTSTSTLTLSSbạn có bây giờ, bạn có thể làm được SSSTSTLTLST. ngăn xếp, sau đó in dưới dạng số nguyên.
SnoringFrog

@SnoringFrog Cảm ơn! Tôi đã chỉnh sửa nó
Adnan

14

6 7 ngôn ngữ, 32 37 byte, điểm 0.148 ... 37/7 3 ≈ 0.107872 ...

#7+!"@\"6.@;n5
print(4--int(-3/2)#"
)

Brainfuck-ng

+tăng ô hiện tại, !in dưới dạng số nguyên, @thoát. #"là NOP.

Con trăn 2

Dòng đầu tiên là bình luận. Sử dụng phép chia số nguyên, tính toán 4 - -int(-3 / 2) = 4 - -int(-2) = 4 - -(-2) = 4 - 2 = 2và in kết quả.

Con trăn 3

Tương tự như trước, nhưng với phân chia float. 4 - -int(-3 / 2) = 4 - -int(-1.5) = 4 - -(-1) = 4 - 1 = 3.

Lua

--bắt đầu một bình luận, và #trên dòng đầu tiên là một bình luận, vì vậy về cơ bản print(4).

> <>

#phản ánh IP, 5đẩy 5, nin một số và ;thoát.

Befunge

#bỏ qua +, !phủ nhận một cách hợp lý đỉnh của ngăn xếp, "@\"đẩy chuỗi @\, 6đẩy 6, .in một số và @thoát.

Bình

#bắt đầu một vòng lặp vô hạn, loại bỏ bất kỳ lỗi nào. 7in 7, sau đó theo +!"string")đó về cơ bản gây ra lỗi vì không có hai toán hạng cho +, kết thúc chương trình.


13

JavaC ++ C, 363/27 = 13,4 ....

Java in 1, C ++ in 2, C in 3. Không phá vỡ bất kỳ bản ghi nào ở đây (vì Java), nhưng tôi thực sự thích cách thông minh, lạm dụng để tạo một polyglot trong các ngôn ngữ mà tôi đã khám phá.

//\u000a/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*\u002a/
import static java.lang.System.out;
public class P{//*/
/*\u002a/public static void//*/
main(/*\u002a/String[] args//*/
){//\u000a/*
out.print=p;
//\u002a/
out.print(1);}
/*\u002a/}//*/

Đây là một mớ hỗn độn. Đây là một sự cố về cách thức hoạt động. Các chữ Unicode ( \u000ahay còn gọi là nguồn cấp dữ liệu và \u002ađược biết đến với tên khác *) được trình biên dịch Java mở rộng thành các ký tự thực tế của chúng. Vì vậy, đây là những gì trình biên dịch Java thấy:

//
/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/**/
import static java.lang.System.out;
public class P{//*/
/**/public static void//*/
main(/**/String[] args//*/
){//
/*
out.print=p;
//*/
out.print(1);}
/**/}//*/

Tất cả những thứ đó lúc đầu đều bị bỏ qua vì tất cả đều được gói gọn trong một nhận xét nhiều dòng ( /* ... */). Sau này, chúng ta thấy rằng việc trộn các nhận xét một dòng và nhiều dòng cho phép chúng ta kiểm soát chính xác những phần được nhận xét trong mỗi ngôn ngữ. Trong phương thức chính, chúng tôi bắt đầu một nhận xét nhiều dòng, và sau đó có //*/. Thông thường, đây sẽ là một nhận xét một dòng, nhưng vì chúng tôi đang ở trong một nhận xét nhiều dòng, nên //không làm gì cả, cho phép */đóng nó.

Đây là mã Java tương đương, với các bình luận bị xóa:

import static java.lang.System.out;
public class P{
public static void
main(String[] args
){
out.print(1);}
}

Đây là những gì trình biên dịch C / C ++ nhìn thấy (Tôi đã xóa các ký tự Unicode, vì chúng không được trình biên dịch mở rộng và do đó không làm gì cả):

///*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*/
import static java.lang.System.out;
public class P{//*/
/*/public static void//*/
main(/*/String[] args//*/
){//\/*
out.print=p;
///
out.print(1);}
/*/}//*/

Ở đây, các nhận xét một dòng ghi đè lên các dấu phân cách nhận xét nhiều dòng ngay từ đầu, vì vậy tất cả các #defines và #includeđược xử lý trước. Tiếp theo, các bình luận nhiều dòng được sử dụng để nhận xét mã bo boa cho Java. Đây là mã tương đương, với các bình luận bị xóa:

#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
main(
){
out.print=p;
out.print(1);}

Một thủ thuật polyglot C / C ++ tiêu chuẩn (the #ifdef __cplusplus) được sử dụng để xác định mã thông báo o"2"hoặc "3", tùy thuộc vào việc đó là trình biên dịch C ++ hay C đang biên dịch mã. Tiếp theo, chúng tôi xác định một chức năngp nhận một intđối số (bị bỏ qua) và các cuộc gọi printf, sử dụng omã thông báo mới được xác định của chúng tôi . Như thường lệ, giá trị trả lại bị bỏ qua, vì chúng tôi không ở chế độ nghiêm ngặt. Tiếp theo, chúng tôi xác định a structvới một thành viên duy nhất, một con trỏ hàm có chữ ký khớp với pvà tạo một thể hiện duy nhất có tên out. Trong phương thức chính (chúng tôi bỏ đi intnhư bình thường), địa chỉ của pđược gán cho out.print(vì vậy gọi out.printcác cuộc gọi p) và nó được gọi.

Nếu C ++ không được bao gồm trong các ngôn ngữ, chúng tôi có thể loại bỏ tất cả mã tiền xử lý và xác định pint p(int a){puts("2");}. Thật không may, C ++ yêu cầu #includephải thực hiện I / O. Nếu C không được bao gồm, chúng ta có thể bỏ định nghĩa p#ifdefmacro tiền xử lý và trực tiếp xác định hàm thành viên structthay vì cần một con trỏ hàm. Thật không may, C không hỗ trợ các chức năng thành viên.


12

4 ngôn ngữ, 28 byte / 64 = 0.4375

print((0 and 3^1or 1/2>0)+1)

1. Python 2

0 là giả và / là phân chia số nguyên, vì vậy

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0 > 0) + 1 = False + 1 = 1

2. Perl (cũng là Python 3)

0là giả và /là phân chia phao, vì vậy

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0.5 > 0) + 1 = 1 + 1 = 2

3. Ruby

0là sự thật và ^là bitwise xor, vì vậy

(0 and 3^1 or 1/2 > 0) + 1 = xor(3,1) + 1 = 2 + 1 = 3

4. Lua

0là sự thật và ^là lũy thừa, vì vậy

(0 and 3^1 or 1/2 > 0) + 1 = pow(3,1) + 1 = 3 + 1 = 4

Lưu ý rằng Lua và Ruby không thể thêm booleans như thể chúng là số nguyên, do đó việc nhóm chúng lại với nhau. Thật không may 0and, Lua không hoạt động, vì vậy chúng tôi không thể lưu một byte ở đó.


Phiên bản 17 byte trước đó in 1 (Lua), 2 (Ruby), 3 (Python / Perl):

print(2^(0 or 1))

-3 byte nhờ @xnor cho phiên bản này, làm cho nó gọn gàng hơn nhiều :)


Sẽ 2^(0 or 1)làm việc?
xnor

@xnor À đúng rồi, cảm ơn :)
Sp3000 7/12/2015

8

BFSRS> <> funge93thon123, 73/343 0.212827 ...

Brainfuck, Nghiêm túc ,> <>, Befunge-93, Python 1, Python 2, Python 3

# 4['.]@kX21z-[>+<-----]>--.<;n3
import sys;print(3+int(sys.version[0]))

Chứa không thể in được, hexdump (có thể đảo ngược với xxd -ps -r):

2320345b272e5d406b5832317a7f2d5b3e2b3c2d2d2d2d2d5d3e2d2d2e3c
3b6e330a696d706f7274207379733b7072696e7428332b696e7428737973
2e76657273696f6e5b305d2929

Tôi sẽ thêm nhiều ngôn ngữ (và có thể là byte) theo thời gian. Ngôn ngữ trong tiêu đề được liệt kê theo thứ tự những gì chúng in. Giả sử các ô được bọc 8 bit và một cuộn băng sẽ không phàn nàn về việc đi bên trái của vị trí ban đầu (gói hoặc vô hạn) cho Brainfuck.

Brainfuck:

[.]   initial value of first cell is 0, so loop is skipped
-[>+<-----]>--  push 49 (ASCII ordinal of 1)
.     print "1"
<     move to blank cell
[0]   skip loop because cell is 0
      everything else is ignored

Nghiêm túc :

# 4['.]@  does some stuff we don't care about
kX        pop entire stack, push as list, discard (essentially the same as é, but is ASCII so we can use Python)
2         push 2
1z        pop 1 item from stack and print (used instead of . so Brainfuck doesn't print here; same as ü in this scenario, but is ASCII so we can use Python)
0x7f      terminate program
          everything else is ignored

><>:

#    mirror, reverse direction
3n;  push 3, print "3", end (reversed because IP is scanning RTL at this point)
     everything else is ignored

Befunge-93:

#     jump over the space
4['.] push 4, print 4 (brackets and ' do nothing)
@     end program
      everything else is ignored

Python 1 (cảm ơn bùn):

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+1=5

Con trăn 2 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+2=6

Con trăn 3 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+3=7

Python 1 cũng hoạt động. Xem codegolf.stackexchange.com/a/65652/32686 . Không thêm bất kỳ ký tự nào (nhưng thay đổi 3thành 4)
Blue

8

14 ngôn ngữ, 73 byte, điểm = (73/14 ^ 3) = 0,02660349854

#Y2(3`5n~thneo e        ;n@0d c
#   -[>+<"9"L-----]>+.
14  
print(int(15/2))+3

Tôi có thể thêm một số lang, nhưng tôi nghĩ tôi sẽ thêm những gì tôi có ở đây.

1. Brainbool ; Hãy thử trực tuyến!

Các mã có liên quan:

    [>+<         ]>+.

               + 

Điều này thực sự chỉ là +.+, mà đầu ra 1.

2. Jolf ; Hãy thử nó ở đây!

Các (char dừng giải thích mã nguồn, vì vậy mã relavent là:

#Y2

Điều này tương đương với (trong JavaScript)

var Y = []; toHex(Y); alert(2);

Mà đầu ra 2.

3. Yếu tố; Hãy thử trực tuyến!

Các mã có liên quan:

    3`

Điều này chụp 3và in nó.

4. Brainfuck ; Hãy thử trực tuyến!

Mã liên quan là:

-[>+<    -----]>+.

  -    -      + 

Đó là cách tiêu chuẩn để tạo mã char 4 và xuất ra nó, và một số thứ khác sau nó.

5. Reng; Hãy thử nó ở đây!

~ chấm dứt chương trình, vì vậy mã liên quan ở đây là:

#Y2(3`5n~

#xác định lại Ylà ĐKDV, trong trường hợp này , 0. 2đẩy 2; (xoay ngăn xếp N lần, bật N từ ngăn xếp; 3`đẩy -3; và cuối cùng, 5nbản in5 .

6. ETA; Hãy thử trực tuyến!

ETA chỉ đọc các chữ cái E, T, A, O, I, N, S, H, vì vậy mã chỉ được thực thi là:

       n thneo e         n     


  int int          

Mã siêu liên quan:

       n thneo

Hoặc, tương đương : nthne o. n...elà một chữ thnsố 7 cơ sở và là số cơ sở 7 cho 54. oxuất ra ký tự này. Các lỗi gửi ra, nhưng tôi không biết tại sao.

7. Python 3

Những gì nó thấy:

# comment
# comment
14
print(int(15/2))+3

15/2sản lượng 7,5, như /là phân chia phao. int(...)làm cho số một int, sau đó được in. Các chương trình lỗi khi +3gặp phải.

8. Julia

Julia thấy:

# comment
# comment
14
print(int(15/2))+3

Thay vì cắt ngắn 15/2, Julia làm tròn nó lên, thu được 8. Nó in cái này, sau đó gặp lỗi khi gặp +3.

9. Phân hạch; Hãy thử trực tuyến!

Mã liên quan:

        <"9"L         

Tôi có ý tưởng này từ phần Fudge của Martin (giống như đã đánh cắp nó). Lbắt đầu một thứ hướng về bên trái, chụp 9và kết thúc bằng <.

10. Khoảng trắng; Hãy thử nó ở đây!

Mã có liên quan, dịch khoảng trắng vào Svà tab thành T:

SSSTSTS
T
ST

Nó đẩy 10 đến ngăn xếp và xuất ra dưới dạng số ( T\nST).

11. Python 2

Python 2 thấy điều này:

# comment
# comment
14
print(int(15/2))+3

(int(15/2))+3 được đánh giá là 11 và được in.

12. Gol> <>; Hãy thử nó ở đây!

Mã liên quan:

#                      ;n@0d c

Này sử dụng các thủ thuật sử dụng trong Martin câu trả lời@quay hướng khác nhau trong> <> và Gol> <>. #gương, cđẩy 12, dđẩy 13, 0đẩy 0 và @đưa clên đỉnh của ngăn xếp, sau đó được đưa ra ngoài và in bằng;n .

13.> <>; Hãy thử trực tuyến!

Mã liên quan:

#                      ;n@0d c

Một lần nữa sử dụng điều đó @xoay các hướng khác nhau trong> <> và Gol> <>. #gương, cđẩy 12, dđẩy 13, 0đẩy 0 và @đưa dlên đỉnh của ngăn xếp, sau đó được đưa ra ngoài và in bằng ;n.

14. Bản đồ golf; Hãy thử trực tuyến!

Những gì nó thấy:

# comment
# comment
    14
print(-int(-15/2))+3

Nó đẩy 14, prints nó, và lỗi. Lấy cắp cảm hứng từ câu trả lời của Sp3000 .


7

Da , Brainfuck và Fob 27 byte / 3 ^ 3 = 1

0#>&$3#<>$-[----->+<]>-.
31

Da dưới

0
31

Chúng tôi đặt con trỏ lệnh (không quan trọng ở đây) 0và thanh ghi đầu ra thành 31. Nếu nội dung của thanh ghi đầu ra là >= 0, chúng ta xuất giá trị chứa dưới dạng a char. Tất cả các mã khác được bỏ qua.

Brainfuck

-[----->+<]>-.

Đưa 3vào thanh ghi, giảm giá trị một lần với -và cuối cùng xuất ra với. .

Fob

#>&$3#<>$

Đây là một chút khó khăn hơn, vì Brainfuck cũng đọc <>hướng dẫn trong Fob. Chúng tôi vào chế độ thực thi với #và tăng con trỏ của Brainfuck lên một lần, điều này giúp chúng tôi dễ dàng hơn sau này. Chúng tôi không có gì để thực hiện, vì vậy không có gì được thực thi.

Chúng tôi vào chế độ bộ tích lũy với $, ném vào a 3, nhập lại chế độ thực thi, đẩy nội dung của bộ tích lũy vào ngăn xếp <và cuối cùng chúng tôi xuất nội dung với >.

Để ngăn Brainfuck vặn vít với chương trình, chúng tôi lại vào chế độ tích lũy $.


7

7 ngôn ngữ, 55/7 ^ 3 0.16035

Chạy trong PowerShell v1, v2, v3, v4 và v5, Foo và Pyth

#7.q"6""
$p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]

Các chữ số 1-5 sử dụng logic tương tự như câu trả lời của sweerpotato . Biến $PSVersionTableđặc biệt được giới thiệu trong PowerShell v2 và chứa danh sách bản dựng đầy đủ, bản sửa đổi, v.v ... Đây là một ví dụ đầu ra của biến:

PS C:\Tools\Scripts> $PSVersionTable

Name                           Value                                                                                                                           
----                           -----                               
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.17400
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

Trong mã này, trước tiên chúng tôi lưu trữ nó $pđể chiều dài mã ngắn hơn. Sau đó, chúng tôi kiểm tra sự tồn tại của nó bằng cách tận dụng biến như một chỉ mục thành một mảng hai mục:

  • Nếu biến không tồn tại, PowerShell sẽ tự động tạo nó và gán cho nó $NULL, biến !đó $TRUE, hoặc 1, tương ứng với phần tử thứ hai trong mảng, xuất ra1 .
  • Nếu biến không tồn tại (như trường hợp trong v2 +), thì !biến số đó dẫn đến $FALSEhoặc 0, chỉ mục nào cho phần tử đầu tiên, đưa ra số phiên bản.

Sử dụng Foo cho 6, chúng tôi tận dụng đó #là một nhận xét trong PowerShell, do đó, điều đó bị bỏ qua khi thực hiện nó trong môi trường PS. Tuy nhiên, Foo sẽ vui vẻ nhổ số 6và sau đó tiếp tục phần còn lại của chương trình, điều này không làm gì cả.

Sử dụng Pyth cho 7, chúng tôi quay trở lại 7, sau đó thoát ngay lập tức .q, do đó vòng lặp while-true vô hạn bắt đầu #không thành vấn đề. Vì chúng tôi có một cái gì đó còn lại được in ngầm. Cảm ơn @ FryAmTheEggman cho sự bổ sung này.

Chỉnh sửa - Đã chơi một số byte nhờ Mauris Chỉnh sửa - giải thích rõ ràng về Pyth nhờ Sp3000


Thế còn $p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]? Điều đó hoạt động trên Powershell của tôi, nhưng có thể không phải trên tất cả các phiên bản trước.
Lynn

7

7 ngôn ngữ, 287/7 ^ 3 = 0.836

Có lẽ điểm số thấp nhất đạt được, dù sao tôi cũng thích 3 phiên bản C polyglot này.

Đã thêm giải pháp Python nhàm chán để ít nhất đủ điều kiện nhận tiền thưởng "3 ngôn ngữ duy nhất".

Đã thêm Java bằng cách lạm dụng các biểu đồ C cho các nội dung nhận xét khác nhau.

Hoạt động trong:

  • Con trăn 1

  • Con trăn 2

  • Con trăn 3

  • C89

  • C99

  • C ++

  • Java

phiên bản đánh gôn:

/*
*??/
/
#include <stdio.h>
#ifndef __cplusplus
#define true 8/*
import sys
print(sys.version[0])
'''
#*??/
/
#endif
int main(){int a=(true>1)?-6:3;printf("%d",(true//*
+a
//**??/
/+2));}
#define a \
'''
/**\u002f
public class p{public static void main(){System.out.println("7");}}
/**/

Ung dung:

/*
*??/
/

#include <stdio.h>

#ifndef __cplusplus
#define true 8/*

import sys
print(sys.version[0])
'''
#*??/
/
#endif 

int main()
{
    int a = (true > 1) ? -6 : 3;
    printf ("%d", (true//*
    +a
    //**??/
/
    +2));
}
#define a \
'''

/**\u002f
public class p
{
    public static void main()
    {
        System.out.println("7");
    }
}
/**/

Ok điều này có lẽ đang trở nên mệt mỏi và tôi hy vọng kỹ năng tiếng Anh của tôi đủ tốt để giải thích nó bình thường.

Trước hết tôi sẽ giải thích các loại bình luận khác nhau mà tôi đã sử dụng để gói gọn các cấu trúc ngôn ngữ cho từng loại.

Vì vậy, hãy lấy khối đầu tiên:

/*
*??/
/

Đối với Java, đây chỉ là khởi đầu của một nhận xét nhiều dòng. Nhưng ... trong C99 / 89 / ++, điều này ước tính

/*
*/

??/là một bộ ba \trong khi trong C, \nhân vật là loại nhất quán và thậm chí tiêu thụ ngắt dòng trong chức năng chỉ huy của nó. Điều này làm cho kết quả của một \n"chỉ được hiển thị" thay vì ngắt dòng ong. điều đó có nghĩa là, được đưa ra mảng byte này đại diện cho khối đầu tiên: [ /] [ *] [ \n] [ *] [ ?] [ ?] [ /] [ \n] [ /] sẽ là sau khi đánh giá trecraft: [ /] [ *] [ \n] [ *] [ \] [ \n] [ /] Trong đó chức năng nhất quán của các \kích hoạt và "tiêu thụ", \ndo đó, phần còn lại và cuối cùng trong C langs được đánh giá byte là: [ /] [ *] [ \n] [ *] [ /]

Nhưng về tất cả java này không biết gì và coi tất cả những gì diễn ra như một bình luận cho đến khi thủ thuật này được hoàn nguyên.

(còn tiếp!)


7

4 ngôn ngữ (Befunge-93, microscript II, microscript và Foo), điểm 7/64 = 0.109

"4"1.@2

Befunge: Đẩy 4, đẩy 1, in 1 và chấm dứt.

Microscript II: Tạo chuỗi "4", loại bỏ nó, lấy căn bậc hai của một, loại bỏ nó và cuối cùng đặt x thành 2. Điều này sau đó được in ngầm.

Kính hiển vi: Đẩy 52 lên ngăn xếp (sẽ không bao giờ thực sự được sử dụng cho phần còn lại của chương trình), tăng thanh ghi (ban đầu bằng 0) lên một, sau đó tăng thanh ghi lên hai. Điều này sau đó được in ngầm.

Foo: In chuỗi "4", sau đó ấn 2


6

Python 1 | 2 | 3, 27 byte / 27 = 1

print(len("\xabc")+(1/2>0))

Việc sử dụng số phiên bản của @ sweerpotato khiến tôi tự hỏi liệu có thể phân biệt được Pythons ít hơn không. Đây là thứ tốt nhất tôi tìm thấy.

Giải trình

Để phân biệt Python 3 với các phiên bản trước, chúng tôi sử dụng thủ thuật chia số nguyên tiêu chuẩn so với thủ thuật chia điểm trôi nổi. (1/2>0) == (0>0)trả về 0 tiền Python 2.3 hoặc Falsetừ Python 2.3 trở đi và (1/2>0) == (0.5>0)trả về TruePython 3.

Để phân biệt Python 1 với phần còn lại, chúng ta lấy độ dài của chuỗi "\xabc", độ dài một trong Python 1 và chiều dài hai từ Python 2 trở đi. Tại sao? Bởi vì

Thoát \ x trong chuỗi ký tự hiện có chính xác 2 chữ số hex. Trước đây, nó sẽ tiêu thụ tất cả các chữ số hex sau 'x' và lấy 8 bit thấp nhất của kết quả, vì vậy \ x123456 tương đương với \ x56.

(Từ những gì mới trong Python 2.0 )


6

Python 3, Ruby, Perl, C, C ++, Objective-C 202 byte / 6 ^ 3 = 0.935 ...

Điều này thực sự khá thú vị và chơi rất nhiều với booleans.

Bạn có thể tất cả các phiên bản của mã tại trang web sau , bằng cách sao chép và dán mã vào trình thông dịch.

#include <stdio.h> /*
print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1
"""""
*/
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}/*
"""
#*/

Python 3, in 1

Thủ thuật như sau:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Cái này sẽ in 1

Ruby, in 2

Mã được giải thích cho Ruby là:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Vì vậy, bản in này 2

Perl, in 3

Mã được giải thích cho Perl là:

print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1

Trước hết, __DATA__mã thông báo cho trình biên dịch Perl rằng quá trình biên dịch đã kết thúc. Mọi thứ sau đó đều bị bỏ qua.

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Và in 3

C, in 4

Mã được giải thích khá khác biệt so với các mã khác:

#include <stdio.h>
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}

Điều này chỉ đơn giản là in char 4.

C ++, bản in 5

Giống như mã C

Điều này sẽ in char 5.

Mục tiêu-C, bản in 6

Giống như mã C

Điều này sẽ in char 6.


5

5 ngôn ngữ, 18 byte / 5 ^ 3 = 0.144

Chạy trong Brainbool , Mathematica , Foo , > <>Befunge-93 .

4!<n;+Print@2"3".5

Brainbool

Brainbool giống như Brainfuck, nhưng nó chỉ hoạt động trên các bit, đầu vào và đầu ra của nó chỉ bao gồm 01.

4!<n;+Print@2"3".5
  <                   move the pointer to the left
     +                logic not
                .     print the current cell

Toán học

Trong Mathematica, mọi thứ đều là biểu thức và có giá trị. Print@2in 2và trả lại biểu tượngNull . Sau đó, mã thực hiện một số tính toán tượng trưng, ​​nhưng không in bất cứ điều gì.

Foo

"3" bản in 3. Tôi không biết những phần khác làm gì.

> <>

4!<n;+Print@2"3".5
4                     push 4
 !                    skip the next command
   n                  pop and print it as a number
    ;                 end the program

Befunge

4!<n;+Print@2"3".5
4                     push 4
 !                    logical not
  <                   makes the program counter travel to the right
 !                    logical not
4                     push 4
                 5    push 5
                .     pop and print it as a number
             "3"      push the string "3"
            2         push 2
           @          end the program

12 ngôn ngữ, 35 byte / 12 ^ 3 = 0,0202546 ...

Sử dụng thủ thuật của sweerpotato , rẻ tiền nhưng mạnh mẽ.

Chạy trong Brainbool , Mathicala 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 và 10.0 , Foo> <> .

cn;+"11".Print@Floor@$VersionNumber


5

6 ngôn ngữ, 38/6 ^ 3 = 0.17592̅5̅9̅

Khoảng trắng , Brainfuck, Ruby, Mê cung , Foo, Nghiêm túc

Huyền thoại:

£: chuyển hướng

: không gian

§: 0x7f

puts•2;#4!@•-[>+<-----]>6.§"5"•£    
£
•£

Điều này chứa các ký tự không thể in được, vì vậy đây là hexdump:

7075747320323b23342140202d5b3e2b3c2d2d2d2d2d5d3e362e7f22352220090a090a20090a

Giải trình:

Khoảng trắng

Hãy thử trực tuyến. (Lưu ý: chương trình của tôi bỏ qua ba nguồn cấp đóng để kết thúc chương trình, tôi đã viết / kiểm tra điều này trên Whitelips và điều đó tạo ra đầu ra thích hợp ở đó, nhưng không có trên Try It Online, vì vậy chương trình được liên kết có thêm hai ký tự đó. như tôi có thể nói, một số phiên dịch viên cho phép bạn làm điều đó, những người khác bị mắc kẹt trong một vòng lặp vô hạn mà không có sự chấm dứt rõ ràng)

(bỏ qua các ký tự bị bỏ qua)

spacespacespacetabenter: đẩy 1 lên ngăn xếp

tabenterspacetab: xuất đỉnh của ngăn xếp

Hồng ngọc

Không cần phải giải thích. In 2, coi phần còn lại của dòng đó (ergo, chương trình brainfuck) dưới dạng một nhận xét, coi phần còn lại của tệp là trống.

Brainfuck

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

Yêu cầu một thông dịch viên hỗ trợ underflow. Chuyển ô đầu tiên xuống 255 sau đó sử dụng ô đó cho bộ đếm vòng lặp để tạo 51, đó là mã ascii cho 3.

Mê cung

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

(bỏ qua hai dòng cuối cho mức độ dễ đọc vì chúng không bao giờ đạt được)

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•                            skipped
     2                           push 2 onto stack
      ;                          pop 2 from stack
       #                         push current stack depth (0) to stack
        4                        push 4 to stack
         !                       print top of stack as integer
          @                      program terminates

Foo

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

Điều duy nhất ảnh hưởng đến đầu ra là "5", in 5.

Nghiêm túc

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

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•2;#4!@ -[>+<-----]>           assorted stack manipulation that doesn't affect this program
                        6          push 6 to the stack
                         .         output top of the stack
                          §        (0x7f) terminate program

5

5 ngôn ngữ, Chaîne , Minkolang , Foo , Brainf ** k-ngVitsy , 21/5 ^ 3 = 0.168

2|<«+!@"3".N+m

5N»

Brainf ** k-ng

2|<«+!@"3".N+m

5N»
  <            go left (should still be ok)
    +!         output 1
      @        halt execution

Chane

2|<«+!@"3".N+m

5N»
2              «add 2 to the current string»
 |<            «take off and put on the string (no op)»
   «           «comment»

  »
               «implicit output»

Foo

2|<«+!@"3".N+m

5N»
       "3"     print three

Chồn

2|<«+!@"3".N+m

5N»
2              C push 2 to the stack [2] C
 |             C mirror C
2              C push 2 to the stack [2,2] C
             m C ignored C
            +  C add top two [4] C
           N   C output C
          .    C terminate program C

Vitsy

2|<«+!@"3".N+m

5N»
2              push 2
 |             mirror
2              push 2
             m pop 2, goto line 2
5              push 5
 N             output 5
  »            ignored

Tôi có thể có thể thêm> <> hoặc một cái gì đó.


1
Bạn biết đấy, tôi chưa bao giờ tìm thấy một cách sử dụng tốt cho gương. xD
Addison Crump

5

Craneflak , Brain-Flak Classic , Rain-Flak , BrainHack , Brain-Flueue , miniflak , miniHack : .1020

(([]()()()<()()()>)()()){}#{}({}())

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

Giải trình

Điều đầu tiên diễn ra ở đây là có một sự khác biệt trong cách đọc các bình luận giữa các phiên dịch viên BrainHack, CraneFlak và Rain-Flak. Craneflak không có bình luận, trong Rain-Flak #bình luận phần còn lại của dòng và trong các #{...}bình luận BrainHack ra bên trong.

Vì vậy, đây là những gì mỗi ngôn ngữ đọc:

Rain-Flak: (([]()()()<()()()>)()()){}         -> 3
BrainHack: (([]()()()<()()()>)()()){}({}())   -> 4
Craneflak: (([]()()()<()()()>)()()){}{}({}()) -> 1

Điều tiếp theo là sự khác biệt giữa flak não và miniflaks. Cả Rain-Flak và BrainHack đều hỗ trợ miniflak, trong đó tất cả các thao tác bổ sung được loại bỏ đơn giản. Điều này có nghĩa là họ mất []<...>

Rain-Flak: (()()()()()())         -> 6
BrainHack: (()()()()()())({}())   -> 7

Tiếp theo chúng ta có sự khác biệt giữa Brain-Flak và Brain-Flak Classic. Trong cổ điển []-1 thay vì chiều cao ngăn xếp, điều đó có nghĩa là kết quả của chúng tôi thấp hơn 1 so với Rain-Flak thông thường, biến nó thành 2.

Cuối cùng, chúng ta có sự khác biệt giữa Flak não và flueue. Trong não bộ, hàng đợi được sử dụng thay vì ngăn xếp. Thông thường flak não đẩy 3 rồi 5 và bật 5 đi, tuy nhiên trong trường hợp não bộ, pop sẽ loại bỏ 3 chứ không phải 5.


4

Dải ngân hà 1.0.2 , CJamSTXTRM , 20 byte / 3 ^ 3 = 0.741

Tôi tưởng tượng có ít nhất một ngôn ngữ khác mà tôi có thể thêm vào.

'2"3""1"1<<1>;;"2"3;

Giải trình


Dải ngân hà ,1

Trong Dải Ngân hà, các chuỗi chỉ được biểu thị bằng các cặp dấu ngoặc kép. Một trích dẫn duy nhất đọc đầu vào từ dòng lệnh; nếu không có, nó sẽ đẩy một chuỗi rỗng. Lớn hơn và nhỏ hơn các dấu hiệu sẽ lần lượt xoay toàn bộ ngăn xếp sang phải và trái. Cuối cùng, một dấu chấm phẩy hoán đổi hai phần tử ngăn xếp trên cùng.

Đây là một trực quan hóa ngăn xếp (ngăn xếp được hiển thị là kết quả của hoạt động được liệt kê sau khi nó đã xảy ra):

["", 0]                                             #  default stack

["", 0, ""]                                 #   '   #  read input from command line
["", 0, "", 2]                              #   2   #  push 2 to the stack
["", 0, "", 2, "3"]                         #  "3"  #  push "3" to the stack
["", 0, "", 2, "3", "1"]                    #  "1"  #  push "1" to the stack
["", 0, "", 2, "3", "1", 1]                 #   1   #  push 1 to the stack
[0, "", 2, "3", "1", 1, ""]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0, 1]              #   1   #  push 1 to the stack
[1, "", 2, "3", "1", 1, "", 0]              #   >   #  rotate the stack rightward
[1, "", 2, "3", "1", 1, 0, ""]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0, "", 2]       #  "2"  #  push 2 to the stack
[1, "", 2, "3", "1", 1, "", 0, "", 2, "3"]  #   3   #  push "3" to the stack
[1, "", 2, "3", "1", 1, "", 0, "", "3", 2]  #   ;   #  swap the top two stack elements

CJam ,2

Trong CJam, chuỗi cũng được biểu thị bằng các cặp trích dẫn kép. Một trích dẫn đẩy mã ký tự của ký tự sau. Khi một mã ký tự là đầu ra, nó là đầu ra như là ký tự tương ứng của nó. Các dấu hiệu lớn hơn và ít hơn hoạt động như mong đợi, đánh giá thứ tự của hai phần tử ngăn xếp hàng đầu. Cuối cùng, một dấu chấm phẩy loại bỏ phần tử ngăn xếp trên cùng. Khi kết thúc chương trình, nội dung của ngăn xếp là đầu ra.

Đây là một trực quan hóa ngăn xếp (ngăn xếp được hiển thị là kết quả của hoạt động được liệt kê sau khi nó đã xảy ra):

[]                         #  default stack

['2]               #  '2   #  push the character code of "2" to the stack
['2, "3"]          #  "3"  #  push "3" to the stack
['2, "3", "1"]     #  "1"  #  push "1" to the stack
['2, "3", "1", 1]  #   1   #  push 1 to the stack
['2, "3", "1"]     #   <   #  leave the greater of the top two stack elements on the stack
['2, 0]            #   <   #  leave the greater of the top two stack elements on the stack
['2, 0, 1]         #   1   #  push 1 to the stack
['2, 1]            #   >   #  leave the lesser of the top two stack elements on the stack
['2]               #   ;   #  pop the top stack value
[]                 #   ;   #  pop the top stack value
['2]               #  "2"  #  push the character code of "2" to the stack
['2, "3"]          #   3   #  push "3" to the stack
['2]               #   ;   #  pop the top stack item

STXTRM ,3

Trong MSM, bất cứ thứ gì không phải là toán tử đều được đẩy lên ngăn xếp dưới dạng ký tự. Dấu chấm phẩy nhân đôi phần tử ngăn xếp trên cùng. Chương trình tiếp tục cho đến khi không còn toán tử nữa, hoặc có một phần tử duy nhất trên ngăn xếp.

Ký tự cuối cùng trên ngăn xếp là 3, được nhân đôi bởi toán tử cuối cùng. 3là phần tử trên cùng ở cuối chương trình, vì vậy nó là đầu ra.


4

5 ngôn ngữ, 18 byte / 5 ^ 3 = 0.144

Ouroboros , Pip , QBasic, Foo và Pyth

5'"4"()"
1?3'@n()2

1. Ouroboros

Mỗi dòng của chương trình đại diện cho một con rắn ăn đuôi của nó.

Rắn 1

Đẩy 5, 'là không đẩy, đẩy 52(mã ASCII "4").(khiến con rắn bật một số và ăn nhiều ký tự của đuôi nó. Vì điều này dẫn đến việc nuốt con trỏ lệnh (và toàn bộ con rắn), việc thực thi dừng lại.

Rắn 2

Đẩy 1, đẩy một số ngẫu nhiên ( ?), đẩy 3, 'là không có. @xoay phần 1trên cùng của ngăn xếp và nxuất ra dưới dạng số, để lại phần 3trên cùng của ngăn xếp. Sau đó (ăn nhiều nhân vật này từ cuối con rắn, nuốt con trỏ chỉ dẫn và dừng lại.

Bạn có thể chạy chương trình này trực tuyến trong trình thông dịch Stack Snippet tại đây .

2. Đường ống

Hầu hết chương trình bao gồm các biểu thức được đánh giá và loại bỏ:

  • 5
  • '" (nghĩa đen)
  • 4
  • "()"
  • 1?3'@ (biểu hiện ternary)
  • n (biến, = dòng mới)
  • () (không)

Cuối cùng, biểu thức cuối cùng 2, được in.

3. QBasic

Tất cả mọi thứ sau 'là một bình luận. Do đó, dòng đầu tiên sôi xuống 5, một số dòng. Trên dòng thứ hai, 1là một số dòng và ?3là một phím tắt cho PRINT 3.

(Rõ ràng việc có số dòng không theo thứ tự không phải là vấn đề, mặc dù vậy sẽ rất dễ khắc phục nếu có.)

4. Foo

Hầu như tất cả mọi thứ là không-ops. "4"in 4. Các dấu ngoặc đơn (x2) là một vòng lặp chạy cho đến khi ô mảng hiện tại bằng 0, điều này đúng ngay lập tức và vòng lặp thoát. @, khi không được theo sau bởi một số, lấy giá trị của ô mảng hiện tại (được khởi tạo thành 0) và đẩy nó vào ngăn xếp.

Tôi không hoàn toàn chắc chắn cách "xử lý thứ hai, chưa từng có được xử lý. Các phiên bản trực tuyến dường như để thêm một dòng mới vào đầu ra, mà các quy tắc của sự thách thức cho phép.

5. Bình

5là đầu ra. Sau đó, chương trình gặp phải '"4", cố gắng đọc từ một tệp có tên 4. Miễn là không có tệp như vậy tồn tại, tôi nghĩ rằng điều này sẽ chấm dứt chương trình có lỗi. ( Phiên bản trực tuyến cho biết - name 'open' is not definedTôi giả sử vì mở tệp không được phép trực tuyến.)

Việc đi lạc "ở cuối dòng 1 đảm bảo rằng dòng 2 không gây ra lỗi cú pháp trước khi thực hiện.



@Dennis Cảm ơn! Trang Esolang không có liên kết đến thông dịch viên đó.
DLosc

Đây là chỉ mục của các ngôn ngữ hiện có. Nếu bạn muốn tôi thêm một cái, chỉ cần ping tôi trong trò chuyện.
Dennis

4

4 ngôn ngữ, 24 byte, 24/4 ^ 3 = 0,375

print(1//0.5--1+1/2*2
);

1. PHP

PHP thực thi print(1);bằng 1

2. Lua

Lua thi hành án print(1//0.5); bằng 2

3. Python 2

Python 2 thực thi print(1//0.5--1+1/2*2);bằng 3 (phép chia số nguyên)

4. Python 3

Python 3 thực thi print(1//0.5--1+1/2*2);bằng 4 (phép chia float)


Câu trả lời hay, tôi thích câu trả lời bằng các ngôn ngữ thông thường :-) hy vọng bạn sẽ chơi golf vui vẻ trên ppcg :-) vui lòng thử bất kỳ thử thách nào trước đây của tôi nếu bạn nghĩ chúng thú vị :-) một số hơi khó và một số thì khó hơn cơ bản :-)
Stewie Griffin

Bạn có thể quan tâm đến tiền thưởng 100 rep mở được mô tả trong thử thách. Outgolf Sp3000 (28 byte, 4 ngôn ngữ) chỉ sử dụng các ngôn ngữ thông thường (được xác định trong liên kết) và đó là của bạn :-) tiếc là python 2 và 3 không được coi là duy nhất trong thử thách tiền thưởng.
Stewie Griffin

3

Brainfuck-ng, Foo,> <>, 9 byte / 3 ^ 3 = 0,333 ...

#+!"2";n3

Brainfuck-ng

Các ký tự duy nhất nó nhận ra là +!:

+ Increment cell by one
! Print as integer

Bản in 1

Foo

In tất cả mọi thứ trong dấu ngoặc kép.

"2"

Bản in 2

> <>

#Gương điểm bên trái, 3đẩy 3 đến ngăn xếp, nxuất ra dưới dạng số nguyên, ;dừng chương trình.

#      ;n3

2

3 ngôn ngữ, 82 83/3 ^ 3 = 3.074 ...

Hoạt động trong ??? , Khoảng trắngBeatnik . Hay đúng hơn, nó sẽ hoạt động trong các ngôn ngữ đó nhưng tôi sẽ không thể kiểm tra chúng trong vài ngày. Dù sao, đây là mã:

K... Jax... Jy... Jy...   ...
My...    My...
... ...     ......................XO!

1. ???

.................................................!

??? về cơ bản là brainfuck nhưng nó sử dụng dấu câu phổ biến như các lệnh thay vì các ký tự truyền thống. .tăng ô nhớ hiện tại, được thực hiện 49 lần. !lấy ô nhớ hiện tại và in nó thành ký tự, ở đây1 .

2. khoảng trắng

[Space][Space][Space][Tab][Line Feed]
[Tab][Line Feed]
[Space][Tab]

Khoảng trắng là ngôn ngữ bỏ qua tất cả các ký tự không phải khoảng trắng. Ở đây tôi đã chuyển đổi nó thành một hình thức dễ đọc. Dòng đầu tiên đẩy 2lên ngăn xếp và hai dòng thứ hai in đỉnh của ngăn xếp dưới dạng số ở đây 2.
Lưu ý rằng trong mã kết hợp, tôi đã thay thế các tab bằng bốn khoảng trắng do giới hạn kỹ thuật.

3. Beatnik

K Jax
Jy Jy
My My
XO

Beatnik là ngôn ngữ mà mỗi từ được chuyển đổi thành điểm Scrabble của nó, sau đó các điểm số đó được hiểu là các lệnh. Dòng đầu tiên đẩy 17lên ngăn xếp. Dòng thứ hai bản sao phía trên cùng của ngăn xếp hai lần và dòng thứ ba cho biết thêm phía trên đến các yếu tố của ngăn xếp với nhau hai lần, có hiệu quả gấp ba lần 17vào 51. Dòng cuối cùng in ký tự trên đầu ngăn xếp, ở đây 3.
Lưu ý rằng tôi đang sử dụng Beatnik ở Face Value, giả sử không có lỗi trong thông số ban đầu của Beatnik. Cũng lưu ý rằng tôi đang sử dụng hệ thống tính điểm Scrabble tiếng Anh Bắc Mỹ.

Nếu hiện tại vẫn chưa rõ ràng, thì mỗi ngôn ngữ này chỉ chấp nhận một loại ký tự nhất định (dấu chấm câu, khoảng trắng và chữ cái tương ứng), vì vậy việc viết polyglot này cũng dễ như viết các chương trình riêng lẻ. "Bí quyết" thực sự duy nhất là sử dụng mã Whitespace để tách các từ khỏi Beatnik. Ngoài ra, các chương trình riêng lẻ không chồng chéo lên nhau.


2
3 ^ 3 = 27 ==> 82/27 = 3.037037037037037 ...
admBorkBork

1
Mã khoảng trắng của bạn in 0, không phải 2. Đã thử nghiệm ở đâyđây .
Dennis

@Dennis Cảm ơn, tôi đã bỏ qua bit dấu.
Mike Bufardeci

2

5 ngôn ngữ, 175/5 ^ 3 = 1,4

Tôi quyết định đăng một câu trả lời khác vì tiền thưởng đang thay đổi các yêu cầu theo cách khiến tôi cảm thấy không hài lòng với câu trả lời đầu tiên của mình (nhưng điều đó vẫn làm tôi hài lòng theo cách của cuộc trò chuyện chung chung!)

Vì vậy, đây là giải pháp của tôi mà Qualifys cho tiền thưởng:

Nó biên dịch trong

  • C99
  • objC90
  • C ++ 0x
  • Hồng ngọc
  • Perl
#if __cplusplus
#define x\
=begin\
=pod
#endif
int a=
#ifndef x
1//**/
+1
#else
3
#endif
;int main(){printf("%d",a);}
#ifdef f
=end
puts 5;
=begin
=cut
print"4";
=end
#endif

2

3 ngôn ngữ, 15 byte, điểm 0,555 ...

Gonna thêm ngôn ngữ sau.

2//1+1#😅😨

1. Emotinomicon

Emotinomicon khá nhiều bỏ qua bất kỳ văn bản không phải là một chuỗi. 😅đẩy 1 để xếp chồng và 😨xuất ra ĐKDV dưới dạng số.

2. Javascript

Nhận xét trong Javascript bắt đầu bằng //, vì vậy chỉ có 2phần được thực thi.

3. Python 2/3 REPL

Nhận xét trong Python bắt đầu bằng #, vì vậy chỉ có 2//1+1phần được thực thi. //là phép chia số nguyên trong Python 3 và nó giống như /trong Python 2. 2 chia cho 1 là 2, cộng với 1 là 3.


2

4 ngôn ngữ, 97 byte, 0.37890625

s="1";s=~-3;2//2;'''/.to_s.ord;"=;print 4;
__DATA__
=1;
";#'''#";print=s=>console.log(3)
print(s)

Hồng ngọc

Điều này đặt sđể "1", so sánh sử dụng =~chống lại -3trong một bối cảnh bãi bỏ, cố gắng phân chia 2bởi /2;'''/.to_s.ordsau đó bắt đầu một chuỗi mới có chứa =;print 4; __DATA__ =1;, lượt truy cập một lời nhận xét, sau đó prints smà vẫn còn 1.

Con trăn

Bộ sđể "1"theo trên, sau đó đặt nó một lần nữa để ~-32. Chúng tôi chạy một phân chia số nguyên 2//2, sau đó có một chuỗi doc chứa /.to_s.ord;"=;print 4; __DATA__ =1; ";#, theo sau là một nhận xét, cuối cùng là printing s, vẫn còn 2.

JavaScript

Đặt sthành "1"sau đó đặt lại thành ~-3như trên, sau đó có 2dòng tiếp theo là một nhận xét. Sau đó, chúng tôi đặt biến __DATA__thành 1. Có một chuỗi ngắn chứa ;#'''#theo sau là một định nghĩa của hàm printmà mã hóa đầu ra là 3, được gọi trên dòng tiếp theo.

Perl

Chạy một sự thay thế tương đương với s/"1";s/~-3;2\/\/2;'''\/.to_s.ord;"/, prints 4và phần còn lại của chuỗi được che dấu sau mã __DATA__định danh.


2

QBasic, QBIC và> <>, 18 byte / 3 ^ 3 ngôn ngữ = 0,66666 điểm

1:?v+1'-5`
''`>3n;

Phá vỡ:

1. QBasic ( Nhận IDE )

1:          Line number 1
  ?         Print
   v+1      undefined var v = 0 + 1 = 1
'-5`        The rest of theis code is a QBasic comment
''`>3n;     As is this

2. QBIC ( Nhận thông dịch viên )

1     inserts a 1 in the code - mostly harmless
:     Reads from the cmd line. Nothing there, creates an empty variable a
?     Print
v+1   v is initialised to 6, +1 = 7
'     Code Literal: everything till the ` is passed to QBasic without processing
 -5`  7-5 = 2

''`>3n; Code literal with the first literal being a ': comment in QBasic

3.> <> ( Dùng thử trực tuyến )

1:  Push a 1 on the stack, duplicate stack
?   Pop top off the stack and skip next instruction if that's a 0
v   Move downwards - rest of the line is ignored

>   move to the right
3   Push 3 onto the stack
n   Print the top of the stack as a number
;   End the program

1
Tôi nghĩ rằng bạn muốn lập phương trình số lượng ngôn ngữ trong điểm số của mình (ví dụ: 18 / (3 ^ 3))
nghiện toán học

1

JavaScript, HTML và PHP, 72 byte / 3 ^ 3 = 2,67

1<!top?2:2//><!--<?='--'.'><script>document.body.innerHTML=3</script>'?>

Trong HTML, điều này sẽ in số 1 hàng đầu, bỏ qua <!window?2:2//>thẻ và phần còn lại là nhận xét HTML.

Trong JavaScript, nó đánh giá 1<!window?2:2 và xuất ra 2 (cái này phải được chạy trong bảng điều khiển) và phần còn lại là một nhận xét.

Trong PHP, sau đây là đầu ra từ máy chủ: 1<!top?2:2//><!----><script>document.body.innerHTML=3</script>thay thế HTML 1bằng 3.


1
Chào mừng bạn đến với PPCG.SE! Bài đăng đầu tiên tuyệt vời! Hai điều: chúng tôi thường không thích câu trả lời dựa trên REPL (chương trình Javascript). Ngoài ra, mã PHP dường như không chạy khi tôi đặt nó vào một trình thông dịch trực tuyến , chính xác thì PHP hoạt động như thế nào?
GamrCorps

Cảm ơn! Vâng, về mặt kỹ thuật là PHP + HTML (ví dụ: nếu đây là mã nguồn của code.php, truy cập trang web / code.php trong trình duyệt sẽ hiển thị 3.
cuniculus

Hãy thử ở đây: mowbl.com/se.php .
cuniculus
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.