Xin chào thế giới đa ngôn ngữ


72

Bài tập, nhiệm vụ

Tạo một chương trình hoặc một chức năng hợp lệ trong nhiều ngôn ngữ lập trình và khi được biên dịch / diễn giải thành một ngôn ngữ khác, "Hello, World!" trong một ngôn ngữ tự nhiên khác nhau.

Ví dụ: một giải pháp hợp lệ có thể xuất ra Hello World!(tiếng Anh) khi được biên dịch và chạy dưới dạng C, Hallo Welt!(tiếng Đức) khi được biên dịch và chạy dưới dạng C ++ và 你好世界!(tiếng Trung Quốc) khi chạy dưới dạng Python.

Quy tắc

Để tránh sự mơ hồ về tính hợp lệ của câu trả lời, bên dưới là danh sách các phiên bản được phép của cụm từ trong một số ngôn ngữ. Danh sách này bao gồm cụm từ trong các ngôn ngữ mà Google Dịch có bản dịch được xác minh bởi cộng đồng của cụm từ (khi viết bài này). *

Độ chính xác của các bản dịch này còn gây tranh cãi, nhưng chúng là những gì mà thử thách này sẽ sử dụng. Các chuỗi in phải tuân theo chính xác định dạng bên dưới (ngoại trừ khoảng trắng hàng đầu hoặc dấu).

Afrikaans:    Hello Wêreld!
Albanian:     Përshendetje Botë!
Amharic:      ሰላም ልዑል!
Arabic:       مرحبا بالعالم!
Armenian:     Բարեւ աշխարհ!
Basque:       Kaixo Mundua!
Belarussian:  Прывітанне Сусвет!
Bengali:      ওহে বিশ্ব!
Bulgarian:    Здравей свят!
Catalan:      Hola món!
Chichewa:     Moni Dziko Lapansi!
Chinese:      你好世界!
Croatian:     Pozdrav svijete!
Czech:        Ahoj světe!
Danish:       Hej Verden!
Dutch:        Hallo Wereld!
English:      Hello World!
Estonian:     Tere maailm!
Finnish:      Hei maailma!
French:       Bonjour monde!
Frisian:      Hallo wrâld!
Georgian:     გამარჯობა მსოფლიო!
German:       Hallo Welt!
Greek:        Γειά σου Κόσμε!
Hausa:        Sannu Duniya!
Hebrew:       שלום עולם!
Hindi:        नमस्ते दुनिया!
Hungarian:    Helló Világ!
Icelandic:    Halló heimur!
Igbo:         Ndewo Ụwa!
Indonesian:   Halo Dunia!
Italian:      Ciao mondo!
Japanese:     こんにちは世界!
Kazakh:       Сәлем Әлем!
Khmer:        សួស្តី​ពិភពលោក!
Kyrgyz:       Салам дүйнө!
Lao:          ສະ​ບາຍ​ດີ​ຊາວ​ໂລກ!
Latvian:      Sveika pasaule!
Lithuanian:   Labas pasauli!
Luxemburgish: Moien Welt!
Macedonian:   Здраво свету!
Malay:        Hai dunia!
Malayalam:    ഹലോ വേൾഡ്!
Mongolian:    Сайн уу дэлхий!
Myanmar:      မင်္ဂလာပါကမ္ဘာလောက!
Nepali:       नमस्कार संसार!
Norwegian:    Hei Verden!
Pashto:       سلام نړی!
Persian:      سلام دنیا!
Polish:       Witaj świecie!
Portuguese:   Olá Mundo!
Punjabi:      ਸਤਿ ਸ੍ਰੀ ਅਕਾਲ ਦੁਨਿਆ!
Romanian:     Salut Lume!
Russian:      Привет мир!
Scots Gaelic: Hàlo a Shaoghail!
Serbian:      Здраво Свете!
Sesotho:      Lefatše Lumela!
Sinhala:      හෙලෝ වර්ල්ඩ්!
Slovenian:    Pozdravljen svet!
Spanish:      ¡Hola Mundo!         // Leading '¡' optional
Sundanese:    Halo Dunya!
Swahili:      Salamu Dunia!
Swedish:      Hej världen!
Tajik:        Салом Ҷаҳон!
Thai:         สวัสดีชาวโลก!
Turkish:      Selam Dünya!
Ukrainian:    Привіт Світ!
Uzbek:        Salom Dunyo!
Vietnamese:   Chào thế giới!
Welsh:        Helo Byd!
Xhosa:        Molo Lizwe!
Yiddish:      העלא וועלט!
Yoruba:       Mo ki O Ile Aiye!
Zulu:         Sawubona Mhlaba!

Vì vậy, có 74 ngôn ngữ có thể được sử dụng.

Tiêu chí chiến thắng

Giải pháp có thể xuất ra cụm từ với số lượng ngôn ngữ lớn nhất sẽ thắng. Trong trường hợp hòa, giải pháp ngắn hơn (tính bằng byte) sẽ thắng.


* Các bản dịch cho tiếng Malagasy và tiếng Malta đã được đánh dấu bởi cộng đồng, nhưng rõ ràng không chính xác (một bản chỉ là "Xin chào thế giới!" Và bản khác "Xin chào dinja!", Nhưng một mình "Xin chào!" Dịch thành "Bongu!"). Những điều này đã được loại trừ. Ngoài ra một số ngôn ngữ (tiếng Ả Rập, tiếng Do Thái, tiếng Pa-tô, tiếng Ba Tư và tiếng Yiddish) đọc từ phải sang trái trên Google Dịch, nhưng khi được sao chép ở đây, chúng đọc từ trái sang phải. Tôi hy vọng điều đó ổn.


Chúng ta có được phép sử dụng một phương pháp đếm byte nhất quán không được sử dụng bởi bất kỳ ngôn ngữ lập trình nào được sử dụng không?
Zacharý

