В поисках секретной последовательности обмена


19

Это задача , поток грабителей можно найти здесь .

Ваша задача - написать некоторый код, который выводит последовательность OEIS и содержит имя последовательности в коде ( A______) и выводит вторую отдельную последовательность, когда имя последовательности в коде изменяется на имя второй последовательности.

Вот пример в Haskell, который работает для A000217 и A000290 .

f x|last"A000217"=='0'=x^2|1>0=sum[1..x]

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

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

Ввод, вывод

Взято отсюда

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

Вы должны поддерживать все значения, указанные в файлах OEIS b для этой последовательности, любое число, отсутствующее в файлах b, не должно поддерживаться.

счет

Ваша оценка будет равна количеству байтов в вашем коде, а меньшее количество байтов будет лучше.


1
Ваша оценка будет равна количеству байтов в вашем коде, а меньшее количество байтов будет лучше. - Тогда почему это не помеченный код-гольф ?
Мистер Кскодер

@ Mr.Xcoder Я забыл. Не
Wheat Wizard

Таким образом, код должен выводить последовательность некоторой длины (определенной или нет?) Или n-й элемент последовательности?
Мертвый Опоссум

@DeadPossum n- й срок .
г-н Xcoder

@WheatWizard думаю, я искал где-то еще, но монитор. Мой плохой
Мертвый Опоссум

Ответы:



5

Python 3 , 62 байт, A017016 ( Cracked )

n=int(input())
print(sum(1for i in"A017016"if i>"0")*-~n//-~n)

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


Я пытался сделать это как можно более запутанным ...
Мистер Xcoder

1
@officialaimm Я сделал это специально. Я хочу сделать это запутанным. Я действительно не забочусь о гольфе, потому что Питон не выиграет конкурс обфускации кода-гольфа: p
Mr. Xcoder


Кстати, это было намеченное решение?
полностью человек

@totallyhuman Да, это было идеальное решение.
г-н Xcoder

4

Japt , 13 байт ( треснувший )

Существует (по крайней мере) еще одно решение, если кто-то еще хочет нанести удар.

p#A000012uCnG

Попробуй онлайн
A000012


объяснение

#затем символ в Japt дает нам код этого символа, к #A=65которому затем добавляется остальная часть числа, давая нам 65000012или 65000290.

uэто метод по модулю (он отличается от %того, что всегда будет возвращать положительное число). Метод вычитает число он применяется, из числа переданного ему. и являются константами Джапта для 11 и 15 соответственно. Итак, дает нам . У нас сейчас есть и . Метод повышает число он применяется к (в данном случае , то есть, неявно, входное целое число ) в степень числа переданного ему, что дает нам 2 окончательных формул и .

nCGCnG4

65000012%4=065000290%4=2pUU**0U**2



1
@officialaimm: Правильно, красиво сделано.
Лохматый

Так как я не знаю Джапта, я предполагал, что сила, которую нужно поднять, была (sum_of_numbers_in_oeis(excluding 'A') + 1)%4. : D
officialaimm

1
@officialaimm: Мне нравится видеть, как грабители взламывают вызовы на языках, которых они не знают :) Я действительно отправил это с надеждой, что это будет кто-то незнакомый с Джаптом, который взломает это.
Лохматый

A020338 также может работать, если разрешен ввод строки (индексируется 1).
Bubbler

4

MATL , 30 29 байт ( треснувший )

A077430I\2-|Gw^1Mwx*10&Ylk1+&

A077430

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

-1 байт благодаря @Sanchises


1
Должно быть исправлено сейчас
Cinaski

1
Просто подсказка: вы можете заменить `3` Iна 1 байт.
Санчиз

@ Рассылка Спасибо! Не знал I, инициализируется 3
Cinaski

2
Вы должны проверить Таблицу 3. Наряду с l(один) и O(ноль), вам почти никогда не придется использовать пробел в ваших программах MATL. В соответствующей заметке также ознакомьтесь с таблицей 7, в которой содержится много полезных предопределенных констант (хотя имейте в виду, что, например, у них 4X2Z%есть сокращение 1Z%)
Санчиз


3

C #, 28 байт ( треснувший )

n=>n*n*("A000290"[6]<49?1:n)

Работает с A000290 .

Легко начать.

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


Это еще не может быть
взломано

@ Mr.Xcoder Теперь можно :)
TheLethalCoder

1
Треснувший (хотя на самом деле не треснувший!)
Лохматый

@ Shaggy Я просто хотел, чтобы мяч
заработал

3

Python 2, 43 байт, A000079 ( Cracked )

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

