Это вызов копов и грабителей. Это нить грабителя. В нитка полицейского здесь .
Полицейские выберут любую последовательность из OEIS и напишут программу p, которая напечатает первое целое число из этой последовательности. Они также найдут некоторую строку s . Если вы вставляете s где-то в p , эта программа должна вывести второе целое число из последовательности. Если вы вставите s + s в то же место в p , эта программа должна вывести третье целое число из последовательности. s + s + s в том же месте напечатает четвертый, и так далее, и так далее. Вот пример:
Python 3, последовательность A000027
print(1)
Скрытая строка составляет два байта .
Строка +1
, потому что программа print(1+1)
напечатает второе целое число в A000027, программа print(1+1+1)
напечатает третье целое число и т. Д.
Копы должны раскрыть последовательность, исходную программу p и длину скрытой строки s . Грабители взломают представление, найдя любую строку до этой длины и место, чтобы вставить ее, чтобы создать последовательность. Строка не должна соответствовать предполагаемому решению, чтобы быть действительной трещиной, а также местоположением, в которое она вставлена.
Если вы взломаете один из ответов полицейских, опубликуйте свое решение (с указанием скрытой строки и местоположения) и ссылку на ответ. Затем прокомментируйте ответ полицейских со ссылкой на ваш взлом здесь.
правила
Ваше решение должно работать для любого числа в последовательности или, по крайней мере, до разумного предела, когда оно завершится неудачей из-за ограничений памяти, переполнения целого числа / стека и т. Д.
Победивший грабитель - это пользователь, который взламывает большинство представлений, причем тай-брейк первым достигает этого количества взломов.
Победивший коп - это коп с самой короткой строкой s, который не взломан. Tiebreaker - самый короткий р . Если нет непроверенных представлений, полицейский, у которого было решение, не взломанное для самых длинных побед.
Для того чтобы ваше решение было объявлено безопасным, ваше решение должно оставаться открытым в течение 1 недели, а затем раскрываться скрытая строка (и место для ее вставки).
s не может быть вложенным, оно должно соединяться сквозным образом. Например, если бы s было
10
, каждая итерация шла бы,10, 1010, 101010, 10101010...
а не10, 1100, 111000, 11110000...
Все криптографические решения (например, проверка хеша подстроки) запрещены.
Если s содержит символы не ASCII, вы также должны указать используемую кодировку.
источник
%
левые партнеры.Головоломка , A000984 от Nitrodon
Это всего лишь 30 байтов, не совсем понятно, что имел в виду Нитродон.
Попробуйте онлайн!
объяснение
Я много чего перепробовал, но вот что сработало. Термины A000984 являются центральными элементами треугольника Паскаля.
Теперь я понял, что могу получить их, сложив диагонали над ними:
Например:
И так как последнее действие в программе Нитродона - подвести итог всему, что казалось хорошим кандидатом (больше похоже на то, что я пробовал кучу вещей, но этот закончил работать).
Итак, мы хотим программу, которая берет одну частичную сумму и производит следующую. К счастью, есть довольно аккуратный способ перехода от одного к другому. Каждый ряд - это дельты следующего ряда. То естьn й член в ряду - это разница между n м и n−1 м членами в следующей строке.
Единственная проблема в том, что нам не хватает последней строки, чтобы вычислить нужную нам строку. Так как каждая строка длиннее последней, если у нас есть строка, мы не можем получить последний член следующей строки с помощью этого метода. Однако здесь у нас есть еще один трюк, последний член каждой строки равен всем предыдущим членам этой строки!
И если вы знакомы с Brain-Flak, который должен показаться вам чем-то, что будет очень легко сделать.
Теперь для кода:
Чтобы начать, мы делаем следующий расчет строки, где каждый новый член является суммой двух соседних старых членов. Это можно сделать с помощью:
Который в основном перемещает элемент и добавляет (без удаления) то, что когда-либо было сверху. Однако это полностью меняет ситуацию, поэтому в следующий раз, когда мы получим строку, нам нужно ее вернуть.
Теперь нам нужно вычислить последний член строки. Как я уже говорил, это очень просто. Поскольку у нас был цикл по всем элементам строки, мы можем просто взять эту сумму и сдвинуть ее. Мы толкаем его перед вторым циклом, чтобы он оказался внизу.
Вот и все.
источник
Brain-Flak, A000290 , автор Sriotchilism O'Zaic
Оригинал:
Трещины:
Попробуйте онлайн!
В качестве альтернативы:
Попробуйте онлайн!
источник
MATL , последовательность A005206 от Luis Mendo
Оригинал:
Попробуйте онлайн!
Трещины:
Я не эксперт по MATL, но насколько я понимаю, оригинал
voOdoO
создает два пустых массива и массив[0]
в стеке. это[0]
то, что печатается без скобок как первый элемент последовательности. Трещина / решение тогда делает следующее:d
удаляет элементы из стека и (при условии, что это число или массив размером 1) превращает их в пустой массив. Эти пустые массивы не печатаются, но влияют на размер стекаNq
считает размер стека и вычитает один. Этоn+1
термин при оценке функции (поскольку она начинается с 2 и увеличивается на одну каждую итерацию из-заd
добавления невидимых вещей в стек)17L
это константаPhi = (1+sqrt(5))/2
/k
это выполняет,floor((n+1)/Phi)
что является одной из формул, которая вычисляет элементы последовательности. Эта формула указана в OEIS,a(n) = floor(sigma*(n+1)) where sigma = (sqrt(5)-1)/2
за исключением того, что мы используем идентификационные данные(sqrt(5)-1)/2 = 1/Phi
источник
\N17L/k&
(обратите внимание на два различных использования&
в середине и в конце кода), но ваше решение проще и более элегантноPython 3 - A__
Попробуйте онлайн!
100 бутылок пива, добавьте,
-1
чтобы получить следующий номер,99
и т. Д.источник
-1
. Я сделаю это более явным.Кег , последовательность A000045 , по A__
Оригинал:
Трещины:
Обратите внимание, что проблема заключалась в поиске подстроки длиной <= 6, но найденная строка имеет длину 5.
Определение команд для тех, кому лень искать спецификацию бочонка:
0
и1
поместить соответствующий номер в стек;"
перемещает вершину стека к основанию стека (крен);&
вставляет вершину стека в регистр, если он пуст, в противном случае регистр очищается в стеке;+
добавляет два верхних значения стека.Первоначальный
1"
просто вставляет 1 в нижней части стека. Этот растущий список единиц играет роль только в первой итерации, где он позволяет нам предполагать, что стек начинается1 0
не просто, а просто0
. Действительно, программа10:&+.
, где:&+
которой повторяется часть, ведет себя точно так же, как и решение, описанное выше, за исключением того, что у нее нет растущего списка единиц внизу.Поскольку
&
в повторяющейся части используется только один раз и имеет переменное поведение, поведение1":&+
зависит от четности итерации.Теперь эта программа на самом деле не печатает последовательность последовательности Фибоначчи, начиная с 0, 1 с начала; фактически она печатает последовательность Фибоначчи 1, 0 со второго места, то есть с 0. (Это приводит к той же последовательности.) Зная это, программа легко анализируется:
[a, b]
и заканчивается какa+b (&=b)
.[b] (&=a)
и заканчивается как[b, b+a]
.Это действительно вычисляет последовательность как требуется.
источник
:
команду в начале строки.Java 8+, последовательность A010686 Бенджамина Уркхарта
источник
Brain-Flak, A000578, автор Sriotchilism O'Zaic
Оригинал:
Попробуйте онлайн!
Трещины:
Попробуйте онлайн!
источник
Пирет , последовательность А083420 , автор М.Лаврентьев
Вы можете запустить его здесь, но я не понял, как сделать ссылку на код. Вам придется копировать-вставить.
Предоставленная функция игнорирует свой второй аргумент. Он удваивает свой первый и добавляет один, что сгенерирует необходимую
2^n - 1
последовательность, необходимую здесь - все, что мне нужно сделать, это сказать, сколько раз выполнить эту операцию, изменяя длину сложенного списка. К счастью, Пирет не жалуется на эту запятую.источник
Python 3 , последовательность A268575 по NieDzejkob
Оригинал:
Трещины (100 байт):
Попробуйте онлайн!
Исходя из того, что я могу понять, исходный код устанавливает определения, чтобы сделать скрытую строку как можно более сокращенной, а затем определяет исходный шаблон игры жизни. Затем скрытая строка эквивалентна написанию итерации «Игры жизни» Конвея в 102 байта.
Для целей этого взлома
S
это функция, которая суммирует элементы в своих аргументах (которые являются итерируемыми) иF
применяет функцию, возвращающую итерируемое значение для каждого элемента списка, и объединяет все результаты вместе.;A=-1,1,0;
заканчивает предыдущее выражение и сокращает кортеж (-1,1,0) с помощью A, который используется для определенияproduct(A,A)
всех соседей относительно данной ячейки, а также самой ячейки.*X,=F(lambda a:(S(a,x)for x in product(A,A)),W);
создает новый список,X
содержащий все соседние ячейкиW
и сами ячейкиW
, добавляя относительные позиции соседей к каждой ячейке и объединяя их в список.W={p for p in X if 2<X.count(p)<4+({p}<W)}
просматривает этот списокX
и определяет, принадлежит ли каждая ячейкаX
в наборе ячеек на следующей итерации. Это было взято почти дословно из этого Game of Life golf .источник
Haskell, A014675 by Khuldraeseth na'Barya
Original code
With substring
Try it online!
источник
flip take[1,2]
instead of that inner lambda. Otherwise identical.(`take`[2,1])
is even one byte shorter(`take`)
met a compilation error, so I figured(`take`[2,1])
would as well. :(Desktop Calculator, A006125, by A__
Original:
Cracked:
Try it online!
Straightforward implementation.
источник
Sa2Lad1-*2/^
, in case anyone asks me about it.cQuents, sequence A003617 by Stephen
Try it online!
Begin with the lowest n+1-digit number, a one followed by n zeroes. The
#2
specifies that only the second term of the sequence, which is the sequence definition applied once to the seed, will be printed; this sequence definition simply finds and returns the next prime.источник
Python 3 -- agtoever
Try it online!
источник
MATL, sequence A000796 by Luis Mendo
Original:
Try it online!
Cracked:
The original author sneakily created the array
[-7:-1]
and then extracted and negated the first element of it to get7
. He then used that to get the rounded 7'th digit of pi (which is3
) and presented it as the first digit of pi. Adding in|SQ
makes the original array all positive, sorts it, and adds one to everything. This means that after everything instead of getting the index7
it gets the index-2
after one application,-3
after two applications, and so on. The-
is important because it tells theY$
function to not round the digits.источник
Forth (gforth), A000042, by NieDzejkob
Try it online!
The trivial 1-byter is simply extending the literal. Problem is, that overflows 64 bits as early as the ninteenth digit. Easy fix is to print the single digit repeatedly, right? Yep, but it's not quite that easy. Though tacking
1 .
onto the end will indeed print the additional digits we require, they'll be separated by spaces. That ain't gonna work.Now, according to Wikipedia, "
.(
(dot-paren) is an immediate word that parses a parenthesis-delimited string and displays it." Fortunately, that displaying has no other weird characters, so using.(
to print a single 1 should suffice. And it does. No space is needed after the close-paren, so these five characters (there's a space after the open-paren) can be repeated to our hearts' content. To demonstrate, I've included in TIO an example that would have overflowed a 64-bit int several times over. Works like a charm.источник
Unefunge-98 (PyFunge), sequence A000108, by NieDzejkob
Try it online!
Repeated six times
Two bytes to spare of the nineteen allowed! What appears to be a space there is actually a 0x01 Start Of Header character.
Explanation:
This challenge is all about generating
a(n)
froma(n-1)
and perhapsn
. OEIS provides the explicit formulaa(n) = (2n)!/(n!(n+1)!)
, which is easily enough converted toa(n) = a(n-1) * (4n-6) / n
. Now to implement this in Funge.I must be inserting code between the
1
and the.
. That's half the puzzle done already. All that remains is what code to insert? Funge is notably lacking in stack manipulation tools, so the bottom of the stack is off-limits; I need to track bothn
anda(n)
without growing the stack. And how better to do that than with Funge space?That 0x01 character is my counter
n
. I keepa(n)
on the stack, as it must be on the stack after my bit finishes executing.источник
Python 3, A008574 by tsh
Try it online!
источник
V, A000290, by DJMcMayhem
yields the squares from 1.
Try it online!
The base
é*
inserts*
andØ.
counts the number of non-newline characters in the entire buffer. The insertionÄ
duplicates the top line to its own line, on which2é*
inserts**
. Concatenations of the insertions yield successive odd numbers with the largest at the top. The finalØ.
in effect sums the first n odd numbers, hence yielding the n-th square .источник
ÄÎé*<CR>
AsciiDots, sequence A019523 by Alion
Once!
Twice!
Ten times!
While trying to figure out how the code/language works, I learned that the first two lines of the existing code does all the work of outputting the Fibonacci sequence infinitely. The code terminates when any dot hits the
&
, so I merely needed to add further delay in the remaining lines to allow for the appropriate number of entries to output.After some trial, error, and observation, I discovered that the correct delay interval is 16 time units per number. Fitting enough characters in a single row seemed infeasible, so I would need to put the delay in 2 rows, leaving 10 characters for the actual delay. In order for the pattern to match up with itself, both rows had to have 5 characters, and since the middle three characters in a row can be traversed twice, this gives 16 time units as desired.
The requirement to match this up to the
&
in the eighth column seemed to make this impossible, until I realized that I could start with a newline in the interior of the third row. This makes the penultimate row the right length, and removes the now-redundant end of the third line.источник
\v
/v>-----)
Brachylog, sequence A114018 by Unrelated String
Original program:
String to insert:
Try it online!
Explanation
Here is first the explanation of the original program (knowing that the sequence used is "least n-digit prime whose digit reversal is also prime")
As you can see, the program is fairly straightforward except for one thing: there is a completely useless
b - behead
predicate call, that removes the first element of the reverse of our number, with which we don't do anything.This is a definite clue as to how we can find the string. The idea is that, since we want to increase the length of the number by 1 digit each time we add the string, we need a string that "evaluates" the length of that number somehow, using that useless
b
.The solution is to use
ẹb
: first,ẹ - elements
will transform the number into a list of digits; then,b - behead
will remove its first element. The trick is thatb
will fail if the list of digits is empty. So everytime we append ab
, we will increase the length of the required number by 1 (because it will fail until the assigned value of?
is high enough to contain sufficiently many digits so that the lastb
is applied on a list of one digit).Re-appyling
ẹ
each time has no effect because it's already a list of digits. We only need it once at the beginning because if we behead a number like9001
instead of the list of its digits, we will get001 = 1
which loses information about the number of digits.источник
9001b1
issue, it actually just turned out that althoughb
will fail if the list of digits is empty, it won't fail if you never actually have a list, because single-digit numbers behead to 0, including 0 itself.b
is weirdVDM-SL, A000312, by Expired Data
Since VDM-SL's
let
-expressions can re-bind variables which are already bound in an enclosing scope,x**x
can be evaluated arbitrarily deeply nested in scopes in whichx
is one more than in the previous scope, while the originalx
is still less than the cardinality ofm(1)
.источник
If you insert s somewhere into p, this program must print the second integer from the sequence. If you insert s + s into the same location in p, this program must print the third integer from the sequence.
Note the behavior of the exampleprint(1)
.++
to map overrideHaskell, A083318 by xnor
Try it online!
источник
show
.Haskell, A000045 (Fibonacci), by Rin's Fourier transform
Try it online!
23 bytes exactly.
This one was fun and a bit tricky. The reversed 0 and 1 threw me off for a little bit before I realized that wasn't an issue. The lack of
$
in the original had me trying sketchy stuff like$...$id
(one byte too long) before it dawned on me that I could just wrap it all in parentheses. All in all, a nice little puzzle.H.PWiz points out that pattern matching could have saved me at least five bytes:
$(\[x,y]->[y,x+y])
. That darn pointfree challenge has me thinking pointfree everywhere.источник