Convertir JSF ** k en JS normal


12

Beaucoup d'entre vous connaissent déjà JSF ** k . Pour ceux qui ne le font pas, c'est un script qui transforme fondamentalement tout code JavaScript en quelque chose d'écrit en utilisant uniquement []()!+.

Votre tâche consiste à créer, en utilisant n'importe quelle langue de votre choix, un programme qui convertit JSF ** k en JavaScript non obscurci.

  • Entrée : une chaîne avec un code JSF ** k valide.
  • Sortie : une chaîne avec le code JavaScript normal qui a été précédemment JSF ** ked pour générer l'entrée.

Pour ce défi, considérez que la chaîne d'entrée n'a été ked JSF ** qu'une seule fois.

Il s'agit d'un concours de , donc le code le plus court, en octets, gagne.


@Michael mais le codage est-il réversible sans ambiguïté? Je ne pense pas ... comment puis-je décider si un [...]accès à un tableau faisait partie du code d'origine ou de l'obfuscation? même pour toutes les autres constructions, vraiment.
— Martin Ender

2
@JanDvorak oh quoi ... c'est tellement contre-productif ... nous pourrions l' aider à clore cette question et à voter positivement au lieu de diminuer.
— Martin Ender

2
@ m.buettner J'ai voté contre parce que je pense que la question ne va nulle part. Je ne veux certainement pas voter un article juste pour débloquer des privilèges pour quelqu'un.
— John Dvorak

2
@JanDvorak Je pense que nous ne devons pas décourager les nouveaux utilisateurs qui veulent écrire de bons défis et écouter les critiques. Comme le bac à sable est sur méta et y restera, le vote à la baisse est contre-productif. La fermeture est totalement suffisante. Je ne pense pas qu'un seul vote positif nuirait à quiconque, et cela donnerait à l'utilisateur la chance de trouver réellement une entrée dans cette communauté. Mais quelqu'un était d'accord avec vous et a décidé de voter également, car diable, pourquoi les nouveaux utilisateurs devraient-ils être autorisés à publier dans le bac à sable (je suppose) ... et maintenant il ne peut toujours pas publier là-bas. Je ne pense pas que c'est ainsi que nous développons cette communauté.
— Martin Ender

1
Pouvez-vous s'il vous plaît ajouter quelques explications sur ce que signifie JavaScript normal ? Il n'est peut-être pas évident de savoir comment procéder à la rétrotransformation. Par exemple, si j'itère deux fois l'obfustateur sur une belle entrée, quelle est la sortie suggérée? Le programme d'origine ou l'entrée qui était déjà obscurcie?
— Howard

Réponses:


12

Javascript - 68 55 51

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

Alternativement: (même longueur)

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

Fonctionne dans la console de votre navigateur. Garanti uniquement pour fonctionner avec le code généré par jsfuck.com avec l'option 'Source Eval' cochée.

Non 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
)

Dans une modification suggérée que j'ai rejetée, @ user3082537 a suggéré d'utiliser l'expression régulière au lieu de la tranche, comme dansreplace(/^.*\n|\n}$/g,'')
— user12205

7

JavaScript, 122, fonctionne avec n'importe quelle entrée

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

Assez simple; il revient simplement dans la chaîne jusqu'à ce que les parenthèses ( (et )) soient équilibrées. Les trois derniers caractères de la sortie JSF sont toujours )() , donc découper les 2 dernières parens puis trouver le paren correspondant pour l'autre fonctionnera toujours. (Cela fonctionne également avec l'entrée [].)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.