Converter JSF ** k em JS normal


12

Muitos de vocês já conhecem o JSF ** k . Para quem não sabe, é um script que basicamente transforma qualquer código JavaScript em algo escrito usando apenas []()!+.

Sua tarefa é criar, usando qualquer idioma de sua escolha, um programa que converta JSF ** k em JavaScript não ofuscado.

  • Entrada : Uma sequência com código JSF ** k válido.
  • Saída : Uma sequência com o código JavaScript comum que foi previamente JSF ** ked para gerar a entrada.

Para esse desafio, considere que a sequência de entrada foi JSF ** ked apenas uma vez.

Este é um concurso de , portanto o código mais curto, em bytes, vence.


@ Michael, mas a codificação é inequivocamente reversível? Eu acho que não ... como eu decido se algum [...]acesso à matriz fazia parte do código original ou parte da ofuscação? mesmo para todas as outras construções, realmente.
Martin Ender

2
@JanDvorak, oh o que ... isso é tão contraproducente ... poderíamos ajudá-lo a encerrar esta pergunta e votar em vez de votar.
Martin Ender

2
@ m.buettner Eu votei mal porque não acho que a pergunta vá a lugar algum. Definitivamente, não quero votar novamente em um post apenas para desbloquear alguns privilégios para alguém.
John Dvorak

2
@JanDvorak Acho que não devemos desencorajar novos usuários que queiram escrever bons desafios e ouvir críticas. Como a sandbox está na meta e permanecerá lá, a redução de votos é contraproducente. O fechamento é totalmente suficiente. Eu não acho que um único voto positivo prejudicaria alguém e daria ao usuário a chance de realmente encontrar uma entrada nesta comunidade. Mas alguém concordou com você e decidiu diminuir o voto também, porque diabos, por que novos usuários deveriam postar na caixa de areia (eu acho) ... e agora ele ainda não pode postar lá. Eu não acho que é assim que crescemos essa comunidade.
Martin Ender

1
Você pode adicionar alguma explicação sobre o que significa JavaScript normal ? Pode não ser óbvio como a transformação traseira deve ser feita. Por exemplo, se eu repetir o obfustator duas vezes em alguma entrada agradável, qual é a saída sugerida? O programa original ou a entrada que já estava ofuscada?
295 Howard

Respostas:


12

Javascript - 68 55 51

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

Alternativamente: (mesmo comprimento)

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

É executado no console do seu navegador. Garantido apenas para trabalhar com o código gerado pelo jsfuck.com com a opção 'Eval Source' marcada.

Ungolfed:

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
)

Em uma edição sugerida que eu rejeitei, @ user3082537 sugeriu usar regex em vez de fatia, como emreplace(/^.*\n|\n}$/g,'')
user12205

7

JavaScript, 122, funciona com qualquer entrada

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

Bem simples; apenas retorna na cadeia até que os parênteses ( (e )) estejam equilibrados. Os três últimos caracteres da saída JSF são sempre )() , portanto, cortar os dois últimos parênteses e, em seguida, encontrar o parêntese correspondente para o outro sempre funcionará. (Ele funciona com entrada []também.)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.