Convierta JSF ** k a JS normal

12

Muchos de ustedes ya saben JSF ** k . Para aquellos que no lo hacen, es un script que básicamente convierte cualquier código JavaScript en algo escrito usando solo []()!+.

Su tarea es construir, usando cualquier lenguaje de su elección, un programa que convierta JSF ** k en JavaScript no ofuscado.

  • Entrada : una cadena con código JSF ** k válido.
  • Salida : una cadena con el código JavaScript normal que se ha creado previamente con JSF ** para generar la entrada.

Para este desafío, considere que la cadena de entrada solo ha sido JSF ** ked una vez.

Este es un concurso de , por lo que gana el código más corto, en bytes.

William Barbosa
fuente
@Michael, pero ¿es la codificación inequívocamente reversible? No lo creo ... ¿cómo decido si un cierto [...]acceso a la matriz era parte del código original o parte de la ofuscación? lo mismo para todas las otras construcciones, de verdad.
Martin Ender
2
@ JanDvorak oh qué ... eso es tan contraproducente ... podríamos ayudarlo a cerrar esta pregunta y votar en lugar de votar.
Martin Ender
2
@ m.buettner He votado en contra porque no creo que la pregunta vaya a ninguna parte. Definitivamente no quiero votar una publicación solo para desbloquear algunos privilegios para alguien.
John Dvorak,
2
@ JanDvorak Creo que no deberíamos desalentar a los nuevos usuarios que quieran escribir buenos desafíos y escuchar críticas. Dado que el sandbox está en meta y permanecerá allí, el downvoting es contraproducente. El cierre es totalmente suficiente. No creo que un solo voto a favor perjudique a nadie, y le daría al usuario la oportunidad de encontrar una entrada en esta comunidad. Pero alguien estuvo de acuerdo con usted y decidió hacer un voto negativo también, porque diablos, ¿por qué deberían permitirse a los nuevos usuarios publicar en el sandbox (supongo) ... y ahora todavía no puede publicar allí. No creo que así crezcamos esta comunidad.
Martin Ender
1
¿Puede agregar alguna explicación sobre lo que significa JavaScript normal ? Puede que no sea obvio cómo se debe hacer la transformación hacia atrás. Por ejemplo, si itero el obfustador dos veces en alguna entrada agradable, ¿cuál es la salida sugerida? ¿El programa original o la entrada que ya estaba ofuscada?
Howard

Respuestas:

12

Javascript - 68 55 51

alert(/\n(.+)/.exec(eval(prompt().slice(0,-2)))[1])

Alternativamente: (misma longitud)

alert(/.+(?=\n})/.exec(eval(prompt().slice(0,-2))))

Se ejecuta en la consola de su navegador. Solo se garantiza que funcione con el código generado por jsfuck.com con la opción 'Evaluar fuente' marcada.

Sin golf:

alert(
    /\n(.+)/.exec(                 // regex to extract code from inside outer function braces {}
        eval(prompt().slice(0,-2)) // remove the final set of parens () and evaluate the code
                                   // this results in a function, which will be converted to a string as 'exec' expects a string
    )[1]                           // get the first capture group
)
nderscore
fuente
En una edición sugerida que rechacé, @ user3082537 sugirió usar regex en lugar de cortar, como enreplace(/^.*\n|\n}$/g,'')
user12205
7

JavaScript, 122, funciona con cualquier entrada

s=prompt().slice(0,-2)
i=s.length
while(i--){if((l=s.slice(i)).split(')').length==l.split('(').length)break}alert(eval(l))

Bastante simple; simplemente vuelve a la cadena hasta que los paréntesis ( (y )) están equilibrados. Los últimos tres caracteres de la salida JSF son siempre )() , por lo que cortar los dos últimos parens y luego encontrar el par coincidente para el otro siempre funcionará. (Funciona con entrada con []también).

Pomo de la puerta
fuente