Desafío:
Escriba un código que, cuando se ejecute, generará el código fuente de un segundo programa que se puede ejecutar en otro idioma. El segundo programa debe generar el código fuente de un tercer programa que se puede ejecutar en un tercer idioma, etc. El último programa debería salir PPCG
con una nueva línea final opcional.
El ganador será la presentación con la mayoría de los idiomas. La longitud del código del primer programa será el desempate.
Reglas importantes:
- Ningún programa puede ser idéntico
- Cada idioma solo debe funcionar en uno de los códigos fuente. Debería ser imposible usar el mismo lenguaje en dos lugares de la cadena sin romperlo (ver ejemplos) .
- Una cadena acortada no es una cadena rota. Si puede usar un idioma en un lugar diferente al previsto y el resultado final sigue siendo PPCG, entonces no es válido
- Todas las versiones de un idioma cuentan como idiomas únicos (pero tenga en cuenta la regla número 2)
Ejemplos:
Un envío no válido:
print("""print'disp("PPCG")'""")
- Python 3:
print("""print'disp("PPCG")'""")
impresionesprint'disp("PPCG")'
- Python 2:
print'disp("PPCG")'
impresionesdisp("PPCG")
- Octava:
disp("PPCG")
impresionesPPCG
Esto funciona correctamente, pero: puede ejecutar el primer y el segundo código en Python 2 sin romper la cadena, por lo que esto viola la regla número 2.
Una presentación válida con puntaje 3:
print("""print'disp("PPCG")'""")
- Python 3:
print("""print'disp("PPCG")'""")
impresionesprint'disp("PPCG")'
- Perl:
print'disp("PPCG")'
impresionesdisp("PPCG")
- Octava:
disp("PPCG")
impresionesPPCG
Este es exactamente el mismo código que el ejemplo no válido. La diferencia es que hemos elegido idiomas que se adhieren a la regla número 2: no puede ejecutar el primer código en Perl / Octave, el segundo código en Python 3 / Octave ni el último código en Python 3 / Perl. Esto es válido aunque Python 2 puede ejecutar los dos primeros programas, porque no hemos usado Python 2 como uno de los lenguajes.
fuente
Respuestas:
12 idiomas, 64 bytes
Carbón -> tinylisp -> Python 3 -> /// -> Python 2 -> Perl -> QBasic -> Pip -> V -> Retina -> Pyth -> GolfScript
Carbón
Cualquier ejecución de ASCII imprimible es un literal de cadena en Charcoal.
P
puede usarse para impresión multidireccional, pero en este caso simplemente imprime la cadena hacia la derecha.tinylisp
Los únicos caracteres reservados en tinylisp (a partir de este escrito) son paréntesis y espacios en blanco. Cualquier otra serie de personajes es una ficha, incluso algo así
+"\'PPCG\'`">"""'*1
. Los paréntesis definen listas. Laq
(comilla) incorporada devuelve su argumento sin evaluar, en este caso, la lista anidada(print ('/x/print/x"""x q<?"`i.*":?CHR$ (34) +"\'PPCG\'`">"""'*1))
. (Los paréntesis que faltan al final se completan automáticamente).Python 3
Como
print
es una función en Python 3, podemos envolverla entre paréntesis sin problema. En Python 2, donde es una declaración, este es un error de sintaxis. Desafortunadamente, Perl está bien con los paréntesis, por lo que también lo hacemos*1
(repetición de cadenas en Python, conversión a int y multiplicación en Perl).///
/x/print/
cambiax
aprint
en el resto del programa, que no tiene barras y por lo tanto es de salida con más cambios.Python 2
Sin paréntesis después
print
, no funciona en Python 3. A Perl no le gustan las comillas triples.Perl
Las diversas formas de citar una cadena de Perl son útiles y distintas de otros idiomas. Aquí lo usamos
q<...>
.QBasic
Un par de declaraciones impresas (abreviadas como
?
), que se utilizanCHR$(34)
para obtener una cita doble.Pipa
Un patrón literal (regex) literal en backticks.
V
Cambie al modo de inserción, agregue algo de texto.
Retina
Une cualquier cosa y reemplázala con la segunda línea.
Pyth
Las citas de Pyth no necesitan coincidir (lo que hace que este no sea un programa válido en Pip).
GolfScript
fuente
echo '…'
al principioJava -> C -> Ruby -> /// -> Python 3 -> Lote -> JavaScript -> BrainFuck (8 idiomas)
Haga clic en los nombres de idioma para el código a través de cada ejecución, excepto Batch, porque no pude encontrar un intérprete en línea para ello.
Explicación:
fuente
print()
funciona en JavaScript, no genera nada y, de hecho, intenta imprimir la página, así que no creo que eso cuente..
enconsole.log
.Java -> BotEngine -> Treehugger -> Loader -> Batch -> Thue -> Microscript II -> BF -> ForceLang -> Javascript, 10 idiomas
Programa Java:
Programa BotEngine:
Programa Treehugger:
Programa de cargador:
Programa por lotes:
Jue programa:
Programa Microscript II:
Programa BF:
Programa ForceLang:
Programa Javascript:
fuente
11 idiomas, 536 bytes
Bash -> Python 3 -> Ir -> Lua -> Rust -> Java -> C99 -> Python 2 -> JavaScript -> Ruby -> Lote
Golpetazo:
La
p
función reduce el tamaño del código en 497 bytes en comparación con escribir todas las barras invertidas manualmente.Python 3:
La diferenciación obligatoria de Python 2/3.
Vamos:
Lua
El uso
if 1 == 1 then
evita la compatibilidad con Python.Oxido:
Java:
C99:
Python 2:
JavaScript:
Rubí:
Lote:
fuente
Befunge (5 versiones)
Comenzamos con la versión más reciente, Befunge-109 (ejecutar con
cfunge -s 109
):Que genera el siguiente código Befunge-98 (¡ Pruébelo en línea! ):
Que genera el siguiente código Befunge-97 (¡ Pruébelo en línea! ):
Que genera el siguiente código Befunge-96 (¡ Pruébelo en línea! ):
Lo que genera el siguiente Befunge-93 (¡ Pruébelo en línea! ):
Que da salida a la cadena:
PPCG
Cada programa solo se ejecutará en la versión de Befunge a la que apunta. Si intenta ejecutarlos en otra versión, saldrán inmediatamente sin generar nada.
Gracias a Dennis , casi todas las versiones de Befunge ahora están disponibles en línea en TIO . La única excepción es Befunge-109, para lo cual necesitará cfunge , que se puede encontrar aquí .
fuente
11 idiomas (102 bytes)
Voy a agregar más pronto.
Jelly -> Ruby ->> <> -> /// -> Lote -> Python 3 -> JavaScript -> J -> FOG -> Jolf -> Apilado
Salidas Jelly (¡ Pruébelo en línea! ):
Resultados de Ruby (¡ Pruébelo en línea! ):
> <> (use este intérprete; genera espacios en lugar de bytes nulos para espacios) salidas:
/// (¡ Pruébelo en línea! ) Salidas:
Salidas por lotes:
Python 3 (¡ Pruébelo en línea! ) Salidas:
Salidas de JavaScript (¡ Pruébelo en línea! ):
J (¡ Pruébelo en línea! Solo una aproximación) produce:
Impresiones de niebla :
Salidas de Jolf (¡ Pruébalo aquí! ):
Finalmente, los resultados apilados (¡ Pruébelo aquí! ):
fuente
Lote de Windows -> Powershell -> Ruby -> Python 3 -> JavaScript -> SQL -> CJam : 7 idiomas
Lote de Windows
Potencia Shell
Rubí
Python 3
JavaScript
SQL
CJam
fuente
/// a Jelly a Javascript a MS-SQL a QBasic a QBIC, 39 bytes, 6 idiomas
Explicación:
QBIC y QBasic tienen muchas similitudes. Sin embargo, estas líneas de código no son compatibles entre sí: QBasic acepta la
?
abreviatura dePRINT
, pero no sabe qué hacer con el@
y el backtick. QBIC interpretará laPRINT
línea como una referencia a 5 variables de cadena diferentes yP$R$I$N$T$
no es una declaración válida.fuente
blert
;-)9 idiomas: Procesamiento -> Java -> C -> Python 3 -> JavaScript (ES6) -> Octave -> Bash -> sed -> V, 160 bytes
En este momento, mi objetivo es encontrar y agregar idiomas donde no necesito escapar de citas y demás.
Procesando salidas (tenga en cuenta que el programa Java no se ejecuta en Procesamiento y viceversa)
Salidas de Java:
Salidas C:
Python 3 (tenga en cuenta que el programa Python no funcionará en el procesamiento debido a los comentarios y viceversa) salidas:
Salidas de JavaScript:
Salidas de octava:
Salidas de Bash:
salidas sed:
Salidas V:
PPCG
fuente
Python 2 -> Bash -> MySQL -> PHP
int score = 4;
Aunque esto no es código golf, el bytecount es 49.
Salidas de Python:
Salidas de Bash:
Salidas MySQL:
Salidas PHP:
Ahí tienes!
fuente
Nuevo en codegolf, solo tratando de hacer una entrada. No trato de ganar. ¿Lo estoy haciendo bien?
Bash -> Lote - 23 bytes
Esto generará "echo PPCG" en un archivo .bat que se puede ejecutar en Windows.
fuente