Допустим, подстрока - это любое непрерывное сечение исходной строки. Например 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 проиндексировано).