Como a codificação funciona
Dada uma lista de bits:
- Mantenha um prime (começando com
2
) - Tenha uma lista
- Para cada bit na entrada
- Se for o mesmo que o bit anterior, adicione o prime que você está segurando à lista
- Se for diferente, mantenha o próximo prime e adicione-o à lista
- Devolva o produto de todos os números da sua lista
- Para o primeiro bit, assuma que o bit anterior foi
0
Nota: estas etapas são apenas para fins ilustrativos, não é necessário segui-las.
Exemplos
Input: 001
hold 2
0: add 2 to the list
0: add 2 to the list
1: hold 3, add 3 to the list
list: 2,2,3
Output: 12
Input: 1101
hold 2
1: hold 3, add 3 to the list
1: add 3 to the list
0: hold 5, add 5 to the list
1: hold 7, add 7 to the list
list: 3,3,5,7
Output: 315
Mais alguns exemplos:
000000000 -> 512
111111111 -> 19683
010101010 -> 223092870
101010101 -> 3234846615
011101101 -> 1891890
000101101010010000 -> 3847834029582062520
Desafio
Escreva um codificador e um decodificador para esse método de codificação.
(O decodificador reverte o processo do codificador).
Entrada / Saída
O codificador pode receber entradas em qualquer formato razoável
O codificador deve gerar um número inteiro ou uma sequência
O decodificador deve receber a entrada no mesmo formato que o codificador utiliza
O decodificador deve emitir o mesmo formato que o codificador usa como entrada
Em outras palavras decoder( encoder( input ) ) === input
Notas
- O decodificador pode assumir que sua entrada é decodificável
- Sua resposta precisa lidar apenas com números inteiros que seu idioma possa suportar nativamente sem usar (
long
,bigInt
etc.), seja razoável, se o idioma suportar apenas ints de até 1, talvez reconsidere postar uma resposta
Pontuação
Sua pontuação é a soma dos comprimentos em bytes do codificador e decodificador.
Se você precisar importar um módulo, a importação poderá ser contada apenas uma vez, desde que o codificador e o decodificador possam coexistir no mesmo arquivo e serem reutilizados (como funções).
As brechas padrão são proibidas.
Isso é código-golfe e a pontuação mais curta para todos os idiomas vence.