Определение
Из описания на OEIS A006345 :
Чтобы найти
a(n)
, рассмотрите или a1
или a2
. Для каждого найдите самый длинный повторяющийся суффикс, то есть для каждого из нихa(n)=1,2
найдите самую длинную последовательностьs
со свойством, которымa(1),...,a(n)
заканчивается последовательностьss
. Используйте цифру, которая приводит к сокращению такого суффикса.a(1) = 1
,
Отработанный пример
a(1)=1
,
Если a(2)=1
, у нас будет последовательность, в 1 1
которой самая длинная удвоенная подстрока с конца 1
. Если a(2)=2
вместо этого, то это будет пустая подстрока. Поэтому a(2)=2
.
Когда n=6
мы выбираем между 1 2 1 1 2 1
и 1 2 1 1 2 2
. При первом выборе 1 2 1
удваивается последовательно от конца. Во втором варианте, это 2
вместо. Поэтому a(6)=2
.
Когда n=9
мы выбираем между 1 2 1 1 2 2 1 2 1
и 1 2 1 1 2 2 1 2 2
. В первом выборе самая длинная удвоенная последовательная подстрока - это 2 1
, в то время как во втором выборе 1 2 2
удваивается последовательно в конце. Поэтому a(9)=1
.
задача
Дано n
, вернись a(n)
.
Спекуляции
n
будет позитивным.- Вы можете использовать 0-indexed вместо 1-indexed. В таком случае, пожалуйста, укажите это в своем ответе. Кроме того, в этом случае,
n
может быть0
также.
Testcases
Тестовые случаи 1-индексированы. Однако вы можете использовать 0-indexed.
n a(n)
1 1
2 2
3 1
4 1
5 2
6 2
7 1
8 2
9 1
10 1
11 2
12 1
13 2
14 2
15 1
16 1
17 2
18 1
19 1
20 1
Ссылки
- WolframMathWorld
- Обязательный OEIS A006345
источник
n=9
первый выбор1 2 1 1 2 2 1 2 1
имеет удвоенную подстроку2 1
в конце.Ответы:
Haskell,
146140137133118 байтисточник
(\x->(\s->...
? В противном случае вы могли бы написать(\x s->...
.div ...
, вы можете использовать более короткуюn
. Все дополнительные сравнения вернут false и не изменят результат.Python, 137 байт
Это решение использует индексирование на основе 0.
источник
Желе ,
25242220 байт2 байта благодаря Денису.
Попробуйте онлайн!
Порт моего ответа в Pyth .
источник
Mathematica, 84 байта
источник
Желе ,
3029282724 байтаПопробуйте онлайн! или проверьте все контрольные примеры .
источник
MATL , 34 байта
Попробуйте онлайн! или проверьте все контрольные примеры .
объяснение
источник
Python 2, 94 байта
Использует индексирование на основе 0. Проверьте это на Ideone .
источник
Pyth , 26 байт
Тестирование.
объяснение
Когда
n = 6
мы выбираем между1 2 1 1 2 1
и1 2 1 1 2 2
.Мы генерируем эти две возможности, а затем смотрим на их суффиксы.
Для первого, суффиксы являются:
1
,2 1
,1 2 1
,1 1 2 1
,2 1 1 2 1
,1 2 1 1 2 1
.Мы фильтруем удвоенные суффиксы, проверяя, совпадают ли они после поворота их на их длину, деленную на 2 (оказывается, что эта проверка не идеальна, потому что она подтверждает
1
и2
также).Мы берем последний удвоенный суффикс, а затем берем его длину.
Затем мы выбираем возможность, которая соответствует минимальной длине, сгенерированной выше.
Затем мы переходим к следующему значению
n
.Для целей этой программы было лучше создать вместо этого обратный массив.
источник
Пиф,
4629 байтПолучил вдохновение от превосходного ответа Pyth от @Leaky Nun. Попытался выяснить, есть ли более короткий путь с использованием строк. Еще 3 байта короче!
Вы можете попробовать это здесь .
источник
u
ce вместо явного цикла for экономит 4 байтаСетчатка ,
5142 байта9 байтов благодаря Мартину Эндеру.
Попробуйте онлайн!
Порт этого ответа .
источник
Perl, 40 байт
Код имеет длину 39 байт и требует
-p
переключения ( +1 байт).Цикл вдохновлен решением Perl на соответствующей странице OEIS , хотя я и сам придумал регулярное выражение.
Проверьте это на Ideone .
источник
JavaScript (ES6), 84
Индекс базы 0
Меньше гольфа
Тестовое задание
источник