Définissons f n (k) comme la somme des k premiers termes des nombres naturels [1, ∞) où chaque nombre est répété n fois.
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
Les anti-diagonales de cette forme de réseau carré sont similaires à la séquence OEIS A134546 .
Défi
Écrivez un programme / une fonction qui prend deux entiers non négatifs n et k et produit f n (k) .
Caractéristiques
- Les règles d'E / S standard s'appliquent .
- Les failles standard sont interdites .
- Votre solution peut être indexée 0 ou indexée 1 pour n et / ou k, mais veuillez préciser laquelle.
- Ce défi ne consiste pas à trouver l'approche la plus courte dans toutes les langues, mais plutôt à trouver l' approche la plus courte dans chaque langue .
- Votre code sera noté en octets , généralement dans le codage UTF-8, sauf indication contraire.
- Les fonctions intégrées qui calculent cette séquence sont autorisées, mais l'inclusion d'une solution qui ne repose pas sur une séquence intégrée est encouragée.
- Des explications, même pour les langues "pratiques", sont encouragées .
Cas de test
Dans ces cas de test, n est indexé 1 et k est indexé 0.
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
Dans quelques meilleurs formats:
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
Implémentation de référence
Ceci est écrit en Haskell .
f n k = sum $ take k $ replicate n =<< [1..]
f_n(0) = 0
de l'k
index 0?k
termes de la liste des nombres naturels répétés, pas les premiersn*k
termes.Réponses:
Rubis ,
32 2823 octetsEssayez-le en ligne!
Explication
Visualisons la somme comme l'aire d'un triangle, par exemple avec n = 3 et k = 10:
Ensuite, nous additionnons par colonne au lieu de ligne: la première colonne est
k
, puisk-n
,k-2n
et ainsi de suite.la source
Python 2 ,
3428 octetsEssayez-le en ligne!
Merci à Martin Ender, Neil et M. Xcoder pour leur aide.
la source
k/n
-k-(k/n)*n
c'est justek%n
. Voir ma réponse Lot.Husk , 4 octets
Essayez-le en ligne!
Explication
Cela finit par être une traduction directe de l'implémentation de référence dans le défi:
la source
APL (Dyalog) ,
12108 octetsEssayez-le en ligne!
n
à gauche,k
(0 indexé) à droite.la source
Mathematica, 40 octets
Essayez-le en ligne!
Essayez-le en ligne!
Mathematica, 18 octets
par Martin Ender
Essayez-le en ligne!
Essayez-le en ligne!
la source
Tr@Range[#2,0,-#]&
ou enn~Sum~{n,#2,0,-#}&
utilisant l'astuce de la réponse Ruby de GB.MATL ,
1211 octetsEssayez-le en ligne!
k
est indexé 0. Prend la saisie dans l'ordre inverse.1 octet enregistré grâce à @Giuseppe
la source
Gelée , 5 octets
Un octet de plus que la solution @ Mr.Xcoder Jelly mais c'est ma toute première soumission dans Jelly et je suis toujours confus quant à la façon dont le tacitness de Jelly choisit les opérandes, donc je suis toujours satisfait. Notez que l'ordre des entrées est
k
alorsn
.Explication
Essayez-le en ligne!
la source
Gelée , 4 octets
1 indexé
Essayez-le en ligne! ou consultez une suite de tests .
la source
Ḷ:S
marche aussiJavaScript (ES6),
2421 octetsPrend une entrée dans la syntaxe de curry
(n)(k)
. Renvoiefalse
au lieu de0
.Cas de test
Afficher l'extrait de code
Comment?
Ceci est similaire à la réponse Ruby de @ GB .
Le défi décrit comment construire «l'escalier» de gauche à droite, alors que cette fonction récursive le construit de bas en haut. Avec n = 2 et k = 11 :
la source
Lot, 34 octets
Une formule sous forme fermée que j'ai trouvée. Le premier argument
n
est indexé 1, le deuxième argumentk
est indexé 0.la source
Python 2 , 29 octets
Essayez-le en ligne!
Merci à totalement humain pour -3 octets!
Python 2 , 30 octets
Essayez-le en ligne!
la source
Haskell , 28 octets
Essayez-le en ligne!
Une approche que j'ai trouvée juste en vissant avec quelques paramètres de plage. Ce n'est certainement pas le plus court, mais c'est assez cool de voir à quel point il existe de nombreuses approches différentes.
la source
C,
3834 octetsDéfinition récursive.
-4 octets grâce à Steadybox .
Essayez-le en ligne!
32 octets par M. Xcoder , GB
Essayez-le en ligne!
la source
f(n,k){return k--?1+f(n,k)+k/n:0;}
Essayez-le en ligne!R ,
373331 octets-6 octets grâce à Giuseppe
Essayez-le en ligne!
Rien d'extraordinaire.
Le[0:k]
gère le cas lorsque k = 0.la source
rep.default
, vous pouvez vous en débarrasser[0:k]
en utilisantrep(1:k,,k,n)
mais votre réponse est essentiellement celle de rturnbull mais avec la base R plutôt queR + pryr
{}
C ++, 53 octets
Utilisez simplement la formule.
n
est indexé 1 et indexék
0.Essayez-le en ligne!
la source
~
opérateur.[](int n,int k){return-k/n*~(k/n)/2*n-k%n*~(k/n);};
J , 13 octets
Comment ça fonctionne:
L'argument de gauche est n, celui de droite est k.
i.
génère une liste 0..k-11+
ajoute un à chaque numéro de la liste, yealding 1,2, ..., k#
forme un crochet avec ce qui précède, donc n copies de chaque élément de la liste sont copiées.]{.
prendre les n premiers1#.
trouver leur somme par conversion de base.Essayez-le en ligne!
la source
Rétine ,
2926 octetsEssayez-le en ligne! Link inclut des cas de test et un en-tête pour les reformater en son entrée préférée (0 indexé en
k
premier, 1 indexé enn
second). J'ai été inspiré par la réponse Ruby de @ GB. Explication:Convertissez en unaire.
Faites correspondre chaque chaîne de l'
n
intérieurk
et remplacez la correspondance par tout ce qui suit la correspondance. Ceci estk-n
,k-2n
,k-3n
maisn
est également après le match, de sorte que vous obtenezk
,k-n
,k-2n
etc. Cela correspond aussin
, ce qui est tout simplement supprimé (il est plus nécessaire).Additionnez les résultats et reconvertissez en décimal.
la source
Pyth , 5 octets
Essayez-le ici!
Réponse Ruby du port de GB. Un port de ma Jelly serait de 6 octets:
+s/Rvz
la source
Perl 6 , 39 octets
Essaye-le
n et k sont tous deux basés sur 1
Étendu:
la source
Kotlin , 40 octets
Essayez-le en ligne!
la source
Java (OpenJDK 8) , 23 octets
Essayez-le en ligne!
Réponse de Python 2 du port de GB .
la source
05AB1E , 9 octets
Essayez-le en ligne!
Explication
la source
Python 2 , 44 octets
Essayez-le en ligne!
la source
Python 2 , 38 octets
Essayez-le en ligne!
la source
Clojure, 54 octets
Le deuxième argument
k
est indexé sur 0, tout(f 14 20)
comme 28.la source
APL + WIN, 13 octets
Invite à saisir l'écran pour n, puis pour k. Origine de l'indice = 1.
la source
Brain-Flak , 78 octets
Essayez-le en ligne!
Je suis certain que cela peut être mieux fait, mais c'est un début.
la source
Japt ,
76 octetsInspiré à l'origine par la solution de GB et évolué vers un port!
Prend
k
comme première entrée etn
comme seconde.Essayez-le
Explication
Saisie implicite d'entiers
U=k
&V=n
. Générez un tableau d'entiers (õ
) de1
àU
avec une étape deV
negated (n
) et réduisez-le par addition (x
).la source
R , 27 octets
Fonction anonyme qui prend
k
etn
dans cet ordre. Crée une liste de longueurk
(troisième argumentrep
) qui est composée de1
traversk
(premier argumentrep
), en répétant chaque élément den
fois (quatrième argumentrep
). Prend ensuite la somme de cette liste.n
est indexé 1 et indexék
0. Renvoie une erreur pourn<1
.Essayez-le en ligne!
la source
Befunge, 27 octets
Essayez-le en ligne
Prend k puis n comme entrée. Utilise la réponse de GB comme base mathématique.
la source