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.
Respostas:
05AB1E , 13 bytes
Codificador, 8 bytes
Experimente online!
Explicação
Decodificador, 5 bytes
Experimente online!
Explicação
fonte
Gelatina , 17 bytes
Codificador (10 bytes):
Experimente online!
Decodificador (7 bytes):
Experimente online!
Quão?
Codificador:
Decodificador:
fonte
JavaScript (ES6), 130 bytes
E / S: matriz de bits ↔ inteiro
Codificador, 71 bytes
Experimente online!
Decodificador, 59 bytes
Experimente online!
fonte
Java 10, 209 bytes
Codificador, 124 bytes
Experimente online.
Explicação:
Decodificador, 85 bytes
Experimente online.
Explicação:
fonte
long
paraint
.Casca , 18 bytes
Codificador, 11 bytes
Experimente online!
Decodificador, 7 bytes
Experimente online!
Como eles trabalham
Codificador:
Decodificador:
fonte
Python 2 ,
234193174 bytesCodificador,
11610197 bytes:Usa o teorema de Wilson .
Experimente online!
Decodificador,
1189277 bytes:Experimente online!
fonte
J , 34 bytes
Fortemente inspirado na solução de Jonathan Allan's Jelly!
Codificador: 23 bytes
Experimente online!
Não gosto desses garfos de boné
[:
- deve ser jogável.Decodificador: 11 bytes
Experimente online!
fonte
Gelatina , 15 bytes
Codificador, 9 bytes
Experimente online!
Decodificador, 6 bytes
Experimente online!
fonte
C (gcc) ,
180184 bytes102 bytes - Codificador
Experimente online!
82 bytes - decodificador
Experimente online!
fonte
Gol> <> , 29 + 39 = 68 bytes
Codificador, 29 bytes
Experimente online!
Decodificador, 39 bytes
Experimente online!
Como estes funcionam
Seria melhor se eu pudesse jogar golfe no próximo loop primo ...
fonte