Problème
Définissons un ensemble de Cantor généralisé en supprimant de manière itérative certains segments de longueur rationnelle du milieu de tous les intervalles qui n'ont pas encore été supprimés, à partir d'un seul intervalle continu.
Compte tenu des longueurs relatives des segments à supprimer ou non, et du nombre d'itérations à effectuer, le problème est d'écrire un programme ou une fonction qui génère les longueurs relatives des segments qui ont ou non été supprimés après les n
itérations.
Exemple: supprimer de manière itérative les 4e et 6e huitième
Contribution:
n
- nombre d'itérations, indexées à partir de 0 ou 1
l
- liste des longueurs de segments sous forme d'entiers positifs avec gcd(l)=1
et longueur impaire, représentant les longueurs relatives des parties qui restent telles quelles ou sont supprimées, en commençant par un segment qui n'est pas supprimé. Étant donné que la longueur de la liste est impaire, les premier et dernier segments ne sont jamais supprimés. Par exemple, pour l'ensemble Cantor normal, ce serait [1,1,1] pour un tiers qui reste, un tiers qui est supprimé et encore un tiers qui ne le reste pas.
Production:
Liste entier o
, gcd(o)=1
, de longueurs de segment par rapport à la n
ième itération lorsque les segments qui ne sont pas supprimés dans l'itération précédente , sont remplacés par une copie réduite de la liste l
. La première itération est juste [1]
. Vous pouvez utiliser n'importe quelle méthode de sortie sans ambiguïté , même unaire.
Exemples
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]
Vous pouvez supposer que l'entrée est valide. C'est le code-golf , donc le programme le plus court mesuré en octets l'emporte.
[0, 1, 2, 4, 6, 7]
au lieu de[3, 1, 1, 1, 2]
?