@ Zacharý Tôi đoán bất kỳ mã hóa đơn lẻ nào có đại diện cho tất cả các ký tự được sử dụng trong câu trả lời đều có thể được sử dụng để đếm byte. Hoặc có lẽ các byte nên được tính trong UTF-8 cho mỗi câu trả lời?
Steadybox

1
Nếu tôi có một ngôn ngữ sử dụng mã hóa khác với tất cả các ngôn ngữ khác, tôi có nên chuyển đổi mã sang mã hóa của ngôn ngữ đó hoặc sử dụng cùng một biểu diễn byte không? (sẽ khó vì một số byte dẫn đến UTF-8 không chính xác)
NieDzejkob

2
@NieDzejkob Tôi nghĩ rằng quy tắc cho polyglot có một tệp với byteize có thể đo được và có thể được chạy bởi nhiều trình thông dịch / trình biên dịch. ( ví dụ )
dùng202729

4
Lưu ý rằng dấu chấm than trong tiếng Trung và tiếng Nhật ( , U + FF01) khác với các dấu khác ( !, U + 0021).
alephalpha

Câu trả lời:


32

23 Befunges, 713 byte

Ngôn ngữ duy nhất tôi thực sự biết là Befunge, vì vậy thay vì nhiều ngôn ngữ, tôi đã thực hiện nhiều triển khai Befunge. Tôi tin rằng điều này vẫn còn hiệu lực theo các quy tắc PPCG, xem xét ngôn ngữ được xác định bởi việc thực hiện nó .

