Это задача полицейских и грабителей . Нить ментов на этот вызов здесь
Интересный вопрос для размышления:
Если у меня есть последовательность чисел, сколько из них я должен предоставить, прежде чем станет ясно, о какой последовательности я говорю?
Например, если я хочу поговорить о натуральных числах по порядку, начиная с , я могу сказать 1 , 2 , 3 , … , но достаточно ли этого?
У меня есть один способ ответить на этот вопрос, и я играю в код-гольф. Он включает в себя код-гольф. Вы предоставили достаточно терминов последовательности, если самый короткий код, который создает эти термины, создает все термины последовательности. Если мы подумаем об этом с точки зрения кода-гольфа, это будет означать, что вы предоставили достаточно тестовых примеров, чтобы самый короткий код, который проходит тестовые задачи, выполнял желаемую задачу.
Вызов
Эта задача - проблема полицейских и грабителей . В котором полицейские будут представлять контрольные примеры, а грабителям придется искать более короткий способ подделки контрольных примеров, помимо предполагаемой последовательности. Копы представят следующие вещи:
Кусок кода, который принимает положительное целое число в качестве входных данных и производит целое число в качестве выходных данных. Этот код может быть либо нулевым, либо индексированным, но должно быть понятно, что такое индексирование. Этот код будет определять вашу последовательность.
Любые соответствующие требования платформы или языка, которые могут повлиять на вывод, например размер longint.
Число вместе с первыми n членами последовательности, рассчитанной по коду. Они будут действовать как «контрольные примеры».
Грабители будут находить программу на том же языке, которая короче представленной и проходит все тестовые случаи (выдает тот же вывод для первых входов, что и код полицейского). Код грабителя должен также отличаться в выходных данных от программы полицейского для некоторого числа, большего чем n .
счет
Грабители будут оценены по количеству трещин, которые они найдут, и чем больше трещин будет лучше. Ответ может быть снова взломан путем нахождения правильного ответа короче исходного взлома. Если ответ взломан во второй раз, точка дается второму взломщику, а не первому.
источник
Ответы:
cQuents , ответ Стивена , 3 байта
Попробуйте онлайн!
Как это устроено
Похоже , последовательности должны быть одинаковыми, но это дает
12345678910
для вn = 10
то время как"::$
дает1234567891
.источник
JavaScript, ответ fəˈnɛtɪk (17 байт)
undefined
||
22
тестирование
Или попробуйте онлайн!
источник
Хаскель , ответ Лайкони , 15 байт
Попробуйте онлайн!
Обычно я отмечал что-то подобное в комментарии, но потом я подумал, что полицейские и грабители немного более опасны.
Это всего лишь ответ BMO за исключением особого случая
b 42
. Поскольку оригинал Лайкони проходит через число с плавающей запятой, в этом нет необходимости: просто найдите число, достаточно большое, чтобы в нем были ошибки округления, но не в точнойInteger
арифметике. Например:источник
Python 2 , ответ xnor , 43 байта
Попробуйте онлайн!
кредиты
Большая заслуга этого взлома должна достаться @ Mr.Xcoder, который первым опубликовал комментарий о возможной атаке с использованием этого метода, и @PoonLevi, который нашел 44-байтовое решение.
Как?
теория
Что приводит к:
Реализация
<2
==1
Попробуйте онлайн!
Попробуйте онлайн!
Последний трюк должен использовать
n<1or
вместоn and
. Это так же долго, но последняя итерация возвращает True вместо 0 , что добавляет недостающее смещение к каждому члену.источник
Python 3 , crashoz , 45 байт
Попробуйте онлайн!
x*60-x**3*10+x**5/2-x**7/84
источник
JavaScript (ES6), ответ Арно (10 байт)
Попробуйте онлайн!
источник
Хаскель , ответ Лайкони ,
2622 байта-4 байта, не используя инфикс
div
, благодаря Laikoni !Попробуйте онлайн!
объяснение
ceiling(realToFrac n/2)
div(n+1)2
источник
((n+1)`div`2)
->div(n+1)2
.> <> , ответ крашоза 203 байта
Попробуйте онлайн!
Я собирался сделать что-то умное с тем фактом, что нечетные / четные числа выше
n=20
были одинаковыми, за исключением повторяющегося элемента в центре, но было проще просто жестко кодировать каждый элемент.Ввод осуществляется через
-v
флаг. Ничего не печатает для элементов выше 34.источник
Паскаль (FPC) , ответ AlexRacer , 80 байт
Попробуйте онлайн!
Это кажется запоздалым ответом, но в любом случае спасибо @AlexRacer за хорошую головоломку!
источник
JavaScript, ответ fəˈnɛtɪk (12 байт)
тестирование
Или попробуйте онлайн!
источник
JavaScript, ответ fəˈnɛtɪk (17 байт)
x=>Math.exp(x)|1
тестирование
Или попробуйте онлайн!
источник
Шелуха , взламывая 5 байтов BMO с
32 байтами-1 благодаря BMO (
LdΣ
->,LΣ
так как, когда даноTnum
,L
выполняет "длину представления строки")Попробуйте онлайн!
LΣ
←d+16
источник
L
иLd
эквивалентно сэкономить вам байт;)L
переопределяется как "длина представления строки"Tnum
.> <> , Ответ Эйдена Ф. Пирса , 36 байт
Попробуйте онлайн!
Еще одно решение, в котором каждое значение жестко закодировано в строке. Поскольку первоначальный ответ также был в основном жестко запрограммирован, я не чувствую себя слишком виноватым по этому поводу.
источник
JavaScript, ответ fəˈnɛtɪk , 23 байта
Попробуйте онлайн!
Как?
Выражение
`${73211e9}`
расширяется до строки"73211000000000"
, предоставляя таблицу поиска из 14 значений, которые вычитаются из 14, что дает ожидаемую последовательность.21 байт
NaN
Попробуйте онлайн!
источник