Hintergrund
Für diese Herausforderung wird eine "Metasequenz" als eine Folge von Zahlen definiert, bei der nicht nur die Zahlen selbst, sondern auch das Inkrement und das Inkrement um einen zunehmenden Wert usw. zunehmen.
Beispielsweise würde die Tier 3-Metasequenz wie folgt beginnen:
1 2 4 8 15 26 42 64 93 130 176
da:
1 2 3 4 5 6 7 8 9 >-|
↓+↑ = 7 | Increases by the amount above each time
1 2 4 7 11 16 22 29 37 46 >-| <-|
| Increases by the amount above each time
1 2 4 8 15 26 42 64 93 130 176 <-|
Herausforderung
Bei einer positiven Ganzzahl werden die ersten zwanzig Elemente der Metasequenz dieser Ebene ausgegeben.
Testfälle
Eingabe: 3
Ausgabe:[ 1, 2, 4, 8, 15, 26, 42, 64, 93, 130, 176, 232, 299, 378, 470, 576, 697, 834, 988, 1160 ]
Eingabe: 1
Ausgabe:[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ]
Eingabe: 5
Ausgabe:[ 1, 2, 4, 8, 16, 32, 63, 120, 219, 382, 638, 1024, 1586, 2380, 3473, 4944, 6885, 9402, 12616, 16664 ]
Eingabe: 13
Ausgabe:[ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16383, 32752, 65399, 130238, 258096, 507624 ]
Wie Sie vielleicht erkennen, sind die ersten Elemente jeder Sequenz der Stufe die ersten Potenzen von 2 ...
Regeln
- Es gelten Standardlücken
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes
quelle
0
, Ebene 2 für Eingabe1
usw.)?Antworten:
Gelee ,
87 BytesProbieren Sie es online!
Dies verwendet @ alephalphas Einsicht, dassmeta-sequencen(i)=∑k=0n(ik).
quelle
Wolfram Language (Mathematica) , 34 Byte
Probieren Sie es online!
Die Metasequenz der Stufe ist die Summe der ersten Elemente jeder Zeile des Pascal-Dreiecks.n n + 1
quelle
Haskell , 34 Bytes
Verwendet 0-indizierte Eingaben (
f 4
gibt Tier 5 zurück)Haskell , 36 Bytes
Probieren Sie es online! Verwendet 1-indizierte Eingaben (
f 5
gibt Tier 5 zurück)Erläuterung
scanl (+) 1
ist eine Funktion, die Teilsummen einer Liste annimmt, beginnend mit (und voranstehend)1
.Es stellt sich heraus, dass Tiern genau diese Funktion ( n - 1 ) Mal auf die Liste [ 1 , 2 , 3 , … ] angewendet wird .
(Oder gleichbedeutend:n mal zu einer Liste aller.)
Wir verwenden entweder1 länger wird .
init
oder, um[1..20-n]
zu berücksichtigen, dass die Liste mit jeder Anwendung umquelle
[1..20-n]
wird nicht fürtake 20.(iterate(scanl(+)1)[1..]!!)
würde nur ein Byte mehr kosten, um das zu beheben(iterate(init.scanl(+)1)[1..20]!!)
.Brain-Flak ,
8482 BytesProbieren Sie es online!
Kommentiert
Probieren Sie es online!
quelle
R , 36 Bytes
Probieren Sie es online!
Vielen Dank an @ Giuseppe für den Vorschlag
outer
.Dies basiert auf dem beschriebenen Ansatz @alephalpha
quelle
Map
anstelle von äußeren zu verwenden?Python 2 ,
695855 BytesGespeicherte Bytes dank Ovs und Jo King ; Außerdem funktioniert es jetzt auch in Python 3.
Probieren Sie es online!
Die Mathematik
Lassena ( t , n ) die A nt h Laufzeit (0-indexiert) die Sequenz auf Stufe t . Eine kleine Analyse führt zu folgender Rekursionsformel:
Wir arbeiten rückwärts und definierena ( 0 , n ) = 1 und a ( - 1 , n ) = 0 für alle n . Diese Definitionen vereinfachen unseren Basisfall.
Der Code
Wir definieren eine Funktion- 1 wie eine konstante Folge aller verhalten sollte 0 ‚s.
m(t)
, die die ersten 20 Elemente der Sequenz auf der Ebene zurückgibtt
. Wenn dies nichtt
negativ ist, verwenden wir die obige rekursive Formel. Wennt
ja-1
, geben wir eine leere Liste zurück. Die leere Liste fungiert als Basisfall, da das Ergebnis jedes rekursiven Aufrufs aufgeteilt ([:n]
) und dann summiert wird. Das Schneiden einer leeren Liste ergibt eine leere Liste und das Summieren einer leeren Liste ergibt0
. Das ist genau das Ergebnis , das wir, da Tier wollenquelle
(t>=0)*range(20)
Speichert ein Byte, obwohl es wahrscheinlich einen noch kürzeren Ausdruck gibt.if~t
spart zwei weitere über @xnordzaima / APL REPL, 14 Bytes
Probieren Sie es online!
quelle
1∘,
→1,
(≢↑(+\1∘,)⍣⎕)20⍴1
-s
Flag hinzu).-s
übrigens (außer-s
Repl-Flagge?)Pari / GP , 39 Bytes
Probieren Sie es online!
Pari / GP , 40 Bytes
Probieren Sie es online!
quelle
Perl 6 ,
3432 Bytes-2 Bytes dank Jo King
Probieren Sie es online!
Erläuterung
quelle
$^a
anstelle von$_
ist erforderlich)$_
beim Aufruf der Funktion undefiniert ist. Ich bevorzuge Lösungen, die nicht vom Zustand globaler Variablen abhängen.Python 3.8 (Vorabversion) , 62 Byte
Probieren Sie es online!
Erläuterung
quelle
R (
6347 Bytes)Online-Demo . Hierbei wird die regulierte unvollständige Betafunktion verwendet , die die kumulative Verteilungsfunktion eines Binomials ergibt und daher nur ein wenig Skalierung benötigt, um Teilsummen von Reihen des Pascalschen Dreiecks zu ergeben.
Oktave (
6646 Bytes)Online-Demo . Genau das gleiche Konzept, aber etwas hässlicher, da
betainc
im Gegensatz zupbeta
Rs das zweite und dritte Argument größer als Null sein müssen.Vielen Dank an Giuseppe, der mir geholfen hat, diese mit erheblichen Einsparungen zu vektorisieren.
quelle
Ruby, 74 Bytes
a=->b{c=[1];d=0;b==1?c=(1..20).to_a: 19.times{c<<c[d]+(a[b-1])[d];d+=1};c}
Ungolfed-Version:
Sehr ressourcenintensiv - die Online-Version kann die 13. Metasequenz nicht berechnen.
Probieren Sie es online aus
quelle
Wolfram Language (Mathematica) , 42 Byte
Probieren Sie es online!
quelle
JavaScript (Node.js) , 58 Byte
Probieren Sie es online!
quelle
05AB1E ,
119 Bytes0-indiziert
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
.¥
!R ,
5949 BytesProbieren Sie es online!
Recursively
Reduce
mit+
,init=1
undaccumulation=TRUE
zu vermeiden Teilmengen mit. Vielen Dank an Criminally Vulgar für den Hinweis auf den rekursiven Ansatz!quelle
outer
alssapply
für 36 Bytescumsum
eine Weile damit rumgespielt, um es zum Laufen zu bringen, aber dasReduce
ist so schlau. Schön, den Index auch um 1 senken zu können, habe ich in den Kommentaren nicht gesehen.JavaScript (ES6),
68 bis67 ByteProbieren Sie es online!
JavaScript (ES6), 63 Byte
Probieren Sie es online!
quelle
J , 24 Bytes
Probieren Sie es online!
HINWEIS: Es hat sich herausgestellt, dass dies eine Übersetzung der APL-Antwort von dzaima ist, obwohl ich es tatsächlich nicht bemerkt habe, bevor ich dies geschrieben habe.
Erläuterung
quelle
Ruby, 49 Bytes
Rekursive Definition: Tier 0 ist
1,1,1,1...
und jedes nachfolgende Tier ist 1, gefolgt von einer Sequenz, deren erste Unterschiede das vorherige Tier sind. Ärgerlicherweise würde dies mir 21 Werte geben, wenn ich die ersten 20 nicht explizit herausschneide; Anscheinend sollte es einen Weg geben, dies zu verkürzen, indem man dies vermeidet.quelle
Netzhaut , 59 Bytes
Ersetzen Sie den Eingang durch 19
1
s (in unary). (Der 20. Wert ist 0, da er beim ersten Durchlauf der Schleife immer gelöscht wird.)Wiederholen Sie die Schleife so oft wie ursprünglich eingegeben.
Entfernen Sie das letzte Element und stellen Sie a voran
1
.Berechnen Sie die kumulative Summe.
In Dezimalzahl konvertieren.
Probieren Sie es online!
quelle
C # (Visual C # Interactive Compiler) , 120 Byte
Probieren Sie es online!
Basierend auf der Formel von Alephalpha.
quelle
Rust , 135 Bytes
@alephalphas Idee verwendet, wie einige andere. Es gibt keine eingebauten Fakultäten, die mindestens 36 Bytes belegen (plus Umgang mit Negativen). Keine eingebaute Auswahl, weitere 16 Bytes. Iterator-> deklarierter Vektortyp, 20 Bytes .. etc etc.
Ungolfed auf play.rust-lang.org
quelle
min
folgendenfn t(m:i64)->Vec<i64>{let b=|n,k|(1..=k).fold(1,|a,j|a*(n-j+1)/j);(0..20).map(|i|(0..=m).fold(0,|a,x|a+b(i,x))).collect()}
fn t(m:i64)->Vec<i64>{(0..20).map(|i|(0..=m).fold(0,|a,x|a+(1..=x).fold(1,|a,j|a*(i-j+1)/j))).collect()}
(104 Bytes). Was wäre schön, ist die Kombination der beiden Falten, aber ich bin nicht sicher, wie prägnante Tupel sind.fn t(m:i64)->Vec<i64>{(0..20).map(|i|(0..=m).fold((0,1),|a,b|(a.0+a.1,a.1*(b-i)/!b)).0).collect()}
(98 Bytes)R (
6059 Bytes)Online-Demo
Einfache Umsetzung der Beobachtung
von OEIS A008949 . Die Argumente dafür
Reduce
sind (offensichtlich) die Funktion, das abzubildende Array, der Startwert, ein falscher Wert (von links anstatt von rechts zu falten) und ein wahrer Wert zum Akkumulieren der Zwischenergebnisse in einem Array.quelle
K (oK) , 17 Bytes
-1 Byte dank ngn (Umschalten von 0-indiziert auf 1-indiziert)
Probieren Sie es online!
1-indiziert
K (oK) , 18 Bytes
Probieren Sie es online!
0-indiziert
quelle
1+!20
->20#1
Gelee , 10 Bytes
Probieren Sie es online!
0-indiziert.
quelle
Perl 5, 48 Bytes
TIO
quelle
Japt , 15 Bytes
0-indiziert; Ersetzen Sie
h
mitp
für 1-indiziert.Versuch es
quelle
CJam (20 Bytes)
Online-Demo . Dies ist ein Programm, das Eingaben von stdin nimmt und nach stdout druckt. für die gleiche Punktzahl kann ein anonymer Block (Funktion) erhalten werden als
Präparation
Dies gilt wörtlich für die Definition:
quelle