Значительные пробелы: копы


51

Для этой задачи мы будем определять пробельные символы как только перевод строки (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>


Связанный. (Вдохновение, на самом деле.)
Мартин Эндер


8
@SeeOneRhino Почему? Грабитель просто должен решить проблему в Whitespace, не используя больше байтов, чем полицейский. Если полицейский не найдет безумно удачного ответа на пробел, который никто не сможет найти, ответы на пробел, как правило, являются наиболее уязвимыми в этом вызове.
Мартин Эндер

1
@SeeOneRhino Кроме того, вкладки не считаются пробелами, поэтому они не будут удалены.
mbomb007

4
Я полагаю, на этот раз не будет шестигранных заявок
MildlyMilquetoast

Ответы:


17

Haskell, 100 байт, взломанный nimi

main=interact$iddoidlinesidwordsdoidoidoid=doiddoid<-dooiidoid<-dooiddoiddodoid

Это полная программа и дадаистское стихотворение.


Код с пробелом (попробуйте онлайн!)

main=interact$id doid lines id words
doid oi d o id=do
 iddoid<-do oi id
 oid<-do o iddoid
 do d oid

Все еще выглядит довольно поэтично, если вы спросите меня.

Де-затемненный

main = interact f
f s = do
 l <- lines s
 w <- words l
 id w

объяснение

do-Notation только синтаксический сахар, так что то же fсамое можно записать в виде

f s = lines s >>= words >>= id

Для списков >>=-оператор определяется как concatMap, поэтому fстановится

f = concat . map id . concat . map words . lines

Таким образом, учитывая входные данные "a b\nc", linesразделяет входные данные в новых строках ["a b","c"], wordsразделяет каждую строку в пустом пространстве, что дает [["a","b"],["c"]](как я понял только сейчас, это включает в себя новые строки, поэтому linesфактически не требуется). Конкатенация однажды дает ["a","b","c"], idявляется функцией тождественности и, как таковая, не имеет никакого эффекта, а окончательная конкатенация дает строку "abc".


3
Должен ли я сказать , что мне нравится Dada ИСТИК стихи?
Дада


@nimi да, молодец.
Лайкони

12

C, 475 байт, взломанный Riley

Определенные части C позволяют действительно легко увидеть, куда должны идти пробелы. Предварительный процессор c, однако, не делает. Таким образом, этот код разделен на две половины: до строки 17 (236 символов с пробелами) код практически не подвергается сомнению, а после этого (239 символов с пробелами) удачи!

Я не собираюсь долго выигрывать это соревнование, но я хотел посмотреть, что можно сделать с помощью препроцессора c.

#include<unistd.h>#defineachar#defineb*#definecwrite#definedstdin#defineestdout#definefread#defineg(#defineh)#defineiwhile#definejif#definek0#definel&#definem,#definen=#defineo;#definep1#definegpmlmlh#defineabo#definemldmp#definejgdoabo#definelbabod#definegfhaboc#definejgmben#definepmlfg#definegpmlbintmain(){ajgajgmljgigpmlkmlgpmlhjgd!=''&&gpm!='\n'gfgpmlgpmlo}

Компилирует (с предупреждениями, если вы их включили) с gcc -std=c89 -ansiи работает какcat file | ./a.out


Это было взломано гораздо быстрее, чем я думал, поздравляю! Моя стратегия заключалась в том, чтобы использовать #definesдля удаления очевидных границ токена (например, ';'), а затем использовать больше#defines чтобы сделать ДЕЙСТВИТЕЛЬНО неинтуитивным то, как они были перемешаны.

Кстати, так выглядит код после добавления только очевидных пробелов:

#include <unistd.h>
#define a char
#define b *
#define c write
#define d stdin
#define e stdout
#define f read
#define g (
#define h )
#define i while
#define j if
#define k 0
#define l &
#define m ,
#define n =
#define o ;
#define p 1
// thus begins the obfuscation
#define gpmlmlh
#define abo
#define mldmp
#define jgdoabo
#define lbabod
#define gfhaboc
#define jgmben
#define pmlfg
#define gpmlb
int main(){
    ajgajgmljgigpmlkmlgpmlhjgd!=''&&gpm!='\n'gfgpmlgpmlo
}

5
Добро пожаловать в PPCG! :)
Мартин Эндер

1
Cracked Это один способ действительно весело.
Райли

9

Октава, 69 байт, БЕЗОПАСНО!

@(U)eval([85329685312682956148388531268295156241''])

Формат ввода: Новые строки не могут быть введены непосредственно в командной строке. Создайте строку путем объединения следующим образом:

str = ['This is ',10,'a',10,'string']
str = This is
a
string

Вызвать функцию следующим образом (добавить пробел):

f=@(U)eval([85329685312682956148388531268295156241''])  
f(['This is ',10,'a',10,'string'])

Оригинальный код:

Чтобы это работало, нужно всего 66 байт, но я написал 69 в заголовке, чтобы не выдавать слишком много информации.

Исходный код выглядит так:

@(U)eval([853 296 853 126 829 561 48 38 853 126 829 51 562 41 ''])

Объяснение:

@(U)eval(.....)    % Anonymous function taking U as the input variable

Uэто кодовая точка 85в таблице ASCII, поэтому она будет выглядеть так, как будто после нее должен быть первый пробел 85. Неправильно!

Если 853вместо этого вставить пробел , мы должны получить номер символа 853, верно ..? Используя, charчтобы проверить, является ли это узнаваемый символ:

char(853)
warning: range error for conversion to character value

Однако мы не используем charв коде, мы используем более короткую версию, где мы объединяем числа с пустой строкой [853 '']. Вместо того, чтобы выдавать ошибку вне диапазона, более короткая версия просто принимает числовой модуль 256.

Так уж случилось, что это так 85+3*256 = 853. Пока char(853)выдает предупреждение, [853,'']возвращается U.

Очевидный способ сделать это в Octave:

@(U)U(U~=10&U~=32)

Мы знаем, что после первых должны быть открывающие скобки (код 40) U. 29очевидно, не подходит, поэтому мы сдвигаем пространство еще вправо и получаем 296. mod(296,256) = 40, Бинго!

Продолжайте так и получайте последовательность:

[853 296 853 126 829 561 48 38 853 126 829 51 562 41 '']
ans = U(U~=10&U~=32)

Наконец, мы используем, evalчтобы превратить строку в код.


3
+1 за объяснение формата ввода в 2 строки, а мне потребовалось 10 :-D
Луис Мендо

1
Ну, до сих пор не знаю, за исключением того, что теперь я узнаю буквы Uсреди этой группы цифр :-)
Луис Мендо

2
Очень хороший трюк! Это безумие, что Octave делает это с помощью кодов символов. Я понятия не имел об этом. Но тогда, что вы можете ожидать, когда официальный документ говорит, что Octave поддерживает Unicode случайно ... :-P
Луис Мендо

7

JavaScript ES6, 199 байт, взломан SLuck49

Довольно громоздкая запись с 33 байтами пробела для добавления.

s=>eval(atob`ISYgJiAtOkI8Qk97BRBeaxZFShoUZSsiOGkMenNy`.replace(/./g,(c,i)=>String.fromCharCode(c.charCodeAt()^(k+="SecretCode".split(/\w/)[i%11].length)),k=0)).join``

Хороший ... Я думаю, нам нужно добавить необходимое количество пробелов в "SecretCode", чтобы зашифровать зашифрованную строку и получить правильный источник ~
Патрик Робертс

@PatrickRoberts Да, именно так.
Арно

У меня уже есть автоматизированный сценарий, проверяющий все возможные комбинации, это всего лишь вопрос времени ... складывает руки, зная, что его злой план работает
Патрик Робертс

Фу ... это занимает больше времени, чем я думал. Я подумываю о том, чтобы написать кодовый вызов для вычисления количества возможных перестановок, учитывая массив длины N и сумму S, к которой элементы должны суммироваться. Прямо сейчас я нахожусь [ 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 ].
Патрик Робертс



