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


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- символ змінюється на A (з Y <= 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, A000124 → A000142 , 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, A000012 → A001477

Тріснув!

*[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, A161680 → A000217

Сейф!

{[+] [,] ^$_}
  • 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, A059841 → A001477

Тріснув!

+(*%%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.