Créditos
Esse desafio teve origem em @miles .
Crie uma função que calcule o hash CRC32 de uma sequência de entrada. A entrada será uma sequência ASCII de qualquer tamanho. A saída será o hash CRC32 dessa sequência de entrada.
Explicação
O algoritmo do CRC32 e outro CRC é essencialmente o mesmo, portanto apenas o CRC3 será demonstrado aqui.
Primeiramente, você tem o polinômio do gerador, que na verdade é um número inteiro de 4 bits [n + 1] (seria de 33 bits no CRC32).
Neste exemplo, o polinômio do gerador é 1101
.
Então, você terá a string a ser hash, o que neste exemplo seria 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^
O restante obtido em (21)
, quando a região 1 é zero, ou seja 001
, seria o resultado do hash CRC3.
Especificações
- O polinômio do gerador é
0x104C11DB7
, ou0b100000100110000010001110110110111
, ou4374732215
. - A entrada pode ser uma sequência de caracteres ou uma lista de números inteiros ou qualquer outro formato razoável.
- A saída deve ser uma sequência hexadecimal ou apenas um número inteiro ou qualquer outro formato razoável.
- Built-ins que calculam o hash CRC32 não são permitidos.
Objetivo
Aplicam -se regras padrão para o código-golfe .
O código mais curto vence.
Casos de teste
input output (hex)
"code-golf" 147743960 08CE64D8
"jelly" 1699969158 65537886
"" 0 00000000