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

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

Упаковать в байты

Коды — строки из нулей и единиц, а файл состоит из байтов по восемь бит. Коды всех байтов пишутся подряд, и получившаяся цепочка бит режется по восемь. Последний байт почти всегда неполный — его добивают нулями, а сколько нулей добито, пишут в самый первый байт, иначе распаковщик примет добивку за данные.

Что сделать

Упакуйте данные кодами в байты: коды подряд, по восемь бит в байт, а в первом байте — сколько нулей добито в конце.

Что приходит

  • dannye — байты, которые сжимаем

  • kody — словарь «байт (число) → код строкой из 0 и 1», из шага 2

Что вернуть

Байты: первый — сколько нулей добито в конце (от 0 до 7), дальше — цепочка бит по восемь в байт.

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

В проекте

Архиватор зовёт upakovat на всё содержимое файла и пишет ответ в архив сразу за заголовком с частотами.

Пример

b"abc" кодами a→0, b→10, c→11 — это цепочка 01011, пять бит. До восьми не хватает трёх — добиваем: 01011000, это байт 88, буква X. Ответ b"\x03X": тройка — число добитых нулей, потом сам байт.

Тот же пример кодом
Вызов
upakovat(b"abc", {97: "0", 98: "10", 99: "11"})
Вернуть
b'\x03X'
Ctrl+Enter — проверить

Обсуждение

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

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