Жорстке кодування копів та розбійників (копів)


28

Це виклик . Нитка грабіжників тут .

Цікавим питанням, про який слід задуматися, є наступне:

Якщо у мене є послідовність чисел, скільки я маю надати, перш ніж стане зрозуміло, про яку послідовність я говорю?

Наприклад, якщо я хочу поговорити про натуральні цілі для того, щоб починати з , я можу сказати , але чи справді цього достатньо?11,2,3,

У мене є один спосіб відповісти на це запитання, і, як гольфіст з кодом, він передбачає код-гольф. Ви надали достатньо термінів послідовності, якщо найкоротший код, який створює ці терміни, створює всі умови послідовності. Якщо ми подумаємо про це з точки зору коду-гольфу, це означатиме, що ви надали достатньо тестових випадків, так що найкоротший код, який передає тестові випадки, виконує бажане завдання.

Виклик

Цей виклик є викликом для . У яких поліцейські представлятимуть тестові справи, а грабіжникам доведеться знайти коротший спосіб підробляти тестові справи, окрім призначеної послідовності. Копи представлять наступні речі:

  • Шматок коду, який приймає як вхідне невід'ємне ціле число і виробляє ціле число як вихід. Цей код визначатиме вашу послідовність. У вашому коді не потрібно підтримувати 0 як вхід, а замість цього приймати 1 як найменший вхід. Має бути зрозуміло, чи це так у вашій відповіді.

  • Будь-які відповідні вимоги до платформи чи мови, які можуть вплинути на вихід, наприклад, розмір longint.

  • Число , поряд із першими членами послідовності, обчисленими кодом. Вони будуть виконувати роль "тестових випадків".nnn

Вам пропонується пояснити, що робить ваша послідовність, і зв’язати OEIS, якщо він існує, однак саме ваш код визначає послідовність, а не опис.

Розбійники знайдуть програму на тій же мові, яка коротша за представлену, і передасть усі тестові випадки (видає той самий вихід для перших входів, як і код поліцейського). Код грабіжника також повинен відрізнятися за результатами програми копа на деяку кількість, що перевищує .nnn

Поліцейські повинні мати можливість зламати власні відповіді, перш ніж надсилати їх.

Через тиждень коп може виявити свою тріщину і позначити їх відповідь безпечним. Відповіді, позначені як такі, вже не можна зламати.

Оцінка балів

Відповіді поліцейських будуть оцінені за кількістю байтів, а менша кількість байтів краще. Зламані відповіді набирають нескінченний бал.


Зрозуміло, що існують способи зняти математичну проблему, як-от просто надрукувати всі тестові справи, але це питання залежить від наданих справ поліцейським. Чи повинно існувати правило про це? Чи існує обмеження щодо обчислюваності послідовностей чи чогось із теорії Рамзі? (тобто чи потрібно вміти тріснути на вашій машині?)
theREALyumdub

2
@theReallyumdub питання передбачає, що ви повинні мати можливість зламати власні подання.
Пшеничний майстер

@CatWizard Дякую, я пішов вперед, і це вже на очевидній мета-пошті, це перешкоджає деяким з цих хлопців, мабуть. Так що не в дусі тегу, щоб зробити тріщину потрібно більше години на обчислення чи щось таке
THE REALyumdub


Чи існує умова "хоча теоретично ваше рішення повинно працювати для всіх чисел, на практиці це потрібно лише для ..."?
користувач202729

Відповіді:


6

cQuents , 4 bytes ( Cracked )

"::$

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

Ось вісім ( n=8) випадків:

1 1
2 12
3 123
4 1234
5 12345
6 123456
7 1234567
8 12345678

Пояснення коду:

"      Stringify sequence (join on "", remove it and see what happens)
 ::    Given input n, output all items in the sequence up to and including n
   $   Each item in the sequence equals the index

Таким чином, послідовність є 1,2,3,4,5 ..., вона з'єднується, ""щоб вона стала 12345 ..., і ::означає, що вона друкує до вводу.



5

Python 3 , 66 57 байт ( тріщини )

зламаний xnor
також зламався Cat Wizard перед редагуванням

def f(n):x=n/10-2;return int(x*60-x**3*10+x**5/2-x**7/84)

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