lambda n:((sum(map(ord,'A000079'))*2)%8)**n


@TheLethalCoder Хорошо .. Это подходит, но это не тот, который я выбрал. Также я сделал правку перед вашим комментарием, и он больше не подходит
Dead Possum

5
Вы изменили это после публикации? Немного несправедливо.
TheLethalCoder

@TheLethalCoder Я сделал это, чтобы защитить от этой ложноположительной последовательности: C
Мертвый Опоссум

1
Я не знаю о редактировании записи, но из правил в ОП: « Если грабителю удастся определить, какая ваша последовательность (или другая последовательность, которая соответствует критериям), на которую вы отвечаете, взломана », то это просто FYI.
17

3

C #, 75 байтов, ( треснувший )

n=>{int r=1,e=3-0xA000244%2;for(;n>0;e*=e){r*=(n%2>0?e:1);n>>=1;}return r;}

A000244

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



@ Линн Что дало это? Первая последовательность?
TheLethalCoder

3
Вы берете номер OEIS % 2- так что программа может буквально делать только две вещи , в зависимости от результата этого: один для 0и один для 1. Таким образом, я поставил нечетное число на его место, и задача вроде как взломала себя.
Линн

@ Линн Ага, не думаю, что запутала эту часть.
TheLethalCoder

2

Python 2 , 53 байта, A000012 [взломан]

lambda x:len(`x**(sum(map(int,'A000012'[1:]))==22)`) 

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

Следующая последовательность - A055642 (длина цифр в десятичном числе). Для которого число оценивается само по себе, так как сумма цифр в OEIS равна 22; Таким образом, len (...) вычисляет фактическую длину введенного числа для «A055642». Для последовательностей A000012 (или любой другой, кроме A055642. Значение len всегда будет равно единице, поскольку оцененное число будет равно 1).



1

Python 3, 65 байт, A000027, взломан

a=lambda a,n=((int("A000027",11)-0x103519a)%100%30+1)/2:a//(14-n)

Уу сумасшедшая арифметика!


Гм, A004526, дает то, n=12что выглядит правильно, но результат будет отклоняться на один индекс - я взломал с ошибкой или упал на очень умную красную сельдь?
Джонатан Аллан

Ни; вы неверно истолковали A004526, в котором четко сказано a(n) = floor(n/2); перечисленная последовательность начинается с 0. Однако это и есть предполагаемое решение.
pppery

О, да, смещение - верно (вот так), спасибо! Хорошо треснуло тогда.
Джонатан Аллан

1

Smalltalk, 148 байт, безопасно!

|x o|x:=(16rA018253*0.00861-1445345)floor. o:=OrderedCollection new. 1 to:x/2 do:[:i|x\\i=0 ifTrue:[o add:i]].o add:x.^o at:stdin nextLine asInteger

A018253

Принимает целое число в качестве входных данных, последовательность основана на 1.

Предполагаемая вторая последовательность A133020 . В рецензии для A018253 есть ссылка на список записей для последовательностей, связанных с делителями чисел . В этом списке A133020 находится под делителями квадратов: 100² . Если вы хотите увидеть всю последовательность, вставьте Transcript show: o printString; cr.перед ^оператором return в коде.


1

Haskell, 226 байт, безопасно!

Не уверен, умный или уродливый, может быть, оба ...

o n=read.pure.(!!n)$"A001906"
m::Integral a=>[a->a->a]
m=[const,(+),(-),(*),div,(^)]++(flip<$>m)
l=o 1:o 3-o 1:zipWith(m!!(o 6+o 3-o 2))(tail l)l
f=(l!!).((m!!(o 4+o 5+o 6-2*o 1-o 2))$sum[1|n<-[1..6],odd(o n)]).((m!!o 6)$o 3)

Итак, теперь он вычисляет A001906 , но он должен быть в состоянии генерировать много последовательностей.

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


Решение: A131078

Хотите знать, было ли это слишком сложно или никто не пытался?

o 1чтобы o 6те цифры номера серии, mсписок операций. lявляется рекурсивно определенным бесконечным списком с первыми двумя значениями, полученными из номера серии, а остальные вычисляются из предыдущих двух с использованием фиксированной операции from m. В случае A001906 определение можно упростить до

l=0:1:zipWith(flip(+))(tail l)l

(flip(+))является (обычно) тем же самым (+), и мы получаем хорошо известное (но не самое короткое) определение чисел Фибоначчи. Эта схема рекурсии может напрямую вычислять A001906, но для этого требуется более сложная операция, чем в m. Другой пример: используя начальные значения 1и, 2и операция (*)дает серию A000301 . Он вычисляется нашим кодом, когда номер серии заменяется на ?103206.

