Задний план:
Стандартные математические операции, такие как базовое сложение и умножение в реальном мире, работают так:
12 + 123 = 135
а также
12 * 123 = 1476
Это не интересно и скучно! Многие школы уже интерпретируют это как практику, практику, практику формальных алгоритмов. Это подразумевает довольно жесткую и скучную математическую диету и не является тем, что предназначено для этой задачи. Приготовьтесь поиграть на нашем любимом сайте.
Рассмотрим процесс сложения двух положительных целых чисел, а затем повторного добавления всех цифр его результата. Повторять с добавлением, пока не будет получена только одна цифра. Например:
- Результат
12 + 123
135. - Сложив все цифры 135 мы получим
1 + 3 + 5 = 9
.
Количество шагов, необходимых для получения однозначного значения 9 в этом повторном сложении, равно 2.
Как и в предыдущем процессе сложения, умножение двух положительных целых чисел следует тому же процессу. Умножьте все цифры результата и повторяйте этот процесс, пока не останется только одна цифра. Возьмите приведенный выше пример:
- Результат
12 * 123
1476. - Умножьте все цифры 1476, которые мы получим
1 * 4 * 7 * 6 = 168
. - Умножьте снова все цифры 168, которые мы получим
1 * 6 * 8 = 48
. - Умножьте снова все цифры 48, которые мы получим
4 * 8 = 32
. - Умножим еще раз все цифры 32, которые мы получим
3 * 2 = 6
.
Количество шагов, необходимых для получения однозначного значения 6 при этом повторном умножении, составляет 5.
Для этой задачи и во избежание любого неправильного использования математических обозначений я ввожу эти два фиктивных обозначения: (+)
и (*)
, но вы можете использовать любые обозначения , которые вам нравятся , которые работают следующим образом:
- Операция повторного сложения процесса для получения единственного значения
12 (+) 123 = 9
. - Операция повторного процесса умножения для получения одного значения
12 (*) 123 = 6
.
Вызов:
Задача состоит в том, чтобы написать либо программу, либо функцию, которая может выполнять обе операции, как описано в разделе фона: (+)
и (*)
.
Входные данные:
Входы программы или функции являются два положительных целых чисел и одну операцию либо (+)
и (*)
. Формат ввода - произвольный выбор программиста . Вы можете форматировать ввод, например, a (+) b
или , F(a, (+), b)
или любой формат , который вы хотите.
Выход:
Выходные данные программы или функции должны содержать результат операции и количество шагов, требуемых для формата вольного стиля, как вы хотите.
Тестовые случаи (игнорируйте формат ввода и вывода):
81 (+) 31 --> (4 ; 2)
351 (+) 14568 --> (6 ; 3)
21 (*) 111 --> (8 ; 3)
136 (*) 2356 --> (0 ; 2)
Основные правила:
- Это код-гольф , так что кратчайший ответ в байтах побеждает.
Не позволяйте esolangs отговаривать вас от публикации ответов на обычных языках. Получите удовольствие от этой задачи, предоставив максимально короткий ответ на своем языке программирования. Если вы разместите умный ответ и четкое объяснение, ваш ответ будет оценен (следовательно, положительные отзывы) независимо от используемого вами языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с соответствующими параметрами, полные программы и т. Д. Выбор за вами.
- Если возможно, ваша программа может правильно обрабатывать большие числа. Если нет, то все будет хорошо.