Definieren wir f n (k) als die Summe der ersten k Terme der natürlichen Zahlen [1, ∞), wobei jede Zahl n- mal wiederholt wird.
k | 0 1 2 3 4 5 6 7 8 9
--------+-------------------------------------------------
f_1(k) | 0 1 3 6 10 15 21 28 36 45
deltas | +1 +2 +3 +4 +5 +6 +7 +8 +9
--------+-------------------------------------------------
f_2(k) | 0 1 2 4 6 9 12 16 20 25
deltas | +1 +1 +2 +2 +3 +3 +4 +4 +5
--------+-------------------------------------------------
f_3(k) | 0 1 2 3 5 7 9 12 15 18
deltas | +1 +1 +1 +2 +2 +2 +3 +3 +3
Die Antidiagonalen davon als quadratische Anordnung ähneln der OEIS-Sequenz A134546 .
Herausforderung
Schreiben Sie ein Programm / eine Funktion , die zwei nicht negative ganze Zahlen n und k annimmt und f n (k) ausgibt .
Spezifikationen
- Standard I / O - Regeln gelten .
- Standardlücken sind verboten .
- Ihre Lösung kann entweder 0-indiziert oder 1-indiziert für n und / oder k sein, aber bitte spezifizieren Sie welche.
- Bei dieser Herausforderung geht es nicht darum, den kürzesten Ansatz in allen Sprachen zu finden, sondern darum, den kürzesten Ansatz in jeder Sprache zu finden .
- Ihr Code wird in Bytes bewertet , normalerweise in der Codierung UTF-8, sofern nicht anders angegeben.
- Eingebaute Funktionen, die diese Sequenz berechnen, sind zulässig, es wird jedoch empfohlen, eine Lösung zu verwenden, die nicht auf einer eingebauten basiert.
- Erklärungen, auch für "praktische" Sprachen, sind erwünscht .
Testfälle
In diesen Testfällen ist n 1-indiziert und k ist 0-indiziert.
n k fn(k)
1 2 3
2 11 36
11 14 17
14 21 28
21 24 27
24 31 38
31 0 0
In ein paar besseren Formaten:
1 2
2 11
11 14
14 21
21 24
24 31
31 0
1, 2
2, 11
11, 14
14, 21
21, 24
24, 31
31, 0
Referenzimplementierung
Dies ist in Haskell geschrieben .
f n k = sum $ take k $ replicate n =<< [1..]
f_n(0) = 0
fürk
0-indizierte behandeln?k
Begriffe aus der Liste der wiederholten natürlichen Zahlen, nicht die erstenn*k
Begriffe.Antworten:
Ruby ,
32 2823 BytesProbieren Sie es online!
Erläuterung
Stellen wir uns die Summe als Fläche eines Dreiecks vor, zum Beispiel mit n = 3 und k = 10:
Dann sind wir durch Spalte Summe statt Zeile: Die erste Spalte ist
k
, dannk-n
,k-2n
und so weiter.quelle
Python 2 ,
3428 BytesProbieren Sie es online!
Vielen Dank an Martin Ender, Neil und Mr Xcoder für ihre Hilfe.
quelle
k/n
sowieso nicht -k-(k/n)*n
geht haltk%n
. Siehe meine Batch-Antwort.Schale , 4 Bytes
Probieren Sie es online!
Erläuterung
Dies ist nur eine direkte Übersetzung der Referenzimplementierung in der Herausforderung:
quelle
APL (Dyalog) ,
12×108 BytesProbieren Sie es online!
n
linksk
(0 indiziert) rechts.quelle
Mathematica, 40 Bytes
Probieren Sie es online!
Probieren Sie es online!
Mathematica, 18 Bytes
von Martin Ender
Probieren Sie es online!
Probieren Sie es online!
quelle
Tr@Range[#2,0,-#]&
odern~Sum~{n,#2,0,-#}&
mit dem Trick aus GBs Ruby-Antwort.MATL ,
1211 BytesProbieren Sie es online!
k
ist 0-indiziert. Nimmt die Eingabe in umgekehrter Reihenfolge vor.1 Byte dank @Giuseppe gespeichert
quelle
Gelee , 5 Bytes
Ein Byte mehr als die Jelly-Lösung von @ Mr.Xcoder, aber dies ist meine allererste Einsendung in Jelly, und ich bin immer noch verwirrt darüber, wie die Tacitness von Jelly Operanden auswählt, damit ich immer noch zufrieden bin. Beachten Sie, dass die Reihenfolge der Eingaben
k
dann istn
.Erläuterung
Probieren Sie es online!
quelle
Gelee , 4 Bytes
1-indiziert
Probieren Sie es online! oder sehen Sie sich eine Testsuite an .
quelle
Ḷ:S
funktioniert auchJavaScript (ES6),
2421 BytesÜbernimmt Eingaben in der Currying-Syntax
(n)(k)
. Rückgabefalse
statt0
.Testfälle
Code-Snippet anzeigen
Wie?
Dies ähnelt der Ruby-Antwort von @ GB .
Die Herausforderung beschreibt, wie die 'Treppe' von links nach rechts gebaut wird, während diese rekursive Funktion sie von unten nach oben baut. Mit n = 2 und k = 11 :
quelle
Batch, 34 Bytes
Eine geschlossene Formel, die ich gefunden habe. Das erste Argument
n
ist 1-indiziert, das zweite Argumentk
ist 0-indiziert.quelle
Python 2 , 29 Bytes
Probieren Sie es online!
Danke an totalhuman für -3 Bytes!
Python 2 , 30 Bytes
Probieren Sie es online!
quelle
Haskell , 28 Bytes
Probieren Sie es online!
Ein Ansatz, den ich gefunden habe, indem ich mit einigen Bereichsparametern herumgeschraubt habe. Auf jeden Fall nicht die kürzeste, aber es ist ziemlich cool, wie viele verschiedene Ansätze es gibt.
quelle
C,
3834 BytesRekursive Definition.
-4 Bytes dank Steadybox .
Probieren Sie es online!
32 Bytes von Mr. Xcoder , GB
Probieren Sie es online!
quelle
f(n,k){return k--?1+f(n,k)+k/n:0;}
Probieren Sie es online!R ,
373331 Bytes-6 Bytes dank Giuseppe
Probieren Sie es online!
Nichts Außergewöhnliches.
Das[0:k]
behandelt den Fall, wenn k = 0 ist.quelle
rep.default
, können Sie loswerden,[0:k]
indem Sie verwenden,rep(1:k,,k,n)
aber dann ist Ihre Antwort im Grunde genommen rturnbulls, aber mit der Basis R und nichtR + pryr
{}
C ++, 53 Bytes
Verwenden Sie einfach die Formel.
n
ist 1-indiziert undk
ist 0-indiziert.Probieren Sie es online!
quelle
~
Operator missbrauchen .[](int n,int k){return-k/n*~(k/n)/2*n-k%n*~(k/n);};
J , 13 Bytes
Wie es funktioniert:
Das linke Argument ist n, das rechte ist k.
i.
Erzeugt eine Liste 0..k-11+
addiert eine zu jeder Nummer der Liste, yealding 1,2, ..., k#
bildet einen Haken mit dem oben genannten, so dass n Kopien von jedem Element der Liste kopiert werden.]{.
nimm die ersten n von ihnen1#.
Finden Sie ihre Summe durch Basisumwandlung.Probieren Sie es online!
quelle
Retina ,
2926 BytesProbieren Sie es online! Link enthält Testfälle und Header, um sie auf die bevorzugte Eingabe umzuformatieren (0-indiziert
k
zuerst, 1-indiziertn
zweitens). Die Ruby-Antwort von @ GB hat mich inspiriert. Erläuterung:In Unary konvertieren.
Passen Sie zu jeder Zeichenfolge von
n
innenk
und ersetzen Sie die Übereinstimmung nach dem Match durch alles andere. Dies istk-n
,k-2n
,k-3n
, abern
auch nach dem Spiel, so dass Sie erhaltenk
,k-n
,k-2n
etc. Dies paßt auchn
, das wird einfach gelöscht (es ist nicht mehr erforderlich).Summieren Sie die Ergebnisse und rechnen Sie sie in Dezimalzahlen um.
quelle
Pyth , 5 Bytes
Probieren Sie es hier aus!
Port of GBs Ruby-Antwort. Ein Port meines Jellys wäre 6 Bytes:
+s/Rvz
quelle
Perl 6 , 39 Bytes
Probier es aus
n und k sind beide 1 basierend
Erweitert:
quelle
Kotlin , 40 Bytes
Probieren Sie es online!
quelle
Java (OpenJDK 8) , 23 Byte
Probieren Sie es online!
Port of GBs Python 2 Antwort .
quelle
05AB1E , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 2 , 44 Bytes
Probieren Sie es online!
quelle
Python 2 , 38 Bytes
Probieren Sie es online!
quelle
Clojure, 54 Bytes
Das zweite Argument
k
ist 0-indiziert, das gleiche(f 14 20)
gilt für 28.quelle
APL + WIN, 13 Bytes
Fordert zur Eingabe des Bildschirms für n und dann für k auf. Indexursprung = 1.
quelle
Gehirn-Flak , 78 Bytes
Probieren Sie es online!
Ich bin sicher, das kann besser gemacht werden, aber es ist ein Anfang.
quelle
Japt ,
76 BytesUrsprünglich inspiriert von GBs Lösung und zu einem Hafen entwickelt!
Nimmt
k
als erste Eingabe undn
als zweite.Versuch es
Erläuterung
Implizite Eingabe von ganzen Zahlen
U=k
&V=n
. Generieren Sie ein Array von ganzen Zahlen (õ
) von1
bisU
mit einem Schritt vonV
negated (n
) und reduzieren Sie es durch Addition (x
).quelle
R , 27 Bytes
Anonyme Funktion, die
k
undn
in dieser Reihenfolge annimmt . Erstellt eine Liste mit der Längek
(drittes Argument bisrep
), die sich aus1
bisk
(erstes Argument bisrep
) zusammensetzt und jedes Element wiederholtn
mehrmals (viertes Argument bisrep
). Nimmt dann die Summe dieser Liste.n
ist 1-indiziert undk
ist 0-indiziert. Gibt einen Fehler für zurückn<1
.Probieren Sie es online!
quelle
Befunge, 27 Bytes
Probieren Sie es online
Nimmt k dann n als Eingabe. Verwendet die Antwort von GB als mathematische Grundlage.
quelle