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]
?Antworten:
Jelly ,
15 1312 Bytes-2 dank Dennis (die Verwendung eines Links anstelle einer Kette ermöglicht die implizite Verwendung des Rechtes durch
¡
; Es ist nicht erforderlich, das1
in eine Liste einzufügen, da Jelly Listen mit einem Element druckt, das mit dem Element identisch ist)-1 dank Dennis Erik the Outgolfer (verwenden Sie
Ɗ
, um die Newline vor der Verwendung zu schützenÇ
)Ein vollständiges Programm, das eine Liste im Jelly-Format
[1]
druckt (so wird gedruckt als1
)Probieren Sie es online!
Wie?
quelle
Python 2 ,
1201071041031009989 BytesProbieren Sie es online!
Gerettet
quelle
R , 94 Bytes
Probieren Sie es online!
quelle
Haskell ,
76-58BytesProbieren Sie es online!
Die Funktion verwendet
(%)
die Liste der Zeilenlängenl
als erstes Argument und die Anzahl der Iterationenn
als zweite Eingabe.Vielen Dank an Angs und Ørjan Johansen für -18 Bytes!
quelle
n
und diese#
vollständig%
auf gekürzt werdenl%a=do(x,m)<-zip a$a>>[l,[sum l]];(*x)<$>m
.JavaScript (Firefox 42-57), 80 Byte
Benötigt diese spezifischen Versionen, da sowohl Array-Verständnis als auch Exponentiation verwendet werden.
quelle
JavaScript (Node.js) , 71 Byte
Probieren Sie es online!
quelle
Java 10, 261 Bytes
Ändert die Eingabeliste, anstatt eine neue zurückzugeben, um Bytes zu sparen.
Probieren Sie es online aus.
quelle
Jelly , 13 Bytes
Probieren Sie es online!
Volles Programm. Ausgänge
1
statt[1]
. Ärgerlicherweiseḋ
funktioniert das nicht×S¥
in diesem Kontext undƭ
funktioniert nicht gut mit Niladen. > _ <quelle
APL (Dyalog Classic) , 20 Byte
Probieren Sie es online!
quelle
K (ngn / k) , 27 Bytes
Probieren Sie es online!
{
}
ist eine Funktion mit Argumentenx
undy
(y;+/y)
ein Paar vony
und seine Summe{
}[(y;+/y)]
Projektion (auch Currying oder Teilapplikation genannt) einer dyadischen Funktion mit einem Argument.x
wird(y;+/y)
undy
wird das Argument sein, wenn angewendet.,1
Singleton-Liste mit 1x{
}[
]/
gelten diex
Projektionszeiten(#y)#x
Verändern Sie die Form auf die Länge des aktuellen Ergebnisses, dh wechseln Sie zwischen dem Äußereny
und seiner Summey*
Multiplizieren Sie jedes der oben genannten Elemente mit dem entsprechenden Element des aktuellen Ergebnisses,/
verkettenquelle
Ruby , 73 Bytes
Probieren Sie es online!
quelle
Pyth , 20 Bytes
Die Eingabe erfolgt über ein Segmentarray
l
und anschließend über Iterationenn
. Versuchen Sie es online hier oder überprüfen alle Testfälle auf einmal hier .quelle