Изменить код, изменить последовательность: копы


27

Это задача . Для нити грабителей, иди сюда .

Эта задача включает в себя две последовательности OEIS , выбранные полицейскими - S 1 , S 2 - и то, насколько хорошо эти последовательности можно обыграть и запутать.

Вызов ментов

Ваша задача как полицейского - выбрать свободно доступный язык и две последовательности OEIS. Затем напишите код A на том языке, который принимает входные данные n и выдает S 1 (n). Когда этот код модифицируется расстоянием Левенштейна из X символов (с X не более 0.5 * (length A)) и превращается в код B на том же языке, он должен затем произвести S 2 (n). На самом деле вы должны написать этот код B , но не раскрывайте его, пока ваш вызов не будет безопасным (см. Ниже).

Представления полицейских должны включать название языка, полный код A , количество байтов A , значение X того, сколько изменений необходимо внести в их секретный код B , и выбранные порядковые номера S 1 и S 2 . Вы можете выбрать, будет ли каждая последовательность 0-индексированной или 1-индексированной, но укажите это в своем представлении.

Чтобы взломать конкретное представление, грабители должны создать программу C на том же языке (и в версии), которая производит S 2 (n) и символ Y меняется от AY <= X). Грабителям не обязательно нужно искать тот же самый B- код, который (тайно) сгенерировал полицейский.

Победа и выигрыш

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

Менты выиграть, имея представление с без трещин кратчайших А . Если он привязан, то наименьший X будет использоваться как прерыватель связи. Если все еще связаны, более раннее представление выиграет.

Дальнейшие правила

  • Вы не должны использовать какие-либо встроенные модули для хэширования, шифрования или генерации случайных чисел (даже если вы запрограммировали генератор случайных чисел на фиксированное значение).
  • Разрешены либо программы, либо функции, но код не должен быть фрагментом кода, и вы не должны использовать среду REPL.
  • Вы можете принимать и выводить данные в любом удобном формате . Методы ввода / вывода должны быть одинаковыми для обеих последовательностей.
  • Окончательный калькулятор для расстояния Левенштейна для этой задачи - вот этот на Планете Calc.
  • Это не только вызов CnR, но и поэтому применяются все обычные правила игры в гольф.

Кроме того, если вы что-то измените в этом вопросе, убедитесь, что вы обновили грабителей.
mbomb007

Что если полицейский называет действительно большую функцию / переменную по отношению к реальному коду, генерирующему последовательность? В этом случае можно будет создать любую последовательность с меньшим (0.5*len(A))
hashcode55

@ hashcode55 Две вещи - 1) это вряд ли будет хорошим кандидатом на победу в потоке полицейских. 2) если он такой огромный, он также дает разбойникам хорошую свободу действий.
AdmBorkBork

1
« Это кодовый гольф, поэтому применяются все обычные правила игры в гольф ». Означает ли это, что код А должен быть в максимально возможной степени, или он может быть написан намеренно слишком многословно / неловко, чтобы сделать его более похожим на код Б ?
smls

Ответы:


10

Brain-Flak , 28 байтов, расстояние 4, A002817 , A090809 Трещины

Этот ответ использует 1-индексирование

(({({}[()])}{}){({}[()])}{})

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

Для всех, кто интересуется, существует 27475 действующих программ Brain-Flak с Левенштейном на расстоянии 4 от этой программы и 27707 с расстоянием 4 или меньше. Таким образом, решение для перебора было бы возможным на компьютере потребительского уровня.


Вероятно, было бы короче и быстрее читать, если у вас есть X = 4вместо Levenshtein distance of 4.
mbomb007

1
@ mbomb007 Лично я немного запутался, когда испытания используют кучу буквенных переменных, чтобы заменить то, что я пытался избежать путаницы. Теперь я сделал это короче, надеюсь, не вызывая путаницы.
Пшеничный Волшебник

пожимают плечами . Если все читают вопрос, они должны получить его. Xдействительно единственная переменная, которую они должны знать.
mbomb007

@ mbomb007 Хотя, вопрос также требует подсчета байтов.
DLosc


6

7 , 33 символов, 13 байт, Х = 10, A000124A000142 , Сейф

