Конвертировать JSF ** k в обычный JS

12

Многие из вас уже знают JSF ** k . Для тех, кто этого не делает, это скрипт, который в основном превращает любой код JavaScript во что-то написанное с использованием только []()!+.

Ваша задача - создать на любом языке по вашему выбору программу, которая преобразует JSF ** k в необоснованный JavaScript.

  • Ввод : строка с допустимым кодом JSF ** k.
  • Вывод : строка с обычным кодом JavaScript, который ранее был JSF ** ked для генерации ввода.

В этом случае учтите, что входная строка была только JSF ** ked один раз.

Это соревнование по , поэтому выигрывает самый короткий код в байтах.

Уильям Барбоза
источник
@ Майкл, а кодировка однозначно обратима? Я так не думаю ... как я могу решить, был ли [...]доступ к некоторому массиву частью исходного кода или частью обфускации? То же самое для всех других конструкций.
Мартин Эндер
2
@JanDvorak о, что ... это так контрпродуктивно ... мы могли бы помочь ему закрыть этот вопрос и проголосовать вместо того, чтобы понижать.
Мартин Эндер
2
@ m.buettner Я понизил голос, потому что не чувствую, что вопрос куда-то уходит. Я определенно не хочу рекламировать пост, чтобы разблокировать некоторые привилегии для кого-то.
Джон Дворжак
2
@JanDvorak Я думаю, что мы не должны отговаривать новых пользователей, которые хотят писать хорошие задачи и слушать критику. Так как песочница находится на мета и останется там, понижение голосов будет контрпродуктивным. Закрытие вполне достаточно. Я не думаю, что одно-единственное возражение могло бы навредить кому-либо, и это дало бы пользователю возможность действительно найти вход в это сообщество. Но кто-то согласился с вами и решил также понизить голос, потому что, черт возьми, почему новым пользователям разрешено публиковать в песочнице (я полагаю) ... и теперь он все еще не может публиковать там. Я не думаю, что именно так мы растем это сообщество.
Мартин Эндер
1
Не могли бы вы добавить объяснение, что означает нормальный JavaScript ? Может быть неочевидно, как должно выполняться обратное преобразование. Например, если я дважды итерирую обфустатор для какого-нибудь приятного ввода, каков будет предложенный вывод? Оригинальная программа или вход, который уже был запутан?
Говард

Ответы:

12

Javascript - 68 55 51

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

Альтернативно: (одинаковой длины)

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

Запускается в консоли вашего браузера. Гарантируется работа только с кодом, сгенерированным jsfuck.com с помеченной опцией 'Eval Source'.

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
)
nderscore
источник
В предлагаемом редактировании, которое я отклонил, @ user3082537 предложил использовать регулярное выражение вместо слайса, как вreplace(/^.*\n|\n}$/g,'')
user12205
7

JavaScript, 122, работает с любым вводом

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

Довольно просто; он просто возвращается в строку, пока скобки ( (и )) не будут сбалансированы. Последние три символа выходных данных JSF всегда являются )()одинаковыми, поэтому отрезание последних двух парней и последующее нахождение подходящей парены для другого всегда будет работать. (Это работает и с вводом [].)

Дверная ручка
источник