Этот текст описывает решения нескольких задач 5 kyu уровня сложности на платформе Codewars, используя язык программирования Python. Рассмотрены задачи, связанные с функциональным программированием, шифром Цезаря, поиском максимальной суммы подмассива и генерацией хэштегов.
Задачи на Codewars (5 kyu)
В этом разделе представлены решения нескольких задач с Codewars.
Вычисления с использованием функций
Задача заключается в написании функции, которая выполняет вычисления с использованием вложенных функций, возвращающих целые числа. Вложенные функции представляют собой математические операции (+, -, *, //) над двумя числами. Внешняя функция представляет левый операнд, внутренняя – правый. Деление должно быть целочисленным.
Сложность задачи заключается в работе с параметрами: правые операнды являются константами, а левые – функциями с другими функциями в качестве аргументов.
Решение начинается с функций, возвращающих числа от 0 до 9. Каждая функция принимает необязательный аргумент x со значением по умолчанию 0. Если функция является правым операндом, она возвращает своё число. В противном случае она вызывает себя рекурсивно, передавая функцию с числом в качестве аргумента.
Функции для математических операций реализованы с помощью лямбда-выражений:
- Сложение: lambda x: x + y
- Вычитание: lambda x: x — y
- Умножение: lambda x: x * y
- Целочисленное деление: lambda x: x // y
где y — аргумент, передаваемый функции.
Шифр Цезаря
Задача заключается в создании функции, реализующей шифр Цезаря: каждая буква заменяется буквой, расположенной на 13 позиций после неё в алфавите. Цифры и специальные символы остаются без изменений.
Решение основано на использовании функций ord(), возвращающей код символа, и chr(), возвращающей символ по его коду. Алгоритм учитывает перенос за пределы алфавита: для букв от ‘A’ до ‘M’ (и от ‘a’ до ‘m’) добавляется 13, для остальных – вычитается 13. Регистр букв сохраняется.
Максимальная сумма подмассива
Задача заключается в поиске максимальной суммы непрерывной подпоследовательности в массиве целых чисел. Если максимальная сумма отрицательна, функция должна вернуть 0.
Решение использует два параметра: max_sum (максимальная сумма) и current_sum (текущая сумма). Цикл проходит по элементам массива. current_sum увеличивается на текущий элемент. max_sum обновляется с помощью функции max(), сравнивая текущее значение max_sum и current_sum. Если current_sum становится меньше нуля, она обнуляется.
Генератор хэштегов
Задача заключается в создании функции, принимающей строку и генерирующей хэштег. Все слова в хэштеге должны начинаться с заглавной буквы, пробелы должны быть удалены. Если длина хэштега превышает 140 символов, функция возвращает False. Пустая строка также возвращает False.
Решение использует метод split() для разделения строки на слова, метод title() для приведения каждого слова к нужному регистру, и конкатенацию слов в одну строку. Проверка длины и обработка пустой строки реализованы с помощью условного оператора.
Числа Фибоначчи
Задача заключается в поиске двух соседних чисел Фибоначчи, произведение которых равно заданному числу. Функция возвращает True, если такие числа найдены, и False в противном случае.
Решение использует цикл, который генерирует последовательность Фибоначчи до тех пор, пока произведение двух последних чисел не превысит заданное число. Проверка на равенство заданному числу происходит внутри цикла.