8023/# !-1401p680p88+79*6+1p238*7+0pg90p$#v0';1';+>9%80p$$$$"ph~s"+3vv
vv_2#!>#-/\#21#:+#:>#\<0/-2*3`0:-/2g01g00p>#< 2#0 ^#1/4*:*9"9"p00***<<
>>$:2%3*-4/3g68*-70p1-0`02-3/-03-2%1+2/-70g+80g65+70g`7++3g68*-70g9`*v
0168:0>0133?45130120340200v00:<+8*+76%4p00+5/4:+-*86g3++98/2%+98g09+<<
                         @>gg#^:#+,#$"!"-#1_@
       !Helo Byd!!!!!Hai dunia!!!!Ciao mondo!!!Hallo Wereld!!!!
       !Hallo Welt!!!Halo Dunia!!!Halo Dunya!!!Bonjour monde!!!
       !Hei Verden!!!Hej Verden!!!Moien Welt!!!Labas pasauli!!!
       !Molo Lizwe!!!Salut Lume!!!Hei maailma!!Sveika pasaule!!
       !Hello World!!Salom Dunyo!!Tere maailm!!Sawubona Mhlaba!
       !Kaixo Mundua!Salamu Dunia!Sannu Duniya!!!!!!!!!!!!!!!!!

Điều khó chịu về Befunge, là mặc dù có một triển khai tham chiếu nguồn mở và ngôn ngữ rất đơn giản, nhưng không có một trình thông dịch bên thứ ba nào (mà tôi biết) phù hợp chính xác với hành vi tham chiếu. Mỗi thực hiện thất bại theo một cách khác nhau.

Về mặt tích cực, điều này cho chúng ta cơ hội để phát triển một đoạn mã duy nhất sẽ tạo ra một kết quả khác nhau trong hầu hết mọi trình thông dịch. Và đó là những gì tôi đang cố gắng trong chương trình trên.

Nếu bất cứ ai quan tâm đến việc xác minh kết quả, tôi đã cố gắng nhóm các triển khai khác nhau thành các danh mục dựa trên mức độ dễ dàng để khởi động và chạy (ví dụ: một số người có thể không chạy được nhị phân Windows hoặc có thể không sẵn sàng xây dựng từ nguồn, nhưng mọi người sẽ có thể kiểm tra các thông dịch viên trực tuyến).

Phiên dịch viên trực tuyến

Không cần cài đặt. Nó thường chỉ là vấn đề dán mã và nhấp vào một hoặc hai nút. Nhưng lưu ý rằng một số trong số này khá chậm, vì vậy có thể cần một chút thời gian để hoàn thành việc thực thi.

Sân chơi Befunge của Alexios - Salamu Dunia!

Nhấp vào Clear...nút và dán mã vào trường đầu vào. Chuyển đổi công Edittắc để kích hoạt trình thông dịch, rồi bấm vào Runnút để bắt đầu thực thi.
Lưu ý rằng trang web này có thể sẽ không hoạt động trong Trình duyệt khác ngoài Chrome.

Befungius - Molo Lizwe!

Dán mã vào trường đầu vào, đảm bảo ghi đè mã hiện có. Sau đó nhấp vào Runnút để thực hiện.

Phiên dịch Befunge 93 của David Klick - Sannu Duniya!

Dán mã vào trường nhập Playfield , rồi bấm vào Runnút để bắt đầu thực thi.

Phiên dịch Befunge-93 của Ian Osgood - Salut Lume!

Dán mã vào trường đầu vào bên dưới Shownút, đảm bảo ghi đè lên mã @đã có. Nhấp vào Shownút để nhập mã, sau đó nhấp vào Runnút để bắt đầu thực thi.

IDE jsFunge - Hej Verden!

Đầu tiên đóng hộp thoại Trợ giúp , sau đó nhấp vào nút thanh công cụ Mở / Nhập (thứ hai từ trái sang), dán mã và nhấp OK. Để thực thi, bấm vào nút Chế độ chạy (thứ tư từ trái sang), sau đó bắt đầu (thứ năm từ trái sang).

Cũng lưu ý rằng một số trình thông dịch dựa trên bảng điều khiển thực sự có sẵn trên TIO, vì vậy trong khi chúng không phải là thông dịch viên trực tuyến về mặt kỹ thuật, chúng có thể được kiểm tra trực tuyến. Đối với những người được hỗ trợ (hiện tại là BEF, FBBI, MTFI và PyFunge), tôi đã bao gồm Dùng thử trực tuyến! liên kết bên cạnh mục nhập của họ.

IDE Java

Bạn sẽ cần cài đặt thời gian chạy Java cho những thứ này, nhưng về mặt lý thuyết chúng nên hoạt động trên mọi nền tảng. Chỉ được thử nghiệm trên Windows.

Applet Befunge trực quan của Ashley Mills - Moien Welt!

Đây ban đầu là một applet trực tuyến rất tiếc không còn nữa, nhưng bạn vẫn có thể tải xuống jar và chạy nó cục bộ như một ứng dụng máy tính để bàn. Bạn sẽ cần dán mã vào cửa sổ Trình chỉnh sửa chương trình , sau đó nhấp vào Convertnút, sau đó là Runnút.

WASABI: Phiên dịch viên tuyệt vời của Asabiine Befunge - Hallo Welt!

Để dán mã, nhấp chuột phải vào góc trên cùng bên trái của cửa sổ soạn thảo (nó phải ở trên cùng bên trái) và chọn mục menu Dán . Sau đó kích hoạt hộp kiểm Tốc độ đầy đủ (nếu không sẽ mất mãi mãi) và nhấp vào Run!nút để bắt đầu thực thi.

YABI93: Một phiên dịch viên Befunge93 khác - Halo Dunia!

Nhấn Ctrl+ A, Ctrl+ Vđể dán mã vào cửa sổ soạn thảo, đảm bảo ghi đè nguồn mặc định. Sau đó nhấp vào Startnút để bắt đầu thực hiện.

IDE Windows

Thông thường bạn sẽ cần Windows cho những thứ này, mặc dù trong một số trường hợp có thể có nhị phân có sẵn cho các hệ điều hành khác. Tôi không thể hứa rằng mã sẽ hoạt động trên các nền tảng khác.

BefunExec - Xin chào thế giới!

Bạn không thể dán mã vào trình chỉnh sửa, vì vậy trước tiên bạn cần lưu mã vào đĩa ở đâu đó. Sau đó từ IDE, sử dụng menu Tệp> Mở để tải mã từ đĩa và chọn menu Mô phỏng> Chạy / Tạm dừng để chạy.

BeQunge - Labas pasauli!

Nhấn Ctrl+ Vđể dán mã, sau đó bấm vào nút thanh công cụ Debug (cog màu xanh) để bắt đầu thực thi. Khi bảng Trình gỡ lỗi xuất hiện, bạn sẽ muốn đặt Tốc độ ở mức tối đa - nút ở bên phải của thanh trượt - nếu không, sẽ mất mãi mãi để kết thúc.

Nấm - Tail maailm!

Nhấn Ctrl+ Vđể dán mã, sau đó nhấn F5để chạy mã.

Visbef: Visual Befunge '93 cho Windows - Hallo Wereld!

Bạn không thể dán mã vào trình chỉnh sửa, vì vậy trước tiên bạn cần lưu mã vào đĩa ở đâu đó. Sau đó từ IDE, nhấn Ctrl+ Ođể mở trình duyệt tệp và tải mã từ đĩa và nhấn F5để chạy nó.

Ứng dụng Bảng điều khiển Windows

Một lần nữa, những thứ này thường yêu cầu Windows, mặc dù các nền tảng khác có thể có sẵn, nhưng không được bảo đảm để hoạt động.

Trong mọi trường hợp, mã sẽ cần được lưu vào một tệp trên đĩa và tên tệp được truyền cho trình thông dịch dưới dạng tham số dòng lệnh ( source.bf trong các dòng lệnh ví dụ được đưa ra dưới đây). Cũng lưu ý rằng một số trong số này là các trình thông dịch Befunge-98 về mặt kỹ thuật và phải được chạy với tùy chọn dòng lệnh cụ thể để buộc chế độ tương thích Befunge-93. Nếu bạn không làm điều đó, bạn sẽ không nhận được kết quả chính xác.

BEFI: Phiên dịch Befunge-93 của Rugxulo - Hei Verden!

Dòng lệnh: bef93w32 -q source.bf

CCBI: Tuân thủ phiên dịch Befunge-98 đồng thời - Sveika pasaule!

Đường biên giới: ccbi --befunge93 source.bf

MTFI: Thông dịch viên Magus Technica Funge - Hai dunia!

Dòng lệnh: mtfi -3 source.bf( Dùng thử trực tuyến! )

Ứng dụng bảng điều khiển Python và PHP

Chúng yêu cầu ngôn ngữ kịch bản phù hợp được cài đặt - Python hoặc PHP.

Befungee - Helo Byd!

Dòng lệnh: befungee.py source.bf

PyFunge - Halo Dunya!

Dòng lệnh: pyfunge -v 93 source.bf( Dùng thử trực tuyến! )

Bephunge - Bonjour monde!

Dòng lệnh: php bephunge.phps source.bf

Ứng dụng Bảng điều khiển chỉ nguồn

Chúng sẽ cần được xây dựng từ nguồn và thường dễ nhất với môi trường giống như * nix. Trên Windows tôi sử dụng Hệ thống con Windows cho Linux .

BEF: Phân phối tham khảo Befunge-93 - Ciao mondo!

Dòng lệnh: bef -q source.bf( Dùng thử trực tuyến! )

cfunge - Sawubona Mhlaba!

Dòng lệnh: cfunge -s 93 source.bf

FBBI: Fling Bovine Befunge-98 Intepreter - Hei maailma!

Dòng lệnh: fbbi -93 source.bf( Dùng thử trực tuyến! )

Nấm - Kaixo Mundua!

Dòng lệnh: fungi source.bf

Rc / Funge-98 - Salom Dunyo!

Dòng lệnh: rcfunge -93 source.bf

Làm thế nào nó hoạt động

Thách thức với điều này là tìm ra số lượng thử nghiệm ít nhất cung cấp sự khác biệt nhất giữa các phiên dịch viên. Cuối cùng, nó đã đi xuống bốn chuỗi thử nghiệm chính:

  1. Đầu tiên là bộ nhớ ngoài giới hạn được đọc từ offset -1,1. Về lý thuyết, điều này sẽ luôn trả về 32 (không gian ASCII), nhưng thực tế có 10 biến thể trong thực tế. Bài kiểm tra này rất phức tạp bởi thực tế là hai trong số các phiên dịch viên bị lỗi khi đọc ngoài giới hạn, do đó, một vài bài kiểm tra trường hợp đặc biệt (làm tròn phân chia và bắc cầu không gian) được yêu cầu buộc hai người đó trở lại giới hạn.

  2. Chuỗi thứ hai là một thử nghiệm về chức năng Befunge-98 - cụ thể là các hướng dẫn ;'. Hầu như tất cả các trình thông dịch là Befunge-93 hoặc được chạy ở chế độ tương thích Befunge-93, vì vậy họ chỉ nên bỏ qua các hướng dẫn đó. Trong thực tế, có 6 cách khác nhau để trình tự này được diễn giải.

  3. Thử nghiệm thứ ba kiểm tra phạm vi của các ô nhớ. Trong trình thông dịch tham chiếu, các ô nhớ được ký 8 bit, nhưng các cài đặt khác khác nhau trong phạm vi từ 8 bit đến không giới hạn, một số được ký và một số không dấu. Tuy nhiên, với mục đích của thử nghiệm này, chúng tôi chỉ phải phân biệt giữa 5 biến thể đó.

  4. Chuỗi thứ tư và cuối cùng là sự kết hợp của các thử nghiệm phân chia âm tính và âm tính. Có một số cách mà thông dịch viên bị hiểu sai, và có ít nhất 3 cách khác nhau để thực hiện các hướng dẫn phân chia và modulo, nhưng chỉ có 3 kết hợp chúng tôi quan tâm ở đây.

Mỗi chuỗi này trả về một số duy nhất và bốn số đó được kết hợp (thông qua một số bảng số học và dịch thuật cơ bản) để tạo ra một giá trị cuối cùng trong phạm vi 0 đến 22. Giá trị đó sau đó có thể được sử dụng làm chỉ mục để tra cứu thông điệp thực tế để hiển thị.


Phương pháp khá hay, nhưng không có cách nào tôi đánh bại điều này. Bây giờ có lẽ chúng ta có thể điều chỉnh điều này và siết chặt các biến thể BrainFuck trong đó.
Zacharý

10
Tôi đảm bảo với bạn nó không dễ như bạn tưởng tượng. Đó là một thách thức khi chỉ cần chạy mã mà không gặp sự cố trong hơn 20 trình thông dịch lỗi. Nếu tôi muốn có giá rẻ, tôi đã sử dụng Befunge-98 và chỉ cần truy vấn các dấu tay thực hiện ( 3y).
James Holdiness

2
Tôi đang đề cập đến giá rẻ như cách bạn chỉ sử dụng befunges, nhưng điều này thực sự rất ấn tượng.
Zacharý

Đây là một ấn tượng đáng kinh ngạc, nhưng có thể giải thích tại sao các phiên dịch viên khác nhau đối xử với nó khác nhau? Có thể không phải tất cả 23 phiên bản, nhưng ít nhất là một vài ví dụ về sự khác biệt về hành vi mà bạn khai thác?
Jack Brounstein

1
@JackBrounstein Tôi đã thêm một chút giải thích vào cuối câu trả lời.
James Holdiness

64

16 ngôn ngữ, 1363 byte

 #define ip"MemuL tulaS",,,,,,,,,,"!",@++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.@,kc"Kaixo Mundua!"v#!
#define print(A,B,C)main(){printf("Helo Byd!");}//ss                                                                          ;ooooooooooooooooooo"Moni Dziko Lapansi!"<  
#ifdef __cplusplus//p                                                                                                                                 ;;];;
#include<cstdio>//ffffffffff?
#define print(A,B,C)int main(){printf("Halo Dunya!");}//ssp
#endif//;  [;;;;;;;;;     "!etejivs vardzoP"]
#ifdef __OBJC__//;;;;;
#define print(A,B,C)main(){printf("Hallo Welt!");}//ss
#endif//\
"""echo" "Salom Dunyo!";"exit";puts"Moien Welt!";\
__END__
#define B//\
"""#;;;;;
print(["Hai dunia!","Hej Verden!","Halo Dunia!"][(int(1>0)is 1)+~int(-1/2)*2])
#define s eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeejeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeejiiiiiiiijeeeeeeeeeeeeeejiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeejeejijiiiiiiiiiijeeeeeeeeeeejiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiij
#define U   !"!dlereW ollaH"<           ;
#define T@,kc"Sannu Duniya!?%?"

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

(sử dụng "chuyển đổi ngôn ngữ" để thay đổi ngôn ngữ)

  • Con trăn 3 = Halo Dunia! (Tiếng Indonesia)

  • Python 2 = Hej Verden! (Người Đan Mạch)

  • Con trăn 1 = Hai dunia! (Tiếng Mã Lai)

  • C (gcc) = Helo Byd! (Người xứ Wales)

  • C ++ (gcc) = Halo Dunya! (Sundan)

  • Mục tiêu C (tiếng kêu) = Hallo Welt! (Tiếng Đức)

  • Brainfuck = Xin chào thế giới! (Tiếng Anh, rõ ràng)

  • Befunge-93 = Salut Lume! (Rumani)

  • Ruby = Moien Welt! (Luxemburgish)

  • Bash = Salom Dunyo! (Tiếng Uzbekistan)

  • Befunge-98 (PyFunge) = Kaixo Mundua! (Tiếng Basque)

  • Unefunge-98 (PyFunge) = Sannu Duniya! (Tiếng Hin-ddi)

  • Hồng y = Hallo Người sói! (Tiếng Hà Lan)

  • Bảng chữ cái = Ciao mondo! (Người Ý)

  • > <> = Moni Dziko Lapansi! (Chichewa)

  • Phân hạch = Pozdrav svijete! (Tiếng Croatia)

Bất kỳ mẹo chơi gôn nào đều được chào đón (đặc biệt là trên Brainfuck) !!

Cảm ơn @JonathanFrech cho -1 byte! Ngoài ra, nhờ @ovs cho -40 byte!

Làm thế nào (ý tưởng chung, tôi thực sự quên chi tiết cụ thể) ??

Các ngôn ngữ có thể được đặt thành bốn nhóm:

  • Macro: C, C ++, Mục tiêu C
  • Nhận xét: Python3, Python2, Python1, Ruby, Bash
  • Kích thước: Befunge-93, Befunge-98, Unefunge-98, Hồng y,> <>, Phân hạch
  • Vulgar: Brainfuck, Alphuck

Các ngôn ngữ Macro xem #như là sự khởi đầu của một chỉ thị tiền xử lý. Chúng được sử dụng vì ba lý do: mã nhà cho các nhóm khác, để phân biệt giữa các ngôn ngữ Macro và để thực sự xác định một macro. Cả ba đều sử dụng //làm bình luận, vì vậy sau đó chúng tôi lưu trữ mã cho các nhóm khác. Ngoài ra, dấu gạch chéo ngược tiếp tục nhận xét bằng các ngôn ngữ này.

Các ngôn ngữ Nhận xét xem #là bắt đầu của một nhận xét. Điều khó hiểu ở đây là bộ ba trích dẫn, phân biệt Pythons với Ruby với Bash. Và để phân biệt Python 1 với 2 từ 3, chúng tôi sử dụng một tính năng phân biệt trong cả ba, cùng với một loạt các kết quả đầu ra. Ồ vâng, cũng có điều đó __END__. Điều này được sử dụng để kết thúc mã cho một số (không thể nhớ chính xác những ngôn ngữ nào) của các ngôn ngữ Nhận xét.

Các ngôn ngữ thứ nguyên được phân biệt theo cách khó giải thích. Người ta phải biết chi tiết cụ thể của từng ngôn ngữ để tìm ra nó. Ví dụ, #chỉ là một sự bỏ qua trong các loại nấm, trong khi nó thực hiện nhiều thứ khác nhau trong các ngôn ngữ khác. Các mã được rải khắp nơi cho các ngôn ngữ này.

Và cuối cùng, chúng tôi đến các ngôn ngữ Vulgar. Cả hai đều bỏ qua mọi thứ không có trong bộ ký tự hợp lệ của chúng. Một hành động cân bằng phải được chơi với các ngôn ngữ này và các ngôn ngữ khác, vì mã đã chứa các ký tự trong các bộ ký tự.


Bạn có thể kết hợp các chuỗi trong trình đệ trình Python thành một chuỗi lớn và sử dụng cắt chuỗi để lập chỉ mục cho nó không? ví dụ "abcabcabc"[n::3] -> "aaa" for n = 0, "bbb" for n = 1. Tôi cảm thấy có lẽ có một cách bạn có thể cắt nó và lưu byte bằng cách đưa các ký tự trùng lặp vào lát cắt bằng cách nào đó (như H và!).
cole

2
Mát mẻ! dấu ngoặc trong ["Hai dunia!","Hej Verden!","Halo Dunia!"]dấu phẩy!
Uriel

3
Họ sẽ không cần, tôi lạm dụng thực tế là bộ não TIO mặc định 0 (hoặc không làm gì cả, tôi không thể nói) nếu nó hết đầu vào từ người dùng. Có 9 dấu phẩy không được che chở khác lạm dụng thực tế này.
Zacharý

2
Có một lý do bạn không sử dụng +[++[<+++>->+++<]>+++++++]<<<--.<.<--..<<---.<+++.<+.>>.>+.>.>-.<<<<+.cho phần BF của bạn? ( nguồn )
Esolanging Fruit

1
Tôi đã thêm một lời giải thích, cho bất cứ ai muốn xem nó.
Zacharý

38

15 ngôn ngữ, 535 byte

# ;"!audnuM oxiaK">:#,_@R"Hej Verden!";;@,kb"Tere maailm!";# w"!amliaam ieH"ck,@oooooooooo"Hai dunia!"
`true #{puts'Hola món!'}` \
__END__
"Hola Mundo!" puts
case `ps -p$$ -oargs=` in \
b*)echo Hallo Welt!;;k*)echo Ndewo Ụwa!;;d*)echo Ciao mondo!;;z*)echo Moien Welt!;;a*)echo Hei Verden!;;esac
true; 
#xx
#x%"Olá Mundo!"x
#xx+++[++[<+++>->+++<]>+++++++]<<<--.<.<--..<<---.<+++.<+.>>.>+.>.>-.<<<<+.
   	  	   
	
     		  	 	
	
     		 		  
	
     		 				
	
     	     
	
     	    	 
	
     				  	
	
     		  	  
	
     	    	
	
  

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

  1. Kaixo Mundua! trong Befunge-93
  2. Hej Verden! trong phân hạch
  3. Tere maailm! trong Unefunge-98
  4. Hei maailma!! trong Befunge-98
  5. Hai dunia! trong> <>
  6. Hola món! trong Ruby
  7. Hola Mundo! trong GolfScript
  8. Hallo Welt! trong bash
  9. Ndewo Ụwa! trong ksh
  10. Ciao mondo! trong dấu gạch ngang
  11. Moien Welt! trong zsh
  12. Hei Verden! trong tro
  13. Olá Mundo! trong Hồng y
  14. Hello World!trong brainfuck, lịch sự của primo .
  15. Helo Byd! trong khoảng trắng

