Sua missão hoje é inventar um compressor de texto.
Tarefa
Você escreverá duas funções:
O empacotador é uma função que aceita uma sequência de caracteres ASCII (U + 0000 a U + 007F) e gera uma sequência Unicode (U + 0000 a U + 10FFFF), contendo o menor número possível de caracteres.
O desempacotador é uma função que aceita uma string Unicode codificada e gera exatamente a string ASCII original.
Entrada
A única entrada autorizada é a sequência ASCII (para o empacotador) e a sequência Unicode empacotada (para o desempacotador). Sem entrada do usuário, sem conexão à Internet, sem uso do sistema de arquivos.
Suas funções podem ter acesso a esta lista de palavras em inglês . Você pode usar essa lista como um arquivo txt local ou copiar seu conteúdo no código-fonte como uma sequência ou uma matriz de sequências .
Você não pode codificar os trechos abaixo em suas funções.
Saída
A única saída autorizada para ambas as funções é uma sequência.
A saída do desempacotador deve conter exatamente os mesmos caracteres que a entrada do empacotador.
Suas entradas e saídas podem usar qualquer codificação de caracteres compatível com todos os Unicode (UTF-8/16/32, GB18030, ...), pois sua pontuação dependerá apenas do número de caracteres Unicode na saída. Porém, por favor, precise qual codificação você está usando.
Para contar o número de caracteres Unicode na sua saída, você pode usar esta ferramenta: http://mothereff.in/byte-counter
Pontuação
Sua entrada deve ser capaz de compactar e descompactar os 10 trechos de texto a seguir (que tirei neste fórum).
Sua pontuação será a soma dos tamanhos de suas 10 cadeias compactadas (em caracteres Unicode) + o tamanho de suas duas funções (também em caracteres Unicode)
Não conte o tamanho do dicionário, se você o usar.
Inclua em suas entradas a "pontuação" de cada snippet e sua versão compactada.
Menor pontuação ganha.
Dados
Aqui estão os trechos a serem codificados para calcular sua pontuação:
1: Rick Roll (1870b): Não somos estranhos ao código do golfe, você conhece as regras, e eu também
Não somos estranhos para amar Você conhece as regras e eu também Um compromisso total é o que estou pensando Você não conseguiria isso de nenhum outro cara Eu só quero te dizer como estou me sentindo Tenho que fazer você entender Nunca vou desistir de você Nunca vou te decepcionar Nunca vou correr e te abandonar Nunca vou fazer você chorar Nunca vou me despedir Nunca vou mentir e te machucar Nos conhecemos há tanto tempo Seu coração está doendo, mas Você é muito tímido para dizer isso Por dentro, nós dois sabemos o que está acontecendo Conhecemos o jogo e vamos jogar E se você me perguntar como estou me sentindo Não me diga que você é cego demais para ver Nunca vou desistir de você Nunca vou te decepcionar Nunca vou correr e te abandonar Nunca vou fazer você chorar Nunca vou me despedir Nunca vou mentir e te machucar Nunca vou desistir de você Nunca vou te decepcionar Nunca vou correr e te abandonar Nunca vou fazer você chorar Nunca vou me despedir Nunca vou mentir e te machucar (Ooh, desista de você) (Ooh, desista de você) (Ooh) Nunca vou dar, nunca vou dar (Desistir de TI) (Ooh) Nunca vou dar, nunca vou dar (Desistir de TI) Nos conhecemos há tanto tempo Seu coração está doendo, mas Você é muito tímido para dizer isso Por dentro, nós dois sabemos o que está acontecendo Conhecemos o jogo e vamos jogar Eu só quero te dizer como estou me sentindo Tenho que fazer você entender Nunca vou desistir de você Nunca vou te decepcionar Nunca vou correr e te abandonar Nunca vou fazer você chorar Nunca vou me despedir Nunca vou mentir e te machucar Nunca vou desistir de você Nunca vou te decepcionar Nunca vou correr e te abandonar Nunca vou fazer você chorar Nunca vou me despedir Nunca vou mentir e te machucar Nunca vou desistir de você Nunca vou te decepcionar Nunca vou correr e te abandonar Nunca vou fazer você chorar Nunca vou me despedir Nunca vou mentir e te machucar
2: O Jogador de Golfe (412b): Golfe-ASCII-art
'\. . 18 >>
\. ' |
O >>. 'o |
\. |
/ \. |
/ /. ' |
jgs ^^^^^^^ `^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^
3: o número de diamantes (233b): imprima este diamante
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
12345678987654321
123456787654321
1234567654321
12345654321
123454321
1234321
12321
121
1
4: o alfabeto quatro vezes (107b): imprime o alfabeto quatro vezes
a B C D e F G H I J K L M N o p q R S T U V W x y Z qwertyuiopasdfghjklzxcvbnm pyfgcrlaoeuidhtnsqjkxbmwvz zyxwvutsrqponmlkjihgfedcba
5: Letra de Old McDonald's (203b): Função Old MacDonald
O velho MacDonald tinha uma fazenda, EIEIO, E naquela fazenda ele tinha uma vaca, EIEIO, Com um moo moo aqui e um moo moo lá, Aqui um moo, há um moo, em todo lugar um moo moo, O velho MacDonald tinha uma fazenda, EIEIO!
6: Rock ao redor do relógio lyrics (144b): Rock ao redor do relógio
1, 2, 3 horas, 4 horas rock, 5, 6, 7 horas, rocha das 8 horas, 9, 10, 11 horas, rock das 12 horas, Hoje vamos agitar o dia todo.
7: Olá Mundo (296b): Diga "Olá" ao mundo na arte ASCII
_ _ _ _ _ _ _
| | | | ___ | | ___ __ _____ _ __ | | __ | |
| | _ | | / _ \ | | / _ \ \ \ / \ / / _ \ | '__ | / _` | |
| _ __ / | | (_) \ VV / (_) | | | (_ | | _ |
| _ | | _ | \ ___ | _ | _ | \ ___ () \ _ / \ _ / \ ___ / | _ | | _ | \ __, _ (_)
| /
8: Bênção irlandesa (210b): Uma antiga bênção irlandesa
Que a estrada suba ao seu encontro Que o vento esteja sempre em suas costas Que o sol brilhe quente em seu rosto As chuvas caem suavemente sobre seus campos E até nos encontrarmos novamente Que Deus te segure na cavidade de Sua mão
9: Havia uma velha senhora (1208b): Havia uma velha senhora
Havia uma velha senhora que engoliu uma mosca. Eu não sei por que ela engoliu aquela mosca, Talvez ela morra. Havia uma velha senhora que engoliu uma aranha, Isso se contorceu e se mexeu dentro dela. Ela engoliu a aranha para pegar a mosca, Eu não sei por que ela engoliu aquela mosca, Talvez ela morra. Havia uma velha senhora que engoliu um pássaro, Que absurdo engolir um pássaro. Ela engoliu o pássaro para pegar a aranha, Ela engoliu a aranha para pegar a mosca, Eu não sei por que ela engoliu aquela mosca, Talvez ela morra. Havia uma velha senhora que engoliu um gato, Imagine isso para engolir um gato. Ela engoliu o gato para pegar o pássaro, Ela engoliu o pássaro para pegar a aranha, Ela engoliu a aranha para pegar a mosca, Eu não sei por que ela engoliu aquela mosca, Talvez ela morra. Havia uma velha senhora que engoliu um cachorro, Que porco engolir um cachorro. Ela engoliu o cachorro para pegar o gato, Ela engoliu o gato para pegar o pássaro, Ela engoliu o pássaro para pegar a aranha, Ela engoliu a aranha para pegar a mosca, Eu não sei por que ela engoliu aquela mosca, Talvez ela morra. Havia uma velha senhora que engoliu um cavalo, Ela morreu, é claro.
10: endereço de gettysburg (1452b): quão aleatório é o endereço de gettysburg
Há quatro anos e sete anos atrás, nossos pais criaram neste continente uma nova nação, concebida em liberdade, e dedicada à proposição de que todos os homens são criados iguais. Agora estamos envolvidos em uma grande guerra civil, testando se essa nação, ou qualquer nação tão concebida e tão dedicada, pode durar muito tempo. Nós somos encontrados em um grande campo de batalha daquela guerra. Viemos para dedicar uma parte desse campo, como um local de descanso final para aqueles que aqui deram suas vidas para que aquela nação pudesse viver. É totalmente apropriado e apropriado que façamos isso. Mas, em um sentido mais amplo, não podemos dedicar, não podemos consagrar, não podemos santificar esse terreno. Os homens valentes, vivos e mortos, que lutaram aqui, a consagraram, muito acima do nosso pobre poder de acrescentar ou prejudicar. O mundo notará pouco, nem lembrará por muito tempo o que dizemos aqui, mas nunca pode esquecer o que eles fizeram aqui. É para nós que os vivos devem ser dedicados aqui ao trabalho inacabado que os que lutaram aqui até agora avançaram tão nobremente. É melhor que estejamos aqui dedicados à grande tarefa que nos resta - que, dentre esses mortos honrados, recebamos uma crescente devoção àquela causa pela qual eles deram a última medida completa de devoção - que aqui resolvemos com veemência que esses mortos não morreram em vão - que esta nação, sob Deus, terá um novo nascimento da liberdade - e que o governo do povo, pelo povo, pelo povo, não pereça da terra.
Total (não compactado): 6135 caracteres / bytes.
Diverta-se!
private static final String RICK_ROLL_RETURN = "We're no strangers to love...