Cómo funciona la codificación
Dada una lista de bits:
- Mantenga una prima (comenzando con
2
) - Tener una lista
- Para cada bit en la entrada
- Si es lo mismo que el bit anterior, agregue la prima que está sosteniendo a la lista
- Si es diferente, sostenga el próximo primer y agréguelo a la lista
- Devuelve el producto de todos los números en tu lista
- Para el primer bit, suponga que el bit anterior fue
0
Nota: estos pasos son solo para fines ilustrativos, no es necesario que los siga.
Ejemplos
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
Algunos ejemplos más:
000000000 -> 512
111111111 -> 19683
010101010 -> 223092870
101010101 -> 3234846615
011101101 -> 1891890
000101101010010000 -> 3847834029582062520
Desafío
Escriba un codificador y un decodificador para este método de codificación.
(El decodificador invierte el proceso del codificador).
De entrada y salida
El codificador puede recibir información en cualquier formato razonable
El codificador debe generar un entero o una cadena
El decodificador debe tomar la entrada en el mismo formato que el codificador utiliza
El decodificador debe generar el mismo formato que el codificador toma como entrada
En otras palabras decoder( encoder( input ) ) === input
Notas
- El decodificador puede asumir que su entrada es decodificable
- Su respuesta sólo tiene que lidiar con números enteros que su lenguaje puede soportar de forma nativa sin necesidad de utilizar (
long
,bigInt
, etc.), ser razonable, si sólo idioma sostiene enteros hasta 1, tal vez reconsidere publicar una respuesta
Puntuación
Su puntaje es la suma de las longitudes en bytes del codificador y decodificador.
Si necesita importar un módulo, la importación puede contarse solo una vez, siempre que su codificador y decodificador puedan coexistir en el mismo archivo y reutilizarse (como funciones).
Las lagunas predeterminadas están prohibidas.
Este es el código de golf, por lo que gana el puntaje más corto para cada idioma.
Respuestas:
05AB1E , 13 bytes
Codificador, 8 bytes
Pruébalo en línea!
Explicación
Decodificador, 5 bytes
Pruébalo en línea!
Explicación
fuente
Jalea , 17 bytes
Codificador (10 bytes):
Pruébalo en línea!
Decodificador (7 bytes):
Pruébalo en línea!
¿Cómo?
Codificador:
Descifrador:
fuente
JavaScript (ES6), 130 bytes
E / S: matriz de bits ↔ entero
Codificador, 71 bytes
Pruébalo en línea!
Decodificador, 59 bytes
Pruébalo en línea!
fuente
Java 10, 209 bytes
Codificador, 124 bytes
Pruébalo en línea.
Explicación:
Decodificador, 85 bytes
Pruébalo en línea.
Explicación:
fuente
long
aint
.Casco , 18 bytes
Codificador, 11 bytes
Pruébalo en línea!
Decodificador, 7 bytes
Pruébalo en línea!
Cómo trabajan ellos
Codificador:
Descifrador:
fuente
Python 2 ,
234193174 bytesEncoder,
11610197 bytes:Utiliza el teorema de Wilson .
Pruébalo en línea!
Decodificador,
1189277 bytes:Pruébalo en línea!
fuente
J , 34 bytes
¡Muy inspirado por la solución Jelly de Jonathan Allan!
Codificador: 23 bytes
Pruébalo en línea!
No me gustan esas horquillas
[:
, debería ser golfable.Decodificador: 11 bytes
Pruébalo en línea!
fuente
Jalea , 15 bytes
Codificador, 9 bytes
Pruébalo en línea!
Decodificador, 6 bytes
Pruébalo en línea!
fuente
C (gcc) ,
180184 bytes102 bytes - Codificador
Pruébalo en línea!
82 bytes - Decodificador
Pruébalo en línea!
fuente
Gol> <> , 29 + 39 = 68 bytes
Codificador, 29 bytes
Pruébalo en línea!
Decodificador, 39 bytes
Pruébalo en línea!
Cómo funcionan estos
Sería mejor si pudiera jugar golf en el siguiente ciclo principal ...
fuente