171720514057071616777023671335133

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

Расстояние Левенштейна измеряется в терминах символов, поэтому я написал программу в терминах символов, которые она содержит выше (и попробуйте онлайн, включая сам язык, с удовольствием запускает программы, закодированные в ASCII). Однако программа хранится на диске с использованием суббайтовой кодировки 7, что означает, что сама программа на самом деле представляет собой следующий hexdump (таким образом, длиной 13 байт):

00000000: 3cf4 2982 f1ce 3bfe 13dc b74b 7f         <.)...;....K.

(Поскольку расстояние Левенштейна измеряется в символах, вы не обязательно добавляете / удаляете / меняете 10 байтов здесь, поэтому, вероятно, лучше всего работать с исходным ASCII.)

Программа в письменном виде реализует A000124 (треугольные числа + 1); любая трещина должна реализовывать A000142 (факториалы). Обе программы принимают входные данные из stdin (как десятичные целые числа), записывают свои выходные данные в stdout и обрабатывают ввод 1 как означающий первый элемент последовательности (и ввод 2 как второй элемент и т. Д.).

Хотелось бы надеяться, что очень высокое значение X остановит людей зверством в программе, на этот раз (что всегда связано с записями копов и грабителей в 7).

Решение

177172051772664057074056167770236713351353

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

Отличия от оригинала:

17 172051 405707 1 61677702367133513 3
17 7 172051 77266 405707 405 61677702367133513 5 3

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



4

Perl 6 , 10 байтов, X = 1, A000012A001477

Трещины!

*[0]o 1***
  • S 1 = A000012 = 1,1,1,1,1,...= Последовательность всех 1. (0-индексированные)

  • S 2 = A001477 = 0,1,2,3,4,...= неотрицательные целые числа. (0-индексированные)

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

Подтверждено для работы с версией Perl 6 2017.01 и версией Perl6, работающей на TIO.

( А можно дальше играть в гольф 1***- надеюсь, это тоже разрешено, как есть.)


3

Perl 6 , 13 байтов, X = 1, A161680A000217

Сейф!

{[+] [,] ^$_}
  • S 1 = A161680 = 0 0 1 3 6 10 15 21...= ноль, за которым следуют треугольные числа.
  • S 2 = A000217 = 0 1 3 6 10 15 21 28 ...= Треугольные числа.
  • Zero-индексироваться.

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

(Подтверждено для работы с версией Perl 6, работающей на TIO.)

Решение

{[+] [\,] ^$_}

Как работает оригинал:

{           }  # A lambda.
          $_   # Lambda argument.                     e.g. 4
         ^     # Range from 0 to n-1.                 e.g. 0, 1, 2, 3
     [,]       # Reduce with comma operator.          e.g. 0, 1, 2, 3
 [+]           # Reduce with addition operator.       e.g. 6

Как работает решение:

{            } # A lambda.
           $_  # Lambda argument.                     e.g. 4
          ^    # Range from 0 to n-1.                 e.g. 0, 1, 2, 3
     [\,]      # Triangle reduce with comma operator. e.g. (0), (0,1), (0,1,2), (0,1,2,3)
 [+]           # Reduce with addition operator.       e.g. 10

Используется тот факт, что числовые операторы, такие как сложение, обрабатывают список как число элементов, поэтому в примере сумма равна 1 + 2 + 3 + 4 = 10.

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


Это умоление о грубой силе, если бы у меня было время или желание (и знание perl).
Рохан

Это сохранилось достаточно долго, чтобы пометить его как безопасный
fəˈnɛtɪk

2

Желе , 11 байт, X = 5, A005185A116881

ịḣ2S;
1Ç¡ḊḢ

Это полная программа, которая принимает целое число в качестве аргумента командной строки и печатает целое число.

Обе последовательности индексируются как в OEIS, то есть A005185 индексируется 1, а A116881 индексируется 0.

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


2

Javascript, 41 байт, Расстояние от 3, A061313 , A004526 , Cracked

f=x=>{return x>1?x%2?f(x+1)+1:f(x/2)+1:0}

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

Использует индексирование на основе 1, решение использует индексацию на основе 0.

