Зміна коду, зміна послідовності: Копи


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 днів. Якщо ваша відповідь зламається, вкажіть це у заголовку своєї відповіді разом із посиланням на відповідну відповідь грабіжника.

Менти виграти, маючи уявлення з без тріщин найкоротших А . Якщо зв'язати, то найменший Х буде використовуватися як краватка. Якщо все-таки зв'язали, рання подача виграє.

Подальші правила

  • Ви не повинні використовувати будь-які вбудовані модулі для хешування, шифрування чи генерації випадкових чисел (навіть якщо ви поставите генератор випадкових чисел у фіксовану величину).
  • Будь-які програми або функції дозволені, але код не повинен бути фрагментом, і ви не повинні приймати середовище REPL.
  • Ви можете взяти введення та дати вихід у будь-якому зручному форматі . Методи введення / виведення повинні бути однаковими для обох послідовностей.
  • Остаточним калькулятором відстані Левенштейна для цього завдання є цей на Planet Calc.
  • Окрім CnR, це тому застосовуються всі звичайні правила гольфу.

Також переконайтесь, що ви щось змінили в цьому питанні, щоб оновити розбійників.
mbomb007

Що робити, якщо поліцейський називає функцію / змінну дійсно великою щодо фактичного коду, що генерує послідовність? У цьому випадку можна буде створити будь-яку послідовність, якщо відстань у леві буде меншою, ніж(0.5*len(A))
hashcode55

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

1
" це код-гольф, тому застосовуються всі звичайні правила гольфу " Чи означає це, що код A повинен бути максимально гольф, чи його можна навмисно записати занадто багатослівним / незграбним способом, щоб зробити його більш схожим на код B ?
смс

Відповіді:


10

Brain-Flak , 28 байт, Відстань від 4, A002817 , A090809 Cracked

У цій відповіді використовується 1-індексація

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

Спробуйте в Інтернеті

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


Мабуть, це буде коротше і швидше читати, якщо у вас X = 4замість цього Levenshtein distance of 4.
mbomb007

1
@ mbomb007 Я особисто трохи заплутався, коли виклики використовують купу змінних літер для вирішення того, що я намагався уникнути плутанини. Зараз я скоротив її, сподіваюся, не викликаючи сум'яття.
Пшеничний майстер

знизати плечима . Якщо всі читають питання, вони повинні його отримати. Xнасправді єдина змінна, яку вони повинні знати.
mbomb007

@ mbomb007 Хоча, питання також запитує кількість байтів.
DLosc


6

7 , 33 символи, 13 байт, X = 10, A000124A000142 , Safe

171720514057071616777023671335133

Спробуйте в Інтернеті!

Відстань Левенштейна вимірюється у вигляді символів, тому я написав програму на основі символів, які вона містить вище (і спробуйте її в Інтернеті!, Включаючи саму мову, із задоволенням запускає програми, закодовані в ASCII). Однак програма зберігається на диску, використовуючи підбайтове кодування 7, тобто, сама програма є насправді наступним шістнадцятковим записом (таким чином, 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 ...= Трикутні числа.
  • Нульова індексація.

Спробуйте в Інтернеті!

(Підтверджено для роботи з версією 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.

І так, но-оп "Скорочення за допомогою оператора комами" в оригіналі ніби перекручує правила коду-гольфу, але я вважаю за краще дурний алгоритм, який максимально гольфується (пробіл тощо) для що це... :)


Це благання бути жорстоким, якщо я мав час або схильність (і знання перл).
Rohan Jhunjhunwala

Це збереглося досить довго, щоб бути відзначеним як безпечне
fəˈnɛtɪk


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

Вольфрам Альфа, 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.

Оригінальна відповідь (ця) - 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 Рішення Літоса насправді відрізнялось від мого

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 >
Joey Marianer

0

Java 7, Левенштейна 4, A094683 , A000290 , Cracked

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 негативних чисел, дивіться мою оновлену відповідь.
піч

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.