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:
Đầ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.
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 ;
và '
. 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.
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ể đó.
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ị.