একটি পরিবর্তনশীল দৈর্ঘ্যের পরিমাণ ( ভিএলকিউ বা এটিও বলা হয় uintvar
) প্রয়োজন হিসাবে কেবলমাত্র অনেকগুলি বাইট ব্যবহার করে 28 বিট পূর্ণসংখ্যার মান পর্যন্ত এনকোড করার একটি উপায়। এটি নির্দিষ্ট ইভেন্টের ডেটার আকার হ্রাস করার উপায় হিসাবে এটি এমআইডিআই ফাইল ফর্ম্যাটে ব্যবহৃত হয়েছিল ।
এটি যেভাবে কাজ করে তা মোটামুটি সহজ। বাইটের বিগ-এন্ডিয়ান সিরিজ হিসাবে, প্রতিটি বাইটের সর্বাধিক উল্লেখযোগ্য বিট (এমএসবি) 1
হ'ল অন্য ভিএলকিউ বাইট অনুসরণ করে indicate প্রতিটি বাইটের অবশিষ্ট 7 টি বিট ডিকোডড মানটি তৈরি করে।
উদাহরণ (উইকিপিডিয়া থেকে):
[ 0x86, 0xc3, 0x17 ] => 106903
অতিরিক্ত তথ্যসূত্র: উইকিপিডিয়া , কিছু লোক ।
চ্যালেঞ্জ:
একটি পরিবর্তনশীল-দৈর্ঘ্যের পরিমাণ দেওয়া হয়েছে, এটিটিকে পূর্ণসংখ্যার মানতে রূপান্তর করুন।
ইনপুট:
এক থেকে চারটি বাইট বা একটি 32-বিট মান ধরণের একটি পূর্ণসংখ্যার বৈধ VLQ উপস্থাপনের একটি তালিকা A
আউটপুট:
ভিএলকিউ ইনপুটটির পূর্ণসংখ্যা মান।
বিধি এবং স্কোরিং:
- এটি কোড-গল্ফ, তাই প্রতিটি ভাষার জয়ের জন্য বাইটের মধ্যে সংক্ষিপ্ত উত্তর ।
- মানক নিয়ম এবং ডিফল্ট আই / ও বিধি প্রয়োগ হয়।
- লুফোল নিষিদ্ধ (অবশ্যই)।
- আপনার কোড ( 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
?