Sebuah kuantitas variabel-panjang (juga disebut sebagai VLQ atau uintvar
) adalah cara untuk mengkodekan hingga nilai integer 28 bit menggunakan hanya sebagai banyak byte yang diperlukan. Ini digunakan dalam format file MIDI sebagai cara untuk meminimalkan ukuran data peristiwa tertentu.
Cara kerjanya cukup sederhana. Sebagai rangkaian byte big-endian, bit paling signifikan (MSB) dari setiap byte adalah 1
untuk menunjukkan bahwa byte VLQ lain mengikuti. 7 bit tersisa dari setiap byte membentuk nilai yang diterjemahkan.
Contoh (dari Wikipedia):
[ 0x86, 0xc3, 0x17 ] => 106903
Referensi tambahan: Wikipedia , Some Guy .
Tantangan:
Diberikan kuantitas panjang variabel, konversikan ke nilai integernya.
Memasukkan:
Daftar satu hingga empat byte atau tipe nilai 32-bit yang mewakili VLQ valid integer.
Keluaran:
Nilai integer dari input VLQ.
Aturan dan penilaian:
- Ini adalah kode-golf, jadi jawaban terpendek dalam byte untuk setiap bahasa menang.
- Aturan standar dan aturan I / O standar berlaku.
- Lubang terlarang (tentu saja).
- Berikan tautan dengan tes untuk kode Anda ( TIO.run , dll).
- Penjelasan yang jelas untuk jawaban Anda sangat dianjurkan.
- Built-in yang menangani konversi ini tidak dilarang, namun tidak menggunakannya jauh lebih menarik.
Kasus uji:
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
Catatan: Anda tidak diharuskan menggunakan hex literals untuk merepresentasikan byte sebagai input atau output Anda. Anda dapat menggunakan desimal literal ( [ 129, 128, 0 ]
), integer ( 0x80818000
) atau representasi byte / oktet lainnya yang masuk akal jika lebih cocok untuk platform Anda. Format fleksibel sepanjang mewakili 1-4 byte / oktet.
Golf pergi!
[0x01, 0x80, 0x02] => 1
?