Giải trình

Dòng 1 phân biệt giữa năm esolang 2D:

  1. ><>đọc #như một tấm gương, quấn quanh bên trái, in "Hai dunia!"và sụp đổ ( @). Tất cả các Funges đọc nó như một tấm bạt lò xo và đi đúng.
  2. Befunge-93 bỏ qua ;, in Kaixo Mundua!và thoát ( @).
  3. Các '98 Funges nhảy từ thứ nhất ;sang thứ hai, sau đó từ thứ ba ;đến thứ tư. wlà một NOP cho Befunge-98, in ấn Hei maailma!.
  4. Nhưng wphản ánh con trỏ lệnh trong Unefunge-98, in Tere maailm!.
  5. Phân hạch không bắt đầu ở góc trên bên trái. R"Hej Verden!";được thực thi. (Một con trỏ lệnh khác bắt đầu từ Dtrong __END__, nhưng nó không làm gì sau đó chết ;trong true;.)

Ruby thấy `true #{puts'Hola món!'}`, sau đó __END__.

GolfScript nhìn thấy `, sau đó true(NOP), sau đó nhận xét; sau đó __END__(NOP); sau đó "Hola Mundo!" puts(điều này được thực thi); sau đó case(NOP), sau đó `(sụp đổ trên ngăn xếp trống).