Привіт! Ось послідовність, щоб зламати . Ці перші 40 елементів дає 0-індексацію, це не послідовність OEISn=40

[-54, -56, -58, -59, -59, -59, -59, -57, -55, -53, -50, -46, -43, -38, -33, -28, -23, -17, -11, -5, 0, 5, 11, 17, 23, 28, 33, 38, 43, 46, 50, 53, 55, 57, 59, 59, 59, 59, 58, 56]

Я забув видалити пробіли, я ще не є експертом у гольфіст: p Ви не заперечуєте, якщо я редагую це, щоб виправити це?
краш

Звичайно, вперед. Я зніму тріщину.
Пшеничний майстер


5

Python 2 , 44 байти ( тріщини )

f=lambda n,i=1,p=1:n and-~f(n-p%i,i+1,p*i*i)

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

Прості числа. Яка послідовність може бути чистішою? Або більше перестаралися ? Ваша мета полягає в тому, щоб зробити перші 50 простих чисел для n=1до n=50.

Код - генератор теореми Вілсона, скопійований саме з цієї підказки .

Різні значення для альтернативної послідовності не обумовлені машинними обмеженнями, такими як переливи та точність. Немає сторонніх бібліотек.


Тріщини на Arnauld, @PoonLevi, і г - н Xcoder.


Досить впевнений, що ви не хотіли зламатись цим ; можливо, вкажіть "Python (без сторонніх бібліотек)" або "Python (без імпорту)" або щось таке?
Джонатан Аллан

@JonathanAllan Дякую, я відредагував, що немає сторонніх бібліотек.
xnor

Я ще не зміг зламати це (моя найкраща спроба на даний момент становить 47 байт або близько того), але я думаю, що є щось цікаве, що слід зазначити про ці конкретні праймери. Для кожного , з , це справедливо: . У той же час, це не стосується будь-якого числа, яке не є простим (у діапазоні, зазначеному вище), але це робиться для більш високих значень. Я залишаю цю ідею тут, щоб інші могли спробувати свої сили на тріщину, використовуючи згадану техніку, і, можливо, отримали кращу оцінку :) i [ 1 , 50 ] N 2 p i2 ( mod  p i )pii[1,50]N2pi2(mod pi)
Містер Xcoder

@ Mr.Xcoder Ось моя найкраща спроба, заснована на запропонованому вами методі. Він успішно розходиться при N = 69, повертаючи 341 (перший псевдокрим Ферма до основи 2 або перший номер Пуле), але також не вдається для N = 1. Сумніваюсь, я можу це виправити самостійно, тому я подумав, що краще поділитися тим, що маю. (Мій найкращий виправлення - 46 байт ...)
Арнольд

1
@Arnauld Я знайшов 44-байтне рішення за допомогою цього методу. Я, здається, не можу йти далі. Можливо, хтось інший зможе це зрозуміти.
Poon Levi

4

Мова Вольфрама (Mathematica) , 39 34 байт (Безпечно)

