Problema
Vamos definir um conjunto de Cantores generalizados excluindo iterativamente alguns segmentos racionais de comprimento do meio de todos os intervalos que ainda não foram excluídos, iniciando em um único intervalo contínuo.
Dados os comprimentos relativos dos segmentos a serem excluídos ou não e o número de iterações a serem executadas, o problema é escrever um programa ou função que produza os comprimentos relativos dos segmentos que foram ou não foram excluídos após as n
iterações.
Exemplo: excluir iterativamente o quarto e o sexto oitavo
Entrada:
n
- número de iterações, indexadas a partir de 0 ou 1
l
- lista de comprimentos de segmentos como números inteiros positivos com gcd(l)=1
e com comprimento ímpar, representando os comprimentos relativos das partes que permanecem como são ou são excluídas, iniciando em um segmento que não é excluído. Como o tamanho da lista é ímpar, o primeiro e o último segmento nunca são excluídos. Por exemplo, para o conjunto regular do Cantor, isso seria [1,1,1] para um terço que permanece, um terço que é excluído e novamente um terço que não.
Resultado:
Lista inteiro o
, gcd(o)=1
, de comprimentos de segmento em relação a n
th iteração quando os segmentos que não foram eliminados na iteração anterior, é substituída por uma cópia reduzida da lista l
. A primeira iteração é justa [1]
. Você pode usar qualquer método de saída inequívoco , mesmo que unário.
Exemplos
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]
Você pode assumir que a entrada é válida. Isso é código-golfe , então o programa mais curto medido em bytes vence.
[0, 1, 2, 4, 6, 7]
vez de[3, 1, 1, 1, 2]
?