Это часть задачи «Копы и грабители». Иди сюда для части полицейских.
Для этой задачи мы будем определять пробельные символы как только перевод строки (0x0A) и пробелы (0x20). Обратите внимание, что большинство языков и разновидностей регулярных выражений рассматривают многие другие символы также как пробельные символы, как внутри, так и вне диапазона ASCII, поэтому вы не сможете использовать соответствующие встроенные модули.
Вызов грабителей
Ответ полицейского может быть взломан путем преобразования его в допустимую программу или функцию (на выбранном языке), которая выполняет задачу удаления пробелов из входной строки путем вставки пробелов в код. Например, если вы получили следующие данные:
H e l l o,
W o r l d!
Программа должна вывести
Hello,World!
После вставки пробела количество байтов решения не должно превышать количество байтов, указанное в ответе полицейского. Вам не нужно находить точно такое же решение, как и предполагал полицейский, если ваше решение действует с учетом вышеуказанных ограничений.
Если вам это удастся, опубликуйте ответ с решением, со ссылкой на ответ полицейского, и оставьте комментарий к ответу полицейского со ссылкой на ваш.
Грабитель, который взламывает больше всего ответов, побеждает. Связи разбиваются по сумме размеров ответов взломанного полицейского (в пользу грабителя, который взламывает более длинные представления).
Каждый ответ полицейского может быть взломан только один раз, и, конечно, вы не можете взломать свой собственный ответ. Если ответ полицейского оказывается недействительным до или после взлома, он не засчитывается в счет грабителя.
источник
JavaScript ES6, 199 байт , Арнаулд
Я понял, что расщепление
"SecretCode"
означало, что я искал 11 чисел, которые суммировались (я предположил) 33. Это проблема звезд и столбцов, где количество пробелов - это звезды, а буквы в"SecretCode"
- это столбцы. Я посчитал, сколько комбинаций нужно было попробовать (1 917 334 783 комбинации), и решил просто перебрать его, заняв весь день.Вероятно, есть более разумный способ сделать это, например, заметить, что
k
это должно быть33
и66
для индекса 10 и 21 соответственно, но я ленив.источник
$/**/=/[ \n]/;s['sp'+'lit']($)
... о, это грязно.C, 475 байт по rexroni
Я мог бы начать использовать некоторые из этих определений :)
После препроцессора код выглядит примерно так:
источник
#defineabo
меня на некоторое время отбросило. Сначала я подумал, что это должно#define ab o
было добавить что-то дополнительное;
, но это не сработало ближе к концу.Рубин, 86 байтов + 1 флаг = 87 по гистократу
Это было действительно забавно, каждый символ в передаваемой строке
eval
заменяется кодом символа (ord
), XORed^(...)
против количества оставшихся пробелов в строке. Результирующий код:источник
RprogN, Ataco
Это, кажется, делает трюк
источник
V, 37 байт, DJMcMayhem
непечатные:
TryItOnline
ü
Действительно бросил меня за цикл, я все ждал , как это иî
быть команды.Í üî
в V переводится:%s/ \|\n//g
в Vim, который глобально удаляет все пробелы. КомандаÍ
находится в вики, а такжеü
иî
есть|
иn
соответственно с их старшим битом, установленнымисточник
C, 140 байт от betseg
(Я также надеюсь, что я делаю это правильно.)
источник
MATL, 22 байта Луис Мендо
Хотя я не могу быть уверен почему, это похоже на работу
Я должен посмотреть, смогу ли я понять, что он делает. Я полагал, что комментарии должны иметь переводы строк после них, и тогда нужно было просто поставить пробелы в правильных местах.
источник
MATL,
2221 байт, Луис Мендо.Наконец-то ... MickyT взломал его, когда я писал объяснение, поэтому его ответ - "правильный". Я написал это в любом случае, в соответствии с этим постом .
M
иY
не нужны и закомментированы. Достаточно добавить 4 пробельных символа, а не 5.Это эквивалентно более компактному :
Частичное объяснение:
источник
1e5
либо напечатал100000
, либо1e
позвонилreshape
, но что тогда было5
? (Теперь я вижу, что%
это в конце строки, так что это будет5M
не пять, а цифраM
. Кроме того, я подумал, что мне нужно иметьY(
одну строку. В общем, очень хороший учебник по MATL :)Befunge-98, 65 байт от ninjalj
Попробуйте онлайн!
Это было очень весело. Я пришел к выводу, что, так как есть несколько команд, меняющих направление, и нет
^<[]?x
ни подобного, необходимо использовать перенос. Затем я написал скрипт на Python, чтобы помочь получить правильный интервал дляj
s.Код работает, принимая input (
~
) и дублируя его дважды (::
). Затем вычитает 10 (':'0
илиord(':') - ord('0')
) и 32 ('[';
илиord('[') - ord(';')
). Затем второй результат логически сводится на нет (1, если был пробел, 0 в противном случае), и 8 нажимается.Теперь приходит часть, которая должна была выяснить, что пропустить.
1+!
Пропускаются, продолжая на следующую строку.#
пропускает@
. Логически отрицательный результат (0 или 1) умножается на 8, и добавляется 1.Затем код пересекает это количество (т. Е. 1 или 9) пробелов плюс одно лишнее при перемещении IP. Если персонаж не был пробелом, он заканчивается на
!
. Код символа минус 10 логически отрицается (1, если была новая строка, 0 в противном случае).j
затем ничего не пропускает,,
вызывается print ( ) и цикл возобновляется с переносом по вертикали.Если символ был пробелом, нижняя строка повторяется
32, 22
как нижняя часть стека. Первыйj
прыгает 705 пробелов. Затем линия зацикливается в третий раз. Если в стеке осталось более двух десятков (код только их покидает), первоеj
переходит 100 пробелов и цикл повторяется. В противном случае первыйj
переходит на!
, ноль отменяется, второйj
переходит на печать и программа продолжается.Мне удалось увеличить его до 59 байтов.
источник
C # 6, 201 байт, по молоку
repl.it demo
trueJoin
не определяется, поэтомуstring.Concat()
остается только .p
есть"\n"
.p[0]^32^10
это пространство. Было бы (немного) сложнее, если этоp[0]^42
или другие подобные константы.источник
сетчатый, 43 байта, Конор О'Брайен
Попробуйте онлайн!
Для меня это было сложнее, чем следовало бы, потому что я был слишком глуп, чтобы найти документацию, и в итоге мне пришлось угадывать, как работают некоторые команды. Поэтому некоторые из этих объяснений могут быть не совсем точными, но это было моим базовым пониманием кода.
источник
C #, 159 байт от LethalCoder
repl.it
Строка в конце строки 1
" \n"
(пробел + перевод строки).источник
Minkolang v0.15, 88 байтов, автор - Критиси Литос
объяснение
источник
C
замечания будут сбивать с толку, но, тем не менее, хорошая работа!