Наконец, функция fиндексируется в списке l, но только после некоторого преобразования ввода. Для A001906 средняя часть уменьшается до (*)2, так что мы получаем только числа Фибоначчи на четных позициях. Правая часть становится flip const 1, которая является функцией идентичности и больше не мешает.

Для решения A131078, исходные значения lявляются 1и 0, и операция flip const, которая позволяет lбыть 1,0,1,0,.... Средняя часть fстановится (flip div 4), в результате 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,.... Это выглядело как хороший ответ, но затем я увидел, что начинается с A131078 n=1, поэтому я добавил правую часть f, которая здесь flip(-)1вычитает одну.

Моя идея состояла в том, чтобы сделать его немного запутанным, используя mи индексируя в нем цифры из номеров серии, затем он стал более запутанным (сложные термины), чтобы заставить его работать (возможно, я не долго искал альтернативы); и затем это стало еще более запутанным (правильная часть f), чтобы заставить это действительно работать. Тем не менее, я думаю, что некоторые догадки и попытки могли бы сломать это.


Я пробовал несколько последовательностей, и они обычно давали деление на ноль ошибок, ошибок отрицательных показателей или просто, казалось, работали вечно. Честно говоря, Хаскелл пугает меня , просто не может обернуть голову вокруг этого, я полагаю, провел слишком долго в процедурном.

Если вы просто пытаетесь, есть дополнительная проблема, что даже решение дает ошибку «отрицательный индекс» при получении 0. Это хорошо, потому что это только начинается в 1! Начиная с 1также следует удалить некоторые ошибки «деление на ноль». Я удивлен примерами, которые работают вечно. Может быть, преобразование индекса создает очень большие значения в этих случаях ...
Кристиан Сиверс


0

Python 3.6, 114 байт, взломан

from random import*
g=lambda n:eval(''.join(Random("A005843").choices('n8-9+17n#8*+26%n1 32-3+4-545*-#6*7',k=34)))

A005843

g(n) возвращает n-ое значение последовательности для n> = 0.

random.choices(s,k)является новым в Python 3.6, он возвращает kэлементы, выбранные из sс заменой.


Почувствуйте себя очень похоже на шифрование / хеширование.
pppery

@ppperry - если это противоречит правилам, я удалю его.
RootTwo


0

Чип , 67 байт, взломанный Иминь Ронг

2D5B#{*Cm49!}E-7
(A000012d#,zkmsh
b-\6/e2)[1Zv^~^S
33a#kcf3g88taz1@

A000012 . Немного дерзкий, да.

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

Использует байты для ввода / вывода, поэтому я был хорош и создал оболочку bashy / pythony.


Альтернативная последовательность A060843 . Попробуйте онлайн для входов 1..4.

Иминь Ронг сгорбился, такая короткая чип-программа может рассчитывать только очень простые вещи. Первоначальная последовательность является единственной, а альтернативная последовательность представляет собой номера занятых бобров, из которых известны только 4.

Эти числа 1, 6, 21, 107просто жестко запрограммированы для входов 1..4.

Интересной особенностью использования Chip для этой задачи является то, что цифры 0- 9это не числа, а логические элементы. В частности, 0- 7это восемь битов, адресованных головке стека, и 8и потенциальная раздача в том, что только -9 - переключатели чтения и записи. Это сделало это немного более интересным и запутанным.

ADпоявляются, означая, что у нас есть только 4 бита для индексации последовательности. Это означало, что может быть не более 16 различных значений. Фактически, только A- Cфактически используются для альтернативной последовательности, давая не более 8 различных значений.

Для тех, кто может быть заинтересован, вот тот же код без лишних элементов и неиспользуемых элементов:

,

   B  *C 49!
 A000012d ,z  s
b-\6/e   1Zv-~^S
`3a`-cf3g`8taz1

Просто чтобы исключить очевидное, вы не пытаетесь прокрасться в пустой последовательности, например, A290000 ? Технически, поскольку ваш код ничего не возвращает для ввода нуля, эта последовательность будет соответствовать!

Ха, в другой последовательности есть по крайней мере одно значение :) Кроме того, я должен сказать, что я разработал это для индексации 1, так как именно так индексируется OEIS.
Phlarx

(Не
Phlarx

Так что я сделал еще несколько исследований, и ничего не делать - это ошибка питона. Он не давал никакого вывода на ноль, поэтому мой код никогда не работал. Я исправил это в ссылке TIO сейчас. (Дал бит длиной пол 1 байта).
Phlarx

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