Скажімо, підрядка - це будь-який безперервний розділ початкового рядка. Наприклад 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 індексований).