Skip to content

Instantly share code, notes, and snippets.

@Xifax
Last active August 8, 2018 07:50
Show Gist options
  • Save Xifax/ad041a10f723aebad2995c3ce99968ee to your computer and use it in GitHub Desktop.
Save Xifax/ad041a10f723aebad2995c3ce99968ee to your computer and use it in GitHub Desktop.
Варианты задачек

Проверка на числа Армсторнга

Число Армстронга — натуральное число, которое в данной системе счисления равно сумме своих цифр, возведённых в степень, равную количеству его цифр.

К примеру:

  • 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment