23 Befunges, 713 byte
L'unica lingua che conosco davvero è Befunge, quindi al posto di più lingue, ho appena scelto diverse implementazioni di Befunge. Credo che ciò sia ancora valido in base alle regole PPCG, che considerano il linguaggio definito dalla sua implementazione .
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!!!!!!!!!!!!!!!!!
La cosa frustrante di Befunge è che sebbene ci sia un'implementazione di riferimento open source e il linguaggio stesso sia completamente semplice, non esiste un singolo interprete di terze parti (di cui sono a conoscenza) che corrisponda esattamente al comportamento di riferimento. Ogni implementazione fallisce in modo diverso.
Tra i lati positivi, questo ci dà l'opportunità di sviluppare un singolo pezzo di codice che produrrà un risultato diverso in quasi tutti gli interpreti. Ed è quello che sto tentando nel programma sopra.
Se qualcuno è interessato a verificare i risultati, ho provato a raggruppare le varie implementazioni in categorie in base a quanto sono facili da avviare e da eseguire (ad esempio alcune persone potrebbero non essere in grado di eseguire i binari di Windows o potrebbero non essere disposti a compilare dalla fonte, ma tutti dovrebbero essere in grado di testare gli interpreti online).
Interpreti online
Nessuna installazione richiesta. Di solito è solo una questione di incollare il codice e fare clic su uno o due pulsanti. Ma nota che alcuni di questi sono piuttosto lenti, quindi potrebbe essere necessario del tempo per terminare l'esecuzione.
Alexios 'Befunge Playground -
Salamu Dunia!
Fare clic sul Clear...pulsante e incollare il codice nel campo di input. Attiva l' Editinterruttore per attivare l'interprete, quindi fai clic sul Runpulsante per iniziare l'esecuzione.
Si noti che questo sito probabilmente non funzionerà nel browser diverso da Chrome.
Befungius -
Molo Lizwe!
Incolla il codice nel campo di input, assicurandoti di sovrascrivere il codice esistente. Quindi fare clic sul Runpulsante per eseguire.
Interprete Befunge 93 di David Klick -
Sannu Duniya!
Incolla il codice nel campo di input di Playfield , quindi fai clic sul Runpulsante per iniziare l'esecuzione.
Interprete Befunge-93 di Ian Osgood -
Salut Lume!
Incolla il codice nel campo di input sotto il Showpulsante, assicurandoti di sovrascrivere quello @
che è già lì. Fare clic sul Showpulsante per importare il codice, quindi fare clic sul Runpulsante per iniziare l'esecuzione.
jsFunge IDE -
Hej Verden!
Prima chiudi la finestra di dialogo Guida , quindi fai clic sul pulsante Apri / Importa sulla barra degli strumenti (secondo da sinistra), incolla il codice e fai clic OK. Per eseguire, fare clic sul pulsante Modalità di esecuzione (quarto da sinistra), quindi su Avvio (quinto da sinistra).
Inoltre, alcuni interpreti basati su console sono effettivamente disponibili su TIO, quindi, sebbene non siano tecnicamente interpreti online, possono essere testati online. Per quelli che sono supportati (attualmente BEF, FBBI, MTFI e PyFunge), ho incluso un Prova online! link accanto alla loro voce.
IDE Java
Dovrai avere il runtime Java installato per questi, ma dovrebbero teoricamente funzionare su qualsiasi piattaforma. Testato solo su Windows però.
Visual Befunge Applet di Ashley Mills -
Moien Welt!
Inizialmente si trattava di un'applet online che purtroppo non è più disponibile, ma è comunque possibile scaricare il vaso ed eseguirlo localmente come applicazione desktop. Dovrai incollare il codice nella finestra dell'Editor di programmi , quindi fare clic sul Convertpulsante, seguito dal Runpulsante.
WASABI: Wasabi è un interprete di Befunge superbamente asinino -
Hallo Welt!
Per incollare il codice, fai clic con il tasto destro nell'angolo in alto a sinistra della finestra dell'editor ( deve essere in alto a sinistra) e seleziona la voce di menu Incolla . Quindi abilitare la casella di controllo Velocità massima (altrimenti ci vorrà per sempre) e fare clic sul Run!pulsante per iniziare l'esecuzione.
YABI93: Yet Another Befunge93 Interpreter -
Halo Dunia!
Premi Ctrl+ A, Ctrl+ Vper incollare il codice nella finestra dell'editor, assicurandoti di sovrascrivere la fonte predefinita. Quindi fare clic sul Startpulsante per iniziare l'esecuzione.
IDE di Windows
Di solito avrai bisogno di Windows per questi, anche se in alcuni casi potrebbero essere disponibili file binari per altri sistemi operativi. Non posso promettere che il codice funzionerà su altre piattaforme però.
BefunExec -
Hello World!
Non è possibile incollare il codice nell'editor, quindi è necessario prima salvarlo su disco da qualche parte. Quindi, dall'IDE, utilizzare il menu File> Apri per caricare il codice dal disco e selezionare il menu Simulazione> Esegui / Pausa per eseguirlo.
BeQunge -
Labas pasauli!
Premi Ctrl+ Vper incollare il codice, quindi fai clic sul pulsante della barra degli strumenti Debug (la ruota dentata blu) per iniziare l'esecuzione. Una volta visualizzato il pannello Debugger , ti consigliamo di impostare la velocità al massimo - il pulsante a destra del cursore - altrimenti ci vorrà un'eternità per finire.
Fungus -
Tere maailm!
Premere Ctrl+ Vper incollare il codice, quindi premere F5per eseguirlo.
Visbef: Visual Befunge '93 per Windows -
Hallo Wereld!
Non è possibile incollare il codice nell'editor, quindi è necessario prima salvarlo su disco da qualche parte. Quindi dall'IDE, premere Ctrl+ Oper aprire il browser dei file e caricare il codice dal disco, quindi premere F5per eseguirlo.
App della console di Windows
Anche in questo caso in genere richiedono Windows, anche se potrebbero essere disponibili altre piattaforme, ma non sono garantite per funzionare.
In tutti i casi il codice dovrà essere salvato su un file su disco e il nome del file sarà passato all'interprete come parametro della riga di comando ( source.bf nelle righe di comando di esempio fornite di seguito). Si noti inoltre che alcuni di questi sono tecnicamente interpreti di Befunge-98 e devono essere eseguiti con una particolare opzione della riga di comando per forzare una modalità di compatibilità di Befunge-93. Se non lo fai, non otterrai i risultati corretti.
BEFI: Interprete Befunge-93 di Rugxulo -
Hei Verden!
Riga di comando: bef93w32 -q source.bf
CCBI: interprete simultaneo Befunge-98 conforme -
Sveika pasaule!
Comand line: ccbi --befunge93 source.bf
MTFI: Magus Technica Funge Interpreter -
Hai dunia!
Riga di comando: mtfi -3 source.bf
( Provalo online! )
App per console Python e PHP
Questi richiedono il linguaggio di scripting appropriato installato - Python o PHP.
Befungee -
Helo Byd!
Riga di comando: befungee.py source.bf
PyFunge -
Halo Dunya!
Riga di comando: pyfunge -v 93 source.bf
( Provalo online! )
Bephunge -
Bonjour monde!
Riga di comando: php bephunge.phps source.bf
App console solo di origine
Questi dovranno essere creati dal sorgente, e di solito è più semplice con un ambiente simile a * nix. Su Windows utilizzo il sottosistema Windows per Linux .
BEF: Befunge-93 Distribuzione di riferimento -
Ciao mondo!
Riga di comando: bef -q source.bf
( Provalo online! )
cfunge -
Sawubona Mhlaba!
Riga di comando: cfunge -s 93 source.bf
FBBI: Flaming Bovine Befunge-98 Intepreter -
Hei maailma!
Riga di comando: fbbi -93 source.bf
( Provalo online! )
Funghi -
Kaixo Mundua!
Riga di comando: fungi source.bf
Rc / Funge-98 -
Salom Dunyo!
Riga di comando: rcfunge -93 source.bf
Come funziona
La sfida con questo era trovare il minor numero di test che fornivano il maggior grado di differenziazione tra interpreti. Alla fine si è trattato di quattro sequenze di test principali:
La prima è una memoria fuori limite letta dall'offset -1,1. In teoria questo dovrebbe sempre restituire 32 (spazio ASCII), ma in realtà c'erano 10 variazioni nella pratica. Questo test è complicato dal fatto che due degli interpreti si bloccano su una lettura fuori limite, quindi sono stati necessari un paio di test per casi speciali (arrotondamento delle divisioni e ponte spaziale) per forzare questi due limiti.
La seconda sequenza è un test della funzionalità di Befunge-98, in particolare le istruzioni ;
e '
. Quasi tutti gli interpreti sono Befunge-93 o sono eseguiti in modalità di compatibilità Befunge-93, quindi dovrebbero semplicemente ignorare quelle istruzioni. In pratica c'erano 6 diversi modi in cui questa sequenza è stata interpretata.
Il terzo test controlla l'intervallo di celle di memoria. Nell'interprete di riferimento, le celle di memoria sono firmate a 8 bit, ma altre implementazioni variano nell'intervallo da 8 bit a illimitato, alcune con segno e altre senza segno. Tuttavia, ai fini di questo test, abbiamo dovuto solo distinguere tra 5 di quelle varianti.
La quarta e ultima sequenza è una combinazione di underflow e test di divisione negativa. Esistono diversi modi in cui gli interpreti sbagliano il underflow e ci sono almeno 3 modi diversi in cui vengono implementate le istruzioni di divisione e modulo, ma c'erano solo 3 combinazioni a cui tenevamo qui.
Ognuna di queste sequenze ha restituito un singolo numero e quei quattro numeri sono stati combinati (tramite alcune tabelle aritmetiche e di traduzione di base) per produrre un valore finale nell'intervallo da 0 a 22. Tale valore potrebbe quindi essere utilizzato come indice per cercare il messaggio effettivo da visualizzare.