23 Befunges, 713 byte
Satu-satunya bahasa yang saya benar-benar tahu adalah Befunge, jadi alih-alih beberapa bahasa, saya hanya menggunakan beberapa implementasi Befunge. Saya percaya ini masih berlaku di bawah aturan PPCG, yang menganggap bahasa akan ditentukan oleh implementasinya .
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!!!!!!!!!!!!!!!!!
Hal yang membuat frustrasi tentang Befunge, adalah bahwa meskipun ada implementasi referensi open source, dan bahasanya sendiri sangat sederhana, tidak ada satu pun penerjemah pihak ketiga (yang saya tahu) yang persis sesuai dengan perilaku referensi. Setiap implementasi gagal dengan cara yang berbeda.
Di sisi positifnya, ini memberi kita kesempatan untuk mengembangkan satu kode yang akan menghasilkan hasil yang berbeda di hampir setiap penerjemah. Dan itulah yang saya coba dalam program di atas.
Jika ada yang tertarik untuk memverifikasi hasil, saya telah mencoba untuk mengelompokkan berbagai implementasi ke dalam kategori berdasarkan seberapa mudah mereka untuk bangun dan berjalan (misalnya beberapa orang mungkin tidak dapat menjalankan binari Windows, atau mungkin tidak mau membangun dari sumber, tetapi semua orang harus dapat menguji penerjemah online).
Penerjemah Online
Tidak diperlukan instalasi. Biasanya hanya masalah menempelkan kode dan mengklik satu atau dua tombol. Tetapi perhatikan bahwa beberapa di antaranya sangat lambat, jadi mungkin perlu waktu untuk menyelesaikan eksekusi.
Arena Bermain Befunge Alexios -
Salamu Dunia!
Klik Clear...tombol dan tempel kode ke dalam kolom input. Alihkan Editsakelar untuk mengaktifkan juru bahasa, lalu klik Runtombol untuk mulai menjalankan.
Perhatikan bahwa situs ini mungkin tidak akan berfungsi di Browser selain Chrome.
Befungius -
Molo Lizwe!
Rekatkan kode ke bidang input, pastikan untuk menimpa kode yang ada. Kemudian klik Runtombol untuk menjalankan.
Befunge 93 Interpreter David Klick -
Sannu Duniya!
Rekatkan kode ke bidang input Playfield , lalu klik Runtombol untuk mulai menjalankan.
Befunge-93 Interpreter Ian Osgood -
Salut Lume!
Rekatkan kode ke bidang input di bawah Showtombol, pastikan untuk menimpa @
yang sudah ada. Klik Showtombol untuk mengimpor kode, lalu klik Runtombol untuk mulai menjalankan.
jsFunge IDE -
Hej Verden!
Pertama tutup dialog Bantuan , lalu klik tombol Buka / Impor bilah alat (kedua dari kiri), rekatkan kode, dan klik OK. Untuk menjalankan, klik tombol Jalankan Mode (keempat dari kiri), dan kemudian Mulai (kelima dari kiri).
Juga perhatikan bahwa beberapa penerjemah berbasis konsol sebenarnya tersedia di TIO, jadi meskipun mereka bukan penerjemah online teknis, mereka dapat diuji secara online. Bagi mereka yang didukung (saat ini BEF, FBBI, MTFI dan PyFunge), saya telah menyertakan Try It Online! tautan di sebelah entri mereka.
IDE Java
Anda perlu menginstal run-time Java untuk ini, tetapi mereka secara teoritis harus bekerja pada platform apa pun. Hanya diuji pada Windows sekalipun.
Applet Befunge Visual Ashley Mills -
Moien Welt!
Awalnya ini adalah applet online yang sayangnya tidak lagi tersedia, tetapi Anda masih dapat mengunduh toples dan menjalankannya secara lokal sebagai aplikasi desktop. Anda harus menempelkan kode ke jendela Program Editor , lalu klik Converttombolnya, diikuti Runtombolnya.
WASABI: Penerjemah Befunge Bein Asinine yang Luar Biasa dari Wasabi -
Hallo Welt!
Untuk menempelkan kode, klik kanan di sudut kiri atas jendela editor (itu harus paling kiri atas) dan pilih item menu Tempel . Kemudian aktifkan kotak centang Kecepatan Penuh (jika tidak akan selamanya), dan klik Run!tombol untuk mulai menjalankan.
YABI93: Penerjemah Befunge93 Lagi -
Halo Dunia!
Tekan Ctrl+ A, Ctrl+ Vuntuk menempelkan kode ke jendela editor, pastikan untuk menimpa sumber default. Kemudian klik Starttombol untuk mulai menjalankan.
IDE Windows
Anda biasanya memerlukan Windows untuk ini, walaupun dalam beberapa kasus mungkin ada binari yang tersedia untuk sistem operasi lain. Saya tidak bisa menjanjikan kode akan bekerja pada platform lain.
BefunExec -
Hello World!
Anda tidak dapat menempelkan kode ke editor, jadi pertama-tama Anda harus menyimpannya di disk di suatu tempat. Kemudian dari IDE, gunakan menu File> Open untuk memuat kode dari disk, dan pilih menu Simulasi> Run / Pause untuk menjalankannya.
BeQunge -
Labas pasauli!
Tekan Ctrl+ Vuntuk menempelkan kode, lalu klik tombol Bilah alat Debug (roda gigi biru) untuk mulai menjalankan. Setelah panel Debugger muncul, Anda ingin mengatur Kecepatan ke maksimum - tombol di sebelah kanan bilah geser - jika tidak, akan butuh selamanya untuk menyelesaikannya.
Jamur -
Tere maailm!
Tekan Ctrl+ Vuntuk menempelkan kode, lalu tekan F5untuk menjalankannya.
Visbef: Visual Befunge '93 untuk Windows -
Hallo Wereld!
Anda tidak dapat menempelkan kode ke editor, jadi pertama-tama Anda harus menyimpannya di disk di suatu tempat. Kemudian dari IDE, tekan Ctrl+ Ountuk membuka browser file dan memuat kode dari disk, dan tekan F5untuk menjalankannya.
Aplikasi Konsol Windows
Sekali lagi ini biasanya memerlukan Windows, meskipun platform lain mungkin tersedia, tetapi tidak dijamin berfungsi.
Dalam semua kasus, kode harus disimpan ke file pada disk dan nama file diteruskan ke penerjemah sebagai parameter baris perintah ( source.bf dalam contoh baris perintah yang diberikan di bawah). Juga perhatikan bahwa beberapa di antaranya secara teknis Befunge-98 interpreter, dan harus dijalankan dengan opsi baris perintah tertentu untuk memaksa mode kompatibilitas Befunge-93. Jika Anda tidak melakukan itu, Anda tidak akan mendapatkan hasil yang benar.
BEFI: Penerjemah Befunge-93 Rugxulo -
Hei Verden!
Garis komando: bef93w32 -q source.bf
CCBI: Menyesuaikan Interpreter Befunge-98 Serentak -
Sveika pasaule!
Baris perintah: ccbi --befunge93 source.bf
MTFI: Magus Technica Funge Interpreter -
Hai dunia!
Baris perintah: mtfi -3 source.bf
( Coba online! )
Aplikasi Konsol Python dan PHP
Ini membutuhkan bahasa scripting yang sesuai diinstal - baik Python atau PHP.
Befungee -
Helo Byd!
Garis komando: befungee.py source.bf
PyFunge -
Halo Dunya!
Baris perintah: pyfunge -v 93 source.bf
( Coba online! )
Bephunge -
Bonjour monde!
Garis komando: php bephunge.phps source.bf
Aplikasi Konsol Sumber Saja
Ini perlu dibangun dari sumber, dan itu biasanya paling mudah dengan lingkungan * nix-like. Pada Windows saya menggunakan Subsistem Windows untuk Linux .
BEF: Distribusi Referensi Befunge-93 -
Ciao mondo!
Baris perintah: bef -q source.bf
( Coba online! )
cfunge -
Sawubona Mhlaba!
Garis komando: cfunge -s 93 source.bf
FBBI: Intepreter Flaming Bovine Befunge-98 -
Hei maailma!
Baris perintah: fbbi -93 source.bf
( Coba online! )
Jamur -
Kaixo Mundua!
Garis komando: fungi source.bf
Rc / Funge-98 -
Salom Dunyo!
Garis komando: rcfunge -93 source.bf
Bagaimana itu bekerja
Tantangan dengan ini adalah menemukan jumlah tes paling sedikit yang memberikan perbedaan paling banyak antara penafsir. Pada akhirnya turun menjadi empat urutan tes utama:
Yang pertama adalah memori out-of-bounds yang dibaca dari offset -1,1. Secara teori ini harus selalu mengembalikan 32 (ruang ASCII), tetapi sebenarnya ada 10 variasi dalam praktik. Tes ini diperumit oleh fakta bahwa dua penerjemah jatuh pada bacaan out-of-bounds, sehingga beberapa tes kasus khusus (pembulatan pembagian dan ruang menjembatani) diperlukan untuk memaksa mereka berdua kembali ke dalam batas.
Urutan kedua adalah tes fungsi Befunge-98 - secara khusus instruksi ;
dan '
. Hampir semua penterjemah adalah Befunge-93, atau dijalankan dalam mode kompatibilitas Befunge-93, jadi mereka harus mengabaikan instruksi tersebut. Dalam praktiknya ada 6 cara berbeda di mana urutan ini ditafsirkan.
Tes ketiga memeriksa rentang sel memori. Dalam juru bahasa referensi, sel-sel memori ditandatangani 8-bit, tetapi implementasi lain bervariasi dalam kisaran dari 8-bit untuk tidak terikat, beberapa ditandatangani dan beberapa tidak ditandatangani. Namun, untuk keperluan tes ini, kami hanya harus membedakan antara 5 varian tersebut.
Urutan keempat dan terakhir adalah kombinasi dari tes pembagian bawah dan negatif. Ada beberapa cara yang menyebabkan interpreter mendapatkan kesalahan, dan setidaknya ada 3 cara berbeda di mana instruksi pembagian dan modulo diterapkan, tetapi hanya ada 3 kombinasi yang kami perhatikan di sini.
Setiap urutan ini menghasilkan satu angka, dan keempat angka tersebut digabungkan (melalui beberapa tabel aritmatika dan terjemahan dasar) untuk menghasilkan nilai akhir dalam kisaran 0 hingga 22. Nilai itu kemudian dapat digunakan sebagai indeks untuk mencari pesan aktual menampilkan.