( Connexes )
Étant donné un entier n > 1
,
1) Construisez la plage de nombres n, n-1, n-2, ... 3, 2, 1
et calculez la somme
2) Prenez les chiffres individuels de ce nombre et calculez le produit
3) Prenez les chiffres individuels de ce nombre et calculez la somme
4) Répétez les étapes 2 et 3 jusqu'à ce que vous atteindre un seul chiffre. Ce chiffre est le résultat.
Les vingt premiers termes de la séquence sont les suivants:
3, 6, 0, 5, 2, 7, 9, 2, 7, 9, 1, 9, 0, 0, 9, 6, 7, 0, 0, 6
Remarque: cette séquence N'EST PAS dans OEIS.
E / S et règles
- Les nombres deviendront très volumineux rapidement, donc la solution doit être capable de gérer des nombres d'entrée jusqu'à 100 000 sans échec (c'est bien si votre code peut gérer au-delà).
- L'entrée et la sortie peuvent être fournies par n'importe quelle méthode pratique .
- Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
Exemples
n output
1234 9
3005 3
5007 5
9854 8
75849 8
100000 0
code-golf
sequence
number-theory
AdmBorkBork
la source
la source
n
. La solution publiée n'a qu'à fonctionnern = 100000
.Numbers will get very large quickly
non, il ne fait pasRéponses:
Python 2 ,
7772716260 octetsMerci à @xnor d'avoir joué au golf sur 2 octets!
Essayez-le en ligne!
la source
repeat until you reach a single digit
?236172
; et c'est le seul en dessous de 1 million.05AB1E , 7 octets
Essayez-le en ligne!
Exlpanation
la source
Gelée , 8 octets
Essayez-le en ligne!
Programme complet (il retourne un tableau singleton contenant le résultat, mais les crochets ne sont pas visibles dans STDOUT).
la source
MATL ,
1513 octetsEn hommage à la langue du mois :
Essayez-le en ligne!
Je ne pense pas qu'il existe un moyen plus simple d'obtenir les chiffres d'un nombre que de convertir le nombre en chaîne
V
, puis de le transposer!
et de reconvertir ce vecteur vertical en un numériqueU
.Enregistré 2 octets grâce au Créateur 1 lui-même! J'ai oublié la fin implicite, ce qui signifie que je pourrais supprimer
]
, et au lieu de comparer le nombre d'éléments avec1
, je pourrais simplement décrémenter cette valeur et l'utiliser directement comme booléen.Donc, l'explication va comme ceci:
1 ... de MATL, Luis Mendo.
la source
JavaScript (ES6), 60 octets
Essayez-le en ligne!
Commenté
Version alternative, 59 octets (non concurrente)
Une version non récursive qui ne fonctionne que pour n <236172 . (Il couvre la plage demandée mais n'est pas considéré comme un algorithme générique valide.)
Essayez-le en ligne!
la source
Number.MAX_SAFE_INTEGER ** 0.5 ~= 94906265
.Haskell ,
7271 63 octetsMerci à @BMO pour un octet et @nimi pour 8 octets!
Essayez-le en ligne!
la source
Stax ,
141310 octetsExécuter et déboguer
C'était assez amusant à faire. Je me demande s'il y a une façon plus concise de faire la comparaison à la fin.
Explication
-1 octets grâce aux ovs
-3 octets grâce à Scrooble
la source
R ,
152 130109 octetsEssayez-le en ligne!
@Giuseppe a trouvé
2142 octets avec diverses choses R auxquelles je ne suis pas encore habitué, ainsi qu'un moyen d'obtenir les chiffres d'un nombre sans forcer la chaîne et le retour, et avec moins d'octets!options(scipen=9)
esta été nécessaire pour le cas de 9854 pour l'ancienne fonction, parce que la première étape du produit finit comme 80000, qui imprime R + 05 comme 8 E.la source
scipen
: Essayez-le en ligne ! notez quemax(0,log10(x))
c'est parce que six=0
, alorslog10(0)=-Inf
ce qui provoque une erreur.Pyth , 11 octets
Essayez-le ici!
la source
Fusain , 18 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Additionnez les entiers jusqu'à l'entrée.
Alors que le résultat est supérieur à 9, prenez la somme des chiffres du produit des chiffres.
Convertissez le résultat en chaîne et imprimez-le implicitement.
la source
Gaia , 8 octets
Essayez-le en ligne!
L'ancienne explication (avant de corriger un bug qui est la faute de Gaia IMO: P):
Enregistré 1 octet grâce à Dennis .
la source
┅⟨ΣΠ⟩°
enregistre un octet.4
0
résultats[]
pour une raison quelconque :(F #, 175 octets
Essayez-le en ligne!
La seule mise en garde à la fonction est que la valeur d'entrée doit être de type
uint64
.Ungolfed c'est un peu comme ça:
La fonction
d n
convertit le nombren
en ses chiffres composants. Il se convertit d'abord en chaîne, puis obtient chaque caractère de la chaîne. Chaque caractère doit ensuite être reconverti en chaîne, sinon les caractères seront convertis en leurs valeurs ASCII au lieu de leurs valeurs "réelles".La
c n
fonction est la fonction principale, avecn
comme valeur initiale. Dans cette fonctionr
est notre valeur courante. Lawhile
boucle fait ce qui suit:r
en ses chiffres composants (d r
).Seq.reduce
qui prend une fonction avec la valeur cumulée (a
) et la valeur suivante dans la séquence (x
) et dans ce cas retourne le produit. La valeur initiale est le premier élément de la séquence.d
).r
.la source
Befunge, 136 octets
Vous pouvez l' essayer ici .
Bien que tous les interprètes n'aient pas une taille de cellule suffisamment grande, cela fonctionne avec de petits nombres pour à peu près n'importe qui. Pour un plus grand nombre d'entre
n
vous, vous pourriez avoir besoin d'un interprète comme BefunExec .la source
Gol> <> ,
3533 octetsEssayez-le en ligne!
-2 octets par Jo King.
Utilisation extensive des fonctions et boucles infinies implicites.
Exemple de programme complet et son fonctionnement
la source
Japt,
161413 octetsEssayez-le
Explication
la source
Husk , 7 octets
Essayez-le en ligne!
la source
PHP 7, 89 octets
Exécuter en tant que pipe avec
-r
ou l' essayer en ligne .+
pour convertir en int pour~
travailler comme souhaité.for()
place dedo ... while()
.PHP plus ancien nécessite un octet de plus:
for($s=str_split,$a=...;$a>9;)$a=array_sum($s(...));
(Ne pas attribuer
str_split
à une variable du tout gaspillerait un autre octet.)la source
Perl 6 , 49 octets
Essayez-le en ligne!
la source
[*](.comb).comb
place de([*] .comb).comb
Tcl , 118 octets
Essayez-le en ligne!
la source
PowerShell Core ,
91 10193 octetsEssayez-le en ligne!
Ungolfed un peu ...
Les premières étapes ont été de diviser les nombres entiers en chiffres - cela a été fait en divisant le nombre entier en un tableau de caractères de
chaînes. Ensuite, insérez l'opérande, puis évaluez la chaîne en tant que commande. Ensuite, il s'agit de faire le cycle d'ajout multiple jusqu'à ce que l'entrée soit à un chiffre.iex
est un alias pourInvoke-Command
lequel évalue une chaîne passée dans la première position param.Edit: comme demandé par @AdmBorkBork , j'ai ajouté un en-tête de fonction au nombre d'octets. De plus, j'ai fait un peu de calcul et j'ai réalisé que la limite supérieure du nombre d'itérations est
< log log 10^6 < log 6 < 2
, ce qui a permis d'économiser six autres octets.Edit x2: @AdmBorkBork a trouvé un moyen plus concis de convertir l'entier en une expression mathématique, puis a suggéré de le canaliser
iex
. Cela a permis d'économiser 8 octets. Merci!la source
Function F($a){ }
dans votre nombre d'octets. Cependant, je pense que vous devriez pouvoir en sauvegarder certains en utilisant[char[]]
au lieu de-split''-ne''
.[char[]]1234=Ӓ
, qui n'est pas valide; Je pourrais peut-être le faire fonctionner, mais ce n'est peut-être pas évident en ce moment. Merci pour la suggestion![char[]]"$o"
et|iex
plutôt queiex( )
.Perl 5
-p
, 61 octetsEssayez-le en ligne!
la source
Rubis , 57 octets
Essayez-le en ligne!
la source
Java 8, 129 octets
Essayez-le en ligne.
Explication:
la source
Julia 0,6 , 56 octets
Essayez-le en ligne!
Assez simple: calculez la
(n+1)n÷2
somme de 1..n, vérifiez s'il s'agit d'un nombre à un seul chiffre (>9
), si ce n'est pas le cas, essayez à nouveau avec k réglé sur la somme des chiffres du produit des chiffres de k, sinon retournez k.la source