Các shell nhìn thấy một nhận xét, sau đó là một lệnh gọi true(NOP), sau đó gọi đến các lệnh chưa biết __END__"Hola Mundo!"(lỗi này xảy ra với STDERR nhưng thực thi vẫn tiếp tục), sau đó là casecâu lệnh phân biệt dựa trên chữ cái đầu tiên của tên của quy trình hiện tại.

Hồng y là một esolang 2D khác bắt đầu từ %, gửi 4 IP lên, xuống, trái và phải. Tất cả đều bị giết bởi các xlệnh xung quanh , nhưng một bản in "Olá Mundo!"trước khi chết.

Mã brainfuck là primo, có tiền tố ++để chống lại dấu gạch ngang ps -p$$ -oargs=.

Khoảng trắng trong mã của tôi được thực thi dưới dạng chương trình Khoảng trắng

 push 0
 push 0
label_0:
 push 0
 push 0
 drop
 drop
 push 72; printc
 push 101; printc
 push 108; printc
 push 111; printc
 push 32; printc
 push 66; printc
 push 121; printc
 push 100; printc
 push 33; printc

mà in Helo Byd!

EDIT : Tôi quên rằng việc thêm các UDLRký tự sẽ phá vỡ chương trình Phân hạch, vì vậy tôi đã thay đổi các chuỗi để tránh những chuỗi này.


