Défi:
Votre défi (si vous l'acceptez) est de compresser et de décompresser les 5MB " Complete Works of William Shakespeare " comme ici: http://www.gutenberg.org/cache/epub/100/pg100.txt
(MD5: a810f89e9f8e213aebd06b9f8c5157d8
)
Règles:
- Vous devez prendre l'entrée via
STDIN
et la sortie viaSTDOUT
... - ... et vous devez fournir un résultat décompressé identique à l'entrée.
- (Cela signifie que vous devez pouvoir
cat inpt.txt | ./cmprss | ./dcmpress | md5
obtenir le même MD5 que ci-dessus.) - (Tout via
STDERR
doit être jeté.)
- (Cela signifie que vous devez pouvoir
Vous devez utiliser moins de 2048 caractères pour votre code source total.- (C'est pas le code-golf. Vous ne sont notées en fonction de la longueur de code source. Il
estétait une règle de garder les choses finies.) (Prenez la longueur concaténée de tout le code source si vous l'avez divisé.)
- (C'est pas le code-golf. Vous ne sont notées en fonction de la longueur de code source. Il
- Vous devez également pouvoir (théoriquement) traiter des entrées en texte brut similaires.
- (Par exemple, coder en dur un mécanisme qui est uniquement capable de produire l' entrée Shakespeare fournie est inacceptable.)
- (La taille compressée des autres documents n'est pas pertinente - à condition que le résultat décompressé soit identique à l'entrée alternative.)
- Vous pouvez utiliser n'importe quel choix de langue (s).
- (par exemple, n'hésitez pas à compresser en utilisant
awk
et décompresser en utilisantjava
)
- (par exemple, n'hésitez pas à compresser en utilisant
- Vous pouvez écrire deux programmes distincts ou les combiner avec une certaine forme de «commutateur» à votre guise.
- (Il doit y avoir des démonstrations claires de la façon d'invoquer les modes de compression et de décompression)
- Vous ne pouvez utiliser aucune commande externe (par exemple via
exec()
).- (Si vous utilisez un langage shell - désolé. Vous devrez vous contenter des fonctions intégrées. Vous êtes invités à publier une réponse "inacceptable" pour le partage et le plaisir - mais elle ne sera pas jugée! )
- Vous ne pouvez pas utiliser les fonctions intégrées ou fournies par la bibliothèque dont le but déclaré est de compresser les données (comme
gz
, etc.)- (La modification du codage n'est pas considérée comme une compression dans ce contexte. Une certaine discrétion peut être appliquée ici. N'hésitez pas à faire valoir l'acceptabilité de votre solution dans la soumission.)
- Veuillez essayer de vous amuser si vous décidez de participer!
Toutes les bonnes compétitions ont une définition objective de gagner; ergo:
- Si toutes les règles sont respectées, la plus petite sortie compressée (en
STDOUT
octets) l'emporte.- (Signalez votre sortie via via
./cmprss | wc -c
)
- (Signalez votre sortie via via
- En cas d'égalité (tailles de sortie identiques), le plus de votes positifs de la communauté l'emporte.
- Dans le cas d'un deuxième tirage (votes positifs de la communauté identique), je choisirai un gagnant basé sur un examen complètement subjectif de l'élégance et du génie pur.
;-)
Comment soumettre:
Veuillez formater votre entrée en utilisant ce modèle:
<language>, <compressed_size>
-----------------------------
<description> (Detail is encouraged!)
<CODE...
...>
<run instructions>
J'encourage les lecteurs et les soumissionnaires à converser par le biais de commentaires - je pense qu'il existe de réelles opportunités pour les gens d'apprendre et de devenir de meilleurs programmeurs via codegolf.stack.
Gagnant:
Je pars bientôt en vacances: je surveillerai (ou non) les soumissions au cours des prochaines semaines et je mettrai un terme au défi le 19 septembre. J'espère que cela offre une bonne occasion pour les gens de réfléchir et de soumettre - et pour un partage positif des techniques et des idées.
Si vous avez appris quelque chose de nouveau en participant (en tant que lecteur ou soumissionnaire), veuillez laisser un commentaire d'encouragement.
code-challenge
.Réponses:
Perl 5, 3651284
Juste un schéma de dictionnaire simple basé sur des mots. Analyse la fréquence des mots du corpus et l'utilise pour déterminer s'il faut utiliser un ou deux octets de surcharge par mot. Utilise deux symboles spéciaux pour les octets \ 0 et \ 1 car ils n'apparaissent pas dans le corpus. Il existe de nombreux autres symboles qui pourraient être utilisés. Cela n'a pas été fait. Ne fait aucun encodage huffman ou tout ce jazz.
Script de compression shakespeare.pl:
Script de décompression deshakespeare.pl:
Exécutez en utilisant:
la source