Étant donné une entrée n
, écrivez un programme ou une fonction qui génère / renvoie la somme des sommes numériques de n
pour toutes les bases 1 à n
.
Exemple:
n = 5
Créez la gamme [1...n]
:[1,2,3,4,5]
Pour chaque élément x
, obtenez un tableau des x
chiffres de base de n
: [[1,1,1,1,1],[1,0,1],[1,2],[1,1],[1,0]]
base- bijective 1
de 5
est -[1,1,1,1,1]
base- 2
(binaire) de 5
is[1,0,1]
base- 3
de 5
est[1,2]
base- 4
de 5
est[1,1]
base- 5
de 5
est[1,0]
Additionnez les chiffres: 13
Cas de test:
1 1
2 3
3 6
4 8
5 13
6 16
7 23
8 25
9 30
10 35
36 297
37 334
64 883
65 932
La séquence se trouve sur OEIS: A131383
Notation:
code-golf : la soumission avec le score le plus bas gagne.
227 -> 9999
. Et aussi:1383 -> 345678
.Réponses:
Canevas , 3 octets
Essayez-le ici!
Toile battant la gelée?
la source
Haskell , 46 octets
Essayez-le en ligne!
Explication
La fonction[0…b]n dans l'ordre lexicographique. Par exemple:
\b n -> mapM(pure[0..b])[1..n]
génère toutes les chaînesEn l'indexant avec,1 ), mais nous résumons les résultats. Nous pouvons même enregistrer quelques octets avec (n+1) plutôt qu'une solution de contournement pour la base- 1 car il nous manque [ 1 , … , 1n fois] ce qui revient au même que [ n ] lors de la sommation.
(!!n)
ceci peut être utilisé pour convertirn
en baseb+1
, mais cela ne fonctionnera pas pour unaire (base-a <- [1..n]
et en utilisant base-L'utilisation de
do
-notation concatène simplement toutes les listes au lieu de les imbriquer:la source
APL (Dyalog Unicode) , 14 octets
Essayez-le en ligne!
Explication
Certaines parenthèses sont implicites et peuvent être ajoutées (plus légères que la parenthèse "officielle"):
Ceci est un sommet monadique. Étant donné un argument
Y
, cette fonction se comporte comme:Les deux fonctions sont appliquées dans l'ordre. Nous allons commencer par la bonne:
Il y a trois fonctions dans ce train, c'est donc une fourchette. Étant donné un argument
Y
, il agit comme:On peut facilement se réduire à cela (monadic
⊢
renvoie son argument, donc appelé identité ):Maintenant, nous savons que
Y
c'est un entier (scalaire simple, c'est-à-dire un nombre ou un caractère), car on nous en donne un. Par conséquent⍳Y
, avec⎕IO=1
, renvoie1 2 ... Y
.⍳Y
renvoie en fait un tableau avec une formeY
(Y
doit être un vecteur), où chaque scalaire est l'index de lui-même dans le tableau (c'est pourquoi monadic⍳
est appelé le générateur d'index ). Ces indices sont des vecteurs, sauf dans le cas où1≡⍴Y
, où ils sont scalaires (c'est notre cas).Analysons la fonction intermédiaire
(⍴⊤⊣)¨
, ensuite.⍴⊤⊣
est l'opérande de¨
( chacun ), et la fonction est dyadique, donc l'¨
opérateur remodèlera d'abord chaque argument de longueur 1 à la forme de l'autre (c'est-à-dire, prendre l'élément et l'utiliser pour remplacer chaque scalaire dans l'autre argument) , puis appliquez la fonction à chaque paire des deux arguments. Dans ce cas,⍳Y
est un vecteur etY
est un scalaire, donc, sin≡⍴⍳Y
, alorsY
sera converti enn⍴Y
(⍴
représente les fonctions de forme (monadique) et de remodelage (dyadique)). C'est-à-dire, en termes plus simples,Y
sera converti en un tableau contenant desY
tempsY
.Maintenant, pour chaque paire, appelons l'argument gauche
X
et le droitZ
(afin de ne pas entrer en conflit avec l'entréeY
).⍴⊤⊣
est une fourchette dyadique, elle s'étendra donc à:Faisons la première étape facile de réduire
X⊣Z
àX
(dyadique⊣
est la fonction de gauche ):LeX, Z∈ N , XZ ( X dans la base Z ) ne peut pas avoir plus de X chiffres, car X1 a X chiffres. Par conséquent,
⍴
inX⍴Z
est, encore une fois, la fonction de remodelage , doncX⍴Z
, dans notre cas, c'est simplement leX
tempsZ
.⊤
est le fonction d' encodage . Étant donné deux tableaux de nombres, où le tableau de gauche est la base de chaque chiffre du résultat (n'a pas besoin d'être entier ou positif), c'est-à-dire l'encodage, et le droit est un tableau de nombres, renvoie le tableau transposé de ceux nombres dans l'encodage spécifié (la transposition est l'inversion des dimensions d'un tableau par rapport à ses éléments). La représentation d'un chiffre est basée sur le quotient de la division du nombre et le produit des bases les moins significatives. Si une base l'est0
, elle agit comme base + ∞. Les scalaires des arguments sont tous simples. PuisqueX
est un entier positif, etX⍴Z
est un vecteur d'éléments égaux, c'est vraiment juste un cas de conversionX
en baseZ
et de remodelage enX
chiffres. PourX⍴Z
est suffisant pour nos fins.Le résultat deOui1= [ 1 , 1 , . . . , 1 ]Oui , de sorte que la somme est simplement Oui× 1 = Y . Il s'ensuit que nous devons ajouter
Y(⍴⊤⊣)¨⍳Y
est doncY
converti en chaque base de 1 àY
, éventuellement avec des zéros non significatifs. Cependant, il y a un problème: dans APL, la base 1 n'est pas dans un boîtier spécial, alors que ce défi le fait dans un cas spécial, nous devons donc inclure la somme des chiffres de base 1 deY
nous - mêmes. Heureusement, cette somme est justeY
, puisqueY
quelque part dans le tableau. C'est comme ça qu'on le fait:J'ai déjà inclus cette partie ici. Dyadique
,
est la fonction caténate , elle concatène ses arguments sur leurs derniers axes, et les erreurs si ce n'est pas possible. Ici, nous concaténons simplement le scalaireY
au vecteurY(⍴⊤⊣)¨⍳Y
, afin d'incrémenter la somme que nous allons calculerY
, comme expliqué ci-dessus.La dernière partie est la fonction gauche de notre sommet,
+/∘∊
:∘
est l' opérateur de composition .f∘g Y
est le même quef g Y
. Cependant, nous l'utilisons ici pour que notre train ne bifurque pas sur le∊
. Ainsi, nous pouvons réduire:Maintenant, il est temps pour la somme, mais attendez ... il y a un problème. Le tableau n'est pas plat, nous ne pouvons donc pas simplement additionner ses éléments avant de l'aplatir en premier. La Enlist fonction
∊
aplatit un tableau. Maintenant que le tableau a été aplati, nous utilisons enfin+/
pour le résumer./
est l' opérateur de réduction , il applique une fonction dyadique entre les éléments d'un tableau sur son avant-dernier axe, avec une priorité de droite à gauche. Si le rang (nombre de dimensions, c'est-à-dire la longueur de la forme) du tableau ne diminue pas, le tableau est alors inclus, bien que ce ne soit pas le cas ici. La fonction qui est appliquée ici est+
, ce qui est le plusfonction qui ajoute les paires sur les derniers axes de deux tableaux (et des erreurs si les tableaux ne peuvent pas être ajoutés comme ça). Ici, il ajoute simplement deux nombres plusieurs fois pour que la réduction soit terminée.Et voilà, notre train:
la source
+/∘∊⊢,⊢⊤¨⍨⊢⍴¨⍳
Rubis ,
3937Le seul golf ici est de supprimer des espaces. Essayez-le en ligne
la source
n
(37b):->n{(2..n).sum{|b|n.digits(b).sum}+n}
Python 2 , 57 octets
Essayez-le en ligne!
la source
Java 8,
7665 octets-11 octets grâce à @ OlivierGrégoire .
Essayez-le en ligne.
Explication:
la source
i
, donc ... 65 octets.Desmos, 127 octets
Desmos, 56 octets
la source
^n
devrait alors suffire.\sum_{b=2}^{n+1}
pourn+\sum_{b=2}^n
enregistrer encore 2 octetsSAS,
8174 octetsL'entrée est entrée après l'
cards;
instruction, sur des retours à la ligne, comme ceci:Génère un ensemble de données contenant la réponse
s
(avec des variables d'aide), avec une ligne pour chaque valeur d'entréeNon golfé:
la source
Japt
-x
, 6 octetsEssayez-le
Essayez-le
la source
J ,
2423 octetsEssayez-le en ligne!
la source
05AB1E (hérité) , 5 octets
Essayez-le en ligne!
Explication:
Dans 05AB1E (hérité), la base 1 de 5 est [0,0,0,0,0], pas [1,1,1,1,1]. Par conséquent, après avoir additionné la plage, ajoutez l'entrée pour tenir compte de la base manquante 1.
J'utilise 05AB1E (hérité) car dans le 05AB1E actuel, la base 1 sur 5 est [1]. Afin de tenir compte de cela, je devrais soit décrémenter le résultat de 1, soit supprimer le premier élément de la plage, qui coûteraient tous les deux 1 octet.
la source
Perl 6 ,
4541 octets-4 octets grâce à Jo King
Essayez-le en ligne!
la source
Espace , 153 octets
Lettres
S
(espace),T
(tabulation) etN
(nouvelle ligne) ajoutées uniquement en surbrillance.[..._some_action]
ajouté à titre d'explication uniquement.Essayez-le en ligne (avec des espaces bruts, des tabulations et des nouvelles lignes uniquement).
Port de ma réponse Java 8 , car Whitespace n'a pas du tout de conversion de base.
Exemple d'exécution:
input = 3
Le programme s'arrête avec une erreur: aucune sortie trouvée. (Bien que je puisse ajouter trois sauts de ligne
NNN
pour se débarrasser de cette erreur.)la source
R , 60 octets
Essayez-le en ligne!
Échoue
n>143
car144^144
est plus grand que ce que l'double
on peut obtenir. Merci à Josh Eller d' avoir suggéré de remplacerlog(n,i)
simplementn
.Ce qui suit fonctionnera pour
n>143
; Je ne sais pas à quel moment il cessera de fonctionner.R , 67 octets
Essayez-le en ligne!
Utilise la
n%/%i^(0:log(n,i))%%i
méthode classique pour extraire lesi
chiffres de basen
pour chaque baseb>1
, puis les additionne et accumule la sommeF
, qui est initialisée en0
, puis en ajoutantn
(la1
représentation de base den
)F
et en renvoyant le résultat. Carn=1
, il saute les bases et ajoute simplementn
àF
.la source
0:log(n,i)
, ne pourriez-vous pas utiliser0:n
? Il y aura toujours au plus n chiffres dans toute représentation de base de n, et tout après leslog(n,i)
chiffres initiaux devrait être 0, donc cela n'affectera pas la somme.n=144
, car il143^143
existe1.6e308
et est144^144
évaluéInf
. Merci!Python 2 , 61 octets
Essayez-le en ligne!
Bien que ce soit plus la solution de Dennis sur laquelle elle est basée, je trouve la méthode trop amusante pour ne pas la partager.
Le but est de répéter à la fois en supprimant le dernier chiffre
n->n/b
et en incrémentant la baseb->b+1
, mais nous voulons empêcher l'augmentation de la base après qu'un ou plusieurs chiffres ont été supprimés. Ceci est réalisé en faisant de la baseb
un flottant, de sorte qu'après la mise à journ->n//b
, le flotteurb
infecten
avec son flottement. De cette façon, qu'il s'agisse d'n
un flottant ou non est un indicateur de bit pour savoir si nous avons supprimé des chiffres den
.Nous exigeons que la condition
1/n==0
soit remplie pour reculer en incrémentationb
, ce que les entiersn
satisfont car la division du plancher est effectuée, mais les flottants échouent. (n=1
échoue également, mais nous ne voulons pas en parler de toute façon.) Sinon, les flottants fonctionnent exactement comme des entiers dans la fonction, car nous faisons attention à la division du planchern//b
et la sortie est un flottant de nombre entier.la source
C (gcc),
6756 octetsPort de ma réponse Java 8 .
-11 octets grâce au golf de @ OlivierGrégoire sur ma réponse Java.
Essayez-le en ligne.
Explication:
la source
JavaScript (ES6), 42 octets
Cette version est presque identique à ma réponse principale mais s'appuie sur un sous-dépassement arithmétique pour arrêter la récursivité. La valeur prise en charge la plus élevée dépend de la taille de la pile d'appels.
Essayez-le en ligne!
JavaScript (ES6),
51 4844 octetsEssayez-le en ligne!
Commenté
la source
APL (Dyalog Unicode) , 22 octets
Essayez-le en ligne!
la source
Husk , 6 octets
Je souhaite vraiment qu'il y avait quelque chose comme
M
pourcmap
:(Essayez-le en ligne ou testez tout!
Explication
Alternativement, 6 octets
Essayez-le en ligne ou testez tout!
Explication
la source
Pari / GP , 30 octets
Essayez-le en ligne!
la source
Gelée , 4 octets
Essayez-le en ligne!
Comment ça marche
la source
Attaché , 25 octets
Essayez-le en ligne!
Explication
la source
Fusain , 12 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Le charbon de bois ne peut pas être converti en base 1, mais heureusement, la somme des chiffres est la même que la conversion en basen + 1 . Explication:
la source
Retina 0.8.2 , 49 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Convertissez en unaire.
Liste tous les numéros de 2 àn + 1 (car c'est plus facile que la conversion de base 1).
Utilisez divmod répété pour convertir le nombre d'origine à chaque base.
Supprimez la liste des bases, en ne laissant que les chiffres de conversion de base.
Prenez la somme et convertissez-la en décimale.
la source
Desmos, 51 octets
Inspiré par la réponse de Conor O'Brien et en regardant l'entrée OEIS, j'ai trouvé ma propre solution Desmos:
Essayez-le en ligne!
la source
APL (NARS), 29 caractères, 58 octets
petit test sur la façon d'utiliser:
la source