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