Définissons une séquence: la séquence de sommation à n chiffres (n-DSS) est une séquence qui commence par n . Si le dernier nombre était k , le nombre suivant est k + la somme des chiffres (k) . Voici les premiers n-DSS:
1-DSS: 1, 2, 4, 8, 16, 23, 28, 38, 49, 62, 70...
2-DSS: 2, 4, 8, 16, 23, 28, 38, 49, 62, 70, 77...
3-DSS: 3, 6, 12, 15, 21, 24, 30, 33, 39, 51, 57...
4-DSS: 4, 8, 16, 23, 28, 38, 49, 62, 70, 77, 91...
5-DSS: 5, 10, 11, 13, 17, 25, 32, 37, 47, 58, 71...
6-DSS: 6, 12, 15, 21, 24, 30, 33, 39, 51, 57, 69...
7-DSS: 7, 14, 19, 29, 40, 44, 52, 59, 73, 83, 94...
8-DSS: 8, 16, 23, 28, 38, 49, 62, 70, 77, 91, 101...
9-DSS: 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99...
Pour 1, c'est A004207 , bien que les premiers chiffres soient différents en raison d'une définition légèrement différente. Pour 3, c'est A016052 ; pour 9, A016096 .
Le défi d'aujourd'hui est de trouver la séquence de somme à n chiffres la plus basse dans laquelle un nombre donné apparaît. C'est ce qu'on appelle la "fonction colombienne inverse", et c'est A036233 . Les vingt premiers termes, commençant par 1 sont:
1, 1, 3, 1, 5, 3, 7, 1, 9, 5, 5, 3, 5, 7, 3, 1, 5, 9, 7, 20
Quelques autres bons cas de test:
117: 9
1008: 918
Vous ne devez gérer que des entiers supérieurs à 0 et vous pouvez prendre des entrées et des sorties dans n'importe quel format standard. Comme d'habitude, c'est le golf de code , donc la réponse la plus courte dans chaque langue l'emporte.
Réponses:
Haskell ,
1046463 octets(-26 grâce à H.PWiz, -14 supplémentaire grâce au Sriotchilism O'Zaic, -1 supplémentaire grâce à cole)
Ceci est une fonction.
Essayez-le en ligne!
Explication:
Séquence de fonctions composées qui renvoie y + somme numérique de y. Convertit d'abord en chaîne, puis fait de la gymnastique monade pour obtenir la somme des caractères et le nombre d'origine (grâce à Cole).
L'
<*>
opérateur dans ce contexte a un type et une définitionafin que nous puissions écrire ce qui précède comme
Cela
read . pure
convertit unChar
en un nombre,(+) . read . pure :: Char -> Int -> Int
ajoute donc un chiffre à une valeur cumulée. Cette valeur est initialisée au nombre donné dans le pli.until
applique à plusieurs reprises une fonction à son résultat (dans ce cas, la somme numérique y + y) jusqu'à ce qu'elle réponde à une exigence spécifiée par une fonction dans le premier argument. Cela donne le plus petit élément y-DSS supérieur ou égal à x.Liste paresseuse infinie de y telle que le plus petit élément y-DSS> = x est en fait x. Utilise la notation de compréhension de liste de Haskell (que j'avais aussi totalement oubliée, merci à tous).
Premier élément de cette liste, qui est le plus petit y qui satisfait l'exigence du défi.
la source
fmap
en premier lieu me déroute un peu.Python 2 ,
7371 octets-2 octets grâce à Erik .
Essayez-le en ligne!
la source
l
àk>n
.Perl 6 , 44 octets
Essayez-le en ligne!
Solution naïve qui vérifie chaque séquence jusqu'à ce qu'elle en trouve une contenant l'entrée
Explication:
la source
Rubis , 51 octets
Essayez-le en ligne!
la source
Gelée , 11 octets
Essayez-le en ligne!
Programme complet.
la source
MATL , 18 octets
Essayez-le en ligne! Ou vérifiez les 20 premières valeurs .
Explication
Pour la saisie
i
, cela continue d'augmentern
jusqu'à ce que les premiersi
termes de lan
-ième séquence soient inclusi
. Il suffit de tester lesi
termes pour chaque séquence car la séquence augmente.la source
Forth (gforth) , 106 octets
Essayez-le en ligne!
Explication du code
la source
Pyth , 13 octets
Essayez-le ici ou consultez la suite de tests .
Comment ça marche
la source
fqQ.W<HQ+sjZ10
pour 14. Je continue d'oublier `et s comme moyen d'obtenir des chiffres d'un entier!Gelée , 9 octets
Un lien monadique acceptant un entier positif
n
qui donne un entier positifa(n)
, le Colombien inverse den
.Essayez-le en ligne! Ou consultez la suite de tests .
Comment
En fait, nous travaillons en arrière, en recherchant à plusieurs reprises la valeur à laquelle nous avons ajouté jusqu'à ce que nous n'en trouvions pas:
Utiliser
13
comme exemple ...la source
Python 2 , 85 octets
Essayez-le en ligne!
Cela fonctionne certainement pour tous les cas de test, ainsi que pour toutes les entrées 1 à 88 données à OEIS; mais je suis sûr que pas tout à fait c'est prouvable correct. (C'est l'une de mes plaintes concernant le Church Of Unit Testing :)).
la source
a.index(n)
Wolfram Language (Mathematica) , 61 octets
Essayez-le en ligne!
la source
MathGolf , 13 octets
Essayez-le en ligne!
Grand défi! Cela m'a amené à trouver quelques bugs dans le comportement pop implicite de MathGolf, qui a ajouté 1-2 octets à la solution.
Pour prouver que cela fonctionnera toujours, il est facile de voir cela
n <= input
, carinput
c'est le premier élément de lainput
e séquence. Je n'ai techniquement pas prouvé que cette solution est toujours valide, mais elle réussit tous les cas de test que j'ai testés.la source
05AB1E , 13 octets
Essayez-le en ligne!
la source
Nettoyer , 86 octets
Essayez-le en ligne!
Étendu:
Ça me dérange c'est
digitToInt d
plus quetoInt d-48
la source
C (gcc) , 102 octets
Essayez-le en ligne!
la source
JavaScript, 65 octets
Essayez-le en ligne!
Il fonctionne également en C, mais coûte un octet de plus
C (gcc) , 66 octets
Essayez-le en ligne!
la source
C # (Visual C # Interactive Compiler) ,
83, 82 octetsEssayez-le en ligne!
la source
Japt ,
1514 octetsLe ternaire pour gérer les cas où
input=output
ça m'ennuie!Essayez-le
la source
cQuents , 18 octets
Essayez-le en ligne!
Explication
la source
Forth (gforth) , 99 octets
Essayez-le en ligne!
Largement similaire à la soumission de reffu (106 octets) . Les parties golfées sont:
Comment ça marche
la source
Fusain , 26 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Utilise l'algorithme de @ ChasBrown. Si cela s'avère invalide, alors pour 29 octets:
Essayez-le en ligne! Le lien est vers la version détaillée du code. Fonctionne en calculant le premier membre de chaque séquence de sommation de chiffres au moins
n
. Explication:Entrée
n
.Boucle jusqu'à ce que nous trouvions une séquence de sommation de chiffres contenant
n
.La séquence suivante commence avec une de plus que le nombre de séquences jusqu'à présent.
Boucle pendant que le membre de la séquence est inférieur à
n
.Ajoutez la somme des chiffres pour obtenir le prochain membre de la séquence.
Poussez le dernier membre dans la liste.
Imprimez le nombre de listes calculées jusqu'à ce que nous en trouvions une contenant
n
.la source
Rouge , 103 octets
Essayez-le en ligne!
la source
CJam , 25 octets
Essayez-le en ligne!
la source
Gaia , 16 octets
Essayez-le en ligne!
Renvoie une liste contenant le plus petit entier.
Gaia , 16 octets
Essayez-le en ligne!
Utilise l'observation faite par M. Xcoder . Ce n'est pas plus court que l'autre, mais c'est quand même une approche intéressante.
Gaia , 16 octets
Essayez-le en ligne!
Troisième approche ne pas utiliser
N-find
,#
mais toujours compter sur la même observation que l'approche du milieu. Renvoie un entier plutôt qu'une liste.la source
Clojure , 106 octets
Essayez-le en ligne!
Il s'agit de 99 octets mais entraîne un dépassement de capacité de la pile sur des entrées plus importantes (peut-être que l'ajustement de la JVM pourrait aider):
la source
C # (Visual C # Interactive Compiler) , 75 octets
Essayez-le en ligne!
la source
Husk ,
1410 octets-4 merci à @ H.PWiz
Essayez-le en ligne!
la source
€mΩ≥¹SF+dN
(je sens toujours qu'il y a plus court)V£⁰m¡SF+dN
encre ,
130127 octetsEssayez-le en ligne!
-3 bytes
en convertissant en un programme complet qui prend une entrée unaire.Cela semble trop long pour ne pas être jouable au golf.
Non golfé
la source
C (gcc) ,
807978 octetsEssayez-le en ligne!
-2 au plafond
la source