Еще раз, другое решение ...

f=x=>{return x>1?x<2?f(x-1)+1:f(x-2)+1:0}


3
Кстати, вы не должны использовать постоянные ссылки tio.run . Они скоро перестанут работать.
Деннис

^ Вместо этого используйте tio.run/nexus .
mbomb007


1

WolframAlpha, 18 байт, X = 1

Взломанный math_junkie!

(sum1to#of n^1)*2&

Иногда WolframAlpha действительно может отображать чистую функцию, подобную этой, в функциональной форме (иногда это путается); но он может быть весело вызван с заданным вводом - например, (sum1to#of n^1)*2&@5выходами 30.

S1 = A002378 (пронические числа)

S2 = A000537 (сумма первых nкубов)

Обе последовательности имеют индекс 0.




1

Javascript, 15704 байта, расстояние 2, A059841 и A000004 - взломан

Это решение очень длинное, поэтому вы можете найти полный код в этом github gist.

Исходный ответ (этот) 1 проиндексирован. (Я знаю, что это слишком долго, это просто для удовольствия.)


Трещины . Кроме того, добавление абсолютно бесполезного кода! + [] - (! + []) Не совсем соответствует духу правил
fəˈnɛtɪk

Просто чтобы вы знали, этот ответ вызывает некоторые проблемы для ОП этой задачи. По-видимому, это приводит к блокировке всей страницы, потому что это выглядит как схематичный JavaScript. Не могли бы вы поместить код во внешнюю ссылку? (Gist, pastedump и т. Д.)
DJMcMayhem

Вообще-то, я сам это сформулировал. Если вы предпочитаете иметь код где-то еще, не стесняйтесь редактировать его снова, если я перешагнул границы.
DJMcMayhem

Я предполагаю, что! + [] - (! + []) Делает это так, что вы не можете просто обратить конверсию. Но некоторые другие вещи просто делают это длиннее. Эквивалентный код составляет всего 15640 байт.
fəˈnɛtɪk


0

Javascript, 30 байтов, расстояние 4, A000290 , A000079 , - треснул !

f=x=>{return x?2*x-1+f(x-1):0}

Индексирование на основе 0

Решение @Kritixi Lithos фактически отличалось от моего

f=x=>{return x?f(x-1)+f(x-1):1}

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


1
Это x**2и нет2**x
Kritixi Lithos

Я думаю, что это A000290 , а не A000079.
betseg

@KritixiLithos это должно быть как. Я изменил неверную ссылку последовательности сверху, когда я изменил другой конец.
fəˈnɛtɪk


0

Javascript (ES6), расстояние 1, A000079 и A000004 - взломан

as=function(){ return 2*2**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

Исходный ответ (этот) - 0 на основе. Теперь, когда он был взломан, вот оригинальная функция B:

as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

1
Мне удалось заставить мой взломанный codegolf.stackexchange.com/a/109976/64505 вести себя непоследовательно между двумя различными средами.
fəˈnɛtɪk

0

Perl 6 , 7 байтов, X = 2, A059841A001477

Трещины!

+(*%%2)
  • S 1 = A059841 = 1 0 1 0 1 0 1 0...= "* Период 2: Повтор (1,0)". (0-индексированные)
  • S 2 = A001477 = 0 1 2 3 4 5 6 7...= "Неотрицательные целые числа". (0-индексированные)

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

(Подтверждено для работы с версией Perl 6, работающей на TIO.)


1
Я делаю это правильно? < codegolf.stackexchange.com/a/110001/60793 >
Джои Марианер

0

Java 7, расстояние Левенштейна 4, A094683 , A000290 , Трещины

int x{double r=1;for(int i=0;i<42;i++)r=r/2+n/r/2;int k=(int)((int)n*(float)n/Math.pow(n,(Math.sin(n)*Math.sin(n)+Math.cos(n)*Math.cos(n))/2));return n%4%2==(int)Math.log10(Math.E)/Math.log((double)'H'-'@')?(int)r:k;}

0 индексированные.
Попробуй это здесь!


@LliwTelracs сделал это для первых 15 неотрицательных целых чисел, смотрите мой обновленный ответ.
peech

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