Problema
Definiamo un set di Cantor generalizzato eliminando iterativamente alcuni segmenti di lunghezza razionale dalla metà di tutti gli intervalli che non sono stati ancora eliminati, a partire da un singolo intervallo continuo.
Date le lunghezze relative dei segmenti da eliminare o meno e il numero di iterazioni da fare, il problema è scrivere un programma o una funzione che generi le lunghezze relative dei segmenti che sono stati o non sono stati eliminati dopo le n
iterazioni.
Esempio: eliminare in modo iterativo il 4o e il 6o ottavo
Ingresso:
n
- numero di iterazioni, indicizzate a partire da 0 o 1
l
- elenco delle lunghezze di segmento come numeri interi positivi con gcd(l)=1
e lunghezza dispari, che rappresentano le lunghezze relative delle parti che rimangono così come sono o vengono eliminate, a partire da un segmento che non viene eliminato. Poiché la lunghezza dell'elenco è dispari, il primo e l'ultimo segmento non vengono mai eliminati. Ad esempio per il normale set di Cantor questo sarebbe [1,1,1] per un terzo che rimane, un terzo che viene eliminato e ancora un terzo che non lo fa.
Produzione:
Lista interi o
, gcd(o)=1
di lunghezze di segmento relativi nel n
esima iterazione quando i segmenti che non sono stati eliminati nell'iterazione precedente sono sostituiti da una copia in scala della lista l
. La prima iterazione è giusta [1]
. È possibile utilizzare qualsiasi metodo di output non ambiguo , anche unario.
Esempi
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]
Si può presumere che l'input sia valido. Questo è code-golf , quindi vince il programma più breve misurato in byte.
[0, 1, 2, 4, 6, 7]
invece di[3, 1, 1, 1, 2]
?