P. Обратная связь

Одной из популярных стратегий в программировании являются «коллбэки» (callback). Это функция передаваемая в качестве параметра и выполняемая при соблюдении тех или иных условий.

Напишите функцию login, которая принимает имя пользователя и пароль, а также два «коллбэка», первый для реакции на успешную авторизацию, а второй — на ошибку.
Каждый из «коллбэков» в качестве параметра принимает имя пользователя.

Для проверки правильности пароля следуйте алгоритму:

  • найдите сумму всех кодов символов имени пользователя;
  • умножьте, полученное значение, на длину имени;
  • переведите, переведите полученное значение в 16-ричную систему счисления.

Полученная в итоге строка, будет соответствовать перевёрнутому паролю.

Примечание

В решении не должно быть ничего, кроме выражения.

Пример

Ввод

def on_login(username):
    print(f'Hello, {username}!')


def on_fail(username):
    print(f'Nice try... You are not {username}!')


login('NoobMaster', '4C72', on_login, on_fail)

Вывод

Hello, NoobMaster!

Ввод

def hello(username):
    print(f'Здравствуйте, {username}!')


def alert(username):
    print(f'!!! Попытка взлома аккаунта {username} !!!')
    print('Блокировка системы через...', 5, 4, 3, 2, 1, 'ТРЕВОГА!', sep='\n')


login('оченьМаленькийРозовыйПони', 'EDE5A', hello, alert)

Вывод

!!! Попытка взлома аккаунта оченьМаленькийРозовыйПони !!!
Блокировка системы через...
5
4
3
2
1
ТРЕВОГА!

Решение

Простая задача. Считаем сумму кодов всех символов с помощью функции ord(). Умножаем результат на длину имени пользователя. Переводим в шестнадцатиричную систему любым удобным способом (f-строки или функция hex) и сравниваем с паролем, приведенным к нижнему регистру. В случае совпадения вызываем функцию, которую мы получили в переменной success, в противном случае вызываем error().

Посмотреть код

Решение

Python
def login(name, password, success, error):
    total = sum(ord(ch) for ch in name)
    total *= len(name)
    hex_str = f'{total:x}'
    if hex_str == password[::-1].lower():
        success(name)
    else:
        error(name)