Оригинальный код:
[[ ! "${1////x}" =~ [[:alnum:]] ]]&&[[ $# = 1 ]]&&bash -c "$1"
Входные данные:
__=; (( __++, __-- ));
(( ___ = __, ___++));
(( ____ = ___, ____++));
(( _____ = ____, _____++));
(( ______ = _____, ______++));
(( _______ = ______, _______++));
(( ________ = _______, ________++));
(( _________ = ________, _________++));
${!__##-} <<<\$\'\\$___$______$_______\\$___$______$_____\\$___$_______$__\\$___$_______$_________\'\ \$\'\\$___$___$__\\$___$______$_______\\$___$_______$______\\$___$_______$______\\$___$_______$_________,\ \\$___$____$_________\\$___$_______$_________\\$___$________$____\\$___$_______$______\\$___$______$______\\$__$______$___\'
Объяснение:
Это кодирует "эхо Привет, мир!" как восьмеричные escape-последовательности (\ xxx).
За исключением того, что вы также не можете использовать числа, поэтому первая часть создает переменные для чисел 0-7. Вы можете использовать их для построения строки с восьмеричными последовательностями, которые будут вычислять, чтобы дать вам фактическую команду.
Но eval
это также буквенно-цифровой. Таким образом, вместо этого эта строка передается в качестве входных данных для другого экземпляра bash
. $0
содержит имя команды, используемой для вызова Bash, которая обычно просто bash
(или-bash
для оболочки входа в систему), если вы запускаете ее нормально (через TIO или вставляя ее в терминал). (Это случайно означает, что если вы попытаетесь выполнить это, вставив его в сценарий, все пойдет ужасно неправильно, так как он будет пытаться раскошелиться несколько раз.)
Но в любом случае, вы не можете сказать $0
прямо. Вместо этого, $__
содержит имя из $0
( «0»), и вы можете использовать косвенное расширение для доступа к нему ( ${!__}
относится к содержанию$0
).
И это, наконец, дает вам все части, которые вам нужны.
05AB1E , Аднан
Попробуйте онлайн!
Как?
источник
полностью человек , Python 2
Решение
источник
Пиф : мистер Xcoder
G
является встроенным для строчного алфавита. Код проверяет равенство против этого.источник
Желе: EriktheOutgolfer
Желе , 11 байт
Попробуйте онлайн!
объяснение
Исходный код можно объяснить так:
Итак, просто возьмите "Привет, мир!" и получить кодовые точки, возвести их в квадрат, привести обратно к кодовым точкам, повернуть вправо 5 раз, а затем выровнять и выровнять результат.
источник
Октава от Стьюи Гриффин
Не уверен, что это правильное решение (на TIO он печатает
\00
символ), но в моейoctave-cli
оболочке это выглядит так:Также в исходном вызове написано « ничего не печатать» (или нулевой символ) , поэтому, если ничто не совпадает с
\00
этим, это должно быть хорошо.Попробуйте онлайн!
источник
0
на a10
).Hello, World!
и символ новой строки.» точная цитата из задачи. И действительно, это делает ответ тривиальным.Python 3 от Rexroni
Предотвратите любые ошибки, выходя рано.
Попробуйте онлайн!
источник
JavaScript (ES6) Эпеллон Данцлер
{length:1, charCodeAt:()=>(e='Hello, World!', String.fromCharCode=()=>'')}
Попробуйте онлайн!
Это было довольно легко.
Я заметил, что любые строковые входные данные невозможно будет вывести,
Hello, World!
потому что все внутриString.fromCharCode
будет возвращать только кратные 4, и!
имеет код символа 33. Очевидно, что нам просто нужно взломать всю программу. Взломать встроенные в JavaScript тривиальны, если не пытаться их остановить (и даже если они это делают, обычно есть много обходных путей ...).источник
JavaScript (ES6), Voile
Простой прокси, который возвращает нужный символ только каждый третий раз, когда он вызывается.
Попробуйте онлайн!
источник
Рубин, Гистократ
Волшебный вклад:
1767707618171221 30191World!
Попробуйте онлайн.
Объяснение:
1767707618171221
простое, и, записанное в базе 36, оно есть"hello"
. При использовании заглавных букв получается"Hello"
, что печатается с использованием$><<
$><<", #$'"if/30191/
ищет число30191
во входных данных и записывает в стандартный вывод строку, состоящую из запятой, пробела и того, что находится на входе после30191
(с использованием$POSTMATCH
оператора, который здесь обозначен его коротким вариантом,$'
).источник
Lua 5.1 от tehtmi
Передайте это как первый аргумент:
Если исходный код находится в файле
tehtmi.lua
, запустите (в bash или аналогичной оболочке):Он также работает на Lua 5.3, который использует TIO, так что почему бы не попробовать его в Интернете? ? Я не тестировал реализацию, которая использует ядро "PUC-Rio's Lua 5.1" (потому что я не могу найти какую-либо информацию), но мое решение, вероятно, также работает там.
Как?
Первый аргумент запускается как код, но только если он содержит менее 5 строчных символов.
Хитрость в том, чтобы бежать
print("Hello, World!")
. Другой способ запустить это - использовать_G["print"]("Hello, World!")
только строки.Но мы не можем использовать строку напрямую из-за ограничения количества строчных букв, однако вы можете запустить
("").char
функциюstring.char
, которая может преобразовывать серию байтов в строку. Я назначил его переменной верхнего регистра (чтобы мы не достигли предела), чтобы мы могли использовать его для создания строкprint
и, иHello, World!
строк, которые можно использовать, как описано выше.источник
next
вместоchar
которого не работает на Lua 5.3 из-за рандомизации порядка итерации.JavaScript (ES6) от Voile
Входные данные должны быть строкой, содержащей это:
Попробуйте, используя это:
Если вас не интересует конечный символ новой строки для выходных данных, вы можете заменить последние 6 строк следующим:
Как я это сделал
Ограничения на входные данные состоят в том, что это строка, каждая строка имеет длину два байта или менее, а общая длина составляет 80 байтов или менее. Моя первая попытка после понимания того, что правильно было так:
Примечание:
\
s должны игнорировать символы новой строки в строке ввода. Это невероятно важно для ответа, и я не могу поверить, что наткнулся на него случайно. (Я был знаком с этим раньше, но забыл об этом)Но это не сработало, поскольку
=>
они должны быть в одной строке с аргументами. К счастью, у меня была идея обернуть что-то похожее в строку и вставить eval в свой ввод, чтобы уменьшить его до одной строки, что привело к моему окончательному ответу. После того, как происходит eval во входных данных, в виде строки генерируется следующее (которое затем передается в функцию, а затем запускается):Это было действительно трудно взломать, но я преуспел в конце.
Кроме того, первая трещина в мире!
источник
кубично- MD XF
Я предполагаю, что это всегда опасно, но я думаю, что у меня есть ошибка, ожидающая, что я прав в том, что есть ошибка в интерпретаторе (который я только что скомпилировал).
Мой вклад
Вывод
Hello, World!\n\n\n\n\n\n\n\n\n\n.....
с бесконечными переводами строки.Но я заметил последний раздел кода:
0x0A
страшно устанавливает блокнот на (новую строку), считывает ввод на грань 7 (грань ввода), а затем несколько раз печатает грань 6 (грань блокнота), пока грань 7 не станет равной нулю. Если вы установите лицо 7 на ноль, вы должны получить только одну новую строку. Тем не менее, я получил бесконечные переводы строк, и мой 13-й вход был равен нулю, и я могу убедиться, что 7-грань всегда равна нулю, вставив в цикл «печатное число из 7-гранной»:то печатает бесконечное
\n0
пары.Я смотрю на спецификации на кубической странице GitHub, и это поведение очень похоже на ошибку. Изменение последнего символа исходной программы с a
7
на0
результат ожидаемого поведения. Интерпретатор TIO демонстрирует такое же некорректное поведение.источник
CJam , Эрик Outgolfer
Попробуйте онлайн!
Как?
источник
C # (.NET Core) , Гжегож Пулавский
Решение, которое я нашел, очень широко использует непечатаемые символы, поэтому попытка вставить его сюда не сработала. Значения байтов для ввода:
Или версия строки доступна в поле ввода ссылки TIO.
Попробуйте онлайн!
Исходная программа будет принимать различные символы на входе, затем реверсировать вход и умножать элементы двух списков. Таким образом, я создал строку длиной 26 символов, в которой первые 13 символов были различны, последние 13 символов также появились в первых 13, и каждая пара индексов
[i, 26-i]
умножалась на значение байта i-го символа вHello, World!
.источник
Ly , LyricLy
Попробуйте это здесь (хотя страница не отображает перевод строки).
n
принимает входные данные, пытается разделить на пробелы и привести к целым числам, они помещаются в стек.o
печатает порядковые точки и8+
делает то, что думаешь. Таким образом, ввод должен быть на 8 меньше, чем кодовые точки в обратном порядке, разделенные пробелами.источник
2
что это сработает - разве это просто страница с HeroKapp, не отображающая ее?C (gcc), Феликс Палмен
Оригинальный код:
Аргументы:
Попробуйте онлайн!
Объяснение:
W(c)
вычисляет адрес строки из списка аргументов для распечатки. Он начинается с адреса аргумента cth (O(c)
), который в данном случае является 42-м аргументом, а затем вычитает первый символ второго аргумента (**O(2)
) как целочисленное смещение, а затем добавляетx
, что является количеством аргументов.W(c)
использует второй аргумент, поэтому вы должны знать, что их должно быть как минимум 3 (0, 1, 2). Тогда "Привет, мир!" можете перейти к первому аргументу, а затем для адресации этого аргумента вам нужен символ, значение ASCII которого соответствует уравнению «42-x + 3 = 1». Это случается ",".источник
JavaScript: ThePirateBay
Я отменяю
valueOf()
иtoString()
методы анализируемых объектов, так что приведение не удается с помощьюTypeError
.источник
6502 Ассамблея (C64) - Феликс Пальмен
Объяснение немного запутано.
Код сначала проверяет запятую (необходимость в синтаксисе), а затем считывает два аргумента, первый из которых - WORD, хранится с прямым порядком байтов в ячейках памяти 0014 и 0015, последний из которых хранится в регистре X.
Это довольно умно, используя наш ввод, чтобы переписать программу. В конце концов он переписывает счетчик для цикла вывода в конце программы.
Здесь начинается хитрая часть:
на C64 d018 - очень важный байт. Он хранит контрольные точки для вещей, связанных с выводом на экран. Смотрите здесь для получения дополнительной информации. Если это получит неправильное значение, это приведет к краху вашего C64. Чтобы напечатать необходимые смешанные прописные и строчные буквы, это должно быть $ 17.
Теперь мы начинаем наш цикл вывода:
Эта константа - то, что было переписано ранее. Он четко определяет продолжительность цикла. Это уже правильное значение, но нам нужно снова вставить 0e.
Остальное - это просто информация, которую нам нужно распечатать, начиная с адреса памяти c025.
Так что оттуда просто следую математике.
источник
$FF
там, но затем решил оставить его.6502 машинный код (C64) - Феликс Пальмен
Правильный ответ
Код довольно сложный, включающий много самоизменения. Таким образом, вместо того, чтобы полностью реконструировать его, вы можете просто использовать его для взлома.
Вот немного более полезная разборка кода, чтобы помочь понять, что произошло. Синтаксис для KickAssembler.
Я назвал это так, что мне было достаточно увидеть, что код XOR содержит кучу констант, которые скрыты вокруг, чтобы распечатать то, что нам нужно. Поскольку XOR является обратимым, если вы введете желаемый результат, он скажет вам, что это за ключ.
Поэтому я переключил последнюю строку
таким образом, он напечатал бы последний требуемый ввод вместо сбоя на неправильном вводе.
И это все!
Если есть интерес, я взломаю код больше.
источник
vice
. Но как бы то ни было, это правильное решение.drops A in mystery+1, over the constant
" <- это на самом делеmystery+4
с вашим лейблом. Отклонения в байтах :) и FWIW, автоматическое изменение довольно распространено даже в серьезном коде 6502, если код запускается из ОЗУ.Взорваться , Step Hen
Попробуйте онлайн!
источник
C (TCC) Джошуа
Попробуйте онлайн!
источник
MATL Луис Мендо
Попробуйте онлайн!
источник
Желе от Джонатана Аллана
Оригинальный код:
Попробуйте онлайн!
Входные данные:
Объяснение:
источник
C (GCC на TIO) MD XF
Попробуйте онлайн!
Как?
Он пытается напечатать второй аргумент в виде строки, которая является указателем, который мы можем определить на входе. Так уж сложилось, что в памяти места
4195875
начинается"Hello, World!\n"
строка.Число было определено путем добавления
print("%p", "Hello, World!");
передprintf
, преобразования шестнадцатеричного числа в десятичное и опробовано на исходном TIO. Тем не менее, он показал мнеprintf
формат строки. Опробовав несколько чисел, я обнаружил, что строка находится перед строкой форматирования.Таким образом, в памяти это будет выглядеть так (как строка C):
Это также означает, что любое обновление компилятора может нарушить решение.
источник
JavaScript (Node.js) По Voile
['Hello, World!','','','','','','','','','','','','']
Попробуйте онлайн!
источник
Röda by fergusq
Попробуйте онлайн!
Объяснение немного позже ...
источник
JavaScript (ES6), Voile
Попробуйте онлайн!
источник
PHP от LP154
Попробуйте онлайн!
(TIO не имеет определенного класса PDO, поэтому в приведенной выше демонстрации используется кодовая панель, которая это делает)
Другое решение:
Попробуйте онлайн!
источник
JavaScript (ES6), Voile
Учитывая ограничение в 81 символ, это, вероятно, не предполагаемое решение
Попробуйте онлайн!
источник