23 Befunges, 713 Bytes
Die einzige Sprache, die ich wirklich kenne, ist Befunge. Statt mehrerer Sprachen habe ich jetzt mehrere Befunge-Implementierungen verwendet. Ich bin der Meinung, dass dies nach den PPCG-Regeln immer noch gültig ist, da diese davon ausgehen, dass die Sprache durch ihre Implementierung definiert wird .
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!!!!!!!!!!!!!!!!!
Das Frustrierende an Befunge ist, dass es, obwohl es eine Open-Source-Referenzimplementierung gibt und die Sprache selbst absolut einfach ist, keinen einzigen Interpreter von Drittanbietern gibt (dessen ich mir bewusst bin), der genau mit dem Referenzverhalten übereinstimmt. Jede Implementierung schlägt anders fehl.
Positiv zu vermerken ist, dass wir die Möglichkeit haben, einen einzigen Code zu entwickeln, der für fast jeden Interpreter ein anderes Ergebnis liefert. Und genau das versuche ich im obigen Programm.
Wenn jemand Interesse daran hat, die Ergebnisse zu überprüfen, habe ich versucht, die verschiedenen Implementierungen in Kategorien zu gruppieren, die darauf basieren, wie einfach sie einzurichten sind (z. B. können manche Benutzer möglicherweise keine Windows-Binärdateien ausführen oder sind möglicherweise nicht dazu bereit) aus dem Quellcode erstellen, aber jeder sollte in der Lage sein, die Online-Dolmetscher zu testen).
Online-Dolmetscher
Keine Installation erforderlich. In der Regel müssen Sie nur den Code einfügen und auf eine oder zwei Schaltflächen klicken. Beachten Sie jedoch, dass einige dieser Vorgänge sehr langsam sind. Daher kann es einige Zeit dauern, bis die Ausführung abgeschlossen ist.
Alexios 'Befunge-Spielplatz -
Salamu Dunia!
Klicken Sie auf die Clear...Schaltfläche und fügen Sie den Code in das Eingabefeld ein. EditSchalten Sie den Schalter um, um den Interpreter zu aktivieren, und klicken Sie dann auf die RunSchaltfläche, um mit der Ausführung zu beginnen.
Beachten Sie, dass diese Site in anderen Browsern als Chrome wahrscheinlich nicht funktioniert.
Befungius -
Molo Lizwe!
Fügen Sie den Code in das Eingabefeld ein und achten Sie darauf, den vorhandenen Code zu überschreiben. Klicken Sie dann Runzum Ausführen auf die Schaltfläche.
David Klick's Befunge 93 Dolmetscher -
Sannu Duniya!
Fügen Sie den Code in das Spielfeld Eingabefeld, und klicken Sie dann auf die RunSchaltfläche Ausführung beginnen.
Ian Osgoods Befunge-93-Dolmetscher -
Salut Lume!
Fügen Sie den Code in das Eingabefeld unter der ShowSchaltfläche ein und achten Sie darauf, den @
bereits vorhandenen Code zu überschreiben . Klicken Sie auf die ShowSchaltfläche, um den Code zu importieren, und klicken Sie dann auf die RunSchaltfläche, um mit der Ausführung zu beginnen.
jsFunge IDE -
Hej Verden!
Schließen Sie zuerst die Hilfe Dialog und klicken Sie auf die Öffnen / Import Symbolleiste auf die Schaltfläche (zweiter von links), Paste in den Code, und klicken Sie auf OK. Klicken Sie zum Ausführen auf die Schaltfläche Run Mode (vierter von links) und dann auf Start (fünfter von links).
Beachten Sie auch, dass einige der konsolenbasierten Interpreter tatsächlich auf TIO verfügbar sind. Sie sind also keine technischen Online-Interpreter, sondern können online getestet werden. Für diejenigen, die unterstützt werden (derzeit BEF, FBBI, MTFI und PyFunge), habe ich Try It Online! Link neben ihrem Eintrag.
Java IDEs
Sie müssen die Java-Laufzeit für diese installiert haben, aber sie sollten theoretisch auf jeder Plattform funktionieren. Nur unter Windows getestet.
Ashley Mills 'Visual Befunge Applet -
Moien Welt!
Dies war ursprünglich ein Online-Applet, das leider nicht mehr verfügbar ist, aber Sie können die JAR-Datei trotzdem herunterladen und lokal als Desktop-Anwendung ausführen. Sie müssen den Code in das Programmeditorfenster einfügen und dann auf die ConvertSchaltfläche und anschließend auf die RunSchaltfläche klicken .
WASABI: Wasabi's A Superbly Asinine Befunge Interpreter -
Hallo Welt!
Um den Code einzufügen, klicken Sie mit der rechten Maustaste in die obere linke Ecke des Editorfensters (es muss ganz oben links sein) und wählen Sie den Menüpunkt Einfügen . Aktivieren Sie dann das Kontrollkästchen Full Speed (andernfalls dauert es ewig) und klicken Sie auf die Run!Schaltfläche, um mit der Ausführung zu beginnen.
YABI93: Noch ein Befunge93-Interpreter -
Halo Dunia!
Drücken Sie Ctrl+ A, Ctrl+, Vum den Code in das Editorfenster einzufügen und die Standardquelle zu überschreiben. Klicken Sie dann auf die StartSchaltfläche, um mit der Ausführung zu beginnen.
Windows-IDEs
In der Regel benötigen Sie hierfür Windows. In einigen Fällen sind jedoch Binärdateien für andere Betriebssysteme verfügbar. Ich kann nicht versprechen, dass der Code auf anderen Plattformen funktioniert.
BefunExec -
Hallo Welt!
Sie können den Code nicht in den Editor einfügen, daher müssen Sie ihn zunächst irgendwo auf der Festplatte speichern. Verwenden Sie dann in der IDE das Menü Datei> Öffnen , um den Code von der Festplatte zu laden, und wählen Sie das Menü Simulation> Ausführen / Pause , um ihn auszuführen.
BeQunge -
Labas pasauli!
Drücken Sie Ctrl+, Vum den Code einzufügen , und klicken Sie dann in der Symbolleiste auf die Schaltfläche Debuggen (das blaue Zahnrad), um mit der Ausführung zu beginnen. Sobald der Debugger-Bereich angezeigt wird, möchten Sie die Geschwindigkeit auf Maximum einstellen - die Schaltfläche rechts neben dem Schieberegler - andernfalls dauert es ewig, bis der Vorgang abgeschlossen ist.
Pilz -
Tere Maailm!
Drücken Sie Ctrl+ Vin den Code einzufügen, und drücken Sie dann F5, um sie auszuführen.
Visbef: Visual Befunge '93 für Windows -
Hallo Wereld!
Sie können den Code nicht in den Editor einfügen, daher müssen Sie ihn zunächst irgendwo auf der Festplatte speichern. Drücken Sie dann in der IDE Ctrl+ O, um den Dateibrowser zu öffnen und den Code von der Festplatte zu laden, und drücken Sie F5, um ihn auszuführen.
Windows-Konsolen-Apps
Wiederum erfordern diese normalerweise Windows, obwohl andere Plattformen möglicherweise verfügbar sind, aber nicht garantiert funktionieren.
In allen Fällen muss der Code in einer Datei auf der Festplatte gespeichert und der Dateiname als Befehlszeilenparameter an den Interpreter übergeben werden ( source.bf in den folgenden Beispielbefehlszeilen). Beachten Sie auch, dass einige dieser Interpreter technisch Befunge-98-Interpreter sind und mit einer bestimmten Befehlszeilenoption ausgeführt werden müssen, um einen Befunge-93-Kompatibilitätsmodus zu erzwingen. Wenn Sie das nicht tun, erhalten Sie nicht die richtigen Ergebnisse.
BEFI: Rugxulos Befunge-93-Dolmetscher -
Hei Verden!
Befehlszeile: bef93w32 -q source.bf
CCBI: Übereinstimmender Befunge-98-Interpreter -
Sveika pasaule!
Befehlszeile: ccbi --befunge93 source.bf
MTFI: Magus Technica Funge Interpreter -
Hai Dunia!
Befehlszeile: mtfi -3 source.bf
( Online ausprobieren! )
Python- und PHP-Konsolen-Apps
Hierfür muss die entsprechende Skriptsprache installiert sein - entweder Python oder PHP.
Befungee -
Helo Byd!
Befehlszeile: befungee.py source.bf
PyFunge -
Halo Dunya!
Befehlszeile: pyfunge -v 93 source.bf
( Online ausprobieren! )
Bephunge -
Bonjour monde!
Befehlszeile: php bephunge.phps source.bf
Nur-Quell-Konsolen-Apps
Diese müssen aus dem Quellcode erstellt werden, und das ist normalerweise am einfachsten in einer * nix-ähnlichen Umgebung. Unter Windows verwende ich das Windows-Subsystem für Linux .
BEF: Befunge-93 Referenzverteilung -
Ciao mondo!
Befehlszeile: bef -q source.bf
( Online ausprobieren! )
cfunge -
Sawubona Mhlaba!
Befehlszeile: cfunge -s 93 source.bf
FBBI: Flaming Bovine Befunge-98 Intepreter -
Hei maailma!
Befehlszeile: fbbi -93 source.bf
( Online ausprobieren! )
Pilze -
Kaixo Mundua!
Befehlszeile: fungi source.bf
RC / Funge-98 -
Salom Dunyo!
Befehlszeile: rcfunge -93 source.bf
Wie es funktioniert
Die Herausforderung dabei war, die geringste Anzahl von Tests zu finden, die die größte Differenzierung zwischen Dolmetschern ermöglichten. Am Ende waren es vier Haupttestsequenzen:
Der erste ist ein Speicher außerhalb der Grenzen, der von Offset -1,1 gelesen wird. Theoretisch sollte dies immer 32 (ASCII-Raum) zurückgeben, aber in der Praxis gab es tatsächlich 10 Variationen. Dieser Test wird durch die Tatsache erschwert, dass zwei der Interpreter bei einer Lesung außerhalb der Grenzen abstürzen. Daher waren einige Spezialfalltests (Division Rounding und Space Bridging) erforderlich, um diese beiden zurück in die Schranken zu zwingen.
Die zweite Sequenz ist ein Test der Befunge-98-Funktionalität - speziell der Anweisungen ;
und '
. Fast alle Interpreter sind Befunge-93-Interpreter oder werden im Befunge-93-Kompatibilitätsmodus ausgeführt. Sie sollten diese Anweisungen einfach ignorieren. In der Praxis gab es 6 verschiedene Arten, wie diese Reihenfolge interpretiert wurde.
Der dritte Test überprüft den Bereich der Speicherzellen. In dem Referenzinterpreter sind Speicherzellen 8-Bit mit Vorzeichen versehen, aber andere Implementierungen variieren im Bereich von 8-Bit bis unbegrenzt, einige mit Vorzeichen und einige ohne Vorzeichen. Für diesen Test mussten wir jedoch nur zwischen 5 dieser Varianten unterscheiden.
Die vierte und letzte Sequenz ist eine Kombination aus Unterlauf- und Negativuntertests. Es gibt eine Reihe von Möglichkeiten, wie Interpreter falsch unterlaufen, und es gibt mindestens 3 verschiedene Möglichkeiten, wie die Divisions- und Modulo-Anweisungen implementiert werden, aber es gab nur 3 Kombinationen, die uns hier wichtig waren.
Jede dieser Sequenzen gab eine einzelne Zahl zurück, und diese vier Zahlen wurden (über einige Grundrechen- und Übersetzungstabellen) kombiniert, um einen Endwert im Bereich von 0 bis 22 zu erhalten. Dieser Wert könnte dann als Index zum Nachschlagen der tatsächlichen Nachricht verwendet werden anzuzeigen.