DamiRocK

Python: отладка RLE-сжатия и последняя группа символов

Сжимаем серии одинаковых символов в aaabcccc→a3bc4. Проверяем пустой ввод, смену группы и обязательную запись последней серии после цикла.

Задание источника

Реализуйте compress(string): последовательные повторы символа заменяются самим символом и количеством повторений; одиночный символ записывается без цифры. Например, aaabcccc превращается в a3bc4.

Решение

def compress(string: str) -> str:
    if not string:
        return ""
    result = ""
    count = 1
    for i in range(1, len(string)):
        if string[i] == string[i - 1]:
            count += 1
        else:
            result += string[i - 1]
            if count > 1:
                result += str(count)
            count = 1
    result += string[-1]
    if count > 1:
        result += str(count)
    return result

Что хранит счётчик

Count — длина текущей серии одинаковых символов. При совпадении он увеличивается. При смене символа предыдущая серия записывается в result, затем счётчик сбрасывается в 1 для новой серии.

Последняя серия не имеет следующего отличающегося символа, поэтому записывается отдельно после цикла. Если забыть этот шаг, последняя часть строки исчезнет из результата.

Набор проверок

compress("aaabcccc") даёт "a3bc4", compress("abcd")"abcd", compress("aabbaa")"a2b2a2". Пустой ввод даёт пустую строку; один символ a — a; серия из двенадцати a — a12.

Проверка пустой строки стоит до обращения к последнему символу. Без неё финальный доступ string[-1] вызвал бы IndexError.

Отладка и ограничения формата

Для поиска ошибки наблюдайте i, count и result после каждой итерации, затем уберите диагностическую печать из окончательного решения. Traceback показывает активную цепочку вызовов при исключении, а не полный журнал всех успешно завершённых вызовов.

Этот учебный текстовый RLE не задаёт однозначного декодирования для произвольных строк с цифрами. Например, отдельные исходные цифры могут смешиваться с числами повторений. Он также не обязан уменьшать длину каждого входа. Для реального формата нужны правила кодирования и декодирования; здесь сохранено конкретное упражнение.

Hexlet / Code Basics и участники · Исходный урок и решение · GNU AGPL v3. Алгоритм сохранён; граничные тесты и ограничения формата добавлены.

Reading preferences

Appearance
Contrast
More options

Saved only in this browser. Your device’s reduced-motion setting is always respected. Browser zoom works throughout the site.