Solución:
16 idiomas, 1363 bytes
#define ip"MemuL tulaS",,,,,,,,,,"!",@++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>[email protected],kc"Kaixo Mundua!"v#!
#define print(A,B,C)main(){printf("Helo Byd!");}//ss ;ooooooooooooooooooo"Moni Dziko Lapansi!"<
#ifdef __cplusplus//p ;;];;
#include<cstdio>//ffffffffff?
#define print(A,B,C)int main(){printf("Halo Dunya!");}//ssp
#endif//; [;;;;;;;;; "!etejivs vardzoP"]
#ifdef __OBJC__//;;;;;
#define print(A,B,C)main(){printf("Hallo Welt!");}//ss
#endif//
"""echo" "Salom Dunyo!";"exit";puts"Moien Welt!";
__END__
#define B//
"""#;;;;;
print(["Hai dunia!","Hej Verden!","Halo Dunia!"][(int(1>0)is 1)+~int(-1/2)*2])
#define s eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeejeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeejiiiiiiiijeeeeeeeeeeeeeejiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeejeejijiiiiiiiiiijeeeeeeeeeeejiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiij
#define U !"!dlereW ollaH"< ;
#define [email protected],kc"Sannu Duniya!?%?"
¡Pruébelo en línea!
(use “cambiar de idioma” para cambiar el idioma)
-
Python 3 = ¡Halo Dunia! (Indonesio)
-
Python 2 = ¡Hej Verden! (Danés)
-
Python 1 = ¡Hai dunia! (Malayo)
-
C (gcc) = ¡Helo Byd! (Galés)
-
C ++ (gcc) = ¡Halo Dunya! (Sundanés)
-
Objetivo C (clang) = ¡Hola Welt! (Alemán)
-
Brainfuck = ¡Hola mundo! (Inglés, obviamente)
-
Befunge-93 = ¡Salut Lume! (Rumano)
-
Ruby = Moien Welt! (Luxemburgués)
-
Bash = ¡Salom Dunyo! (Uzbeko)
-
Befunge-98 (PyFunge) = ¡Kaixo Mundua! (Vasco)
-
Unefunge-98 (PyFunge) = ¡Sannu Duniya! (Hausa)
-
Cardenal = ¡Hallo Wereld! (Holandés)
-
Alphuck = ¡Ciao mondo! (Italiano)
-
> <> = ¡Moni Dziko Lapansi! (Chichewa)
-
Fisión = Pozdrav svijete! (Croata)
¡Cualquier consejo de golf es bienvenido (especialmente en el Brainfuck)!
¡Gracias a @JonathanFrech por -1 byte! ¡También, gracias a @ovs por -40 bytes!
¿Cómo (ideas generales, de hecho me olvidé de los detalles)?
Los idiomas se pueden dividir en cuatro grupos:
- Macro: C, C ++, Objective C
- Comentario: Python3, Python2, Python1, Ruby, Bash
- Dimensional: Befunge-93, Befunge-98, Unefunge-98, Cardinal,> <>, Fission
- Vulgar: Brainfuck, Alphuck
Los lenguajes macro ver #
como el inicio de una directiva de preprocesador. Estos se utilizan por tres razones: para albergar el código de otros grupos, para distinguir entre lenguajes de macro y para definir realmente una macro. Los tres usan //
como comentario, luego almacenamos el código para los otros grupos. Además, la barra invertida continúa el comentario en estos idiomas.
Los idiomas de comentarios ver #
como comienzo de un comentario. La peculiaridad aquí son las comillas triples, que distinguen a las pitones de Ruby de Bash. Y para distinguir Python 1 de 2 de 3, usamos una característica distintiva en los tres, junto con una variedad de resultados. Oh sí, también está eso __END__
. Esto se usa para finalizar el código para algunos (no puedo recordar exactamente cuáles) de los idiomas de comentarios.
Los lenguajes dimensionales se distinguen de una manera difícil de explicar. Uno tiene que conocer los detalles de cada idioma para entenderlo. Por ejemplo, #
es solo un salto en los fungeoids, mientras que hace varias cosas diferentes en los otros idiomas. El código está esparcido por todas partes para estos lenguajes.
Y finalmente llegamos a las lenguas vulgares. Estos dos ignoran todo lo que no está en su conjunto de caracteres válidos. Se debe realizar un acto de equilibrio con estos idiomas y los demás, ya que el código ya contiene caracteres en los conjuntos de caracteres.
15 idiomas, 532 bytes
# ;"!audnuM oxiaK">:#,[email protected]"Hej Verden!";;@,kb"Tere maailm!";# w"!amliaam ieH"ck,@oooooooooo"Hai dunia!"
`true #{puts'Hola món!'}`
__END__
"Hola Mundo!" puts
case `ps -p$$ -oargs=` in
b*)echo Hallo Welt!;;k*)echo Ndewo Ụwa!;;d*)echo Ciao mondo!;;z*)echo Moien Welt!;;a*)echo Hei Verden!;;esac
true;
#xx
#x%"Olá Mundo!"x
#xx+++[++[<+++>->+++<]>+++++++]<<<--.<.<--..<<---.<+++.<+.>>.>+.>.>-.<<<<+.
¡Pruébelo en línea!
-
Kaixo Mundua!
en Befunge-93 -
Hej Verden!
en fisión -
Tere maailm!
en Unefunge-98 -
Hei maailma!!
en Befunge-98 -
Hai dunia!
en> <> -
Hola món!
en rubí -
Hola Mundo!
en GolfScript -
Hallo Welt!
en bash -
Ndewo Ụwa!
en ksh -
Ciao mondo!
en el tablero -
Moien Welt!
en zsh -
Hei Verden!
en ceniza -
Olá Mundo!
en cardenal -
Hello World!
en brainfuck, cortesía de primo. -
Helo Byd!
en espacio en blanco
Explicación
La línea 1 distingue entre cinco esolangs 2D:
-
><>
lee#
como un espejo, se envuelve a la izquierda, imprime"Hai dunia!"
y se estrella@
). Todos los Funge lo leen como un trampolín y van a la derecha. - Befunge-93 ignora
;
, impresionesKaixo Mundua!
y salidas@
). - El ’98 Funges salta desde el primero
;
al segundo, luego del tercero;
al cuarto.w
es un NOP para Befunge-98, imprimiendoHei maailma!
. - Pero
w
refleja el puntero de instrucciones en Unefunge-98, imprimiendoTere maailm!
. - La fisión no comienza en la esquina superior izquierda en absoluto.
R"Hej Verden!";
es ejecutado. (Otro puntero de instrucción comienza desde elD
en__END__
, pero no hace nada y luego muere al;
entrue;
.)
Ruby ve `true #{puts'Hola món!'}`
, luego __END__
.
GolfScript ve `
, luego true
(NOP), luego un comentario; luego __END__
(NOP); luego "Hola Mundo!" puts
(esto se ejecuta); luego case
(NOP), entonces `
(se bloquea en la pila vacía).
Las conchas ven un comentario, luego una invocación a true
(NOP), luego invocaciones a comandos desconocidos __END__
y "Hola Mundo!"
(que error a STDERR pero la ejecución continúa), entonces el case
declaración que distingue en función de la primera letra del nombre del proceso actual.
Cardinal es otro esolang 2D que comienza en el %
, enviando 4 direcciones IP hacia arriba, abajo, izquierda y derecha. Todos son asesinados por los alrededores x
comandos, pero uno imprime "Olá Mundo!"
antes de morir.
El código de Brainfuck es de primo, con el prefijo ++
para contrarrestar los guiones en ps -p$$ -oargs=
.
El espacio en blanco en mi código se ejecuta como el programa de espacio en blanco
push 0
push 0
label_0:
push 0
push 0
drop
drop
push 72; printc
push 101; printc
push 108; printc
push 111; printc
push 32; printc
push 66; printc
push 121; printc
push 100; printc
push 33; printc
que imprime Helo Byd!
EDITAR: Olvidé eso de agregar UDLR
Los personajes rompen el programa Fission, así que cambié las cadenas para evitarlos.
23 Befunges, 713 bytes
El único idioma que realmente conozco es Befunge, así que en lugar de varios idiomas, he optado por varias implementaciones de Befunge. Creo que esto sigue siendo válido bajo las reglas de PPCG, que consideran que el lenguaje se define 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#^:#+,#$"!"-#[email protected]
!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 hay 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 intento en el programa anterior.
Si alguien está interesado en verificar los resultados, he intentado agrupar las diversas implementaciones en categorías según la facilidad con la que se ponen en funcionamiento (por ejemplo, es posible que algunas personas no puedan ejecutar los binarios de Windows o no estén dispuestas a hacerlo). construir a partir de 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 es posible que necesite algo de tiempo para terminar de ejecutarse.
Zona de juegos Befunge de Alexios – ¡Salamu Dunia!
Haga clic en el Claro... y pegue el código en el campo de entrada. Alternar el Editar cambiar para activar el intérprete, y luego haga clic en el Correr para comenzar a ejecutar.
Tenga en cuenta que este sitio probablemente no funcione 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 Correr botón para ejecutar.
Intérprete Befunge 93 de David Klick – Sannu Duniya!
Pegue el código en el Campo de juego campo de entrada y luego haga clic en el Correr para comenzar a ejecutar.
Intérprete Befunge-93 de Ian Osgood – Salut Lume!
Pegue el código en el campo de entrada debajo del Show , asegurándose de sobrescribir el @
que ya está ahí. Haga clic en el Show para importar el código, luego haga clic en el Correr para comenzar a ejecutar.
jsFunge IDE – ¡Hej Verden!
Primero cierre el Ayudar cuadro de diálogo, luego haga clic en el Abrir / Importar botón de la barra de herramientas (segundo desde la izquierda), pegue el código y haga clic en OK. Para ejecutar, haga clic en el Modo correr (cuarto desde la izquierda), y luego Comienzo (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, aunque técnicamente no son intérpretes en línea, se pueden probar en línea. Para aquellos que son compatibles (actualmente BEF, FBBI, MTFI y PyFunge), he incluido un Pruébelo en línea! enlace junto a su entrada.
IDE de Java
Deberá tener instalado el tiempo de ejecución de Java para estos, pero teóricamente deberían funcionar en cualquier plataforma. Sin embargo, solo probado en Windows.
Applet Visual Befunge de Ashley Mills – ¡Moien Welt!
Inicialmente, se trataba de un subprograma en línea que, lamentablemente, ya no está disponible, pero aún puede descargar el archivo jar y ejecutarlo localmente como una aplicación de escritorio. Deberá pegar el código en el Editor de programas ventana, luego haga clic en el Convertir botón, seguido del Correr botón.
WASABI: Wasabi’s A Soberly Asinine Befunge Intérprete – ¡Hola Welt!
Para pegar el código, haga clic con el botón derecho en la esquina superior izquierda de la ventana del editor ( debe ser la parte superior izquierda) y seleccione el Pegar opción del menú. Luego habilite el A toda velocidad casilla de verificación (de lo contrario, tardará una eternidad) y haga clic en el ¡Correr! para comenzar a ejecutar.
YABI93: Otro intérprete de Befunge93 – ¡Halo Dunia!
prensa control+A, control+V para pegar el código en la ventana del editor, asegurándose de sobrescribir la fuente predeterminada. Luego haga clic en el Comienzo para comenzar a ejecutar.
IDE de Windows
Por lo general, 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 un disco en algún lugar. Luego, desde el IDE, use el Archivo> Abrir menú para cargar el código desde el disco, y seleccione el Simulación> Ejecutar / Pausar menú para ejecutarlo.
BeQunge – ¡Labas pasauli!
prensa control+V para pegar el código y luego haga clic en el Depurar botón de la barra de herramientas (el engranaje azul) para comenzar a ejecutar. Una vez el Depurador aparece el panel, querrá configurar el Velocidad al máximo, el botón a la derecha del control deslizante, de lo contrario, tardará una eternidad en terminar.
Hongo – Tere maailm!
prensa control+V para pegar el código y luego presione F5 para ejecutarlo.
Visbef: Visual Befunge ’93 para Windows – ¡Hola Wereld!
No puede pegar el código en el editor, por lo que primero deberá guárdelo en un disco en algún lugar. Luego, desde el IDE, presione control+O para abrir el explorador de archivos y cargar el código desde el disco, y presione F5 para ejecutarlo.
Aplicaciones de consola de Windows
Nuevamente, estos generalmente requieren Windows, aunque otras plataformas pueden estar disponibles, pero no se garantiza que funcionen.
En todos los casos, será necesario guardar el código en un archivo en el disco y pasar el nombre del archivo al intérprete como un parámetro de línea de comando (source.bf en las líneas de comando de ejemplo que se muestran a continuación). También tenga en cuenta que algunos de estos son técnicamente intérpretes de Befunge-98, y deben ejecutarse con una opción de línea de comandos en particular para forzar un modo de compatibilidad de Befunge-93. Si no lo hace, no obtendrá los resultados correctos.
BEFI: Intérprete Befunge-93 de Rugxulo – ¡Hei Verden!
Línea de comando: bef93w32 -q source.bf
CCBI: Intérprete Befunge-98 concurrente conforme – Sveika pasaule!
Línea de comando: ccbi --befunge93 source.bf
MTFI: Intérprete de Magus Technica Funge – ¡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 de solo fuente
Estos 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 de 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 Intepreter – ¡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 el menor número de pruebas que proporcionaran la mayor diferenciación entre intérpretes. Al final, todo se redujo a cuatro secuencias de prueba principales:
-
La primera es una lectura de memoria fuera de límites desde el 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 los límites, por lo que se requirieron un par de pruebas de casos especiales (redondeo de división y puente de espacio) para forzar 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 deben ignorar esas instrucciones. En la práctica, hubo 6 formas diferentes en las que se interpretó 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 ilimitadas, algunas firmadas y otras sin firmar. Sin embargo, a los efectos de esta prueba, solo tuvimos que distinguir entre 5 de esas variantes.
-
La cuarta y última secuencia es una combinación de pruebas de subdesbordamiento y división negativa. Hay varias formas en las que los intérpretes se equivocan en el subdesbordamiento, y hay al menos 3 formas diferentes en las 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 arrojó un solo número, y esos cuatro números se combinaron (a través de algunas tablas aritméticas y de traducción básicas) para producir un valor final en el rango de 0 a 22. Ese valor podría usarse como índice para buscar el mensaje real. para mostrar.