Войти Создать аккаунт

Архиватор · Шаг 4 из 4

Распаковать обратно

Распаковка идёт по тому же дереву, что упаковка: биты читаются по одному, и каждый бит — шаг по дереву от корня, 0 — налево, 1 — направо. Дошли до листа — вот очередной байт, и снова от корня. Добитые в конце нули не читаются: их число записано в первом байте.

Что сделать

Распакуйте байты обратно, шагая по дереву бит за битом и не читая добитые в конце нули.

Что приходит

  • upakovano — байты из шага 3: первый — число добитых нулей, дальше — биты

  • derevo — то же дерево, что при упаковке: лист — байт (число), узел — пара; или None

Что вернуть

Исходные байты; пустые данные или None вместо дерева — b"".

Допишите функцию raspakovat в редакторе справа. Результат верните через return — то, что напечатано, на проверку не влияет.

В проекте

Распаковщик строит дерево по частотам из архива шагом 1 и зовёт raspakovat на всё, что лежит после заголовка. Решите шаг — и файл вернётся байт в байт.

Пример

raspakovat(b"\x00Z", (97, (98, 99))): добитых нулей нет, Z — это биты 01011010. По дереву: 0 — лист 97, 10 — 98, 11 — 99, 0 — 97, 10 — 98. Ответ b"abcab".

Тот же пример кодом
Вызов
raspakovat(b"\x00Z", (97, (98, 99)))
Вернуть
b'abcab'
Ctrl+Enter — проверить

Обсуждение

Вопросов пока нет.

Войдите, чтобы спросить.