Python Codewars 5 kyu: Перемещаем нули в конец

Решаем задачи пятого ранга на Codewars, используя Python. Задачи этого уровня сложнее, чем на предыдущих рангах (8, 7 и т.д.), поэтому видео разбиты на части продолжительностью около 30 минут для удобства просмотра и записи.

Moving zeroes to the end

Задача: Напишите алгоритм, который принимает массив и перемещает все нули в конец, сохраняя порядок остальных элементов.

Решение: Перебираем элементы списка. Не нулевые элементы добавляем в новый список. Затем, используя метод count(), подсчитываем количество нулей в исходном списке и добавляем столько же нулей в конец нового списка.

Simple Pig Latin

Задача: Переместите первую букву каждого слова в конец, а затем добавьте «ay». Знаки препинания должны остаться нетронутыми.

Решение: Разбиваем строку на слова методом split(). Для каждого слова: берем все символы, кроме первого ([1:]), конкатенируем с первым символом ([0]) и добавляем «ay». Проверяем, является ли слово знаком препинания (через isalpha()). Если нет, оставляем его без изменений и не добавляем «ay». Полученный список слов соединяем в строку с помощью join().

Where’s my parentheses?

Задача: Напишите функцию, которая принимает строку скобок и определяет, допустим ли порядок скобок. Функция должна возвращать True, если строка корректна, и False в противном случае. Строка может содержать любые допустимые ASCII-символы.

Решение: Перебираем символы строки. Для каждой открывающейся скобки увеличиваем счетчик, для каждой закрывающейся – уменьшаем. Если счетчик становится отрицательным, значит, закрывающих скобок больше, чем открывающих – возвращаем False. В конце проверяем, равен ли счетчик нулю. Если да – возвращаем True, иначе – False.

Human Readable Time

Задача: Преобразуйте количество секунд в формат ЧЧ:ММ:СС.

Решение: Используем f-строки для форматирования вывода. Количество часов получаем делением на 3600 (с использованием целочисленного деления //). Количество минут – это остаток от деления на 3600, деленный на 60. Количество секунд – это остаток от деления на 60. Для вывода используем спецификатор формата :02d, чтобы гарантировать вывод двух цифр (с ведущими нулями при необходимости).

RGB to Hex Conversion

Задача: Завершите функцию, чтобы преобразовать десятичные значения RGB в шестнадцатеричное представление. Допустимые десятичные значения для RGB: 0-255. Значения вне диапазона должны быть округлены до ближайшего допустимого значения.

Решение: Создаем вспомогательную функцию, которая принимает десятичное число и возвращает его шестнадцатеричное представление в виде двухсимвольной строки (с ведущим нулем при необходимости). Для чисел меньше 0 возвращаем «00», для чисел больше 255 – «FF». Используем функцию hex() для преобразования в шестнадцатеричную систему и метод upper() для перевода в верхний регистр. Основная функция принимает три десятичных числа (R, G, B), применяет к ним вспомогательную функцию и конкатенирует результаты.

Directions Reduction

Задача: Напишите функцию, которая принимает массив строк (направления: «NORTH», «SOUTH», «EAST», «WEST») и возвращает массив с удаленными ненужными направлениями (например, «NORTH» и «SOUTH» сокращаются).

Решение: Используем рекурсию. Создаем словарь противоположных направлений. Перебираем пары соседних элементов массива. Если они противоположны, удаляем их из массива и вызываем функцию рекурсивно. Цикл перебора заканчивается на предпоследнем элементе, чтобы избежать выхода за границы массива.

В этой части были разобраны несколько задач 5 kyu с Codewars. Были использованы различные приемы программирования на Python, включая работу со списками, строками, f-строки и рекурсию.

Что будем искать? Например,программа