Скажімо, підрядка - це будь-який безперервний розділ початкового рядка. Наприклад cat
, це підрядок concatenate
. Ми скажемо, що правильна підрядка - це підряд, який не дорівнює початковому рядку. Наприклад concatenate
, це підрядок, concatenate
але не належна підрядка. (в рядках для одного символу немає належних підрядків)
Тепер ми визначимо послідовність, використовуючи ці терміни. П - й член цієї послідовності буде найменше число таке , що існує правильна подстрока його двійкове подання , яке не є підрядок будь-який більш ранній термін у послідовності. Перший термін - 10
.
Як вправа дозволяє генерувати перші 5 термінів. Я буду працювати в двійковому, щоб полегшити справи.
Перший термін - 10
. Оскільки 11
наступне найменше число має лише одну належну підрядку, 1
яка також є підрядкою 10
, 11
не є в послідовності. 100
однак містить правильну підрядку, 00
яка не є підрядкою, 10
так 100
це наш наступний термін. Далі, 101
що містить унікальну належну підрядку, 01
додаючи її до послідовності, потім 110
містить належну підрядку, 11
яка є новою, додаючи її до послідовності.
Зараз у нас є
10, 100, 101, 110
111
є наступним , але він містить тільки подстроку 1
і 11
робимо його не термін. 1000
однак містить 000
додавання його до послідовності.
Ось перші пари термінів у десятковій частині
2, 4, 5, 6, 8, 9, 10, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50, 54, 56, 58
Завдання
Або
Візьміть n як вхідний і генеруйте n- й доданок у цій послідовності (або 0, або 1 індексується)
Постійно виводите умови послідовності
Це кодові відповіді на гольф, які набираються у байтах, а менше байтів - краще.
n
)?
a(36)
становить 47 (1 індексований).