Isso é diferente do que o My Word pode bater no seu Word , pois é menos complexo e requer apenas que você o calcule, e não os compare.
Para encontrar a raiz digital, pegue todos os dígitos de um número, adicione-os e repita até obter um número de um dígito. Por exemplo, se o número era 12345
, você gostaria de acrescentar 1
, 2
, 3
, 4
, e 5
, recebendo 15
. Você então adicionaria 1
e 5
, dando a você 6
.
Sua tarefa
Dado um número inteiro N (0 <= N <= 10.000) através STDIN , imprimir a raiz digital do N .
Casos de teste
1 -> 1
45 -> 9
341 -> 8
6801 -> 6
59613 -> 6
495106 -> 7
Lembre-se de que isso é código-golfe , portanto o código com o menor número de bytes vence.
code-golf
number
arithmetic
Oliver Ni
fonte
fonte
number
. Em particular. entrada deve0
ser suportada?STALEMATE
. Talvez seja melhor fechar o outro como um burro disso.Respostas:
Pyke, 1 byte
Experimente aqui!
Pega a raiz digital da entrada
fonte
Geléia ,
7 5 43 bytesTryItOnline! ou todos os casos de teste
Quão?
A raiz digitais é conhecida a obedecer à fórmula (n-1)% 9 + 1.
É o mesmo que o último dígito na base bijetiva 9
(e devido à implementação que
0ḃ9=[]
e[]Ṫ=0
isso lida com o caso de zero).fonte
JavaScript (ES6),
1610 bytesCasos de teste
Mostrar snippet de código
fonte
MATL , 3 bytes
Experimente online!
Muitas (respostas agora excluídas) tentaram usar o módulo 9 para obter o resultado. Este é um ótimo atalho, mas infelizmente não funciona para múltiplos de 9. O MATL tem uma função para módulo no intervalo
[1, n]
. Usando este módulo, temos1 % 3 == 1, 2 % 3 == 2, 3 % 3 == 3, 4 % 3 == 1
, etc. Essa resposta simplesmente pega o módulo de entrada nove usando esse módulo personalizado.fonte
Mathematica,
2711 bytesO Mathematica
Mod
usa um terceiro parâmetro como um deslocamento da faixa resultante do módulo. Isso evita diminuir a entrada e aumentar a saída.fonte
Python,
1620 bytes+4 bytes para lidar com maiúsculas e minúsculas zero.
repl.it
fonte
~-input()%9+1
print
?0
resultado em9
vez de0
, que é o que é atendido pelan and
parte do código) além disso, contaria 19 bytes e não 13 ( desde que oprint
espaço seja contado).Julia, 12 bytes
ou
mod1
é uma alternativa àmod
qual mapeia o intervalo em[1, n]
vez de[0, n)
.fonte
PHP, 15 bytes
Versão anterior PHP, 55 bytes
fonte
<?=--$argv[1]%9+1?>
Haskell,
3534 bytesTry it on Ideone.
Explanation:
fonte
Perl, 15 bytes
Includes +2 for
-lp
Give input on STDIN
root.pl
This is the boring solution that has already been given in many languages, but at least this version supports
0
tooMore interesting doing real repeated additions (though in another order) is in fact only 1 byte longer:
fonte
R,
72 6729 bytesEdit: Thanks to @rturnbull for shaving off two bytes.
fonte
ifelse
can be replaced by`if`
, with identical behavior, which saves you a couple of bytes.if
` worked. Could you give an example or maybe add it to Tips for golfing in ?ifelse
. In this case,`if`(n%%9|!n,n%%9,9)
provides identical behavior to the code you've posted. As far as I can tell, this behavior is undocumented! I'll add a comment to the tips thread.Retina, 7 bytes
Try it online!
I see lots of mathematical solutions, but in Retina the straightforward approach seems to be the best one.
Explanation
{`
makes the whole program run in a loop until the string doesn't change anymore. The loop consists of two stages:Convert each digit to unary.
Count the number of characters (=convert the unary number to decimal).
This works because converting each digit to unary with no separator between digits creates a single unary number which is equal to the sum of all digits.
fonte
Brachylog, 9 bytes
Try it online!
Explanation
Alternative approach, 11 bytes
This one uses the meta-predicate
i - Iterate
to callI
times the predicate{@e+}
on the input. This will try values ofI
from0
to infinity until one makes it so that the output ofi
is a single digit which makes#0
true.fonte
JavaScript (ES6),
4138 bytesSaved 3 bytes, thanks to Bassdrop Cumberwubwubwub
Takes and returns a string.
Test cases
Show code snippet
fonte
s.split``
to[...s]
CJam,
1913 bytesInterpreter
Explanation:
Thanks to 8478 (Martin Ender) for -6 bytes.
CJam, 6 bytes
Suggested by 8478 (Martin Ender). Interpreter
I was thinking about it, but Martin just got it before me. Explanation:
fonte
:
, so you can do:~:+
. It also doesn't hurt to run the block at least once so you can use ag
loop instead of aw
loop.r{_,1>}{:~:+`}w
works, but I don't know how on earth am I supposed to useg
here.r{:~:+_s\9>}g
(of course the closed form solutionri(9%)
is much shorter.Java 7, 63 bytes
Recursive function which just gets digits with mod/div. Nothing fancy.
Cheap port
of Jonathan Allan's would be a measly 28 bytes:
fonte
Python 2,
5451 bytesThanks to Oliver and Karl Napf for helping me save 3 bytes
fonte
while len(i)>1
towhile~-len(i)
to save one byte.input()
e forçar a entrada entre aspas para economizar 2 bytes.Python, 45 bytes
Takes the argument as a string.
fonte
05AB1E, 6 bytes
Try it online!
Explanation
fonte
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.fonte
Retina , 15 bytes
Experimente online! (A primeira linha ativa um conjunto de testes separado por avanço de linha.)
Explicação
Converter entrada para unário.
Tome um módulo baseado em 1 removendo noves que tenham pelo menos mais um caractere depois deles.
Conte o número restante de 1s para converter novamente em decimal.
fonte
Perl 6 , 29 bytes
Expandido:
fonte
Fator , 24
Resposta inteligente e matemática .
63 para solução iterativa burra:
fonte
Labirinto , 8 bytes
usando a equação
(n-1)%9+1
:?
lê a entrada como decimal e a envia para a pilha(
diminui o topo da pilha_
coloca um zero no topo da pilha9
empurre a parte superior da pilha estalada vezes 10 o dígito (neste caso, 9)%
aparece y, aparece x, empurra x% y)
incrementa o topo da pilha!
aparece o topo da pilha e coloca-o como uma string decimal@
finaliza o programafonte
Pitão -
7467 bytesNão é a melhor, mas ainda supera uma quantidade decente de respostas:
Como a versão anterior, mas também manipulando casos de múltiplos de 9, usando lógica ou.
Esta versão falha no 45 testcase :
Explicação:
Experimente aqui
Experimente a versão anterior aqui!
Soluções anteriores:
Explicação :
Você está convidado a experimentar aqui !
fonte
jQ9
não age como Jellyḃ9
:-PAPL (Dyalog) ,
15bytes de 9 bytesExperimente online!
fonte
Hexagonia,
1915 bytesMais legível:
Experimente online!
-3 bytes, adotando uma abordagem diferente, tornando o caso da aresta 0 trivial.
-1 byte corrigindo 0 erro de caso de borda
Usando a fórmula ((n-1) mod 9) + 1, como muitas outras soluções também.
fonte
K (oK) , 9 bytes
Solução:
Experimente online!
Explicação:
Super direto. Divida o número em dígitos e resuma - faça isso até o resultado convergir:
fonte
x\y
codificaçãoy
na basex
com o número de dígitos necessário, por isso é um pouco mais curto:(+/10\)/
10\:
.. mas não em OK - e.:'$
é o mesmo número de bytes - então eu fui com que :)\:
no kdb + (3.4+), mas para oK eu precisaria saber quantos 10s colocar na minha lista.Barril , 6 bytes (SBCS no wiki do barril)
Explicação:
fonte
Ruby, 12 bytes
fonte
19
? Isso não deveria ser9
?