1
Tôi sẽ sớm nhận được bạn.
Zacharý

1
Tôi nghĩ rằng tôi đầu hàng bây giờ, bạn đã làm một công việc tuyệt vời.
Zacharý

Tôi cảm thấy hơi tệ, bởi vì giải pháp của bạn có các ngôn ngữ tương tác theo những cách thú vị hơn nhiều! Tôi thực sự chỉ đệm câu trả lời của tôi về 5 vỏ sò của tôi với esolang dễ dàng đa âm với một tên khác>. <;
Lynn

1
Bây giờ, nếu bất cứ ai cũng có thể đa âm các ngôn ngữ này với D , tôi sẽ mãi mãi kinh ngạc. ( #definekhông phải là một điều trong D ... mà cản trở việc đa hình hóa rất nhiều). Ngoài ra, tôi thực sự cần phải học khoảng trắng.
Zacharý

1
oh, có nhiều chữ in hoa bây giờ, tôi thấy. Tôi sẽ sửa nó một chút bằng cách chọn Hello Worlds khác nhau.
Lynn


12

7 ngôn ngữ, 221 byte

<?php echo'مرحبا بالعالم!';die?>h+#;"!dlereW ollaH"ck,@;
;echo Kaixo Mundua!;                        <@,k+4f"ሰላም ልዑል!"

Բարեւ աշխարհ!
@,k+4f"Përshendetje Botë!";XXXX;"Hello Wêreld!"

Vì chương trình này chứa một số ký tự khó chịu, đây là xxd:

00000000: 3c3f 7068 7020 6563 686f 27d9 85d8 b1d8  <?php echo'.....
00000010: add8 a8d8 a720 d8a8 d8a7 d984 d8b9 d8a7  ..... ..........
00000020: d984 d985 2127 3b64 6965 3f3e 682b 233b  ....!';die?>h+#;
00000030: 2221 646c 6572 6557 206f 6c6c 6148 2263  "!dlereW ollaH"c
00000040: 6b2c 403b 0a0c 3b65 6368 6f20 4b61 6978  k,@;..;echo Kaix
00000050: 6f20 4d75 6e64 7561 213b 2020 2020 2020  o Mundua !;
00000060: 2020 2020 2020 2020 2020 2020 2020 2020
00000070: 2020 3c40 2c6b 2b34 6622 e188 b0e1 888b    <@,k+4f"......
00000080: e188 9d20 e188 8de1 8b91 e188 8d21 220a  ... .........!".
00000090: 0ad4 b2d5 a1d6 80d5 a5d6 8220 d5a1 d5b7  ........... ....
000000a0: d5ad d5a1 d680 d5b0 210a 402c 6b2b 3466  ........!.@,k+4f
000000b0: 2250 c3ab 7273 6865 6e64 6574 6a65 2042  "P..rshendetje B
000000c0: 6f74 c3ab 2122 3b58 5858 583b 2248 656c  ot..!";XXXX;"Hel
000000d0: 6c6f 2057 c3aa 7265 6c64 2122 0a         lo W..reld!".

Tại sao không <?='مرحبا بالعالم!';die?>? Đó là PHP hợp lệ (về cơ bản giống như <?php echo ... ?>),
Ismael Miguel

@IsmaelMiguel vì tôi quên mất tính năng đó ... đơn giản như vậy
NieDzejkob

9

5 ngôn ngữ, 168 byte

  //"!nedreV jeH",,,,,,,,,,,@R"Hello World!"*#x
///"!mliaam ereT">:?v; x"!dyB oleH"           %x
//               ^ o<                         x
// >`Sawubona Mhlaba!`;

Tôi nghĩ ngôn ngữ 2 chiều rất thú vị.

> <> bản in Tere maailm!
Befunge-98 bản in Hej Verden!
Sáp ong In bản in Sawubona Mhlaba!
Hồng y Bản in Helo Byd!
phân hạchHello World!

Hãy thử trực tuyến! (Hồng y)


2
Tôi thấy tiềm năng lớn ở đây, vì //các bình luận trong rất nhiều ngôn ngữ.
Zacharý

@ Zacharý Đó là lý do duy nhất hầu hết trong số họ ở đó. Ngay bây giờ, hai cái được sử dụng cho> <> và một cho sáp ong. Những cái trong hai cột đầu tiên không làm gì cả.
KSmarts

Bạn có thể giải thích dòng điều khiển cho sáp ong? Tôi muốn xem nó có phù hợp với thử thách này không .
Khoai tây44

@ Potato44 Đó là ngôn ngữ 2 chiều diễn giải mã dưới dạng lưới lục giác giới hạn, do đó con trỏ có thể di chuyển theo 6 hướng. Ong (con trỏ) được sinh ra bởi các nhân vật */\_và có thể được chuyển hướng theo các hướng cố định hoặc bằng gương hoặc xoay. Xem ở đây để biết thêm.
KSmarts

Bạn có thể cắt nó đi 1 byte bởi vì đối với phần sáp ong, ;sau khi backtick thứ hai là không cần thiết. Con ong chỉ chạy khỏi tổ ong về phía bên phải.
ML

7

2 ngôn ngữ, 16 ký tự, 24 byte

Chà, ít nhất là ngắn hơn cả hai chuỗi.

L"שלום עולם"33ç«

05AB1E -שלום עולם!

Giúp tôi với, WarDoq! -Hello World!

Giúp tôi với, WarDoq! có thể thêm hai số và kiểm tra các số nguyên tố, vì vậy nó được coi là ngôn ngữ lập trình hợp lệ cho mỗi bài đăng meta này .


IIRC, chúng không phải là một byte trong 05AB1E, đó chỉ là do giới hạn của TIO. \
Zacharý

@ Zacharý có chắc không? Tôi biết ký tự hebrew là 1 byte trong một số bảng mã. Có thể chồng chéo mã char.
Uriel

Bạn có thấy tiếng Do Thái ở đây không?
Zacharý

@ Zacharý đã sửa (Tôi nghĩ rằng sẽ tạo ra 24 byte)
Uriel

6

3 ngôn ngữ, 67 62 byte

Để đủ điều kiện nhận tiền thưởng này (100 đại diện).

x:Helo Byd!
O
y:"Hai dunia!"
u?`h;`4$'5^5D+Asi:^:E+IvIvAB*vhm,

Thêm ++: Dùng thử trực tuyến!

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

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

Giải trình

Thêm ++

Thêm ++ thấy:

x:Helo Byd!
O

" xChuỗi đầu ra "

y:"Hai dunia!"

"Đặt y thành một chuỗi khác"

u?`h;`4$'5^5D+Asi:^:E+IvIvAB*vhm,

"idk gì đó kỳ lạ, tôi sẽ lỗi"

Foo

Foo thấy:

x:Helo Byd!
O
y:"Hai dunia!"

"Oo, trích dẫn, tôi sẽ xuất những cái đó."

u?`h;`4$'5^5D+Asi:^:E+IvIvAB*vhm,

"Uh ... một cái gì đó về một chế độ? Idk, tôi sẽ lỗi."

Somme

Somme thấy, tốt, đây:

8s+vi:4+vhIvE-Asi:^:E+IvIvAB*vhm,

Mỗi cột được chuyển đổi thành các điểm mã, sau đó 32 được trừ khỏi chúng, sau đó mỗi cột được lấy modulo 95. Điều này tương ứng với các ký tự này, in ra, "Hei Verden!"


Chà, tuần đã kết thúc, và bạn là câu trả lời cạnh tranh ngắn nhất (và duy nhất), vì vậy xin chúc mừng tiền thưởng!
caird coinheringaahing

@cairdcoinheringaahing Cảm ơn! : D
Conor O'Brien


4

4 ngôn ngữ, 115 byte

print ((("b" + "0" == 0)and eval('"Hallo Wereld!"'))or(0 and"Hello World!"or(1/2and"Hei Verden!"or"Hej Verden!")));

Perl 5 cho Hallo Wereld!- TIO

Ruby cho Hello World!- TIO

Python 2 cho Hej Verden!- TIO

Python 3 cho Hei Verden!- TIO


107 byte -print (((“b”+”0"==0)and eval('"Hallo Wereld!"'))or(0and"Hello World!”or((1/2and"Hei"or"Hej")+" Verden!")));
Jollywatt

4

Bốn ngôn ngữ, một con số khổng lồ 650 byte

//iiciccepepceaiiiaiaiaicccsascciijceeeeeejccijjccjceaajaajcccjeeejaajaaijcccej
//[
/*
GOTO end
*/
//pis
//p
//p
//\u000Apublic class Main{public static void main(String[]a){System.out.print("Salut Lume!");}}
/*
lblend
print Hola Mundo!
//s
*/
//]
//s
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++.--------.++++++++++++++.-------------------------------------------------------------------------------.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++.-.----------.+++++++++++.------------------------------------------------------------------------------.

Java đưa ra "Salut Lume!" Thử nó!

SILOS cho "Hola Mundo" Hãy thử!

Brainfuck cho "Ciao mondo!" Thử nó!

(Mã alphuck được sửa đổi từ trang Esolang trên Alphuck )

Alphuck đưa ra "Xin chào thế giới!" Thử nó!

Dòng bắt đầu \ u000A là mã Java. Mã trên dòng một là mã Alphuck, mã này sẽ bỏ qua phần còn lại của mã (miễn là "p" và "s" được cân bằng. Dòng liên quan cho SIL / SILOS là "in Hola Mundo" và mã brainfuck ở cuối và sẽ bỏ qua phần còn lại của mã.


1
Tôi nghĩ rằng bạn có thể đánh golf mã BF một số bằng cách sử dụng các hằng số được cung cấp bởi trang này và các kỹ thuật được sử dụng ở đó.
cole

@cole Tôi cố gắng xem xét lại mã bf khi tôi có thêm thời gian để tối ưu hóa nó. Về cơ bản, tôi không nghĩ chỉ cần sử dụng hằng số là đủ, tôi sẽ phải xác định mối quan hệ tái phát
Rohan Jhunjhunwala

1
78 cho 'Ciao mondo!': +>++>+>+++[+++++[>+++++++++++>++++<<-]+++<]>>--.>+.>.>-.>.<--.++.-.<+++.>+.>+.Sử dụng chuỗi byte [69, 104, 97, 112, 32]
primo

4

5 ngôn ngữ, 213 byte

Tôi quyết định thử và tự viết một câu trả lời nhỏ.

#include<stdio.h>
#define hint(x)int main(){auto i=.5;puts(i?"Hallo Welt!":"Hei maailma!");}
#define R "Pozdrav svijete!";
#if 0
hint=print
goto=len
s="Tere maailm!"
goto("endif")
s="Hallo Wereld!";
#endif
hint(s)

Ngôn ngữ:

C:                                       Hei maailma!      (Finnish)
C++:                                     Hallo Welt!       (German)
Python 3:                                Hallo Wereld!     (Dutch)
Operation Flashpoint scripting language: Tere maailm!      (Estonian)
Fission:                                 Pozdrav svijete!  (Croatian)

C và C ++ xem mã là:

#include<stdio.h>
#define hint(x)int main(){auto i=.5;puts(i?"Hallo Welt!":"Hei maailma!");}
#define R "Pozdrav svijete!"; // Unused macro
hint(s)

auto i=.5;là (có hiệu lực) bằng với int i=0;C, nhưng bằng với double i=0.5;C ++.

Hãy thử trực tuyến! (Tăng dần)

Hãy thử trực tuyến! (như C ++)

Python 3 thấy mã là:

hint=print
goto=len
s="Tere maailm!"
goto("endif")         # Calculate string length and discard the result.
s="Hallo Wereld!"
hint(s)

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

Ngôn ngữ kịch bản OFP thấy:

; (A semicolon at the beginning of a line comments the line in a script.)

; Four labels with strange names.
#include<stdio.h>
#define hint(x)int main(){auto i=.5;puts(i?"Hallo Welt!":"Hei maailma!");}
#define R "Pozdrav svijete!";
#if 0

; Assign a null value to "hint", no practical effect. Same for "goto".
hint=print
goto=len

; Assign the string to variable "s".
; I would like to have used the Czech phrase for OFP (because it's a Czech game),
; but it didn't recognize the 'ě' and printed a '?' instead.
s="Tere maailm!"

; Jump to label "endif".
goto("endif")

; This reassignment of "s" gets skipped.
s="Hallo Wereld!";

; Declare a label called "endif".
#endif

; Print the string "s".
hint(s)

Phân hạch thấy:

R "Pozdrav svijete!";

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


2

3 ngôn ngữ, 184 181 byte

Chỉ hoạt động một lần - bạn phải xóa danh sách để chạy lại.

when gf clicked
add<[]=[]>to[c v
if<(join(item(1 v)of[c v])[d])=[1d
say[Helo Byd!
else
repeat(300000
add[]to[c v
end
if<(length of[c v])>[250000
say[Hello world!
else
say[Hai dunia!

Cào 1.4: Helo Byd!

Cào 2.0: Hello world!

Scratch 3.0 beta tại thời điểm trả lời này: Hai dunia!

Giải trình

Trong Scratch 1.4, việc thêm boolean vào danh sách sẽ thêm 1hoặc 0, nhưng trong 2.0 trở lên, nó sẽ thêm truehoặc false, nhưng khi kiểm tra xem mục đó có bằng 1<[] = []> hay không, nó sẽ trả về đúng nếu mục đó là 1hoặctrue , vì vậy chúng tôi thêm một chữ cái khác cho nó và kiểm tra xem.

Trong Scratch 3.0, các danh sách có kích thước tối đa 200.000 mặt hàng, vì vậy chúng tôi chỉ cần thêm một loạt các mặt hàng và xem danh sách đó có dài không.


1

3 ngôn ngữ, 61 byte

;“,ḷṅḳȦ»Ḋḷ“
x:Hai dunia!
O
y:"Helo Byd!"
;”

Thêm đầu ra ++Hai dunia!

ThạchĐầu raHello World!

FooĐầu raHelo Byd!

Chỉ vì tôi đặt tiền thưởng không có nghĩa là tôi không thể tham gia: D (ab) sử dụng thủ thuật thiết lập chuỗi tuyệt vời mà Conor tìm thấy cho Add ++

Làm thế nào nó hoạt động

Thêm ++

;“,ḷṅḳȦ»Ḋḷ“     ; A comment. This does nothing
x:Hai dunia!    ; Set the x accumulator to the string "Hai dunia!"
O               ; Output x
y:"Helo Byd!"   ; Set the y accumulator to the string "Helo Byd!"
;”              ; Another comment

Thạch

Nhận xét trong Jelly có thể được hình thành với cú pháp ḷ“comment”, đó là cách mã Add ++ và Foo bị bỏ qua. Mã được thực thi bởi Jelly là

;“,ḷṅḳȦ»Ḋ - Main link. Arguments: None
 “,ḷṅḳȦ»  - Yield the string "Hello World!"
;         - Append 0, yielding "0Hello World!"
        Ḋ - Remove the first character, yielding "Hello World!"

Foo

Foo bỏ qua tất cả các nhân vật ở đây, ngoài ra "Helo Byd!", như trong trích dẫn, đã được xuất ra.

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.