Напишите программу, выполняющую сжатие двухпроходным алгоритмом Хаффмана. 1. Параметры командной строки. * -c архивирование * -u разархивирование * -f, --file <путь> имя входного файла * -o, --output <путь> имя результирующего файла Значение параметра (если есть) указывается через пробел. Программа должна проверять корректность параметров и выводить сообщение об ошибке. 2. Вывод на экран. Программа должна выводить на экран статистику сжатия/распаковки: размер исходных данных, размер полученных данных и размер, который был использован для хранения вспомогательных данных в выходном файле (например, таблицы). Не должно выводиться никакого дополнительного текста, только размеры. Все размеры в байтах. Программы с наименьшим размером выходного файла оцениваются наибольшим числом баллов. Например: {{{ $ ./huffman -c -f myfile.txt -o result.bin 15678 6172 482 }}} Размер исходного файла (исходные данные): 15678 байт, размер сжатых данных (без дополнительной информации): 6172 байта, размер дополнительных данных: 482 байта. Рамер всего сжатого файла: 6172 + 482 = 6654 байта. {{{ $ ./huffman -u -f result.bin -o myfile_new.txt 6172 15678 482 }}} Размер распакованного файла (полученные данные): 15678 байт, размер сжатых данных (без дополнительной информации): 6172 байта, размер дополнительных данных: 482 байта. Рамер всего исходного сжатого файла: 6172 + 482 = 6654 байта. 3. Ограничения. Наибольший размер входного файла --- 5MB. Ограничение на время выполнения --- 5 секунд. 4. Требования по реализации. * Программа должна быть написана в ООП стиле * Там, где это уместно, должна быть использована библиотека STL (например, std::vector, а не динамический массив) * Должны использоваться исключения * Должен быть реализован свой класс для автоматического тестирования * Для методов должны быть написаны автотесты 5. Примечания. * Рекомендуем удостовериться, что сжатый, а затем разжатый Вами файл эквивалентен исходному * Рекомендуем протестировать на больших файлах, файлах разного типа (текстовые, бинарные) и на пустом файле * Рекомендуем проверить свою программу на синтетических тестах, заведомо плохо кодируемых алгоритмом Хаффмана * Рекомендуем проверить свою программу на утечки памяти 6. Формат сдачи. В директории ha02 в репозитории должны быть: директория src, директория test, Makefile. * Директория src: main.cpp, huffman.h, huffman.cpp * Директория test: test.cpp, autotest.h, autotest.cpp, huffman_test.h, huffman_test.cpp * Makefile: * цель по умолчанию собирает исполняемый файл main и объектные файлы в директорию bin (создается при сборке, если не существует) * цель test собирает исполняемый файл test и объектные файлы в директорию bin * цель clean очищает директорию bin 7. Срок сдачи. 6 мая, 23:59