JSFuck es un lenguaje esotérico en el que cualquier declaración de Javascript se puede reproducir con precisión en otro programa de Javascript válido que use solo los 6 caracteres []()!+
.
El convertidor JSFuck, cuando recibe una entrada de alert("Hello World!")
, produce un bloque de código que tiene 22.948 caracteres de longitud. Debido a que el programa usó muchas conversiones automáticas para crear ese bloque, creo que el código se puede acortar mucho usando optimizaciones manuales.
Su tarea es construir un programa Javascript que realice la tarea alert("Hello World!")
, utilizando solo los caracteres []()!+
. El código más corto para hacerlo gana.
$
y=
también, por favor? De lo contrario, no creo que podamos mejorar el generador.Respuestas:
JScrewIt (diferentes soluciones: 16117, 14747 y 5903 caracteres)
Los motores Javascript no son idénticos; ligeras diferencias de implementación pueden causar que el código que funciona en un navegador no funcione en otro. En el caso de código lipogramático como JSFuck, que se basa en gran medida en hacks para codificar cosas lo más breve posible, las incompatibilidades son aún mayores.
Por ejemplo, el código generado por JSFuck para
alert("Hello World!")
no se ejecuta en Internet Explorer. Si esta es una limitación aceptable, aún podemos reducir el tamaño a 1611722174caracteres (no puedo incluir el código completo directamente porque el tamaño de la respuesta está limitado a 30000 caracteres):http://jsfiddle.net/ep2jqsj4/1/
Un código que también funciona en Internet Explorer, pero no en algunos navegadores más antiguos, requiere 14747 caracteres para codificar:
http://jsfiddle.net/bbxfqboq/
Finalmente, si está bien tener un código que se ejecute solo en Firefox [actualización] y Safari [fin de actualización] actuales , podríamos hacerlo con 5903
5911caracteres :http://jsfiddle.net/pkyLy0j8/1/
Codifiqué a todos aquellos con JScrewIt . Puede encontrar otros codificadores similares a JSFuck listados en Esolang: http://esolangs.org/wiki/JSFuck . Los probé todos y tengo que decir que JScrew parece ser el mejor (y también el único que funciona en todos los navegadores), aunque no he analizado cómo funciona en detalle.
Otro codificador interesante es 6chars.js , que genera una salida más grande para entradas cortas como
alert("Hello World!")
, pero cuando la entrada se alarga, funciona mejor que los otros codificadores porque codifica los caracteres como números. Los números son más cortos para escribir en JSFuck pero requieren una sobrecarga adicional para decodificar. Desafortunadamente, 6chars.js solo funciona en Chrome y no puedo decir si todavía se está desarrollando activamente.Sería interesante saber si hay más codificadores de este tipo. Si uno pudiera unir métodos utilizados por diferentes codificadores en una herramienta, sería posible producir soluciones aún más cortas.
fuente
JSFuck (15.863 caracteres)
No está realmente optimizado (solo 7,085 caracteres), pero no es que las optimizaciones sean realmente posibles, ya que JSFuck es solo un simple truco de lenguaje.
fuente
JSFuck, 18827
No pude descifrarlo mucho más. Código autogenerado, optimicé el código JS legible para el generador. Solo se hicieron muy pocas optimizaciones en el código JSFuck.
fuente