Votre mission aujourd'hui est d'inventer un compresseur de texte.
Tâche
Vous écrirez deux fonctions:
Le packer est une fonction qui accepte une chaîne de caractères ASCII (U + 0000 à U + 007F) et génère une chaîne Unicode (U + 0000 à U + 10FFFF), contenant le moins de caractères possible.
Le décompresseur est une fonction qui accepte une chaîne Unicode codée et génère exactement la chaîne ASCII d'origine.
Contribution
La seule entrée autorisée est la chaîne ASCII (pour le conditionneur) et la chaîne Unicode compressée (pour le décompresseur). Aucune entrée utilisateur, aucune connexion Internet, aucune utilisation du système de fichiers.
Vos fonctions peuvent avoir accès à cette liste de mots anglais . Vous pouvez utiliser cette liste en tant que fichier txt local ou copier son contenu dans votre code source sous la forme d'une chaîne ou d' un tableau de chaînes .
Vous ne pouvez pas coder en dur les extraits ci-dessous dans vos fonctions.
Sortie
La seule sortie autorisée pour les deux fonctions est une chaîne.
La sortie du décompresseur doit contenir exactement les mêmes caractères que l'entrée du packer.
Vos entrées et sorties peuvent utiliser n'importe quel encodage de caractères prenant en charge tous les Unicode (UTF-8/16/32, GB18030, ...), car votre score ne dépendra que du nombre de caractères Unicode dans la sortie. Veuillez préciser l'encodage que vous utilisez, cependant.
Pour compter le nombre de caractères Unicode dans votre sortie, vous pouvez utiliser cet outil: http://mothereff.in/byte-counter
Notation
Votre entrée doit pouvoir emballer et décompresser les 10 extraits de texte suivants (que j'ai pris sur ce forum).
Votre score sera la somme des tailles de vos 10 chaînes compressées (en caractères Unicode) + la taille de vos deux fonctions (en caractères Unicode aussi)
Ne comptez pas la taille du dictionnaire si vous l'utilisez.
Veuillez inclure dans vos entrées le "score" de chaque extrait et leur version compactée.
Le score le plus bas l'emporte.
Les données
Voici les extraits à encoder pour calculer votre score:
1: paroles de Rick Roll (1870b): Nous ne sommes pas étrangers au code du golf, vous connaissez les règles, et moi aussi
Nous ne sommes pas des étrangers à aimer Vous connaissez les règles et moi aussi Un engagement total à quoi je pense Vous n'obtiendrez cela d'aucun autre gars Je veux juste te dire comment je me sens Je dois te faire comprendre Je ne t'abandonnerai jamais Je ne te laisserai jamais tomber Je ne vais jamais courir et te déserter Je ne te ferai jamais pleurer Je ne te dirai jamais au revoir Je ne vais jamais mentir et te blesser Nous nous connaissons depuis si longtemps Votre cœur a mal mais Tu es trop timide pour le dire À l'intérieur, nous savons tous les deux ce qui se passe Nous connaissons le jeu et nous allons y jouer Et si tu me demandes comment je me sens Ne me dis pas que tu es trop aveugle pour voir Je ne t'abandonnerai jamais Je ne te laisserai jamais tomber Je ne vais jamais courir et te déserter Je ne te ferai jamais pleurer Je ne te dirai jamais au revoir Je ne vais jamais mentir et te blesser Je ne t'abandonnerai jamais Je ne te laisserai jamais tomber Je ne vais jamais courir et te déserter Je ne te ferai jamais pleurer Je ne te dirai jamais au revoir Je ne vais jamais mentir et te blesser (Ooh, abandonne-toi) (Ooh, abandonne-toi) (Ooh) Je ne donnerai jamais, je ne donnerai jamais (T'abandonner) (Ooh) Je ne donnerai jamais, je ne donnerai jamais (T'abandonner) Nous nous connaissons depuis si longtemps Votre cœur a mal mais Tu es trop timide pour le dire À l'intérieur, nous savons tous les deux ce qui se passe Nous connaissons le jeu et nous allons y jouer Je veux juste te dire comment je me sens Je dois te faire comprendre Je ne t'abandonnerai jamais Je ne te laisserai jamais tomber Je ne vais jamais courir et te déserter Je ne te ferai jamais pleurer Je ne te dirai jamais au revoir Je ne vais jamais mentir et te blesser Je ne t'abandonnerai jamais Je ne te laisserai jamais tomber Je ne vais jamais courir et te déserter Je ne te ferai jamais pleurer Je ne te dirai jamais au revoir Je ne vais jamais mentir et te blesser Je ne t'abandonnerai jamais Je ne te laisserai jamais tomber Je ne vais jamais courir et te déserter Je ne te ferai jamais pleurer Je ne te dirai jamais au revoir Je ne vais jamais mentir et te blesser
2: Le golfeur (412b): Golf ASCII-art
'\. . |> 18 >> \. '. | O >>. «o | \. | / \. | / /. » | jgs ^^^^^^^ `^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^
3: le diamant numéro (233b): Imprimez ce diamant
1 121 12321 1234321 123454321 12345654321 1234567654321 123456787654321 12345678987654321 123456787654321 1234567654321 12345654321 123454321 1234321 12321 121 1
4: l'alphabet quatre fois (107b): imprimer l'alphabet quatre fois
abcdefghijklmnopqrstuvwxyz qwertyuiopasdfghjklzxcvbnm pyfgcrlaoeuidhtnsqjkxbmwvz zyxwvutsrqponmlkjihgfedcba
5: Paroles d'Old McDonald's (203b): Fonction Old MacDonald
Old MacDonald avait une ferme, EIEIO, Et sur cette ferme, il avait une vache, EIEIO, Avec un moo moo ici et un moo moo là, Ici un moo, là un moo, partout un moo moo, Le vieux MacDonald avait une ferme, EIEIO!
6: Paroles de chanson Rock around the clock (144b): Rock Around the Clock
1, 2, 3 heures, 4 heures rock, 5, 6, 7 heures, 8 heures rock, 9, 10, 11 heures, 12 heures rock, On va basculer 24 heures sur 24 ce soir.
7: Hello World (296b): Dites "Bonjour" au monde dans l'art ASCII
_ _ _ _ _ _ _ | | | | ___ | | | ___ __ _____ _ __ | | __ | | | | | _ | | / _ \ | | / _ \ \ \ / \ / / _ \ | «__ | | / _` | | | _ | __ / | | (_) | \ VV / (_) | | | | (_ | | _ | | _ | | _ | \ ___ | _ | _ | \ ___ () \ _ / \ _ / \ ___ / | _ | | _ | \ __, _ (_) | /
8: bénédiction irlandaise (210b): une vieille bénédiction irlandaise
Que la route monte pour te rencontrer Que le vent soit toujours dans ton dos Que le soleil brille chaud sur votre visage Les pluies tombent doucement sur vos champs Et jusqu'à ce que nous nous revoyions Que Dieu vous tienne au creux de sa main
9: Il y avait une vieille dame (1208b): Il y avait une vieille dame
Il y avait une vieille dame qui a avalé une mouche. Je ne sais pas pourquoi elle a avalé cette mouche, Peut-être qu'elle mourra. Il y avait une vieille dame qui a avalé une araignée, Cela se tortillait, se tortillait et se tortillait en elle. Elle a avalé l'araignée pour attraper la mouche, Je ne sais pas pourquoi elle a avalé cette mouche, Peut-être qu'elle mourra. Il y avait une vieille dame qui a avalé un oiseau, Quelle absurdité d'avaler un oiseau. Elle a avalé l'oiseau pour attraper l'araignée, Elle a avalé l'araignée pour attraper la mouche, Je ne sais pas pourquoi elle a avalé cette mouche, Peut-être qu'elle mourra. Il y avait une vieille dame qui a avalé un chat, Imaginez cela pour avaler un chat. Elle a avalé le chat pour attraper l'oiseau, Elle a avalé l'oiseau pour attraper l'araignée, Elle a avalé l'araignée pour attraper la mouche, Je ne sais pas pourquoi elle a avalé cette mouche, Peut-être qu'elle mourra. Il y avait une vieille dame qui a avalé un chien, Quel porc pour avaler un chien. Elle a avalé le chien pour attraper le chat, Elle a avalé le chat pour attraper l'oiseau, Elle a avalé l'oiseau pour attraper l'araignée, Elle a avalé l'araignée pour attraper la mouche, Je ne sais pas pourquoi elle a avalé cette mouche, Peut-être qu'elle mourra. Il y avait une vieille dame qui a avalé un cheval, Elle est morte bien sûr.
10: adresse de Gettysburg (1452b): quelle est l'adresse aléatoire de Gettysburg
Il y a quatre ans et sept ans, nos pères ont fait naître sur ce continent une nouvelle nation, conçue dans la liberté et dédiée à la proposition que tous les hommes sont créés égaux. Nous sommes maintenant engagés dans une grande guerre civile, testant si cette nation, ou toute nation ainsi conçue et si dévouée, peut durer longtemps. Nous sommes rencontrés sur un grand champ de bataille de cette guerre. Nous en sommes venus à consacrer une partie de ce domaine, comme lieu de repos final pour ceux qui ici ont donné leur vie pour que cette nation puisse vivre. Il est tout à fait approprié et approprié que nous le fassions. Mais, dans un sens plus large, nous ne pouvons pas dédier, nous ne pouvons pas consacrer, nous ne pouvons pas sanctifier ce terrain. Les braves, vivants et morts, qui ont lutté ici, l'ont consacré, bien au-dessus de notre pauvre pouvoir d'ajouter ou de nuire. Le monde ne remarquera pas, ni ne se souviendra longtemps de ce que nous disons ici, mais il ne peut jamais oublier ce qu'ils ont fait ici. Il nous appartient plutôt aux vivants de se consacrer ici à l'œuvre inachevée qu'ils ont jusqu'ici si noblement avancé. C'est plutôt pour nous d'être ici dédiés à la grande tâche qui nous attend - que de ces morts honorés nous consacrons une plus grande dévotion à cette cause pour laquelle ils ont donné la dernière pleine mesure de dévotion - que nous résolvons ici fortement que ces morts ne sont morts en vain - que cette nation, sous Dieu, aura une nouvelle naissance de liberté - et que le gouvernement du peuple, par le peuple, pour le peuple, ne périsse pas de la terre.
Total (non compressé): 6135 caractères / octets.
S'amuser!
private static final String RICK_ROLL_RETURN = "We're no strangers to love...