O código mais curto para passar todas as possibilidades vence.
Em matemática, a persistência de um número mede quantas vezes uma determinada operação deve ser aplicada aos seus dígitos até que certa condição fixa seja atingida. Você pode determinar a persistência aditiva de um número inteiro positivo adicionando os dígitos do número inteiro e repetindo. Você continuaria adicionando os dígitos da soma até encontrar um número de dígito único. O número de repetições necessárias para alcançar esse número de um dígito é a persistência aditiva desse número.
Exemplo usando 84523:
84523
8 + 4 + 5 + 2 + 3 = 22
2 + 2 = 4
It took two repetitions to find the single digit number.
So the additive persistence of 84523 is 2.
Você receberá uma sequência de números inteiros positivos dos quais precisa calcular a persistência aditiva. Cada linha conterá um número inteiro diferente para processar. A entrada pode estar em qualquer método de E / S padrão .
Para cada número inteiro, você deve gerar o número inteiro, seguido por um único espaço, seguido por sua persistência aditiva. Cada número inteiro processado deve estar em sua própria linha.
Casos de teste
Saída de Entrada
99999999999 3
10 1
8 0
19999999999999999999999 4
6234 2
74621 2
39 2
2677889 3
0 0
fonte
Respostas:
K - 29 caracteres
Input é um nome de arquivo passado como argumento, 29 caracteres, incluindo o nome do arquivo.
fonte
-1+#
=>#1_
Python 84 Chars
fonte
06234
.. resultado um desafio bem sucedido :-)Haskell, 100 caracteres
fonte
read.pure
vez de(-48+).fromEnum
, experimente online!Python (93 bytes)
fonte
9
e err ...and
input()
vez deint(raw_input())
...06234
.Casca ,
1015 bytes+5 bytes para requisitos de E / S horríveis
Experimente online!
Explicação
Para suportar várias entradas, precisamos usar
m(₁r)¶
(onde₁
está a função que faz o cálculo interessante):A função
₁
faz o seguinte:fonte
bash, 105 caracteres
Quase nenhum golfe realmente envolveu, mas não vejo como melhorá-lo.
fonte
Haskell - 114
fonte
pure
mais(:[])
e definindo um operador em vez des
, experimentá-lo online!Rubi, 85 caracteres
Eu tive que pegar emprestada a idéia do "sum-size * 48" de Alex, porque é muito legal para perder (pelo menos em Ruby).
fonte
Golfscript, 40 caracteres
fonte
J - 45 caracteres
Lê a partir de stdin
fonte
^:a:
me usar, mas não consegui encontrar a documentação adequada ... alguma dica?a:
através do^:a:
truque no J Reference Card [PDF]^:a:
que eu sabia: D^:(<'')
inicialmente (provavelmente para Kaprekar), até que a vi no cartão e aprendi sobrea:
a ocasião.c - 519
(ou 137, se você me creditar pela estrutura ...)
Em vez de resolver apenas essa operação, decidi produzir uma estrutura para resolver todos os problemas de persistência .
Somente as duas linhas a partir de
char*b
são exclusivas para esse problema.Ele trata a entrada como strings, o que significa que os "0" iniciais não são strip antes do estágio de saída.
O item acima teve comentários, verificação e relatório de erros e leitura de arquivos (a entrada deve vir da entrada padrão) dividida em:
Um pouco mais poderia ser salvo se estivéssemos dispostos a vazar memória como uma peneira. Da mesma forma, com
#define
retorno e coisas do gênero, mas neste momento não me importo de torná-lo mais feio.fonte
J, 74 caracteres
Edições
[:
para Ats@
0".
para".
simplificar as coisasPor exemplo
fonte
Eu acho que isso é o melhor que posso encontrar.
Ruby 101 Chars
fonte
Pari / GP 101 Chars
Infelizmente, não há função de entrada para o GP, então acho que falta a parte IO. :(Corrigido: Obrigado Eelvex! :)fonte
input()
:)Javascript - 95
EDIT: Whoops não faz as multi-linhas
fonte
J, 78
Solução recursiva. Lê de stdin. Escreve para stdout , então me dê uma folga - são necessários 18 caracteres extras.
fonte
Perl - 77 caracteres
fonte
JavaScript ,
5747 bytes-10 bytes graças a @ l4m2!
Experimente online!
fonte
f=(s,c=0)=>s>9?f([...s+""].reduce((x,y)=>x*1+y*1),++c):c
f=(s,c=0)=>s>9?f([...s+""].reduce((x,y)=>x- -y),++c):c
f=(s,c=0)=>s>9?f(eval([...s+""].join`+`)),++c):c
s>9
eeval
foram ótimas idéias. Eu acho que você tinha um parênteses extra lá, totalizando 10 bytes que você me salvou :-) #05AB1E , 13 bytes
Insira como uma lista de números inteiros.
Experimente online.
Explicação:
fonte
MathGolf , 11 bytes
Experimente online!
Incrivelmente ineficiente, mas não nos importamos com isso. Basicamente, usando o fato de que a persistência aditiva de um número é menor ou igual ao próprio número.Usa o fato de que a persistência aditiva é menor ou igual ao número de dígitos do número. Agora passa em todos os casos de teste com facilidade.
O formato de entrada, embora abaixo do ideal para alguns idiomas, é realmente o método padrão de receber vários casos de teste como entrada no MathGolf. Cada linha da entrada é processada como sua própria execução do programa e a saída é separada por uma nova linha para cada execução.
Explicação (usando
n = 6234
)fonte
K (ngn / k) , 16 bytes
Solução:
Experimente online!
Explicação:
fonte
Stax ,
811 bytesExecute e depure
+3 bytes graças a @Khuldraeseth (a primeira resposta não teve resultados compatíveis)
fonte
i
no lugar deu
. Seguindo as especificações draconianas de E / S, isso se torna 11 bytes .scala 173:
fonte
Perl 5 , 65 bytes
Experimente online!
fonte
Java (OpenJDK 8) , 79 bytes
Experimente online!
É provável que haja um potencial para jogar mais, mas analisarei isso no futuro, mas, por enquanto, estou muito feliz com esse pequeno resultado.
fonte
Python 3 , 82 bytes
fonte
Tcl , 95 bytes
Experimente online!
fonte
Japonês , 28 bytes
Experimente online!
fonte
PHP, 72 + 1 bytes
+1 para
-R
sinalizador.Corra como cano com
-R
.$i
deve ser inicializado.(Além disso, não imprimiria nada em vez de
0
dígitos únicos sem a inicialização.)fonte
Bash + coreutils, 83 bytes
Experimente online!
Deve ser salvo em um script chamado
a
e colocado no sistemaPATH
, como se chama recursivamente. Recebe entrada da linha de comando, comoa 1999
. Retorna pelo código de saída.O TIO tem algumas limitações sobre o que você pode fazer com um script; portanto, há algum código padrão para fazer isso rodar no cabeçalho.
Imprime um erro
stderr
para entrada maior do que os números inteiros do bash podem suportar, mas, como o cálculo real é feito com seqüências de caracteres, ele ainda dá o resultado certo de qualquer maneira.fonte