Число Армстронга — натуральное число, которое в данной системе счисления равно сумме своих цифр, возведённых в степень, равную количеству его цифр.
К примеру:
- 9 это число Армстронга, т.к. 9 = 9^1 = 9
- 10 не является подобным числом: 10 != 1^2 + 0^2 = 1
- 153 является числом Армстронга: 153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
Написать функцию определения числа Армстронга в функциональном виде:
- использовать map или другие утилиты functools,
- задействовать анонимные функций (или использовать функцию в качестве аргумента)
- не использовать циклы, предпочитая list comprehensions
def is_armstrong(number):
...
assert is_armstrong(153) == True, 'Число Армстронга'
assert is_armstrong(10) == False, 'Не число Армстронга'
Гипотеза может быть кратко выражена следующим образом:
- берём любое натуральное число n, если оно чётное, то делим его на 2
- если нечётное, то умножаем на 3 и прибавляем 1 (получаем 3n + 1)
- над полученным числом выполняем те же самые действия, и так далее
Гипотеза Коллатца заключается в том, что какое бы начальное число n мы ни взяли, рано или поздно мы получим единицу.
Для числа 12:
12 6 3 10 5 16 8 4 2 1
Всего получаем 9 шагов.
Вычислить число шагов для числа n, согласно гипотезе Коллатца необходимых для достижения этим числом единицы. Выполнить решение в максимально функциональном стиле.
def collatz_steps(n):
...
assert collatz_steps(16) == 4
assert collatz_steps(12) == 9
assert collatz_steps(1000000) == 152