Créditos
Este desafío se originó en @miles .
Cree una función que calcule el hash CRC32 de una cadena de entrada. La entrada será una cadena ASCII de cualquier longitud. La salida será el hash CRC32 de esa cadena de entrada.
Explicación
El algoritmo de CRC32 y otros CRC son esencialmente los mismos, por lo que aquí solo se demostrará CRC3.
En primer lugar, tiene el polinomio generador, que en realidad es un entero de 4 bits [n + 1] (sería 33 bits en CRC32).
En este ejemplo, el polinomio generador es 1101
.
Luego, tendrá la cadena para hacer hash, que en este ejemplo sería 00010010111100101011001101
.
00010010111100101011001101|000 (1) append three [n] "0"s
1101 (2) align with highest bit
00001000111100101011001101|000 (3) XOR (1) and (2)
1101 (4) align with highest bit
00000101111100101011001101|000 (5) XOR (3) and (4)
1101 (6) align with highest bit
00000011011100101011001101|000 (7) XOR (5) and (6)
1101 (8) align with highest bit
00000000001100101011001101|000 (9) XOR (7) and (8)
1101 (10) align with highest bit
00000000000001101011001101|000 (11) XOR (9) and (10)
1101 (12) align with highest bit
00000000000000000011001101|000 (13) XOR (11) and (12)
1101 (14) align with highest bit
00000000000000000000011101|000 (15) XOR (13) and (14)
1101 (16) align with highest bit
00000000000000000000000111|000 (17) XOR (15) and (16)
110 1 (18) align with highest bit
00000000000000000000000001|100 (19) XOR (17) and (18)
1 101 (20) align with highest bit
00000000000000000000000000|001 (21) XOR (19) and (20)
^--------REGION 1--------^ ^2^
El resto obtenido en (21)
, cuando la región 1 es cero, es decir 001
, sería el resultado del hash CRC3.
Especificaciones
- El polinomio generador es
0x104C11DB7
, o0b100000100110000010001110110110111
, o4374732215
. - La entrada puede ser una cadena o una lista de enteros, o cualquier otro formato razonable.
- La salida puede ser una cadena hexadecimal o simplemente un número entero, o cualquier otro formato razonable.
- Los elementos integrados que calculan el hash CRC32 no están permitidos.
Objetivo
Se aplican las reglas estándar para el código de golf .
El código más corto gana.
Casos de prueba
input output (hex)
"code-golf" 147743960 08CE64D8
"jelly" 1699969158 65537886
"" 0 00000000