Напишите программу, выполняющую сжатие двухпроходным алгоритмом Хаффмана. 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, test_huffman.h, test_huffman.cpp * Makefile: 1. цель по умолчанию собирает main и объектные файлы в директорию bin (создается при сборке, если не существует) 2. цель test собирает test и объектные файлы в директорию bin 3. цель clean очищает директорию bin 7. Срок сдачи 6 мая, 23:59