Проблема
Давайте визначимо узагальнений набір Cantor шляхом ітеративного видалення деяких раціональних відрізків довжини з середини всіх інтервалів, які ще не були видалені, починаючи з одного безперервного інтервалу.
Враховуючи відносну довжину сегментів, які потрібно видалити чи не, та кількість повторень, які потрібно виконати, проблема полягає в тому, щоб написати програму або функцію, яка виводить відносні довжини сегментів, які були або не були видалені після 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]
?