Die Folge von segmentierten Zahlen oder Primzahlen ( OEIS A002048 ) ist die Folge von Zahlen, bei der jedes Mitglied die kleinste positive Zahl (größer als Null) ist, die nicht aus einer Summe früherer aufeinanderfolgender Zahlen mit gebildet werden kann a(0) = 1
.
Beispiel
Um zu berechnen, berechnen a(7)
wir zuerst a(0->6) = [1, 2, 4, 5, 8, 10, 14]
. Wir beginnen dann bei Null und gehen die Zahlen durch, bis wir eine finden, die nicht die Summe einer oder mehrerer aufeinanderfolgender Zahlen in der Folge ist.
1 = 1
2 = 2
3 = 1 + 2
4 = 4
5 = 5
6 = 2 + 4
7 = 1 + 2 + 4
8 = 8
9 = 4 + 5
10 = 10
11 = 2 + 4 + 5
12 = 1 + 2 + 4 + 5
13 = 5 + 8
14 = 14
15 = ????
Da fünfzehn nicht durch Summieren einer aufeinanderfolgenden Teilsequenz gebildet werden können und jede kleinere Zahl fünfzehn sein kann, ist die nächste Zahl in der Sequenz. a(7) = 15
Aufgabe
Ihre Aufgabe ist es, eine Zahl (über Standardmethoden) zu nehmen und den n-ten Term in dieser Reihenfolge (über Standardausgabemethoden) auszugeben. Dies ist Code-Golf und Sie werden als solche gewertet.
Testfälle
0 -> 1
1 -> 2
2 -> 4
3 -> 5
4 -> 8
5 -> 10
6 -> 14
7 -> 15
8 -> 16
9 -> 21
()
, um es eine ordnungsgemäße Funktion zu machen. Der angewendete Teil!!
ist ein Operatorabschnitt und muss eingeschlossen werden()
, damit er eine Funktion ist. Ohne es ist nur ein Ausschnitt, der nur eine Funktion (oder "Wert", um strenge Haskell-Begriffe zu verwenden) mit dem fehlenden Argument wird.filter(`notElem`scanl(+)x z)y
sollte tun.Perl,
5049 BytesBeinhaltet +1 für
-p
Mit Eingabe auf STDIN ausführen:
segmented.pl
:Erläuterung
@F
enthält die Liste der (negativen) Summen von fortlaufenden Nummern, die mit der aktuellen letzten Nummer enden. Wenn eine neue Zahl entdeckt wird, wird die Liste mit 0 erweitert und dann werden alle Werte um die neue Zahl verringert, wobei die Invariante beibehalten wird.Global
%::
wird als Hash verwendet, der alle (negativen) Zahlen, die durchgesehen wurden,@F
auf einen Wert ungleich Null abbildet.$\
ist die aktuelle Zahl und wird erhöht, bis sie einen Wert erreicht, der noch nicht in ist%::
.Wenn Sie ein wenig auf die Reihenfolge achten, in der alles passiert, ist keine Initialisierung erforderlich. Dies
1
wird automatisch zur ersten Zahl.Da
@F
es sich um die Anzahl der generierten Zahlen handelt, kann dies als Unterbrechungsbedingung verwendet werdenquelle
05AB1E ,
1716 BytesErläuterung
Probieren Sie es online!
Dank Adnan 1 Byte gespeichert
quelle
$
anstatt zuXs
arbeiten?Jelly ,
141311 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Pyth -
1917 BytesVerdammt, einer, der alle meine Implikationen ruiniert. (Gleiches Bytes zählt, literaly Inkrementieren
Q
:=hQesmaYf!}TsM.:Y
)Test Suite .
quelle
eu+Gf!}TsM.:G))hQY
Javascript,
125112110 Bytes2 Bytes dank @Neil gespeichert
Vorherige Antworten
112 Bytes dank @Neil:
125 Bytes:
quelle
b.every(c=>c-i)
ich würde versuchen,!b.includes(i)
oder möglicherweise!a.some(b=>b.includes(i))
funktioniert, während[0,...a[k]||[]].map(v=>i+v)
möglicherweise ersetzen[i].concat((a[k]||[]).map(v=>i+v))
. Auch brauchst du wirklichk
?if(!...){...}
es sich nur noch um eine Aussage handelt, könnten Sie sie wahrscheinlich durch...||(...)
oder ersetzen...?0:...
.Python,
1131059280 BytesDie letzten Bytes, die ich gespeichert habe, wurden von Ton's Perl-Antwort inspiriert: my
F
macht dasselbe wie his@F
; Meins
macht im Wesentlichen das gleiche wie sein%::
.quelle
JavaScript (ES6), 77 Byte
Grundsätzlich eine rekursive Portierung des Algorithmus von @ TonHospels Perl-Antwort.
quelle