23 Befunges, 713 bytes
El único idioma que realmente conozco es Befunge, por lo que, en lugar de varios idiomas, acabo de implementar múltiples implementaciones de Befunge. Creo que esto todavía es válido según las reglas PPCG, que consideran el lenguaje que se definirá por su implementació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!!!!!!!!!!!!!!!!!
Lo frustrante de Befunge es que, aunque existe una implementación de referencia de código abierto y el lenguaje en sí es muy simple, no hay un solo intérprete de terceros (que yo sepa) que coincida exactamente con el comportamiento de referencia. Cada implementación falla de una manera diferente.
En el lado positivo, esto nos da la oportunidad de desarrollar una sola pieza de código que producirá un resultado diferente en casi todos los intérpretes. Y eso es lo que estoy intentando en el programa anterior.
Si alguien está interesado en verificar los resultados, he intentado agrupar las diversas implementaciones en categorías en función de lo fácil que es ponerlas en funcionamiento (por ejemplo, algunas personas pueden no ser capaces de ejecutar los archivos binarios de Windows o no estar dispuestos a hacerlo). construir desde la fuente, pero todos deberían poder probar los intérpretes en línea).
Intérpretes en línea
No requiere instalación. Por lo general, solo es cuestión de pegar el código y hacer clic en uno o dos botones. Pero tenga en cuenta que algunos de estos son bastante lentos, por lo que puede necesitar algo de tiempo para finalizar la ejecución.
Alejo Befunge Zona de juegos -
Salamu Dunia!
Haga clic en el Clear...botón y pegue el código en el campo de entrada. Mueva el Editinterruptor para activar el intérprete y luego haga clic en el Runbotón para comenzar a ejecutar.
Tenga en cuenta que este sitio probablemente no funcionará en otros navegadores que no sean Chrome.
Befungius -
Molo Lizwe!
Pegue el código en el campo de entrada, asegurándose de sobrescribir el código existente. Luego haga clic en el Runbotón para ejecutar.
El intérprete Befunge 93 de David Klick - ¡
Sannu Duniya!
Pegue el código en el campo de entrada de Playfield y luego haga clic en el Runbotón para comenzar a ejecutar.
El intérprete Befunge-93 de Ian Osgood -
Salut Lume!
Pegue el código en el campo de entrada debajo del Showbotón, asegurándose de sobrescribir el @
que ya está allí. Haga clic en el Showbotón para importar el código, luego haga clic en el Runbotón para comenzar a ejecutar.
jsFunge IDE -
Hej Verden!
Primero cierre el cuadro de diálogo Ayuda , luego haga clic en el botón Abrir / Importar barra de herramientas (segundo desde la izquierda), pegue el código y haga clic OK. Para ejecutar, haga clic en el botón Modo de ejecución (cuarto desde la izquierda) y luego en Iniciar (quinto desde la izquierda).
También tenga en cuenta que algunos de los intérpretes basados en consola están realmente disponibles en TIO, por lo que si bien no son técnicamente intérpretes en línea, pueden probarse en línea. Para aquellos que son compatibles (actualmente BEF, FBBI, MTFI y PyFunge), ¡he incluido un Try It Online! enlace al lado de su entrada.
IDEs de Java
Deberá tener instalado el tiempo de ejecución de Java para estos, pero en teoría deberían funcionar en cualquier plataforma. Sin embargo, solo se probó en Windows.
Ashley Mills' Visual Befunge Applet -
Moien Welt!
Inicialmente, este era un applet en línea que desafortunadamente ya no está disponible, pero aún puede descargar el jar y ejecutarlo localmente como una aplicación de escritorio. Deberá pegar el código en la ventana del Editor de programas , luego hacer clic en el Convertbotón, seguido del Runbotón.
WASABI: Wasabi es un intérprete Befunge magníficamente asinino - ¡
Hola, Welt!
Para pegar el código, haga clic derecho en la esquina superior izquierda de la ventana del editor ( debe ser la esquina superior izquierda) y seleccione el elemento de menú Pegar . Luego, active la casilla de verificación Velocidad máxima (de lo contrario, tomará una eternidad) y haga clic en el Run!botón para comenzar a ejecutar.
YABI93: ¡Otro intérprete de Befunge93 -
Halo Dunia!
Presione Ctrl+ A, Ctrl+ Vpara pegar el código en la ventana del editor, asegurándose de sobrescribir la fuente predeterminada. Luego haga clic en el Startbotón para comenzar a ejecutar.
IDEs de Windows
Normalmente necesitará Windows para estos, aunque en algunos casos puede haber binarios disponibles para otros sistemas operativos. Sin embargo, no puedo prometer que el código funcionará en otras plataformas.
BefunExec -
¡Hola, mundo!
No puede pegar el código en el editor, por lo que primero deberá guardarlo en el disco en alguna parte. Luego, desde el IDE, use el menú Archivo> Abrir para cargar el código del disco y seleccione el menú Simulación> Ejecutar / Pausa para ejecutarlo.
BeQunge -
Labas pasauli!
Presione Ctrl+ Vpara pegar el código y luego haga clic en el botón de la barra de herramientas de depuración (el engranaje azul) para comenzar a ejecutar. Una vez que aparezca el panel Depurador , querrá establecer la Velocidad al máximo (el botón a la derecha del control deslizante); de lo contrario, tomará una eternidad terminar.
Hongo -
Tere maailm!
Presione Ctrl+ Vpara pegar el código y luego presione F5para ejecutarlo.
Visbef: Visual Befunge '93 para Windows - ¡
Hola, Wereld!
No puede pegar el código en el editor, por lo que primero deberá guardarlo en el disco en alguna parte. Luego, desde el IDE, presione Ctrl+ Opara abrir el explorador de archivos y cargue el código del disco, y presione F5para ejecutarlo.
Aplicaciones de consola de Windows
Nuevamente, estos normalmente requieren Windows, aunque otras plataformas pueden estar disponibles, pero no se garantiza que funcionen.
En todos los casos, el código deberá guardarse en un archivo en el disco y el nombre del archivo pasará al intérprete como un parámetro de línea de comando ( source.bf en las líneas de comando de ejemplo que figuran a continuación). También tenga en cuenta que algunos de estos son técnicamente intérpretes Befunge-98, y deben ejecutarse con una opción particular de línea de comandos para forzar un modo de compatibilidad Befunge-93. Si no haces eso, no obtendrás los resultados correctos.
BEFI: Intérprete Befunge-93 de Rugxulo - ¡
Hei Verden!
Línea de comando: bef93w32 -q source.bf
CCBI: Intérprete concurrente Befunge-98 conforme -
Sveika pasaule!
Línea de comando: ccbi --befunge93 source.bf
MTFI: Magus Technica Funge Interpreter - ¡
Hai dunia!
Línea de comando: mtfi -3 source.bf
(¡ Pruébelo en línea! )
Aplicaciones de consola Python y PHP
Estos requieren el lenguaje de scripting apropiado instalado, ya sea Python o PHP.
Befungee -
Helo Byd!
Línea de comando: befungee.py source.bf
PyFunge -
Halo Dunya!
Línea de comando: pyfunge -v 93 source.bf
(¡ Pruébelo en línea! )
Bephunge -
Bonjour monde!
Línea de comando: php bephunge.phps source.bf
Aplicaciones de consola solo de origen
Deberán construirse desde la fuente, y eso suele ser más fácil con un entorno similar a * nix. En Windows uso el Subsistema de Windows para Linux .
BEF: Distribución de referencia Befunge-93 -
Ciao mondo!
Línea de comando: bef -q source.bf
(¡ Pruébelo en línea! )
cfunge -
Sawubona Mhlaba!
Línea de comando: cfunge -s 93 source.bf
FBBI: Flaming Bovine Befunge-98 Intérprete -
Hei maailma!
Línea de comando: fbbi -93 source.bf
(¡ Pruébelo en línea! )
Hongos -
Kaixo Mundua!
Línea de comando: fungi source.bf
Rc / Funge-98 -
Salom Dunyo!
Línea de comando: rcfunge -93 source.bf
Cómo funciona
El desafío con esto fue encontrar la menor cantidad de pruebas que proporcionaran la mayor diferenciación entre los intérpretes. Al final se redujo a cuatro secuencias de prueba principales:
El primero es una lectura de memoria fuera de límites del desplazamiento -1,1. En teoría, esto siempre debería devolver 32 (espacio ASCII), pero en realidad hubo 10 variaciones en la práctica. Esta prueba se complica por el hecho de que dos de los intérpretes fallan en una lectura fuera de límites, por lo que se requirieron un par de pruebas de casos especiales (redondeo de división y puente de espacio) para obligar a esos dos a volver a los límites.
La segunda secuencia es una prueba de la funcionalidad de Befunge-98, específicamente las instrucciones ;
y '
. Casi todos los intérpretes son Befunge-93, o se ejecutan en modo de compatibilidad Befunge-93, por lo que deberían ignorar esas instrucciones. En la práctica, hubo 6 formas diferentes de interpretar esta secuencia.
La tercera prueba verifica el rango de celdas de memoria. En el intérprete de referencia, las celdas de memoria están firmadas de 8 bits, pero otras implementaciones varían en el rango de 8 bits a sin límite, algunas con signo y otras sin signo. Sin embargo, para los propósitos de esta prueba, solo tuvimos que distinguir entre 5 de esas variantes.
La cuarta y última secuencia es una combinación de pruebas de flujo negativo y división negativa. Hay varias formas en que los intérpretes se equivocan, y hay al menos 3 formas diferentes en que se implementan las instrucciones de división y módulo, pero solo hay 3 combinaciones que nos interesan aquí.
Cada una de estas secuencias devolvió un solo número, y esos cuatro números se combinaron (a través de algunas tablas básicas de aritmética y traducción) para producir un valor final en el rango de 0 a 22. Ese valor podría usarse como un índice para buscar el mensaje real para mostrar.