6

Befunge-93, 58 байт, безопасно!

_vv$v<~:!`:<#^0*@-:0*5|845\+`-v0,<#-^<

Попробуйте онлайн!

Оригинальная программа

_vv
 $ v<
 ~:!`
 :<#^0
*  @
-:0
*5 |
8
45
\+`
-
v0,<
#-
^<

Попробуйте онлайн!

Хитрость заключается в том, что путь выполнения был более вертикальным, чем горизонтальным, а затем в коде были вставлены различные пробелы в произвольном порядке для дальнейшего перемешивания вертикальных путей. После того, как разрывы строк и пробелы были окончательно удалены, мы надеемся, что было очень мало, чтобы указать, как операции связаны друг с другом.

В случае, если это не было достаточно сложно, я также добавил немного чередования, поэтому ряд операций выполнялся разными путями кода, перпендикулярными друг другу. Идея заключалась в том, что если бы вы думали, что нашли правильную позицию для конкретной команды, вы бы не поняли, что вам может понадобиться использовать ее позже в коде.

Не уверен, стоило ли все эти усилия пытаться усложнить ситуацию, или люди даже не удосужились попытаться ее решить. :)

Код Объяснение

_      Since an empty stack is treated as zero, this initially just branches right.
v      The program flow is then directed downwards.
$      And this drop command initially does nothing because the stack is still empty.
~      A character is read from stdin.
::     Two duplicates are created.
55+-   We subtract 10 from the first copy (the 0- is just a nop to confuse things).
\48*-  And subtract 32 from the second copy.
*      The product of those two will be zero if the character is a newline or space.
_      So if we got whitespace, our branch goes right again repeating the loop.

v      If not, we go left, wrapping around till we hit the down arrow in column 3.
:<:    Again we make two duplicates of the character.
0`!|   One copy is used to compare if it's not greater than zero.
@      If it's not (i.e. it's the EOF), the branch goes up and we terminate.
<      Otherwise we go down and to the left.
,      Output the second copy of the character, leaving one remaining on the stack.
0      Push a zero to force the next branch right.
v      Redirect the flow down, wrapping to the top again.
_      Back at our initial branch, the zero we pushed forces us right.
v      Again the program flow is directed downwards.
$      And the drop command gets rid of the last duplicate character.
~      So now we're back reading the next character and the loop repeats.

5

C # 6, 201 байт, взломан Link Ng

usingSystem.Linq;_=>string./**/#iftrueJoin(/*"*//*/""/**//*/"*/",#elseConcat(//*/,#endiffrommin""letp=$@"{@""[1]}"fromiin(_.Replace(p,@""))where!new[]{p[0]^32^10}.Contains(i)select@i);

184 байта свернулись, оставив вам 17 байтов.

Взломанное решение, в Concatто время как мое предполагаемое решение использовало Join, вот предполагаемое решение:

_=>string./**/
#if true
Join(/*"* //*/""/**//*/"* /",#elseConcat(//*/,
#endif
from m in" "let p=$@"{@"  "[1]}"from i in(_.Replace(p,@"
"))where!new[]{p[0]^32^10}.Contains(i)select@i);

Это требует c # 6+ для работы, вы можете добавить это в?
TheLethalCoder

Это было взломано @Link Ng: codegolf.stackexchange.com/a/103233/38550
TheLethalCoder

5

MATL , 22 байта. Трещины и трещины .

Это программа, которая принимает ввод через STDIN и производит вывод через STDOUT.

Код без пробелов и переносов:

t'@*'dm1e5%Mdw%Y(

Формат ввода немного неудобен из-за того, как MATL принимает строковый ввод. Строки с символами новой строки не могут быть введены напрямую через STDIN, потому что каждый ввод должен быть одной строкой (символ новой строки обозначает конец ввода). Таким образом, формат выглядит следующим образом:

  1. Строка заключена в одинарные кавычки . Если содержимое строки содержит одинарные кавычки, они экранируются путем дублирования . Пример:'I''m a string'

  2. Чтобы ввести строку с символами новой строки, нужно разбить строку на символе новой строки и объединить все (с помощью квадратных скобок), включая числа в виде кодов ASCII . Например, рассмотрим строку, образованную моими именем и фамилией с новой строкой между ними. Это будет введено как ['Luis' 10 'Mendo'].

    Это позволяет вводить любые другие (возможно, не для печати) коды ASCII. Таким образом, строка в пункте 1 выше может быть альтернативно введена как ['I' 39 'm ' 97 32 'string']. Проверьте это здесь .

    Единственным условием является то, что хотя бы одна из частей в скобках является строкой. Это заставляет любые числа интерпретироваться как коды ASCII при объединении.

Извините за неловкость Удачи с использованием этого формата!

Оригинальное решение

t' @ *'dm1e 5%
Mdw%Y
(

Каждый из них %является символом комментария, поэтому остальная часть строки игнорируется.

Пробелы ничего не делают, но служат разделителями. Например, 1e5без пробела будет интерпретироваться как число 100000.

t принимает входные данные и дублирует их.

' @ *'толкает эту строку и dвычисляет ее последовательные различия, что дает [32 -32 10]( -32бесполезно).

mдает массив логических строк, указывающий, какие символы являются 32или 10(или -32).

1с последующим изменением eформы в виде ряда. Это не операционная здесь.

5с последующим Mнажатием 1снова (последний вход в самую последнюю функцию множественного ввода, которая есть e).

dвычисляет последовательные различия 1, и поэтому дает [](пустой массив).

wпереставляет и, наконец, (присваивает []пробельные символы, т.е. удаляет их.


1
Ты врешь! Ни в коем случае это не работает! (+1) ...
Стьюи Гриффин


2
Дерьмо ... Я не заметил, что оно уже треснуло ... Ну, дважды треснуло .
Стьюи Гриффин

Хорошая работа вам обоим! :-) Не совсем мое намеренное решение, но оно отлично работает
Луис Мендо

4

RProgN , 15 байт взломаны !

''`R""`R

Вы можете играть с кодом здесь . Относительно простое решение, мы надеемся, что надоедливый характер работы RProgN со строками оставит это без изменений.

Оригинальная программа

' ' ` R
"
" ` R

