JSFuck é uma linguagem esotérica na qual qualquer instrução Javascript pode ser reproduzida com precisão em outro programa Javascript válido que usa apenas os 6 caracteres []()!+
.
O conversor JSFuck, quando recebe uma entrada de alert("Hello World!")
, produz um bloco de código com 22.948 caracteres. Como o programa usou muitas conversões automáticas para criar esse bloco, acredito que o código pode ser muito mais curto usando otimizações manuais.
Sua tarefa é criar um programa Javascript que execute a tarefa alert("Hello World!")
, usando apenas os caracteres []()!+
. O código mais curto para fazer isso vence.
$
e=
também, por favor? Caso contrário, acho que não podemos melhorar o gerador.Respostas:
JScrewIt (soluções diferentes: 16117, 14747 e 5903 caracteres)
Os mecanismos Javascript não são idênticos; pequenas diferenças de implementação podem fazer com que o código que funciona em um navegador não funcione em outro. No caso de códigos lipogramáticos como o JSFuck - que depende amplamente de hacks para codificar as coisas o mais curto possível - as incompatibilidades são ainda maiores.
Por exemplo, o código gerado pelo JSFuck para
alert("Hello World!")
não é executado no Internet Explorer. Se essa é uma limitação aceitável, ainda podemos reduzir o tamanho para 1611722174caracteres (não posso incluir todo o código diretamente porque o tamanho da resposta é limitado a 30000 caracteres):http://jsfiddle.net/ep2jqsj4/1/
Um código que funciona no Internet Explorer também, mas não em alguns navegadores antigos, possui 14747 caracteres para codificar:
http://jsfiddle.net/bbxfqboq/
Por fim, se não há problema em ter um código executado apenas no Firefox [update] atual e no Safari [end update] , poderíamos fazê-lo com 5903
5911caracteres :http://jsfiddle.net/pkyLy0j8/1/
Codifiquei todos com JScrewIt . Você pode encontrar outros codificadores semelhantes ao JSFuck listados na Esolang: http://esolangs.org/wiki/JSFuck . Eu tentei todos eles e devo dizer que JScrew parece ser o melhor (e também o único que funciona em todos os navegadores), embora ainda não tenha analisado como funciona em detalhes.
Outro codificador interessante é o 6chars.js , que gera uma saída maior para entradas curtas
alert("Hello World!")
, mas quando a entrada fica mais longa, ela apresenta um desempenho melhor do que os outros codificadores, porque codifica caracteres como números. Os números são mais curtos para escrever no JSFuck, mas requerem sobrecarga extra para decodificar. Infelizmente, o 6chars.js funciona apenas no Chrome e não sei dizer se ele ainda está sendo desenvolvido ativamente.Seria interessante saber se existem mais desses codificadores. Se alguém pudesse juntar métodos usados por codificadores diferentes em uma ferramenta, seria possível produzir soluções ainda mais curtas.
fonte
JSFuck (15.863 caracteres)
Não é realmente otimizado (apenas 7.085 caracteres), mas não é que as otimizações sejam realmente possíveis, pois o JSFuck é apenas um simples hack de linguagem.
fonte
JSFuck, 18827
Não foi possível diminuir muito mais. Código gerado automaticamente, otimizei o código JS legível para o gerador. Apenas poucas otimizações foram feitas no código JSFuck.
fonte