Desafio:
Seu desafio (se você optar por aceitá-lo) é compactar e descompactar as " Obras Completas de William Shakespeare ", de 5 MB, como encontradas aqui: http://www.gutenberg.org/cache/epub/100/pg100.txt
(MD5: a810f89e9f8e213aebd06b9f8c5157d8
)
Regras:
- Você deve receber entrada via
STDIN
e saída viaSTDOUT
... - ... e você deve fornecer um resultado descompactado idêntico à entrada.
- (Isso significa que você deve ser capaz de
cat inpt.txt | ./cmprss | ./dcmpress | md5
obter o mesmo MD5 acima.) - (Qualquer coisa via
STDERR
deve ser descartada.)
- (Isso significa que você deve ser capaz de
Você deve usar menos de 2048 caracteres para o seu código-fonte total.- (Isso não é código-golfe. Você não está sendo pontuado com base no tamanho do código-fonte. Essa
éapenas uma regra para manter as coisas finitas.) (Pegue o comprimento concatenado de todo o código-fonte, se você o tiver dividido.)
- (Isso não é código-golfe. Você não está sendo pontuado com base no tamanho do código-fonte. Essa
- Você também deve (teoricamente) processar entradas de texto simples semelhantes.
- (por exemplo, codificação embutida de um mecanismo que é capaz apenas de produzir a entrada fornecida por Shakespeare é inaceitável.)
- (O tamanho compactado de outros documentos é irrelevante - desde que o resultado descompactado seja idêntico à entrada alternativa.)
- Você pode usar qualquer opção de idioma (s).
- (por exemplo, sinta-se livre para comprimir
awk
e descomprimir usandojava
)
- (por exemplo, sinta-se livre para comprimir
- Você pode escrever dois programas separados ou combiná-los com algum tipo de "opção", como desejar.
- (Deve haver demonstrações claras de como chamar os modos de compactação e descompactação)
- Você não pode usar nenhum comando externo (por exemplo, através
exec()
).- (Se você estiver usando uma linguagem shell - desculpe. Você terá que se contentar com os built-ins. Você pode postar uma resposta "inaceitável" para compartilhar e divertir - mas isso não será julgado! )
- Você não pode usar nenhuma função interna ou fornecida pela biblioteca que tenha o objetivo declarado de compactar dados (como
gz
, etc.)- (Alterar a codificação não é considerado compactação nesse contexto. Pode ser aplicada alguma discrição aqui. Sinta-se à vontade para argumentar sobre a aceitabilidade da sua solução no envio.)
- Por favor, tente se divertir se optar por participar!
Todas as boas competições têm uma definição objetiva de vitória; ergo:
- Desde que todas as regras sejam respeitadas, a menor saída compactada (em
STDOUT
bytes) vence.- (Relate sua saída por favor
./cmprss | wc -c
)
- (Relate sua saída por favor
- Em caso de empate (tamanhos de saída idênticos), o maior número de votados na comunidade vence.
- No caso de um segundo sorteio (votos idênticos da comunidade), escolherei um vencedor com base em um exame completamente subjetivo de elegância e pura genialidade.
;-)
Como enviar:
Formate sua entrada usando este modelo:
<language>, <compressed_size>
-----------------------------
<description> (Detail is encouraged!)
<CODE...
...>
<run instructions>
Eu encorajaria leitores e apresentadores a conversar através de comentários - acredito que há uma oportunidade real para as pessoas aprenderem e se tornarem melhores programadores através do codegolf.stack.
Ganhando:
Estou de férias em breve: posso (ou não) monitorar os envios nas próximas semanas e encerrarei o desafio no dia 19 de setembro. Espero que isso ofereça uma boa oportunidade para as pessoas pensarem e se submeterem - e para um compartilhamento positivo de técnicas e idéias.
Se você aprendeu algo novo ao participar (como leitor ou remetente), deixe um comentário de incentivo.
fonte
code-challenge
.Respostas:
Perl 5, 3651284
Apenas um esquema de dicionário baseado em palavras simples. Analisa a frequência da palavra do corpus e a utiliza para determinar se deve usar um ou dois bytes de sobrecarga por palavra. Usa dois símbolos especiais para os bytes \ 0 e \ 1, pois eles não aparecem no corpus. Existem muitos outros símbolos que podem ser usados. Isso não foi feito. Não faz nenhuma codificação huffman ou nada desse jazz.
Script de compressão shakespeare.pl:
Script de descompressão deshakespeare.pl:
Execute usando:
fonte