Crédits
Ce défi provient de @miles .
Créez une fonction qui calcule le hachage CRC32 d'une chaîne d'entrée. L'entrée sera une chaîne ASCII de n'importe quelle longueur. La sortie sera le hachage CRC32 de cette chaîne d'entrée.
Explication
L'algorithme de CRC32 et d'autres CRC sont essentiellement les mêmes, donc seul CRC3 sera démontré ici.
Premièrement, vous avez le polynôme générateur, qui est en fait un entier 4 bits [n + 1] (serait 33 bits en CRC32).
Dans cet exemple, le polynôme générateur est 1101
.
Ensuite, vous aurez la chaîne à hacher, ce qui serait le cas dans cet exemple 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^
Le reste obtenu à (21)
, lorsque la région 1 est nulle, ce qui est 001
, serait le résultat du hachage CRC3.
Spécifications
- Le polynôme générateur est
0x104C11DB7
, ou0b100000100110000010001110110110111
, ou4374732215
. - L'entrée peut être une chaîne ou une liste d'entiers, ou tout autre format raisonnable.
- La sortie doit être une chaîne hexadécimale ou simplement un entier, ou tout autre format raisonnable.
- Les fonctions intégrées qui calculent le hachage CRC32 ne sont pas autorisées.
Objectif
Les règles standard pour le golf de code s'appliquent.
Le code le plus court gagne.
Cas de test
input output (hex)
"code-golf" 147743960 08CE64D8
"jelly" 1699969158 65537886
"" 0 00000000