Фон
Последовательность Давенпорта-Шинцеля имеет два целых положительных параметра d
и n
. Обозначим множество всех последовательностей Давенпорта-Шинцеля для заданных параметров через DS(d,n)
.
Рассмотрим все последовательности натуральных чисел 1
до n
, включительно, которые удовлетворяют:
- Нет двух последовательных чисел в последовательности.
- Нет подпоследовательности (не обязательно последовательной) длины больше чем
d
, которая чередуется между двумя различными числами.
Пусть L
обозначают максимальную длину такой последовательности ( с учетом d
и n
). Тогда DS(d,n)
это множество всех таких последовательностей с длиной L
.
Некоторые примеры могут помочь. Пусть d = 4
, n = 3
. Самые длинные возможные последовательности с этими ограничениями имеют L = 8
. Таким образом, следующее является членом DS(4,3)
:
[1, 2, 1, 3, 1, 3, 2, 3]
Нет последовательных идентичных чисел и есть чередующиеся подпоследовательности длины 4
, но не более длинные:
1 2 1 2
1 2 1 2
1 3 1 3
1 3 1 3
2 3 2 3
2 3 2 3
1 3 1 3
1 3 1 3
Следующие примеры не в DS(4,3)
:
[1, 2, 2, 3, 1, 3, 2, 3] # Two consecutive 2's.
[1, 2, 1, 3, 1, 3, 2, 1] # Contains alternating subsequences of length 5.
[1, 2, 1, 3, 1, 3, 2] # Longer valid sequences for d = 4, n = 3 exist.
Для получения дополнительной информации см. MathWorld и OEIS и список литературы, который они перечисляют.
Соревнование
Даны два натуральных числа, n
и d
сгенерировать любую последовательность Давенпорта-Шинзеля в DS(d,n)
. Обратите внимание, что они, как правило, не уникальны, поэтому выведите любой допустимый результат.
Вы можете написать программу или функцию, принимая ввод через STDIN (или ближайшую альтернативу), аргумент командной строки или аргумент функции, и возвращая результат из функции или печатая его в STDOUT (или ближайшую альтернативу).
Вы можете использовать любую удобную, однозначную строку или формат списка для вывода.
Это код гольф, поэтому выигрывает самое короткое представление (в байтах).
Длина последовательности
Поскольку последовательности не являются уникальными, в этой задаче нет особого применения для отдельных примеров. Тем не менее, две общие проблемы достоверности довольно легко проверить для любого вывода, поэтому основной вопрос заключается в том, имеет ли последовательность правильную длину (или есть более длинная действительная последовательность). Таким образом, вот список известных 1 L
для данного d
и n
:
\
d\n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
\-----------------------------------------------------------
1 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
3 | 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
4 | 1 4 8 12 17 22 27 32 37 42 47 53 58 64 69 75 81 86 92 98
5 | 1 5 10 16 22 29 ...
6 | 1 6 14 23 34 ...
7 | 1 7 16 28 41 ...
8 | 1 8 20 35 53 ...
9 | 1 9 22 40 61 ...
10 | 1 10 26 47 73 ...
Вы не должны жестко закодировать любую информацию из этой таблицы в свое представление.
1 Эта таблица с 1994 года, так что , возможно, более значительным прогресс с тех пор, но я сомневаюсь , что любое представление будет иметь возможность обрабатывать даже большие записи в этой таблице в разумном количестве времени.
источник