学分
这个挑战源自@miles。
创建一个计算输入字符串的CRC32哈希的函数。输入将是任意长度的ASCII字符串。输出将是该输入字符串的CRC32哈希。
说明
CRC32和其他CRC的算法本质上是相同的,因此这里仅展示CRC3。
首先,您需要生成多项式,它实际上是4位[n + 1]整数(在CRC32中为33位)。
在此示例中,生成多项式为1101
。
然后,您将具有要哈希的字符串,在此示例中为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^
(21)
当区域1为零时,在处获得的余数001
将是CRC3哈希的结果。
眼镜
- 生成多项式为
0x104C11DB7
或0b100000100110000010001110110110111
或4374732215
。 - 输入可以是字符串或整数列表,或任何其他合理的格式。
- 输出可以是十六进制字符串,也可以是整数,也可以是任何其他合理的格式。
- 不允许使用用于计算CRC32哈希值的内置函数。
目标
适用于代码高尔夫球的标准规则。
最短的代码获胜。
测试用例
input output (hex)
"code-golf" 147743960 08CE64D8
"jelly" 1699969158 65537886
"" 0 00000000
如果我没看错的话,这是在做多项式除法模2并求出余数,即XOR乘法中mod的类似物。
—
xnor
对于CRC32,您是否要先附加31 0?
—
xnor
是– – – – – – – – –
—
Leaky Nun
@KennyLau就像聊天一样,您可以用他们的名字ping通人。
—
Rɪᴋᴇʀ