Fundo:
As operações matemáticas padrão, como adição e multiplicação básicas no mundo real, funcionam da seguinte maneira:
12 + 123 = 135
e
12 * 123 = 1476
Isso não é interessante e chato! Muitas escolas já estão interpretando isso como prática, prática, prática de algoritmos formais. Isso implica uma dieta matemática bastante rígida e chata e não é o que se pretende neste desafio. Prepare-se para se divertir um pouco no nosso amado site.
Considere o processo de adicionar dois números inteiros positivos e, em seguida, adicionar novamente todos os dígitos do resultado. Repetindo com a adição até que apenas um dígito seja obtido. Por exemplo:
- O resultado de
12 + 123
é 135. - Adicionando todos os dígitos de 135, obtemos
1 + 3 + 5 = 9
.
O número de etapas necessárias para obter um valor de um dígito 9 nesta adição repetida é 2.
Como no processo anterior da adição, a multiplicação de dois números inteiros positivos segue o mesmo processo. Multiplique todos os dígitos do resultado e, em seguida, repita esse processo até restar apenas um dígito. Veja o exemplo acima:
- O resultado
12 * 123
é 1476. - Multiplique todos os dígitos de 1476 que obtemos
1 * 4 * 7 * 6 = 168
. - Multiplique novamente todos os dígitos de 168 que obtemos
1 * 6 * 8 = 48
. - Multiplique novamente todos os dígitos de 48 que obtemos
4 * 8 = 32
. - Multiplique mais uma vez todos os dígitos de 32 que obtemos
3 * 2 = 6
.
O número de etapas necessárias para obter um valor de um dígito 6 nessa multiplicação repetida é 5.
Para esse desafio e para evitar qualquer uso indevido de notações matemáticas, apresento essas duas notações falsas: (+)
e (*)
, mas você pode usar qualquer notação que desejar , que funciona da seguinte maneira:
- A operação do processo de adição repetida para obter um único valor é
12 (+) 123 = 9
. - A operação do processo de multiplicação repetida para obter um único valor é
12 (*) 123 = 6
.
Desafio:
O desafio é escrever um programa ou uma função que possa executar as duas operações, conforme explicado na seção em segundo plano: (+)
e (*)
.
Entrada:
As entradas do programa ou da função são dois números inteiros positivos e uma operação é (+)
e (*)
. O formato da entrada é uma escolha arbitrária do programador . Você pode formatar a entrada, por exemplo, a (+) b
ou F(a, (+), b)
ou qualquer formato que desejar.
Resultado:
A saída do programa ou da função deve conter o resultado da operação e o número de etapas necessárias com o formato freestyle, conforme desejado.
Casos de teste (ignore o formato de entrada e saída):
81 (+) 31 --> (4 ; 2)
351 (+) 14568 --> (6 ; 3)
21 (*) 111 --> (8 ; 3)
136 (*) 2356 --> (0 ; 2)
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence o desafio.
Não permita que a esolangs o desencoraje de postar uma resposta em idiomas comuns. Aproveite esse desafio, fornecendo uma resposta o mais curta possível com sua linguagem de programação. Se você postar uma resposta inteligente e uma explicação clara, sua resposta será apreciada (daí os votos positivos), independentemente da linguagem de programação usada. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados, programas completos, etc. A escolha é sua.
- Se possível, seu programa pode lidar adequadamente com grandes números. Caso contrário, tudo ficará bem.