JSFuck est un langage ésotérique dans lequel toute déclaration Javascript peut être reproduite avec précision dans un autre programme Javascript valide qui utilise uniquement les 6 caractères []()!+
.
Le convertisseur JSFuck, lorsqu'il reçoit une entrée de alert("Hello World!")
, produit un bloc de code de 22 948 caractères. Parce que le programme a utilisé beaucoup de conversions automatiques pour créer ce bloc, je pense que le code peut être beaucoup plus court en utilisant des optimisations manuelles.
Votre tâche consiste à créer un programme Javascript qui exécute la tâche alert("Hello World!")
, en utilisant uniquement les caractères []()!+
. Le code le plus court pour le faire gagne.
$
et=
aussi, s'il vous plaît? Sinon, je ne pense pas que nous puissions surpasser le générateur.Réponses:
JScrewIt (différentes solutions: 16117, 14747 et 5903 caractères)
Les moteurs Javascript ne sont pas identiques; de légères différences d'implémentation peuvent empêcher le code qui fonctionne dans un navigateur de fonctionner dans un autre. Dans le cas d'un code lipogrammatique comme JSFuck - qui repose en grande partie sur des hacks pour coder les choses aussi court que possible - les incompatibilités sont encore plus importantes.
Par exemple, le code généré par JSFuck pour
alert("Hello World!")
ne s'exécute pas sur Internet Explorer. S'il s'agit d'une limitation acceptable, nous pouvons toujours réduire la taille à 1611722174caractères (je ne peux pas inclure le code entier directement car la taille de la réponse est limitée à 30000 caractères):http://jsfiddle.net/ep2jqsj4/1/
Un code qui fonctionne également sur Internet Explorer, mais pas sur certains navigateurs plus anciens, prend 14747 caractères à encoder:
http://jsfiddle.net/bbxfqboq/
Enfin, si c'est correct d'avoir du code qui s'exécute uniquement sur Firefox [mise à jour] et Safari [fin de mise à jour] , nous pourrions le faire avec 5903
5911caractères :http://jsfiddle.net/pkyLy0j8/1/
J'ai encodé tout cela avec JScrewIt . Vous pouvez trouver d'autres encodeurs similaires à JSFuck répertoriés sur Esolang: http://esolangs.org/wiki/JSFuck . J'ai essayé tous et je dois dire que JScrewIt semble être le meilleur (et aussi le seul qui fonctionne dans tous les navigateurs), même si je n'ai pas analysé en détail comment cela fonctionne.
Un autre encodeur intéressant est 6chars.js , qui génère une sortie plus grande pour une entrée courte comme
alert("Hello World!")
, mais lorsque l'entrée devient plus longue, elle fonctionne mieux que les autres encodeurs car elle code les caractères sous forme de nombres. Les nombres sont plus courts à écrire dans JSFuck mais nécessitent une surcharge supplémentaire pour être décodés. Malheureusement, 6chars.js ne fonctionne que dans Chrome et je ne peux pas dire s'il est toujours activement développé.Il serait intéressant de savoir s'il existe davantage de tels encodeurs. Si l'on pouvait réunir les méthodes utilisées par différents encodeurs dans un seul outil, il serait possible de produire des solutions encore plus courtes.
la source
JSFuck (15 863 caractères)
Pas vraiment optimisé (seulement 7 085 caractères), mais ce n'est pas que les optimisations sont vraiment possibles, car JSFuck n'est qu'un simple hack de langue.
la source
JSFuck, 18827
Je ne pouvais pas descendre beaucoup plus loin. Code généré automatiquement, j'ai optimisé le code JS lisible pour le générateur. Il y a eu très peu d'optimisations dans le code JSFuck.
la source