Ceci est différent de My Word peut battre votre Word car il est moins complexe et vous oblige seulement à le calculer, et non à les comparer.
Pour trouver la racine numérique, prenez tous les chiffres d'un nombre, ajoutez-les et répétez jusqu'à obtenir un numéro à un chiffre. Par exemple, si le nombre était 12345
, vous devez ajouter 1
, 2
, 3
, 4
et 5
, obtenir 15
. Vous ajouteriez alors 1
et 5
, vous donnant 6
.
Ta tâche
Compte tenu d' un nombre entier N (0 <= N <= 10 000) à travers STDIN , imprimer la racine numérique de N .
Cas de test
1 -> 1
45 -> 9
341 -> 8
6801 -> 6
59613 -> 6
495106 -> 7
N'oubliez pas qu'il s'agit de code-golf , donc le code avec le plus petit nombre d'octets l'emporte.
code-golf
number
arithmetic
Oliver Ni
la source
la source
number
. En particulier. la saisie doit-elle0
être prise en charge?STALEMATE
. Il serait peut-être préférable de fermer l'autre comme une dupe de cela.Réponses:
Pyke, 1 octet
Essayez-le ici!
Prend la racine numérique de l'entrée
la source
Gelée ,
7 5 43 octetsTryItOnline! ou tous les cas de test
Comment?
La racine numérique est connue pour obéir à la formule (n-1)% 9 + 1.
Ceci est le même que le dernier chiffre dans la base bijective 9
(et en raison de la mise en œuvre que
0ḃ9=[]
et[]Ṫ=0
ces manches du bord cas de zéro).la source
JavaScript (ES6),
1610 octetsCas de test
Afficher l'extrait de code
la source
MATL , 3 octets
Essayez-le en ligne!
Beaucoup de réponses (maintenant supprimées) ont essayé d'utiliser modulo 9 pour obtenir le résultat. C'est un excellent raccourci, mais ne fonctionne malheureusement pas pour les multiples de 9. MATL a une fonction pour modulo sur l'intervalle
[1, n]
. En utilisant ce modulo, nous avons1 % 3 == 1, 2 % 3 == 2, 3 % 3 == 3, 4 % 3 == 1
, etc. Cette réponse prend simplement le modulo d'entrée neuf en utilisant ce modulo personnalisé.la source
Mathematica,
2711 octetsMathematica
Mod
prend un troisième paramètre comme décalage de la plage résultante du modulo. Cela évite de décrémenter l'entrée et d'incrémenter la sortie.la source
Python,
1620 octets+4 octets pour gérer le cas de bord de zéro.
repl.it
la source
~-input()%9+1
print
?0
résultat dans9
plutôt que0
, ce qui est pris en charge par lan and
partie du code) en outre, il aurait compté pour 19 octets et non 13 ( car l'print
espace et doivent être comptés).Julia, 12 octets
ou
mod1
est une alternative àmod
laquelle correspond à la plage[1, n]
au lieu de[0, n)
.la source
PHP, 15 octets
Version précédente PHP, 55 octets
la source
<?=--$argv[1]%9+1?>
Haskell,
3534 octetsEssayez-le sur Ideone.
Explication:
la source
Perl, 15 octets
Comprend +2 pour
-lp
Donnez votre avis sur STDIN
root.pl
C'est la solution ennuyeuse qui a déjà été donnée dans de nombreuses langues, mais au moins cette version prend
0
également en chargePlus intéressant de faire des ajouts répétés réels (bien que dans un autre ordre) n'est en fait que de 1 octet de plus:
la source
R,
72 6729 octetsEdit: Merci à @rturnbull pour avoir rasé deux octets.
la source
ifelse
peut être remplacé par`if`
, avec un comportement identique, ce qui vous fait économiser quelques octets.if
fonctionnait. Pourriez-vous donner un exemple ou peut-être l'ajouter aux conseils pour jouer au golf?ifelse
. Dans ce cas,`if`(n%%9|!n,n%%9,9)
fournit un comportement identique au code que vous avez publié. Autant que je sache, ce comportement n'est pas documenté! Je vais ajouter un commentaire au fil de conseils.Rétine , 7 octets
Essayez-le en ligne!
Je vois beaucoup de solutions mathématiques, mais à Retina, l'approche directe semble être la meilleure.
Explication
{`
fait exécuter le programme entier en boucle jusqu'à ce que la chaîne ne change plus. La boucle se compose de deux étapes:Convertissez chaque chiffre en unaire.
Comptez le nombre de caractères (= convertissez le nombre unaire en décimal).
Cela fonctionne car la conversion de chaque chiffre en unaire sans séparateur entre les chiffres crée un seul nombre unaire qui est égal à la somme de tous les chiffres.
la source
Brachylog , 9 octets
Essayez-le en ligne!
Explication
Approche alternative, 11 octets
Celui-ci utilise le méta-prédicat
i - Iterate
pour appelerI
fois le prédicat{@e+}
sur l'entrée. Cela va essayer des valeurs deI
de0
à l'infini jusqu'à ce que l'on fasse en sorte que la sortie dei
soit un seul chiffre qui soit#0
vrai.la source
JavaScript (ES6),
4138 octetsEnregistré 3 octets, grâce à Bassdrop Cumberwubwubwub
Prend et renvoie une chaîne.
Cas de test
Afficher l'extrait de code
la source
s.split``
pour[...s]
CJam ,
1913 octetsInterprète
Explication:
Merci à 8478 (Martin Ender) pour -6 octets.
CJam, 6 octets
Proposé par 8478 (Martin Ender). Interprète
J'y pensais, mais Martin vient de me le donner. Explication:
la source
:
, vous pouvez donc le faire:~:+
. Cela ne fait pas de mal non plus d'exécuter le bloc au moins une fois, vous pouvez donc utiliser uneg
boucle au lieu d'unew
boucle.r{_,1>}{:~:+`}w
fonctionne, mais je ne sais pas comment suis-je censé utiliserg
ici.r{:~:+_s\9>}g
(bien sûr, la solution sous forme ferméeri(9%)
est beaucoup plus courte.Java 7, 63 octets
Fonction récursive qui obtient juste des chiffres avec mod / div. Rien d'extraordinaire.
Port pas cher
de Jonathan Allan serait un maigre 28 octets:
la source
Python 2,
5451 bytesThanks to Oliver and Karl Napf for helping me save 3 bytes
la source
while len(i)>1
towhile~-len(i)
to save one byte.input()
and force the input the be enclosed in quotes to save 2 bytes.Python, 45 bytes
Takes the argument as a string.
la source
05AB1E, 6 bytes
Try it online!
Explanation
la source
C,
6429 bytesC port from Jonathan Allan's answer (with special case 0).
Previous 64 byte code:
q
takes the cross sum andf
repeats taking the cross sum until a single digit.la source
Retina, 15 bytes
Try it online! (The first line enables a linefeed-separated test suite.)
Explanation
Convert input to unary.
Take 1-based modulo by removing nines that have at least one more character after them.
Count the remaining number of 1s to convert back to decimal.
la source
Perl 6, 29 bytes
Expanded:
la source
Factor, 24
Smart, mathy answer.
63 for dumb iterative solution:
la source
Labyrinth, 8 bytes
using the equation
(n-1)%9+1
:?
reads the input as decimal and pushes it to the stack(
decrements the top of the stack_
pushes a zero onto the top of the stack9
push the top of the stack popped times 10 the digit (in this case, 9)%
pops y, pops x, pushes x%y)
increments the top of the stack!
pops the top of the stack and out puts it as a decimal string@
terminates the programla source
Pyth -
7467 bytesNot the best one, but still beats a decent amount of answers:
Like the previous version, but handling also cases of multiples of 9, using logical or.
This version fails the 45 testcase:
Explanation:
Try it here
Try the previous version here!
Previous solutions:
Explanation:
You're invited to try it here!
la source
jQ9
doesn't act like Jelly'sḃ9
:-PAPL (Dyalog),
159 bytes bytesTry it online!
la source
Hexagony,
1915 bytesMore Readable:
Try it online!
-3 bytes by taking a different approach, making the 0 edge case trivial.
-1 byte by fixing 0 edge case bug
Using the formula ((n-1) mod 9) + 1 like a lot of other solutions aswell.
la source
K (oK), 9 bytes
Solution:
Try it online!
Explanation:
Super straightforward. Break number into digits and sum up - do this until the result converges:
la source
x\y
encodey
in basex
with as many digits as necessary, so it's slightly shorter:(+/10\)/
10\:
.. but not in oK - and.:'$
is the same number of bytes - so I went with that :)\:
in kdb+ (3.4+), but for oK I'd need to know how many 10s to put in my list.Keg, 6 bytes(SBCS on Keg wiki)
Explanation:
la source
Ruby, 12 bytes
la source
19
? Shouldn't that be9
?