JScrewIt (diverse soluzioni: 16117, 14747 e 5903 caratteri)
I motori Javascript non sono identici; lievi differenze di implementazione possono far sì che il codice che funziona in un browser non funzioni in un altro. Nel caso di codice lipogrammatico come JSFuck - che si basa in gran parte sugli hack per codificare le cose il più breve possibile - le incompatibilità sono ancora più grandi.
Ad esempio, il codice generato da JSFuck per alert("Hello World!")
non viene eseguito su Internet Explorer. Se questa è una limitazione accettabile, possiamo ancora ridurre la dimensione a 16117 22174 caratteri (non posso includere direttamente l'intero codice perché la dimensione della risposta è limitata a 30000 caratteri):
http://jsfiddle.net/ep2jqsj4/1/
Un codice che funziona anche su Internet Explorer, ma non su alcuni browser meno recenti, richiede 14747 caratteri per codificare:
http://jsfiddle.net/bbxfqboq/
Infine, se è ok avere il codice che gira solo sull'attuale Firefox [aggiornamento] e Safari [fine aggiornamento] , potremmo farlo con 5903 5911 caratteri :
http://jsfiddle.net/pkyLy0j8/1/
Ho codificato tutti quelli con JScrewIt . Puoi trovare altri codificatori simili a JSFuck elencati su Esolang: http://esolangs.org/wiki/JSFuck . Ho provato tutti loro e devo dire che JScrew sembra essere il migliore (e anche l'unico che funziona in tutti i browser), anche se non ho analizzato come funzioni in dettaglio.
Un altro codificatore interessante è 6chars.js , che genera output più grandi per input brevi come alert("Hello World!")
, ma quando l'input diventa più lungo si comporta meglio degli altri encoder perché codifica i caratteri come numeri. I numeri sono più brevi per scrivere in JSFuck ma richiedono un overhead extra per la decodifica. Sfortunatamente, 6chars.js funziona solo in Chrome e non posso dire se è ancora attivamente sviluppato.
Sarebbe interessante sapere se ci sono più di tali encoder. Se uno potesse unire metodi usati da diversi codificatori in un unico strumento, sarebbe possibile produrre soluzioni ancora più brevi.
$
e=
pure, per favore? Altrimenti non penso che possiamo sfruttare al meglio il generatore.