Explination

Во-первых, ввод неявно помещается в стек. стек:<INPUT>

Затем мы используем '', чтобы поместить пробел в стек. стек:<INPUT> " "

`на самом деле пытается выдвинуть строку, представленную` (WORD), но поскольку после него есть пробел, он просто выталкивает пустую строку. стек:<INPUT> " " ""

R здесь - сахар для команды Заменить. стек:<INPUTWITHOUTSPACES>

Затем «NEWLINE» выдвигает строку, содержащую символ новой строки, что приятно, потому что RProgN не использует экранированные символы, а просто прямо вверх позволяет вам нажать на строку, подобную этой. стек<INPUTWOSPACES> "\n"

Затем мы снова используем трюк и заменяем, что дает наш вывод.


Это должно работать в Firefox?
Конор О'Брайен

Я запускаю его в Firefox, есть проблема? Можете ли вы получить скриншот?
ATaco


Ну, это было быстро. Я почти продержался полчаса!
ATaco

4

Рубин, 86 байт + 1 флаг = 87 ( взломан Домом Гастингсом )

Требуется флаг командной строки -p.

eval"(T$}{(!//;:678?32.&&)".gsub(/|(.)/){$1&&$&.ord.^($'.count('')).chr}

Код действительно действителен в этой форме, это просто запрет.


Это круто, я люблю это! Так значит ...
Дом Гастингс


4

Луч , 72 байта, безопасно!

Теперь для двумерного языка. Можно играть на TIO Nexus .

s'''>`+++)+Ss`n\
 n`sS+(+++`<``/
 >rgn\
 ^ @<(\  
     H         <
 ^    /

Довольно прямолинейная программа, в которой не так много людей, пытающихся обмануть людей.

s'''>`+++)+Ss`n\ # Sets the memory slot 0 to 0, 10 to 10 and 32 to 32. n will redirect down
 n`sS+(+++`<``/  # since memory != store. \ is a red herring and not hit.
 >rgn\           # read in from input and set store to memory value. For all characters
 ^ @<(\          # other than space, LF and end of input this will be different and n will 
     H         < # redirect down then through to the print and back to read. Space, LF and  
 ^    /          # end of input get directed to the ( which tests for 0. This will redirect 
                 # space and LF to path back to read, otherwise it will skip over and halt

1
Я думаю, что я
переведу

1
Я создал клон интерпретатора Node , а Деннис добавил его в TIO !
ETHпродукция

4

Лабиринт , 127 байт

);""{"".@"-;,""""":"##"*"(:"+":}-;{";;"*#{:;"#""+("-;"";;"})"";""""""""

Надеюсь, я сделал это правильно :) это моя первая запись полицейских и грабителей.

Оригинальный код

 ) ;""{"".@
"-;, "" ""
"  :
" ##
" *
" (:
"  +
"  :}-;{
"    ; ;
" *#{: ;
" #    "
" +("-;"
"    ; ;
"    })"
"      ;
""""""""

Ваш ответ теперь в безопасности, вы можете добавить свой оригинальный код и объяснение.
Лайкони

4

Java, 3241 + 28 байт для большого целочисленного импорта

Эта запись предназначена исключительно для подтверждения возможности криптографически защищенной записи. Я считаю, что это в рамках правил, но если это противоречит духу, пожалуйста, дайте мне знать, и я удалю по справедливости. Я оставлю это «небезопасным» на неопределенный срок до тех пор, пока (и если) не будет найдена трещина. Это чудовище и, безусловно, может быть дополнительно оптимизировано, но вот оно.

interfacer{staticvoidmain(String[]A){Strings=",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,",q=",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,",a="",b="";for(Stringt:s.split(",")){a+=t.length();}for(Stringt:q.split(",")){b+=t.length();}if((newBigInteger(a).multiply(newBigInteger(b)).toString()).equals("3649760552772806991406184564114682549877113954361462782925976763675666255653486225665808494957477900238166874367635068317805381406282572366371821972593595701388544127398102379288357379612333197280663769935384647844344358594407966485992727383589962048236726744715096711312156760311643104858212670342667229690568585229658813910569607411855770280546861422837629553847973043531578541545436967345783407835402474562087790816775240815912495599135241317")){System.out.println(A[0].replaceAll("","").replaceAll("\n",""));}}}

По справедливости для грабителей, вот это со всеми добавленными «очевидными» пробелами.

interface r {

    static void main(String[] A) {
        String s = ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", q = ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", a = "", b = "";
        for (String t : s.split(",")) {
            a += t.length();
        }
        for (String t : q.split(",")) {
            b += t.length();
        }
        if ((new BigInteger(a).multiply(new BigInteger(b)).toString()).equals("3649760552772806991406184564114682549877113954361462782925976763675666255653486225665808494957477900238166874367635068317805381406282572366371821972593595701388544127398102379288357379612333197280663769935384647844344358594407966485992727383589962048236726744715096711312156760311643104858212670342667229690568585229658813910569607411855770280546861422837629553847973043531578541545436967345783407835402474562087790816775240815912495599135241317")) {
            System.out.println(A[0].replaceAll("", "").replaceAll("\n", ""));
        }
    }
}

Удачи, я хотел бы видеть это сломанным. На самом деле я даже назначу неограниченную награду за это. Если в какой-то момент вы все- таки взломаете это, вы получите 500 повторений бесконечной награды за обмен стека (а также, вероятно, замечательную математическую статью).



2
Ваше решение и мое, вероятно, пройдут сквозь века без изменений.
Джошуа

1
Для downvoter, есть что-то нелегитимное в этом подразделении?
Рохан Джунджхунвала

1
На самом деле для этого существует тривиальное решение (которое не включает факторизацию эквивалента числа RSA-440), к сожалению, для этого требуется дополнительно ~ 10 000 байтов ...
SLuck49

1
@ SLuck49 можешь мне это прокомментировать?
Рохан

1
@ SLuck49 вау! Я только что понял, на что ты смотрел! Я чуть не потерял 500 репутации.
Рохан

3

C 140 байт, взломанный Riley

Давайте начнем с простого.

#include<stdio.h>intmain(){inta=getchar();while(a!=EOF){//\a=getchar();if(a!=10&&a!=32)//\\putchar(a^10^32);putchar(a);a=getchar();}}

(Я надеюсь, что я делаю это правильно.)


1
Трещины. Не решение с отступом, так как у меня на 1 байт меньше.
Райли

@Riley добавьте дополнительный символ новой строки в конце, и все будет в порядке;)
Alfie Goodacre


2

V , 37 байт , взломанный nmjcman101

OVrS200@"kIi|D@"Aüî|D@"

Так как у этого есть непечатаемые, вот читаемая версия:

O<esc>Vr<C-a>S200<esc>@"kIi<C-v><C-v><esc>|D@"<esc>Aüî<esc>|D@"

Или, если вы предпочитаете, hexdump:

00000000: 4f1b 5672 0153 3230 301b 4022 6b49 6916  O.Vr.S200.@"kIi.
00000010: 161b 7c44 4022 1b41 fcee 1b7c 4440 22    ..|D@".A...|D@"

Cracked Это было действительно крутая головоломка
nmjcman101


2

JavaScript ES6, 380 байт, безопасный

Это та запись, которую я изначально планировал выпустить. Он огромен и почти не имеет шансов на победу, но я думаю, он должен быть достаточно криптографическим, чтобы выдержать 7 дней. Теперь я могу ошибаться!

67 байтов свободного места для добавления.

s=>{for(k=`|||`.split`|`.map(s=>s.replace(/\s/g,c=>(k-=(c<'')+1,n=n<<2|k&3),k=n=0)&&n),x=10106050295,y=-4955405499,i=32,d=2654435769,t=d*i;i--;y-=(x<<4^x>>>5)+x^t+k[t>>>11&3],t-=d,x-=(y<<4^y>>>5)+y^t+k[t&3]);returns[atob(([x,y].map(n=>String.fromCharCode(n&255,n>>8&255,n>>16&255,n>>24)).join``))](/[\n]/).join``}

Решение

Это реализация алгоритма расширенного крошечного шифрования . 64-битный ключ в коде пробела расширяется до следующего 128-битного ключа:

K = [0xd224de37, 0x89e34e79, 0xe34e7748, 0x939e2789]

введите описание изображения здесь

Источник: Википедия

После дешифрования и преобразования в ASCII 64-битный блок [x, y]читается как c3BsaXQ=, что является кодированным представлением Base64 split.


1
Я начал грубо форсировать это, возможно, мне повезет, и вы сделали, чтобы каждое из 4-х ключевых значений имело одинаковую длину (8 бит). За исключением того, что это будет 16 бит каждый ... вупс. Грубая сила не произойдет, время для другого подхода.
SLuck49

2

Vitsy , 73 байта, безопасно

Это прямое зло.

5mW3m7m7m2mD&EPamX}<m15mEnl9mZD\[4m]^P-cm(D_2-3*bmD1-dmrnu-'

Удачи! 13 пунктов пробела для добавления.

Оригинальный код:

5m
W3m7m
7m
2m
D&EPamX}
<m1
5mEn
l9mZ
D
\[4m]
^P-cm(D
_2-3*
bmD1-dmrnu-
'

Попробуйте онлайн!

Это примерно упрощает до:

<m1
W2\[2m]Z
l\[D&EP^P-_2-3*D1-rnu-(DX}]

Пожалуйста, не смотрите историю редактирования, так как в моем коде осталась ошибка.
Эддисон Крамп

Ты не знаешь зла. Я знаю зло.
Джошуа

Для меня уже прошло 03:00, поэтому утром я добавлю объяснение.
Эддисон Крамп


1

сетчатый, 43 байта, трещины

ISBqv<>>$$4jE:d/v$v?c+91d/v?E;!?l$/o$

Версия на TIO устарела, но вы можете получить копию с github .


Версия на Nexus уже была актуальной. Я тоже потянул на v1.
Деннис

Просто проверяет, работает ли это, если вход содержит два последовательных перевода строки?
Мартин Эндер

@MartinEnder это должно. Это зависит от того, передан ли ввод или нет. Когда передано по трубопроводу, он должен прочитать все stdin.
Конор О'Брайен

@ Денис спасибо! Я хотел спросить тебя в чате.
Конор О'Брайен


1

Вольфрам, 132

Вероятно, есть более одного решения (подсказка: Мерсенн)

StringReplace[#,""->"",Limit[x/(x-1),x->Boole[PrimeQ[
212821282128228281282128228821282128212821282-1]]]]&

Решение

StringReplace[#," "->"",Limit[x/(x-1),x->Boole[PrimeQ[
2 128 2 128 2 128 2 2 8 2 8 128 2 128 2 2 8 8 2 128 2 128 2 128 2 128 2-1]]]]&

> Тогда ваша заявка будет вашим исходным кодом со всеми удаленными пробелами
Kritixi Lithos

@KritixiLithos Это удалено
swish

Как насчет пробелов перед второй строкой и новой строки между первой и второй строкой?
Kritixi Lithos

Ну, вы правы, это просто для удобства чтения ...
swish

Я думаю, что вы можете опубликовать решение сейчас.
CalculatorFeline

1

Пробел , 81 74 байта

																					

Человекочитаемая версия:

ttttttttttttttttttttt (21 tab characters)

Я знаю, что это старая проблема, но, надеюсь, кто-то захочет взломать это. Я попытался оптимизировать для bytecount, но возможно сделать что-то более короткое с тем же количеством символов табуляции.


0

ткк, 850 байт

Чтобы не вставлять очень длинную строку, я пропустил это через tr -d '\ n' | сгиб -b -w 60.

#!/usr/bin/tcc-run#include<stdio.h>typedefunsignedcharu;um[]
={104,105,16,152,94,131,43,42,112,214,53,207,116,170,185,210
};intmain(){uS[256];uk[256];ui,j,t;intc,n=0;FILE*f;f=fopen(_
_FILE__,"r");/*cannotfail*/while(-1!=(c=fgetc(f)))if(c==''||
c==10)k[++n]=c;fclose(f);i=0;do{S[i]=i;}while(++i!=0);j=0;i=
0;do{j=j+S[i]+k[i%n];t=S[i];S[i]=S[j];S[j]=t;}while(++i!=0);
i=0;do{if(S[i]!=m[i])j=1;}while(++i<sizeof(m));if(j==1){i=0;
do{printf("%d,",(int)S[i]);}while(++i<sizeof(m));printf("\n"
);}else{while(-1!=(c=fgetc(stdin)))if(c!=''&&c!=10)fputc(c,s
tdout);}returnj;}

Ссылка на переводчика?
Аддисон Крамп

@VoteToClose: apt-get install tcc сделал это для меня.
Джошуа

0

SILOS , 159 байтов Безопасно!

loadLinedef:lblgetagetzzzz/za=256:aX=getax=Xy=Xz=xx-10x|ifxbGOTOx:by-32y|ifycGOTOx:cprintCharX:xa+1z+1x=getaifxa:b

Должно быть довольно тривиальным. Это моя первая запись полицейских и грабителей.

Никто не атаковал его, вероятно, из-за эзотерической природы моего собственного языка. Похоже, подлый способ скользить мимо, но это не имеет значения, поскольку более короткие из них безопасны.

loadLine
def : lbl geta get z zz
z/z
a=256
:a
X=get a
x=X
y=X
z=x
x-10
x |
if x b
GOTO x
:b
y-32
y|
if y c
GOTO x
:c
printChar X
:x
a+1
z+ 1
x=get  a
if x a
:b

Не стесняйтесь попробовать это онлайн

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.