Sim, o bom e velho GIF. Amado por sua versatilidade, odiado por suas patentes e parcialmente obsoleto devido às suas limitações (e patentes), o GIF consiste, no centro, de uma paleta de cores e uma imagem indexada por paleta compactada usando o algoritmo LZW.
Sua tarefa é gravar um programa que leia uma imagem no formato ASCII PPM (número mágico "P3") da entrada padrão e grave a mesma imagem (pixel a pixel idêntico) no formato GIF na saída padrão. A saída pode estar no formato binário ou em texto ASCII com cada byte representado por um número entre 0 e 255 (inclusive), separados por espaços em branco.
A imagem de entrada é garantida para não ter mais de 256 cores diferentes.
Pontuação:
Seu programa será testado em 3 imagens de amostra e sua pontuação será calculada da seguinte forma:
tamanho do programa + soma (tamanho da saída - tamanho de referência para cada imagem de amostra) A
pontuação mais baixa vence.
Requisitos:
- Seu programa deve funcionar com qualquer tipo de imagem semelhante de vários tamanhos e não deve se limitar às imagens de amostra. Você pode, por exemplo, restringir as dimensões a múltiplos de 2 ou assumir que a cor máxima em ppm é 255, mas ainda deve funcionar com uma grande variedade de imagens de entrada.
- A saída deve ser um arquivo GIF válido que possa ser carregado com qualquer programa compatível (depois de converter novamente em binário se estiver usando a opção de saída ASCII).
- Você não pode usar nenhuma função de processamento de imagem (embutida ou de terceiros); seu programa deve conter todo o código relevante.
- Seu programa deve ser executável no Linux usando software disponível gratuitamente.
- O código fonte deve usar apenas caracteres ASCII.
Imagens de exemplo:
Aqui estão as três imagens de amostra que serão usadas para a pontuação. Você pode baixar um arquivo zip com os arquivos ppm (use o botão de download na parte superior da página). Ou você pode convertê-los a partir das imagens png abaixo, usando o ImageMagick com o seguinte comando:
convert file.png -compress none file.ppm
Também estou fornecendo as somas de verificação MD5 dos arquivos ppm para confirmação.
1. âmbar
Tamanho de referência: 38055
Soma de verificação MD5 do ppm: d1ad863cb556869332074717eb278080
2. olhos azuis
Tamanho de referência: 28638
soma de verificação MD5 do ppm: e9ad410057a5f6c25a22a534259dcf3a
3. pimentas
Tamanho de referência: 53586
Soma de verificação MD5 do ppm: 74112dbdbb8b7de5216f9e24c2e1a627