проблема
Давайте определим обобщенный набор Кантора путем итеративного удаления некоторых сегментов рациональной длины из середины всех интервалов, которые еще не были удалены, начиная с одного непрерывного интервала.
Учитывая относительную длину сегментов, которые нужно удалить или нет, и количество итераций, которые нужно сделать, проблема состоит в том, чтобы написать программу или функцию, которая выводит относительную длину сегментов, которые были или не были удалены после n
итераций.
Пример: итеративно удалить 4-е и 6-е восьмое
Входные данные:
n
- число итераций, индексируется начиная с 0 или 1
l
- список длин сегментов в виде положительных целых чисел с gcd(l)=1
нечетной длиной, представляющих относительную длину частей, которые либо остаются такими, какие они есть, либо удаляются, начиная с сегмента, который не удаляется. Поскольку длина списка нечетная, первый и последний сегменты никогда не удаляются. Например, для обычного набора Кантора это будет [1,1,1] для одной трети, которая остается, одна треть, которая удаляется, и снова одна треть, которая не удаляется.
Выход:
Целочисленный список o
, gcd(o)=1
относительной длины сегментов в n
итерации, когда сегменты, которые не были удалены в предыдущей итерации, заменены уменьшенной копией списка l
. Первая итерация просто [1]
. Вы можете использовать любой однозначный метод вывода , даже унарный.
Примеры
n=0, l=[3,1,1,1,2] → [1]
n=1, l=[3,1,1,1,2] → [3, 1, 1, 1, 2]
n=2, l=[3,1,1,1,2] → [9,3,3,3,6,8,3,1,1,1,2,8,6,2,2,2,4]
n=3, l=[5,2,3] → [125,50,75,100,75,30,45,200,75,30,45,60,45,18,27]
n=3, l=[1,1,1] → [1,1,1,3,1,1,1,9,1,1,1,3,1,1,1]
Вы можете предположить, что ввод действителен. Это код-гольф , поэтому выигрывает самая короткая программа, измеряемая в байтах.
[0, 1, 2, 4, 6, 7]
вместо[3, 1, 1, 1, 2]
?