Check[{1,9,7}[[#]],18+Boole[#>9]]&

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

Виглядає просто, рішення повинно бути важким.

1-індексований і . Ця послідовність відсутня в OEIS.n=99

{1, 9, 7, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19}

Цей вище список дорівнює:

Join[{1, 9, 7}, Table[18, 6], Table[19, 90]]

Ось шаблон для перевірки вашого рішення: Спробуйте його в Інтернеті!

Передбачувана тріщина

Привід тут полягає в тому, що вихід збільшується на 1, коли кількість цифр збільшується на 1, за винятком перших трьох доданків; призначене рішення має щось спільне з перетворенням рядків.

Отже, читаючи документацію про перетворення між виразами та рядками , можна було знайти функцію SpokenString.

Рішення - просто довжина розмовної версії виразу x^nдля різних входів:StringLength@SpokenString[x^#]&


3

Haskell , 29 байт (тріщинували: 1 , 2 )

a n=n*ceiling(realToFrac n/2)

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

Це A093005 : .a(n)=nn2

Тестові приклади для , тобто :0n20map a [0..20]

[0,1,2,6,8,15,18,28,32,45,50,66,72,91,98,120,128,153,162,190,200]

Передбачуване рішення (20 байт)

b n=sum$n<$show(3^n)

Спробуйте в Інтернеті! Відрізняється при , і .a ( 23 ) = 276 b ( 23 ) = 253n=23a(23)=276b(23)=253

Ця функція еквівалентна . Завдяки стелі обидві функції перекриваються цілими аргументами в діапазоні від до :0 22b(n)=n len(3n)=nlog10(1+3n)022

джерело



@Laikoni, якщо передбачувана тріщина буде коротшою, тоді хтось інший може потенційно вимагати грабіжника від BMO.
fəˈnɛtɪk

@ fəˈnɛtɪk Спасибі, я не знав цього правила.
Лайконі


2
@BMO Там ви йдете :)
Laikoni

2

JavaScript (ES6), 12 байт ( зломлений )

Цей досить легкий.

n=>n*(8*n+1)

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

Це A139275 :

a(n)=n(8n+1)

Ваш код повинен підтримувати :0n<9

0,9,34,75,132,205,294,399,520

І згідно з правилами виклику, він повинен розходитися за межі.


n=>8*n*n+nЧи відрізняється n=94906273це, чи справді це тріщина?
ngn

@ngn Для мене це виглядає дійсно згідно з правилами виклику, але, можливо, ви повинні запитати ОП, чи втрата точності вважається дійсною розбіжністю? Однак призначена тріщина відрізняється для n=9.
Арнольд

@CatWizard ^
ngn

Я б сказав, що це дійсна тріщина.
Пшеничний майстер

2
тріснув ( |замість +)
ngn


2

> <> , 276 байт ( тріщини )

1$1-:?!v$:      1[0$          >:?!va2[$:{:@%:{$-{,]v
       >$n; v              <  ^   >~{]02.1+1+ffr+1r<
 :}[r]{  [01>:{*@@+$a*l2=?!^~]+ff+9+1g"3"=?v"3"ff+9+1pf0.
 :}[l01-$>    $:0(?v$@$:@@:@)?v@@1-$}v     >"2"ff+9+1p00.
>.       ^-1l v!?} <  .4a}$@@$<   .4a<
^26{]r0[}:{]~{<

Спробуйте в Інтернеті! Зателефонуйте цьому, -v nщоб отримати n-й елемент (1-індексований)

1$1-:?!;$::n84*o1[0$          >:?!va2[$:{:@%:{$-{,]v
            v              <  ^   >~{]02.1+1+ffr+1r<
 :}[r]{  [01>:{*@@+$a*l2=?!^~]+ff+9+1g"3"=?v"3"ff+9+1pf0.
 :}[l01-$>    $:0(?v$@$:@@:@)?v@@1-$}v     >"2"ff+9+1p00.
>.       ^-1l v!?} <  .4a}$@@$<   .4a<
^26{]r0[}:{]~{<

Спробуйте в Інтернеті! Телефонуйте з, -v nщоб отримати список n-1 елементів, починаючи з 1

Інтернет-перекладач риб

Довгий і складний, це OEIS A004000 .

Нехай a (n) = k, утворює m, перевернувши цифри k, додайте m до k, а потім сортуйте цифри суми у порядку збільшення, щоб отримати (n + 1).

Приклад: 668 -> 668 + 866 = 1534 -> 1345.

n=34

1 2 4 8 16 77 145 668 1345 6677 13444 55778 133345 666677 1333444 5567777 12333445 66666677 133333444 556667777 1233334444 5566667777 12333334444 55666667777 123333334444 556666667777 1233333334444 5566666667777 12333333334444 55666666667777 123333333334444 556666666667777 1233333333334444 5566666666667777

Як запускати програму, щоб отримати єдиний висновок для заданої задачі n(як цього вимагає запитання)?
Джонатан Аллан

Оскільки в рибі насправді немає "функцій", я додав версію, яку ви можете викликати, щоб отримати n-ту (яка по суті однакова, тому що вона повинна обчислити n-1 попередніх елементів)
краш

Що ще важливіше, чи є у вас тріщина, яка відповідає тій же вхідній індексації, яка дає єдиний вихід?
Джонатан Аллан

1
1<=n<=34n>34


2

Желе , 6 байт , безпечно!

<4+ạ2ȯ

Це визначає нульову індексовану послідовність, де:

a(n)={1n<32n=3n2n>3

a(0)a(15)1,1,1,2,2,3,4,5,6,7,8,9,10,11,12,13

Спробуйте в Інтернеті! ( тут є однозначна версія)

Наразі цього немає в OEIS (хоча A34138 буде працювати як тріщина, якщо досить короткий)

Передбачувана тріщина

16n
17th1070045392852801514=a(16)

!ÆsDL


1

JavaScript, 26 байт ( зломлений )

let f=x=>x>1?f(x-1)*f(x-2)+1:1

for (x of [0,1,2,3,4,5,6,7]) {
  console.log(x + ' -> ' + f(x))
}

OEIS A007660

Вихід - перші 6 елементів з 0 індексуванням (1,1,2,3,7,22)

(дещо зміщений від того, що OEIS вказав як)

Просто створення простої для вирішення відповіді, щоб розпочати справи

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



Вихід фрагмента вашого прикладу починається з 1, а не з 0?
Paŭlo Ebermann

@ PaŭloEbermann Виправлено це
fəˈnɛtɪk



1

Лушпиння , 5 байт ( тріснув від Jonathan Allan )

16

←d+16

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

0n<23

1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3

Пояснення

←d+16  -- example input:  23
  +16  -- add 16:         39
 d     -- digits:         [3,9]
←      -- extract first:  3

Рішення

LdΣ



1

JavaScript, 25 байт ( злам 21 байт)

f=
x=>[7,11,12,13,13][x]||14

for(i=0;i<15;i++)
  console.log(i+"->"+f(i))

Послідовність 7,11,12,13,13 з подальшим нескінченним 14s.

Розраховане рішення 22 байти:

x = Math.atan (x + 1) * 10 | 0

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



0

JavaScript, 22 байти ( тріщини )

f=
x=>(3-(5/63)**.5)**x|1

for(y=0;y<16;y++)
  console.log(y +"->"+f(y))

Це 0 проіндексовано, і точність потрібна до введення 15. Його не можна знайти на OEIS

Моє рішення 20 байт

x => 163 ** (32 * x / 163) | 1

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



0

> <> , 42 байти, тріщини

i3%0v
642 .
840
789
159
a 1
v<<
n
l
?
\/
;

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

Послідовність тріщин (0-індексовано): 101786, 5844, 19902(не на OEIS).

Передбачуване рішення , для довідки.



Зазвичай грабіжникам слід жорстко кодувати вихід
Джо Кінг,

@JoKing Ваш тріщик, схоже, не дає жодних значень, відмінних від моїх (або, можливо, я не перевірив його досить ретельно, щоб знайти, які значення відрізняються), але це, ймовірно, легко піддається виправленню. Хоча в правилах, що забороняють жорстке кодування, схоже, немає нічого, я погоджуюся, що це може не відповідати духу виклику - у будь-якому випадку ви продемонстрували, що жорстке кодування (для поліцейського) має власні ризики.
Айдан Ф. Пірс

1
Я оновив свою відповідь, щоб створити інше значення для4
Джо Кінг,

0

Perl 6 , 53 байти

{(1,2,2,{$!=++$;prepend(@,2-$!%2 xx$_).pop}...*)[$_]}

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

Анонімний блок-код, який повертає 0-індексовану послідовність Колакоскі ( OEIS A000002 ). Потрібні рішення для відповідності першим 130 елементам, так що для деяких n > 129він відрізняється від послідовності Колакоскі.


0

Паскаль (FPC) , 86 байт ( тріщинами )

var n:word;begin read(n);write(n div 2+n div 4+n div 8+n div 16+n div 32+n div 64)end.

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

n=120

0   0   1   1   3   3   4   4   7   7   8   8  10  10  11  11  15  15  16  16  18  18  19  19  22  22  23  23  25  25  26  26  31  31  32  32  34  34  35  35  38  38  39  39  41  41  42  42  46  46  47  47  49  49  50  50  53  53  54  54  56  56  57  57  63  63  64  64  66  66  67  67  70  70  71  71  73  73  74  74  78  78  79  79  81  81  82  82  85  85  86  86  88  88  89  89  94  94  95  95  97  97  98  98 101 101 102 102 104 104 105 105 109 109 110 110 112 112 113 113 116


Моє оригінальне рішення було

var n,i,s:word;begin read(n);i:=2;repeat s:=s+n div i;i:=i*2until i>n;write(s)end.

але r_64 зробив це ще краще !


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