Tak, stary dobry GIF. Uwielbiany za swoją wszechstronność, nienawidzony za patenty i częściowo przestarzały ze względu na swoje ograniczenia (i patenty), GIF składa się zasadniczo z palety kolorów i obrazu indeksowanego paletą skompresowanego przy użyciu algorytmu LZW.
Twoim zadaniem jest napisanie programu, który odczytuje obraz w formacie ASCII PPM (magiczna liczba „P3”) ze standardowego wejścia i zapisuje ten sam obraz (identyczny piksel po pikselu) na standardowym wyjściu. Dane wyjściowe mogą mieć postać binarną lub tekst ASCII, przy czym każdy bajt jest reprezentowany przez liczbę od 0 do 255 (włącznie), oddzielone białymi spacjami.
Gwarantujemy, że obraz wejściowy nie będzie miał więcej niż 256 różnych kolorów.
Punktacja:
Twój program zostanie przetestowany na 3 przykładowych obrazach, a twój wynik zostanie obliczony jako:
rozmiar programu + suma (rozmiar wyjściowy - rozmiar odniesienia dla każdego przykładowego obrazu)
Wygrywa najniższy wynik.
Wymagania:
- Twój program musi działać z dowolnymi podobnymi obrazami o różnych rozmiarach i nie może być ograniczony do przykładowych obrazów. Można na przykład ograniczyć wymiary do wielokrotności 2 lub założyć, że maksymalny kolor na minutę to 255, ale nadal powinien działać z szeroką gamą obrazów wejściowych.
- Dane wyjściowe muszą być poprawnymi plikami GIF, które można załadować dowolnym zgodnym programem (po konwersji z powrotem na plik binarny, jeśli używana jest opcja wyjścia ASCII).
- Nie możesz używać żadnych funkcji przetwarzania obrazu (wbudowanych lub zewnętrznych), twój program musi zawierać cały odpowiedni kod.
- Twój program musi być uruchamialny w systemie Linux przy użyciu ogólnodostępnego oprogramowania.
- Kod źródłowy musi używać tylko znaków ASCII.
Przykładowe obrazy:
Oto 3 przykładowe obrazy, które zostaną wykorzystane do oceny. Możesz pobrać archiwum zip z plikami ppm (użyj przycisku pobierania na górze tej strony). Lub możesz przekonwertować je z poniższych obrazów png, używając ImageMagick za pomocą następującego polecenia:
convert file.png -compress none file.ppm
Podaję również sumy kontrolne MD5 plików ppm w celu potwierdzenia.
1. bursztyn
Rozmiar odniesienia: 38055
MD5 suma kontrolna ppm: d1ad863cb556869332074717eb278080
2. niebieskie oczy
Rozmiar odniesienia: 28638
MD5 suma kontrolna ppm: e9ad410057a5f6c25a22a534259dcf3a
3. papryka
Rozmiar odniesienia: 53586
MD5 suma kontrolna ppm: 74112dbdbb8b7de5216f9e24c2e1a627