Так, старий добрий GIF. Полюблений своєю універсальністю, ненависний до своїх патентів і частково застарілий через свої обмеження (та патенти), GIF складається в основі кольорової палітри та зображення, індексованого палітрою, стиснутого за допомогою алгоритму LZW.
Ваше завдання - написати програму, яка читає зображення у форматі ASCII PPM (магічне число "P3") зі стандартного вводу, а також записує те саме зображення (однаковий піксель на піксель) у форматі GIF на стандартний вихід. Вихід може бути або у двійковій формі, або у тексті ASCII, кожен байт представлений числом від 0 до 255 (включно), розділеним пробілом.
Гарантоване вхідне зображення не матиме більше 256 різних кольорів.
Оцінка:
Ваша програма буде протестована на 3 зразкових зображеннях, а ваш рахунок буде розрахований як:
розмір програми + сума (розмір виводу - розмір опорного зображення для кожного зразка)
Найнижчий результат виграє.
Вимоги:
- Ваша програма повинна працювати з будь-якими подібними видами зображень різного розміру, а не обмежуватися зразками зображень. Наприклад, ви можете обмежити розміри, кратними 2, або припустити, що максимальний колір ppm становить 255, але він все одно повинен працювати з великою різноманітністю вхідних зображень.
- Вихід повинен бути дійсним файлом GIF, який може бути завантажений будь-якою сумісною програмою (після перетворення на бінарний, якщо використовується опція виводу ASCII).
- Ви не можете використовувати будь-які функції обробки зображень (вбудовані або сторонні), ваша програма повинна містити весь відповідний код.
- Ваша програма повинна працювати в Linux, використовуючи вільно доступне програмне забезпечення.
- У вихідному коді повинні використовуватися лише символи ASCII.
Зразкові зображення:
Ось 3 зразкових зображення, які будуть використані для оцінки. Ви можете завантажити zip-архів із файлами ppm (скористайтесь кнопкою завантаження у верхній частині цієї сторінки). Або ви можете конвертувати їх із зображень, наведених нижче, за допомогою ImageMagick за допомогою наступної команди:
convert file.png -compress none file.ppm
Я також надаю контрольні суми MD5 файлів ppm для підтвердження.
1. бурштин
Довідковий розмір: 38055
контрольна сума MD5 ppm: d1ad863cb556869332074717eb278080
2. сині
Довідковий розмір: 28638
контрольна сума MD5 ppm: e9ad410057a5f6c25a22a534259dcf3a
3. перець
Довідковий розмір: 53586
контрольна сума MD5 проміле: 74112dbdbb8b7de5216f9e24c2e1a627