Sì, la buona vecchia GIF. Amata per la sua versatilità, odiata per i suoi brevetti e parzialmente obsoleta a causa dei suoi limiti (e brevetti), GIF è, al centro, una tavolozza di colori e un'immagine indicizzata con una tavolozza compressa utilizzando l'algoritmo LZW.
Il tuo compito è quello di scrivere un programma che legge un'immagine in formato PPM ASCII (numero magico "P3") dall'input standard e scrive la stessa immagine (identico pixel per pixel) in formato GIF nell'output standard. L'output può essere in forma binaria o testo ASCII con ogni byte rappresentato da un numero compreso tra 0 e 255 (incluso), separati da spazi bianchi.
Si garantisce che l'immagine in ingresso non abbia più di 256 colori diversi.
punteggio:
Il tuo programma verrà testato su 3 immagini di esempio e il tuo punteggio verrà calcolato come:
dimensione del programma + somma (dimensione di output - dimensione di riferimento per ogni immagine di esempio)
Il punteggio più basso vince.
Requisiti:
- Il programma deve funzionare con qualsiasi tipo simile di immagini di varie dimensioni e non essere limitato alle immagini di esempio. Ad esempio, potresti limitare le dimensioni a multipli di 2 o assumere che il colore massimo ppm sia 255, ma dovrebbe comunque funzionare con un'ampia varietà di immagini di input.
- L'output deve essere un file GIF valido che può essere caricato con qualsiasi programma conforme (dopo la riconversione in binario se si utilizza l'opzione di output ASCII).
- Non è possibile utilizzare alcuna funzione di elaborazione delle immagini (incorporata o di terze parti), il programma deve contenere tutto il codice pertinente.
- Il tuo programma deve essere eseguibile su Linux utilizzando software disponibile gratuitamente.
- Il codice sorgente deve usare solo caratteri ASCII.
Immagini di esempio:
Ecco le 3 immagini di esempio che verranno utilizzate per il punteggio. È possibile scaricare un archivio zip con i file ppm (utilizzare il pulsante di download nella parte superiore di quella pagina). In alternativa, puoi convertirli dalle immagini PNG seguenti, usando ImageMagick con il seguente comando:
convert file.png -compress none file.ppm
Sto anche fornendo i checksum MD5 dei file ppm per conferma.
1. ambra
Dimensioni di riferimento: 38055
checksum MD5 di ppm: d1ad863cb556869332074717eb278080
2. blueeyes
Dimensioni di riferimento: 28638
checksum MD5 di ppm: e9ad410057a5f6c25a22a534259dcf3a
3. peperoni
Dimensione di riferimento: 53586
checksum MD5 di ppm: 74112dbdbb8b7de5216f9e24c2e1a627