एक चर-लंबाई की मात्रा (जिसे वीएलक्यू या के रूप में भी जाना जाता है uintvar
) 28 बिट पूर्णांक मान तक एनकोड करने का एक तरीका है जो केवल आवश्यक के रूप में कई बाइट्स का उपयोग करता है। यह MIDI फ़ाइल स्वरूप में कुछ ईवेंट डेटा के आकार को कम करने के तरीके के रूप में उपयोग किया गया था ।
जिस तरह से यह काम करता है वह काफी सरल है। बाइट्स की एक बड़ी-एंडियन श्रृंखला के रूप में, प्रत्येक बाइट का सबसे महत्वपूर्ण बिट (MSB) एक 1
संकेत है कि एक और वीएलक्यू बाइट निम्नानुसार है। प्रत्येक बाइट के शेष 7 बिट्स डीकोड किए गए मान को बनाते हैं।
उदाहरण (विकिपीडिया से):
[ 0x86, 0xc3, 0x17 ] => 106903
अतिरिक्त संदर्भ: विकिपीडिया , कुछ लड़के ।
चुनौती:
एक चर-लंबाई की मात्रा को देखते हुए, इसे पूर्णांक मान में परिवर्तित करें।
इनपुट:
एक से चार बाइट्स की सूची या एक पूर्णांक के एक वैध वीएलक्यू का प्रतिनिधित्व करने वाला 32-बिट मान प्रकार।
आउटपुट:
VLQ इनपुट का पूर्णांक मान।
नियम और स्कोरिंग:
- यह कोड-गोल्फ है, इसलिए प्रत्येक भाषा की जीत के लिए बाइट्स में सबसे छोटा उत्तर है ।
- मानक नियम और डिफ़ॉल्ट I / O नियम लागू होते हैं।
- लूपोल्स निषिद्ध (बेशक)।
- कृपया अपने कोड ( TIO.run , आदि) के लिए एक परीक्षण के साथ लिंक प्रदान करें ।
- आपके उत्तर के लिए एक स्पष्ट व्याख्या की अत्यधिक अनुशंसा की जाती है।
- बिल्ट-इन जो इस रूपांतरण को संभालते हैं, उन पर प्रतिबंध नहीं लगाया गया है, हालांकि उनका उपयोग नहीं करना बहुत अधिक दिलचस्प है।
परीक्षण के मामलों:
Input (VLQ) Output (int)
[ 0x00 ] => 0
[ 0x07 ] => 7
[ 0x7f ] => 127
[ 0x81, 0x00 ] => 128
[ 0xC0, 0x00 ] => 8192
[ 0xff, 0x7f ] => 16383
[ 0x81, 0x80, 0x00 ] => 16384
[ 0x86, 0xc3, 0x17 ] => 106903
[ 0xbd, 0x84, 0x40 ] => 1000000
[ 0xff, 0xff, 0x7f ] => 2097151
[ 0xC0, 0x80, 0x80, 0x00 ] => 134217728
[ 0xFF, 0xFF, 0xFF, 0x7F ] => 268435455
नोट: आपको अपने इनपुट या आउटपुट के रूप में बाइट का प्रतिनिधित्व करने के लिए हेक्स शाब्दिक का उपयोग करने की आवश्यकता नहीं है। यदि आप अपने प्लेटफ़ॉर्म के लिए बेहतर अनुकूल हैं तो आप दशमलव शाब्दिक ( [ 129, 128, 0 ]
), पूर्णांक ( 0x80818000
) या किसी अन्य उचित बाइट / ऑक्टेट प्रतिनिधित्व का उपयोग कर सकते हैं। जब तक यह 1-4 बाइट / ऑक्टेट का प्रतिनिधित्व करता है तब तक प्रारूप लचीला होता है।
गोल्फ दूर!
[0x01, 0x80, 0x02] => 1
?