Для этой задачи мы будем определять пробельные символы как только перевод строки (0x0A) и пробелы (0x20). Обратите внимание, что большинство языков и разновидностей регулярных выражений рассматривают многие другие символы также как пробельные символы, как внутри, так и вне диапазона ASCII, поэтому вы не сможете использовать соответствующие встроенные модули.
Вызов ментов
Вы должны написать программу или функцию на языке по вашему выбору, который принимает строку, состоящую из символов ASCII (кроме NUL), в качестве входных данных и выводит их со всеми удаленными пробелами. Например, если вы получили следующие данные:
H e l l o,
W o r l d!
Вы должны вывести
Hello,World!
Тогда ваша заявка будет вашим исходным кодом со всеми удаленными пробелами (такой же процесс, как передача решения в качестве входных данных для самого себя, хотя ваше решение может также содержать символы вне диапазона ASCII). Ваша цель состоит в том, чтобы как можно сложнее выяснить, куда нужно вставить пробел, чтобы найти правильное решение на выбранном вами языке. Обратите внимание, что грабители могут вставить меньше пробелов, чем вы удалили, но не больше. Также помните, что грабители не должны соответствовать вашему точному коду, они просто должны найти какое-либо правильное решение.
Ваш ответ должен содержать следующее:
- Язык (и версия, если необходимо), на котором вы написали свое решение.
- Число байтов вашего решения перед удалением пробелов.
- Ваше решение удалено.
Ваше решение может быть либо программой, либо функцией, но не фрагментом кода, и вы не должны использовать среду REPL. Вы можете принимать ввод через STDIN, аргумент командной строки или аргумент функции и выводить через STDOUT, возвращаемое значение функции или параметр функции (out).
В интересах справедливости, должен быть свободно доступный переводчик или компилятор для выбранного вами языка.
Вы не должны использовать встроенные модули для хэширования, шифрования или генерации случайных чисел (даже если вы запрограммировали генератор случайных чисел на фиксированное значение). Ваше решение должно быть способно обработать любую строку длиной не более 10 символов за 10 секунд на подходящем настольном компьютере.
Если ваш ответ не был взломан в течение 7 дней (168 часов), вы можете раскрыть собственное решение, и в этот момент ваш ответ считается безопасным . Пока вы не раскрываете свое решение, оно все равно может быть взломано грабителями, даже если 7 дней уже прошло. Самый короткий безопасный ответ выигрывает (измеряется до удаления пробела).
Если ваш ответ не получил ответа, укажите это в заголовке вашего ответа вместе со ссылкой на соответствующий ответ грабителя.
Иди сюда за грабителями.
Uncracked Материалы
<script>site = 'meta.codegolf'; postID = 5686; isAnswer = false; QUESTION_ID = 103182;</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)</code></pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>
источник
Ответы:
Haskell, 100 байт, взломанный nimi
Это полная программа и дадаистское стихотворение.
Код с пробелом (попробуйте онлайн!)
Все еще выглядит довольно поэтично, если вы спросите меня.
Де-затемненный
объяснение
do
-Notation только синтаксический сахар, так что то жеf
самое можно записать в видеДля списков
>>=
-оператор определяется какconcatMap
, поэтомуf
становитсяТаким образом, учитывая входные данные
"a b\nc"
,lines
разделяет входные данные в новых строках["a b","c"]
,words
разделяет каждую строку в пустом пространстве, что дает[["a","b"],["c"]]
(как я понял только сейчас, это включает в себя новые строки, поэтомуlines
фактически не требуется). Конкатенация однажды дает["a","b","c"]
,id
является функцией тождественности и, как таковая, не имеет никакого эффекта, а окончательная конкатенация дает строку"abc"
.источник
C, 475 байт, взломанный Riley
Определенные части C позволяют действительно легко увидеть, куда должны идти пробелы. Предварительный процессор c, однако, не делает. Таким образом, этот код разделен на две половины: до строки 17 (236 символов с пробелами) код практически не подвергается сомнению, а после этого (239 символов с пробелами) удачи!
Я не собираюсь долго выигрывать это соревнование, но я хотел посмотреть, что можно сделать с помощью препроцессора c.
Компилирует (с предупреждениями, если вы их включили) с
gcc -std=c89 -ansi
и работает какcat file | ./a.out
Это было взломано гораздо быстрее, чем я думал, поздравляю! Моя стратегия заключалась в том, чтобы использовать
#defines
для удаления очевидных границ токена (например, ';'), а затем использовать больше#defines
чтобы сделать ДЕЙСТВИТЕЛЬНО неинтуитивным то, как они были перемешаны.Кстати, так выглядит код после добавления только очевидных пробелов:
источник
Октава, 69 байт, БЕЗОПАСНО!
Формат ввода: Новые строки не могут быть введены непосредственно в командной строке. Создайте строку путем объединения следующим образом:
Вызвать функцию следующим образом (добавить пробел):
Оригинальный код:
Чтобы это работало, нужно всего 66 байт, но я написал 69 в заголовке, чтобы не выдавать слишком много информации.
Исходный код выглядит так:
Объяснение:
U
это кодовая точка85
в таблице ASCII, поэтому она будет выглядеть так, как будто после нее должен быть первый пробел85
. Неправильно!Если
853
вместо этого вставить пробел , мы должны получить номер символа853
, верно ..? Используя,char
чтобы проверить, является ли это узнаваемый символ:Однако мы не используем
char
в коде, мы используем более короткую версию, где мы объединяем числа с пустой строкой[853 '']
. Вместо того, чтобы выдавать ошибку вне диапазона, более короткая версия просто принимает числовой модуль 256.Так уж случилось, что это так
85+3*256 = 853
. Покаchar(853)
выдает предупреждение,[853,'']
возвращаетсяU
.Очевидный способ сделать это в Octave:
Мы знаем, что после первых должны быть открывающие скобки (код 40)
U
.29
очевидно, не подходит, поэтому мы сдвигаем пространство еще вправо и получаем296
.mod(296,256) = 40
, Бинго!Продолжайте так и получайте последовательность:
Наконец, мы используем,
eval
чтобы превратить строку в код.источник
U
среди этой группы цифр :-)JavaScript ES6, 199 байт, взломан SLuck49
Довольно громоздкая запись с 33 байтами пробела для добавления.
источник
[ 10, 0, 0, 0, 0, 9, 8, 1, 5, 0, 0 ]
для последовательности промежутка, и моя итерационная функция для массива есть(a)=>{for(var x=0;!a[x];x++);if(a.length-x>1){a[0]=a[x]-1;a[x]=(x==0?a[x]:0);a[x+1]++;}else{a[0]=a[x]+1;a[x]=0;i=0}}
. Я начал с[ 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
.> <>, 40 байт, взломан чирок пеликан
Кстати, я использовал fishlanguage.com , на случай, если между переводчиками будут различия.
источник
Befunge-93, 58 байт, безопасно!
Попробуйте онлайн!
Оригинальная программа
Попробуйте онлайн!
Хитрость заключается в том, что путь выполнения был более вертикальным, чем горизонтальным, а затем в коде были вставлены различные пробелы в произвольном порядке для дальнейшего перемешивания вертикальных путей. После того, как разрывы строк и пробелы были окончательно удалены, мы надеемся, что было очень мало, чтобы указать, как операции связаны друг с другом.
В случае, если это не было достаточно сложно, я также добавил немного чередования, поэтому ряд операций выполнялся разными путями кода, перпендикулярными друг другу. Идея заключалась в том, что если бы вы думали, что нашли правильную позицию для конкретной команды, вы бы не поняли, что вам может понадобиться использовать ее позже в коде.
Не уверен, стоило ли все эти усилия пытаться усложнить ситуацию, или люди даже не удосужились попытаться ее решить. :)
Код Объяснение
источник
C # 6, 201 байт, взломан Link Ng
184 байта свернулись, оставив вам 17 байтов.
Взломанное решение, в
Concat
то время как мое предполагаемое решение использовалоJoin
, вот предполагаемое решение:источник
MATL , 22 байта. Трещины и трещины .
Это программа, которая принимает ввод через STDIN и производит вывод через STDOUT.
Код без пробелов и переносов:
Формат ввода немного неудобен из-за того, как MATL принимает строковый ввод. Строки с символами новой строки не могут быть введены напрямую через STDIN, потому что каждый ввод должен быть одной строкой (символ новой строки обозначает конец ввода). Таким образом, формат выглядит следующим образом:
Строка заключена в одинарные кавычки . Если содержимое строки содержит одинарные кавычки, они экранируются путем дублирования . Пример:
'I''m a string'
Чтобы ввести строку с символами новой строки, нужно разбить строку на символе новой строки и объединить все (с помощью квадратных скобок), включая числа в виде кодов ASCII . Например, рассмотрим строку, образованную моими именем и фамилией с новой строкой между ними. Это будет введено как
['Luis' 10 'Mendo']
.Это позволяет вводить любые другие (возможно, не для печати) коды ASCII. Таким образом, строка в пункте 1 выше может быть альтернативно введена как
['I' 39 'm ' 97 32 'string']
. Проверьте это здесь .Единственным условием является то, что хотя бы одна из частей в скобках является строкой. Это заставляет любые числа интерпретироваться как коды ASCII при объединении.
Извините за неловкостьУдачи с использованием этого формата!Оригинальное решение
Каждый из них
%
является символом комментария, поэтому остальная часть строки игнорируется.Пробелы ничего не делают, но служат разделителями. Например,
1e5
без пробела будет интерпретироваться как число100000
.t
принимает входные данные и дублирует их.' @ *'
толкает эту строку иd
вычисляет ее последовательные различия, что дает[32 -32 10]
(-32
бесполезно).m
дает массив логических строк, указывающий, какие символы являются32
или10
(или-32
).1
с последующим изменениемe
формы в виде ряда. Это не операционная здесь.5
с последующимM
нажатием1
снова (последний вход в самую последнюю функцию множественного ввода, которая естьe
).d
вычисляет последовательные различия1
, и поэтому дает[]
(пустой массив).w
переставляет и, наконец,(
присваивает[]
пробельные символы, т.е. удаляет их.источник
RProgN , 15 байт взломаны !
Вы можете играть с кодом здесь . Относительно простое решение, мы надеемся, что надоедливый характер работы RProgN со строками оставит это без изменений.
Оригинальная программа
Explination
Во-первых, ввод неявно помещается в стек. стек:
<INPUT>
Затем мы используем '', чтобы поместить пробел в стек. стек:
<INPUT> " "
`на самом деле пытается выдвинуть строку, представленную` (WORD), но поскольку после него есть пробел, он просто выталкивает пустую строку. стек:
<INPUT> " " ""
R здесь - сахар для команды Заменить. стек:
<INPUTWITHOUTSPACES>
Затем «NEWLINE» выдвигает строку, содержащую символ новой строки, что приятно, потому что RProgN не использует экранированные символы, а просто прямо вверх позволяет вам нажать на строку, подобную этой. стек
<INPUTWOSPACES> "\n"
Затем мы снова используем трюк и заменяем, что дает наш вывод.
источник
Рубин, 86 байт + 1 флаг = 87 ( взломан Домом Гастингсом )
Требуется флаг командной строки
-p
.Код действительно действителен в этой форме, это просто запрет.
источник
Луч , 72 байта, безопасно!
Теперь для двумерного языка. Можно играть на TIO Nexus .
Довольно прямолинейная программа, в которой не так много людей, пытающихся обмануть людей.
источник
Лабиринт , 127 байт
Надеюсь, я сделал это правильно :) это моя первая запись полицейских и грабителей.
Оригинальный код
источник
Java, 3241 + 28 байт для большого целочисленного импорта
Эта запись предназначена исключительно для подтверждения возможности криптографически защищенной записи. Я считаю, что это в рамках правил, но если это противоречит духу, пожалуйста, дайте мне знать, и я удалю по справедливости. Я оставлю это «небезопасным» на неопределенный срок до тех пор, пока (и если) не будет найдена трещина. Это чудовище и, безусловно, может быть дополнительно оптимизировано, но вот оно.
По справедливости для грабителей, вот это со всеми добавленными «очевидными» пробелами.
Удачи, я хотел бы видеть это сломанным. На самом деле я даже назначу неограниченную награду за это. Если в какой-то момент вы все- таки взломаете это, вы получите 500 повторений бесконечной награды за обмен стека (а также, вероятно, замечательную математическую статью).
источник
C 140 байт, взломанный Riley
Давайте начнем с простого.
(Я надеюсь, что я делаю это правильно.)
источник
Befunge 98, 65 байт, взломан Pietu1998
Оригинальная программа
источник
V , 37 байт , взломанный nmjcman101
Так как у этого есть непечатаемые, вот читаемая версия:
Или, если вы предпочитаете, hexdump:
источник
Минколанг v0.15 , 88 байт, Трещины!
Попробуйте онлайн!
источник
JavaScript ES6, 380 байт, безопасный
Это та запись, которую я изначально планировал выпустить. Он огромен и почти не имеет шансов на победу, но я думаю, он должен быть достаточно криптографическим, чтобы выдержать 7 дней. Теперь я могу ошибаться!
67 байтов свободного места для добавления.
Решение
Это реализация алгоритма расширенного крошечного шифрования . 64-битный ключ в коде пробела расширяется до следующего 128-битного ключа:
Источник: Википедия
После дешифрования и преобразования в ASCII 64-битный блок
[x, y]
читается какc3BsaXQ=
, что является кодированным представлением Base64split
.Показать фрагмент кода
источник
Vitsy , 73 байта, безопасно
Это прямое зло.
Удачи! 13 пунктов пробела для добавления.
Оригинальный код:
Попробуйте онлайн!
Это примерно упрощает до:
источник
C #, 159 байт, треснутый молоком
153 потерпела крах, поэтому найти только 6 байтов пробела не должно быть слишком сложно ...
источник
сетчатый, 43 байта, трещины
Версия на TIO устарела, но вы можете получить копию с github .
источник
Вольфрам, 132
Вероятно, есть более одного решения (подсказка: Мерсенн)
Решение
источник
Пробел ,
8174 байтаЧеловекочитаемая версия:
Я знаю, что это старая проблема, но, надеюсь, кто-то захочет взломать это. Я попытался оптимизировать для bytecount, но возможно сделать что-то более короткое с тем же количеством символов табуляции.
источник
ткк, 850 байт
Чтобы не вставлять очень длинную строку, я пропустил это через tr -d '\ n' | сгиб -b -w 60.
источник
SILOS , 159 байтов Безопасно!
Должно быть довольно тривиальным. Это моя первая запись полицейских и грабителей.
Никто не атаковал его, вероятно, из-за эзотерической природы моего собственного языка. Похоже, подлый способ скользить мимо, но это не имеет значения, поскольку более короткие из них безопасны.
Не стесняйтесь попробовать это онлайн
источник