ปริมาณความยาวตัวแปร (ยังเรียกว่าVLQหรือuintvar
) คือวิธีการเข้ารหัสได้ถึงค่าจำนวนเต็ม 28 บิตโดยใช้เพียงเป็นไบต์มากที่สุดเท่าที่จำเป็น สิ่งนี้ถูกใช้ในรูปแบบไฟล์ MIDIเพื่อลดขนาดของข้อมูลเหตุการณ์บางอย่าง
วิธีการทำงานค่อนข้างง่าย ในฐานะที่เป็นชุดใหญ่ของไบต์ไบต์บิตที่สำคัญที่สุด (MSB) ของแต่ละไบต์คือการ1
บ่งชี้ว่า VLQ ไบต์อื่นดังต่อไปนี้ ส่วนที่เหลืออีก 7 บิตของแต่ละไบต์เป็นค่าที่ถอดรหัส
ตัวอย่าง (จาก Wikipedia):
[ 0x86, 0xc3, 0x17 ] => 106903
อ้างอิงเพิ่มเติม: วิกิพีเดีย , บางผู้ชาย
ท้าทาย:
รับปริมาณที่มีความยาวผันแปรได้แปลงเป็นค่าจำนวนเต็ม
การป้อนข้อมูล:
รายการของหนึ่งถึงสี่ไบต์หรือชนิดค่า 32- บิตแทน VLQ ที่ถูกต้องของจำนวนเต็ม
เอาท์พุท:
ค่าจำนวนเต็มของอินพุต VLQ
กฎและเกณฑ์การให้คะแนน:
- นี่คือ code-golf ดังนั้นคำตอบที่สั้นที่สุดเป็นไบต์สำหรับแต่ละภาษาที่ชนะ
- กฎระเบียบมาตรฐานและเริ่มต้น 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
) หรือการแทนไบต์ / octet ที่สมเหตุสมผลอื่น ๆ หากเหมาะสมกับแพลตฟอร์มของคุณ รูปแบบมีความยืดหยุ่นตราบใดที่มันหมายถึง 1-4 ไบต์ / octets
กอล์ฟออกไป!
[0x01, 0x80, 0x02] => 1
?