Escriba una "palipolicina": un programa que es una quina , un políglota y un palíndromo .
Reglas:
- El número de idiomas políglotas es más preferible que el tamaño del código.
- La respuesta más corta (en bytes) gana, en caso de empate.
- Reglas de políglotas y quinas ver aquí: Escribe una poliquina .
Mi ejemplo (tengo un repositorio Freaky-Sources con pruebas):
C # / Java (1747 bytes):
/**///\u000A\u002F\u002A
using System;//\u002A\u002F
class Program{public static void//\u000A\u002F\u002A
Main//\u002A\u002Fmain
(String[]z){String s="`**?`@#_^using System;?_#^class Program{public static void?@#_^Main?_#main^(String[]z){String s=!$!,t=s;int i;int[]a=new int[]{33,94,38,64,35,95,96,63,36};String[]b=new String[]{!&!!,!&n!,!&&!,!&@!,!&#!,!&_!,!`!,!?!,s};for(i=0;i<9;i++)t=t.?@#_^Replace?_#replace^(!!+(char)a[i],b[i]);t+='*';for(i=872;i>=0;i--)t=t+t?@#_^[i];Console.Write?_#.charAt(i);System.out.printf^(t);}}/",t=s;int i;int[]a=new int[]{33,94,38,64,35,95,96,63,36};String[]b=new String[]{"\"","\n","\\","\\u000A","\\u002F","\\u002A","/","//",s};for(i=0;i<9;i++)t=t.//\u000A\u002F\u002A
Replace//\u002A\u002Freplace
(""+(char)a[i],b[i]);t+='*';for(i=872;i>=0;i--)t=t+t//\u000A\u002F\u002A
[i];Console.Write//\u002A\u002F.charAt(i);System.out.printf
(t);}}/*/}};)t(
ftnirp.tuo.metsyS;)i(tArahc.F200u\A200u\//etirW.elosnoC;]i[
A200u\F200u\A000u\//t+t=t)--i;0=>i;278=i(rof;'*'=+t;)]i[b,]i[a)rahc(+""(
ecalperF200u\A200u\//ecalpeR
A200u\F200u\A000u\//.t=t)++i;9<i;0=i(rof;}s,"//","/","A200u\\","F200u\\","A000u\\","\\","n\",""\"{][gnirtS wen=b][gnirtS;}63,36,69,59,53,46,83,49,33{][tni wen=a][tni;i tni;s=t,"/}};)t(^ftnirp.tuo.metsyS;)i(tArahc.#_?etirW.elosnoC;]i[^_#@?t+t=t)--i;0=>i;278=i(rof;'*'=+t;)]i[b,]i[a)rahc(+!!(^ecalper#_?ecalpeR^_#@?.t=t)++i;9<i;0=i(rof;}s,!?!,!`!,!_&!,!#&!,!@&!,!&&!,!n&!,!!&!{][gnirtS wen=b][gnirtS;}63,36,69,59,53,46,83,49,33{][tni wen=a][tni;i tni;s=t,!$!=s gnirtS{)z][gnirtS(^niam#_?niaM^_#@?diov citats cilbup{margorP ssalc^#_?;metsyS gnisu^_#@`?**`"=s gnirtS{)z][gnirtS(
niamF200u\A200u\//niaM
A200u\F200u\A000u\//diov citats cilbup{margorP ssalc
F200u\A200u\//;metsyS gnisu
A200u\F200u\A000u\///**/
code-challenge
quine
palindrome
polyglot
Ivan Kochurkin
fuente
fuente
1
(que se mostrará1
en muchos idiomas aquí, y es palindrómica).Respuestas:
CJam / GolfScript , 2 idiomas, 50 bytes
Pruébalo CJam! Pruébalo en GolfScript!
Huh, esto quedó sin respuesta sorprendentemente largo.
Explicación
Probablemente sea más fácil explicar esto mostrando cómo convertí la quina básica en cada idioma en una quina políglota palindrómica.
Entonces, los quines básicos en ambos idiomas son:
En GolfScript y CJam, respectivamente. Estos son bastante similares gracias al hecho de que CJam se inspiró originalmente en GolfScript (pero desde entonces se ha desviado bastante). La primera diferencia que notamos es que uno usa
.
para duplicar la parte superior de la pila y los otros usos_
. Un truco común para evitar este problema es utilizarlo0$
, ya que ambos idiomas tienen el operador "copiar-enésimo elemento en la pila"$
. Entonces obtenemos{"0$~"}0$~
, aunque eso todavía necesita un salto de línea final en GolfScript. Pero preocupémonos por eso al final.Primero, debemos convertirlo en un palíndromo. La solución obvia a esto es agregar un comentario y poner el código fuente allí al revés. Esto es bastante simple, porque CJam usa
e#
para comentarios, y en GolfScripte
no hace nada, y#
es un comentario. Entonces, si agregamos,e#...
eso funciona para ambos idiomas. Esto es lo que tenemos:Por supuesto, eso en realidad no imprime la parte en
e#
adelante. Podemos reconstruir esto fácilmente desde el código fuente mismo. Ambos idiomas pueden convertir el bloque inicial en una cadena con`
y agregar la"0$~"
parte con+
, de modo que obtengamos el código fuente completo sin reflejos en una sola cadena. Para agregar una copia reflejada, todo lo que tenemos que hacer es duplicar la cadena0$
nuevamente y luego invertirla-1%
, lo que también funciona en ambos idiomas. Entonces ahora tenemos esto:Esta es una quine palindrómica válida en CJam, y también funciona en GolfScript, pero aún imprime ese molesto avance de línea.
La forma habitual de evitar esto es asignar una cadena vacía a
n
, porque lo que realmente hace GolfScript es imprimir el contenidon
al final. Entonces, lo que necesitamos es"":n
. ¿Y qué hay de CJam? Afortunadamente, esto no hace nada en absoluto.""
también es una cadena vacía (o lista vacía, son lo mismo en CJam), y:
asigna el operadorn
(imprimir con salto de línea) sobre la lista. Pero como la lista está vacía, mapear un operador sobre ella no hace nada en absoluto. Por lo tanto, podemos deshacernos del salto de línea, sin jugar con CJam, y terminar con la solución final:fuente
Perl 5 / Ruby / PHP / JavaScript (navegador), 4 idiomas, 513 bytes
Prueba el Perl en línea!
Pruébalo en línea!
Prueba el PHP en línea!
Validarlo en línea!
fuente