Это задача полицейских и грабителей . Для нити полицейских, иди сюда .
Эта задача включает в себя две последовательности OEIS , выбранные полицейскими - S 1 , S 2 - и то, насколько хорошо эти последовательности можно обыграть и запутать.
Полицейские строят код A, который производит S 1, и дают число X, которое, как они утверждают, является наилучшим возможным расстоянием Левенштейна (в символах) для создания B, которое производит S 2 .
Проблема грабителей
Чтобы взломать представление конкретного полицейского, грабители должны придумать программу C на том же языке (и версии), что и тот ответ, который выдает S 2 (n) и символ Y меняется по сравнению с A (с Y <= X
). Грабителям не обязательно находить тот же самый B- код, который (тайно) создал полицейский. Представления грабителей должны придерживаться того же 0-индекса или 1-индекса, как указано в представлении полицейского.
Если вам это удастся, опубликуйте ответ с решением, со ссылкой на ответ полицейского, и оставьте комментарий к ответу полицейского со ссылкой на ваш.
Каждый ответ полицейского может быть взломан только один раз, и, конечно, вы не можете взломать свой собственный ответ. Если ответ полицейского оказывается недействительным до или после взлома, он не засчитывается в счет грабителя.
Победа и выигрыш
Грабителей (X - Y)*5 + 5
забивают по каждой из их трещин, и грабитель с общим наибольшим количеством очков выигрывает.
Дальнейшие правила
- Вы не должны использовать какие-либо встроенные модули для хэширования, шифрования или генерации случайных чисел (даже если вы запрограммировали генератор случайных чисел на фиксированное значение).
- Разрешены либо программы, либо функции, но код не должен быть фрагментом кода, и вы не должны использовать среду REPL.
- Вы можете принимать и выводить данные в любом удобном формате . Методы ввода / вывода должны быть одинаковыми для обеих последовательностей.
- Окончательный калькулятор для расстояния Левенштейна для этой задачи - это тот, что на Planet Calc.
- Это не только вызов CnR, но и код-гольф, поэтому применяются все обычные правила игры в гольф.
источник
Ответы:
Пайк, Левенштейн дистанция 1, A036487 , A135628 - оценка 5
Трещина входа на мутную рыбу
Попробуй это здесь!
Исходный код,
X*e
возводит в квадрат вход,X
умножает его на вход*
и делит пополам результат на половинуe
.Хитрость в том, что
'X'
56 в базовом представлении 96w
, так чтоwX
получается 56, умножьте это на входное значение, затем на пол и разделите пополам, и вы получите 28-кратный ввод по мере необходимости.источник
Brain-Flak , 28 байтов, расстояние 4, A002817 , A090809
Этот ответ был обнаружен с помощью брутфорсера, который сгенерировал 35 000 возможных программ (многие из них были несбалансированными, и, следовательно, недействительным кодом мозгового штурма, но я все равно нашел ошибку и нашел ответ в любом случае). Это было около 20-тысячной протестированной программы, и потребовалось около часа, чтобы найти (хотя я не знаю точно, сколько времени прошло с тех пор, как я закончил).
Я вроде не хотел публиковать этот ответ, так как у меня пока нет полного понимания того, как работает эта программа. Тем не менее, ответ должен быть безопасным, поэтому я не хочу, чтобы срок его действия истек. Я надеюсь обновить этот ответ еще раз, как только я его полностью понимаю, а также опубликовать код, который я использовал, чтобы найти этот ответ. Но пока я просто выложу частичное объяснение.
Это имеет смысл, потому что OEIS заявляет:
А A000124 - это треугольные числа +1. Однако я точно не знаю, что такое forumla, поэтому я не могу полностью объяснить, как это работает.
источник
Perl 6, 19 байт, X = 1, A000045 → A000035
+>
на месте+<
будет также работать.Попробуйте онлайн!
Как это устроено
Infix ... довольно полезен для простых рекурсивных последовательностей.
(0,1,*+*...*)
Часть исходного кода, который является обобщающим длязадает последовательность, которая начинается с 0 и 1 , затем добавляет элементы путем вычисления суммы двух предыдущих элементов последовательности.
Напротив,
(0,1,*+<*...*)
использует сдвиг влево (+>
вправо, также сдвиг вправо) для построения последовательности контроля четности. Поскольку смещение 1 на 0 единиц влево равно 1 , а смещение 0 на 1 единицу влево равно 0 , мы получаем желаемые чередующиеся комбинации единиц и нулей.источник
Perl 6 , 10 байт, дистанция 1 - оценка 5
Crack из записи по SMLS
становится:
Попробуйте онлайн!
источник
*[0]o
быть там. Я предполагаю, что это означает, что я могу придумать еще один вызов, основанный на моем "трюке" ... :)***
и подумал, что похоже, что он может развернуть операцию двоичного умножения*
, с предыдущими аргументами, я действительно не знаю, что на самом деле делает код. Не стесняйтесь редактировать некоторые объяснения!1***
анализируется как1 ** *
, то есть лямбда, которая делает "1 в степени х".1*+*
анализируется как1 * (+*)
, то есть лямбда, которая делает «1, умноженное на (x преобразовано в число)».Perl 6 , расстояние 2, смлс
Оригинал:
Crack:
Попробуйте онлайн!
источник
+(^*Z%2)
. Думаю, я не очень хорош в составлении этих задач.WolframAlpha, расстояние 1, Грег Мартин , A002378 , A000537
Как это устроено
Я понял, что интересно, (n * (n + 1) / 2) ^ 2 - формула для второй последовательности. Поскольку сумма (от 1 до n) эквивалентна n * (n + 1) / 2, мне просто нужно было переключить * на a ^.
источник
Brain-Flak , 20 байтов, DJMcMayhem
Попробуйте онлайн!
Добавил
({})
в начале цикла, чтобы удвоить значение в каждой итерации.источник
({(({}[()])){}}{})
JavaScript, Расстояние 4, LliwTelracs
Оригинал:
Crack:
Попробуйте онлайн!
источник
JavaScript (ES6), расстояние 1, Advancid
Оригинал:
Crack:
Попробуйте онлайн!
или
Попробуйте онлайн!
Каким-то образом я смог заставить его вести себя по-разному между TIO и repl.it (абсолютно без понятия, почему 2 * 1 ^ ... будет равно 0, как в repl.it)
источник
as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}
.Javascript, 41 байт, расстояние 3, A061313, A004526
Попробуйте онлайн!
источник
Ява, Расстояние 4, Peech , A094683 , A000290
Оригинал:
Crack:
возвращает n * n
источник
Javascript, Advancid , расстояние 2, A059841 и A000004
Только оставляя код за ссылкой TIO, потому что он, кажется, нарушает работу сайта.
Благодаря @nderscore, чей код я использовал для расшифровки исходного кода
Был некоторый избыточный код, такой как использование !! [] + [] + [] вместо !! [] + [].
Добавление! + [] - (! + []) (+ 1-1) изначально предотвращало дешифрование.
Попробуйте онлайн
источник
Пайк, Левенштейн расстояние 2, A008788, A007526
Попробуй это здесь!
Как это устроено
Это делает смешанное базовое преобразование.
'S
захватывает ввод n и применяет, нажимая [1, ..., n] в стеке. СледующийS
получает вход n и толкает тот же массив еще раз.'
кажется, что следующая команда будет применена к предыдущей вершине в стеке; Я немного неясен в деталях.Наконец,
^
применяется смешанное базовое преобразование, поэтому [1, ..., n] [1, ..., n]f
вычисляетa (n): = [1] n + n + (n) (n-1) .. . + [n!] 1 где скобки указывают значение места и цифру справа от цифры.
Теперь a (n) = (1 + (1) (n-1) + (n-1) (n-2) (n-3) + ... + (n-1)!) N = n ( a (n) + 1) , это та же самая рекурсивная формула, которая определяет a (n) в [A007526]. Поскольку пустая сумма равна нулю, a (0) = 0 и базовый случай также совпадает.
источник