JSFuck - это эзотерический язык, на котором любое утверждение Javascript может быть точно воспроизведено в другой допустимой программе Javascript, которая использует только 6 символов []()!+
.
Преобразователь JSFuck при вводе alert("Hello World!")
дает блок кода длиной 22 948 символов. Поскольку программа использовала много автоматических преобразований для создания этого блока, я считаю, что код можно сделать намного короче, используя ручную оптимизацию.
Ваша задача - создать Javascript-программу, которая выполняет эту задачу alert("Hello World!")
, используя только символы []()!+
. Самый короткий код для этого выигрывает.
$
и=
как хорошо, пожалуйста? В противном случае я не думаю, что мы можем лучше генератора.Ответы:
JScrewIt (различные решения: 16117, 14747 и 5903 символа)
Движки JavaScript не идентичны; небольшие различия в реализации могут привести к тому, что код, работающий в браузере, не будет работать в другом. В случае липограмматического кода, такого как JSFuck - который в значительной степени полагается на хаки для кодирования вещей как можно короче - несовместимости еще больше.
Например, код, сгенерированный JSFuck for
alert("Hello World!")
, не работает в Internet Explorer. Если это приемлемо ограничение, мы можем упасть размер до 1611722174символов (я не могу включить весь код напрямую , потому что размер ответа ограничен до 30000 символов):http://jsfiddle.net/ep2jqsj4/1/
Код, который работает и в Internet Explorer, но не в некоторых старых браузерах, требует 14747 символов для кодирования:
http://jsfiddle.net/bbxfqboq/
Наконец, если все в порядке с кодом, работающим только с текущими Firefox [update] и Safari [end update] , мы можем сделать это с 5903
5911символами :http://jsfiddle.net/pkyLy0j8/1/
Я закодировал все это с помощью JScrewIt . Вы можете найти другие кодировщики, похожие на JSFuck, перечисленные на Esolang: http://esolangs.org/wiki/JSFuck . Я попробовал все из них, и я должен сказать, что JScrewIt кажется лучшим (и также единственным, который работает во всех браузерах), хотя я не проанализировал, как это работает в деталях.
Другой интересный кодировщик - это 6chars.js , который генерирует больший вывод для коротких входных данных
alert("Hello World!")
, но, когда ввод становится длиннее, он работает лучше, чем другие кодировщики, потому что он кодирует символы в виде чисел. Числа короче, чтобы написать в JSFuck, но требуют дополнительных издержек для декодирования. К сожалению, 6chars.js работает только в Chrome, и я не могу сказать, что он все еще активно разрабатывается.Было бы интересно узнать, есть ли еще такие кодеры. Если бы можно было объединить методы, используемые разными кодировщиками, в одном инструменте, было бы возможно создать еще более короткие решения.
источник
JSFuck (15 863 символов)
Не очень оптимизировано (всего 7,085 символов), но это не значит, что оптимизация действительно возможна, так как JSFuck - это просто языковой хак.
источник
JSFuck, 18827
Не мог получить это намного дальше. Автоматически сгенерированный код, я оптимизировал читаемый код JS для генератора. Только сделал очень мало оптимизаций в коде JSFuck.
источник