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 à 16117 22174 caractè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 5911 caractè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.
$
et=
aussi, s'il vous plaît? Sinon, je ne pense pas que nous puissions surpasser le générateur.