Problem
Definieren wir einen verallgemeinerten Cantor-Satz, indem wir iterativ einige Segmente mit rationaler Länge aus der Mitte aller Intervalle löschen, die noch nicht gelöscht wurden, beginnend mit einem einzelnen fortlaufenden Intervall.
Angesichts der relativen Länge der zu löschenden oder nicht zu löschenden Segmente und der Anzahl der auszuführenden Iterationen besteht das Problem darin, ein Programm oder eine Funktion zu schreiben , die die relativen Längen der Segmente ausgibt, die nach n
Iterationen gelöscht wurden oder nicht .
Beispiel: Löschen Sie iterativ die 4. und 6. Achtel
Eingang:
n
- Anzahl der Iterationen, indiziert ab 0 oder 1
l
- Liste der Segmentlängen als positive Ganzzahlen mit gcd(l)=1
und ungerade Länge, die die relativen Längen der Teile darstellen, die entweder unverändert bleiben oder gelöscht werden, beginnend mit einem Segment, das nicht gelöscht wird. Da die Listenlänge ungerade ist, werden das erste und das letzte Segment niemals gelöscht. Für das reguläre Cantor-Set wäre dies beispielsweise [1,1,1] für ein Drittel, das verbleibt, ein Drittel, das gelöscht wird, und ein weiteres Drittel, das nicht gelöscht wird.
Ausgabe:
Integer - Liste o
, gcd(o)=1
aus relativen Segmentlängen in der n
ten Iteration , wenn die Segmente , die nicht in der vorherige Iteration gelöscht wurden , werden durch eine verkleinerte Kopie der Liste ersetzt l
. Die erste Iteration ist gerecht [1]
. Sie können jede eindeutige , auch unäre Ausgabemethode verwenden.
Beispiele
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]
Sie können davon ausgehen, dass die Eingabe gültig ist. Das ist Code-Golf , also gewinnt das kürzeste in Bytes gemessene Programm.
[0, 1, 2, 4, 6, 7]
anstelle von[3, 1, 1, 1, 2]
?