O matemático louco possui uma grande coleção de números e, portanto, o espaço que resta é bastante limitado. Para economizar alguns, ele deve dobrar seus números inteiros, mas infelizmente ele é realmente preguiçoso. Sua tarefa, se você deseja ajudá-lo, é criar uma função / programa que dobre um número inteiro positivo para o nosso número maníaco.
Como dobrar um número inteiro?
Se é igualmente divisível pela soma de seus dígitos, divida-o pela soma de seus dígitos. Se não atender a esse requisito, pegue o restante quando dividido pela soma de seus dígitos. Repita o processo até o resultado chegar 1
. O número inteiro dobrado é o número de operações que você teve que executar. Vamos dar um exemplo (digamos 1782
):
Obter a soma de seus dígitos:
1 + 7 + 8 + 2 = 18
.1782
é igualmente divisível por18
, então o próximo número é1782 / 18 = 99
.99
não é divisível por9 + 9 = 18
, por conseguinte, tomamos o restante:99 % 18 = 9
.9
é obviamente divisível por9
, então dividimos e obtemos1
.
O resultado é que 3
foram necessárias três operações para alcançar 1
.
Regras e especificações
Alguns números inteiros podem ter a soma dos dígitos iguais a
1
, como10
ou100
. Seu programa não precisa lidar com esses casos. Isso significa que você terá a garantia de que o número inteiro fornecido como entrada não tem a soma dos dígitos igual a1
, e nenhuma operação com o número inteiro especificado resultará em um número cuja soma dos dígitos seja1
(exceto1
ela mesma, que é o " alvo"). Por exemplo, você nunca receberá10
ou20
como entrada.A entrada será um número inteiro positivo maior que
1
.Aplicam-se lacunas padrão .
Você pode receber e fornecer saída por qualquer média padrão .
Casos de teste
Entrada -> Saída 2 -> 1 5 -> 1 9 -> 1 18 -> 2 72 -> 2 152790 -> 2 152 -> 3 666 -> 3 777 -> 3 2010 -> 3 898786854 -> 4
Aqui está um programa que permite visualizar o processo e tentar mais casos de teste.
Isso é código-golfe , então o código mais curto em cada idioma (marcado em bytes) vence!
8987868546
é uma entrada válida, ele vai quebrar a sua ferramenta de teste, e também muitos (se não todas) das respostas ...898786854
, não8987868546
(ter adicionado um6
no final)8987868546
não é 1 ( regra 1 atendida ) e8987868546
é um número inteiro positivo maior que 1 ( regra 2 atendida ).Respostas:
05AB1E ,
1312 bytesExperimente online!
Explicação
fonte
Python 2 ,
6357 bytes-1 graças a totalmente humano
-1 graças a Mr. Xcoder
-4 graças a reffu
Experimente online!
fonte
Haskell,
8578 bytesEconomizou 7 bytes graças a Bruce Forte.
Experimente online.
fonte
divMod
e soltando owhere
: Experimente online!where
. Vou usar isso no futuro. :)sum[read[d]|d<-show n]
salva um byteJavaScript (ES6),
66585149 bytesRecebe a entrada como um número inteiro. Retorna
false
para0
ou1
e gera um erro de estouro quando encontra qualquer número cujos dígitos sejam somados1
.Teste-o
fonte
eval(array.join`+`)
?Casca , 12 bytes
Experimente online!
Explicação
fonte
C # (.NET Core) , 87 bytes
Experimente online!
Função Lambda que pega e retorna um número inteiro.
fonte
Japonês ,
221917 bytes-3 bytes graças a @Shaggy.
-2 bytes graças a @ETHproductions
Experimente online!
fonte
s_¬
paraì
salvar mais dois bytes :-)Retina , 100 bytes
Experimente online! O link inclui apenas casos de teste menores, pois os maiores demoram muito.
fonte
Mathematica, 73 bytes
fonte
==0
ser substituído por<1
?PHP, 68 + 1 bytes
saída unária:
saída decimal, 73 + 1 bytes:
Execute como pipe
-nR
ou experimente online .O operador Elvis requer PHP 5.3 ou posterior. Para PHP antigo, substitua
?:
por?$n%$s:
(+5 bytes).fonte
Ruby, 46 bytes
fonte
Haskell ,
94938988 bytesIsso parece muito longo ..
Experimente online!
Obrigado @Laikoni & @nimi por jogar golfe com 1 byte cada!
fonte
C (gcc) ,
83817673 bytesExperimente online!
fonte
Gelatina , 12 bytes
Experimente online!
fonte
Pitão,
2014 bytesExperimente aqui.
fonte
Perl,
71bytes,64bytes, 63 bytesExperimente online
EDIT: salvou 7 bytes, graças ao comentário de Xcali
EDIT: desde 5.14 substituição não destrutiva s /// r
fonte
-pl
superior deve ser um sinalizador de linha de comando?-pl
bandeira de acordo com esta postagem .$c
não precisa ser inicializado. Ele começará comundef
0. O ponto-e-vírgula após o fechamento do tempo pode terminar. Além disso, você não precisa-l
. Não é necessário receber várias entradas em uma execução.Dyalog APL, 36 bytes
Experimente online!
Quão?
fonte
Gaia , 13 bytes
Experimente online!
Explicação
fonte
Matlab, 150 bytes
As entradas devem ser fornecidas para a função como uma string, como X ('152').
A função funciona enquanto faz loop e incrementa d. A
x=y;
linha era necessária para evitar um erro do Matlab ao tentar ler e substituir um valor de variável ao mesmo tempo, aparentemente, o que era novo para mim.Ungolfed:
fonte
Haskell , 68 bytes
Experimente online! Com base na resposta de w0lf .
fonte
R , 85 bytes
Função anônima que retorna a saída necessária.
Verifique todos os casos de teste!
fonte