क्रेडिट
यह चुनौती @miles से उत्पन्न हुई ।
एक फ़ंक्शन बनाएँ जो एक इनपुट स्ट्रिंग के CRC32 हैश की गणना करता है। इनपुट किसी भी लम्बाई का ASCII स्ट्रिंग होगा। आउटपुट उस इनपुट स्ट्रिंग का CRC32 हैश होगा।
व्याख्या
CRC32 और अन्य CRC की एल्गोरिथ्म अनिवार्य रूप से समान हैं, इसलिए यहां केवल CRC3 का प्रदर्शन किया जाएगा।
सबसे पहले, आपके पास जनरेटर बहुपद है, जो वास्तव में 4-बिट [एन + 1] पूर्णांक है (सीआरसी 32 में 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
सीआरसी 3 हैश का परिणाम होता है, तब प्राप्त शेष ।
ऐनक
- जनरेटर बहुपद है
0x104C11DB7
, या0b100000100110000010001110110110111
, या4374732215
। - इनपुट स्ट्रिंग या पूर्णांक, या किसी अन्य उचित प्रारूप की एक सूची हो सकती है।
- आउटपुट एक हेक्स स्ट्रिंग या सिर्फ एक पूर्णांक, या कोई अन्य उचित प्रारूप हो।
- अंतर्निहित CRC32 हैश की गणना करने की अनुमति नहीं है।
लक्ष्य
कोड-गोल्फ के लिए मानक नियम लागू होते हैं।
सबसे छोटा कोड जीतता है।
परीक्षण के मामलों
input output (hex)
"code-golf" 147743960 08CE64D8
"jelly" 1699969158 65537886
"" 0 00000000