Bir değişken uzunluklu miktarı (aynı zamanda şu şekilde de ifade VLQ veya uintvar
) gereken sayıda bayt kullanarak sadece bir 28 bit tamsayı değeri kadar kodlamak için kullanılan bir yöntemdir. Bu, belirli olay verilerinin boyutunu en aza indirmenin bir yolu olarak MIDI dosya biçiminde kullanılmıştır .
Çalışma şekli oldukça basittir. Bir big-endian bayt serisi olarak, her bir baytın en önemli biti (MSB), 1
başka bir VLQ baytının izlediğini belirtmek için kullanılır. Her baytın geri kalan 7 biti kodu çözülen değeri oluşturur.
Örnek (Wikipedia'dan):
[ 0x86, 0xc3, 0x17 ] => 106903
Ek referanslar: Wikipedia , Some Guy .
Meydan okuma:
Değişken uzunlukta bir miktar verildiğinde, bunu tamsayı değerine dönüştürün.
Giriş:
Bir ila dört baytlık bir liste veya bir tamsayının geçerli bir VLQ'sunu temsil eden 32 bitlik değer türü.
Çıktı:
VLQ girişinin tamsayı değeri.
Kurallar ve puanlama:
- Bu kod golf, her dil için bayt olarak en kısa cevap kazanır.
- Standart kurallar ve varsayılan G / Ç kuralları geçerlidir.
- Loopholes yasak (tabii ki).
- Lütfen kodunuz için bir test içeren bağlantı sağlayın ( TIO.run , vb.).
- Cevabınız için net bir açıklama şiddetle tavsiye edilir.
- Bu dönüşümü ele Dahili ins ancak yasaklı olmamak değil onları çok daha ilginçtir kullanarak.
Test senaryoları:
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
Not: Girdinizi veya çıktınızı bir baytı temsil etmek için altıgen değişmez değerler kullanmanız gerekmez. Ondalık değişmez değeri ([ 129, 128, 0 ]
0x80818000
Platformunuza daha uygunsa , ), tamsayı ( ) veya başka bir makul bayt / sekizlik gösterimi kullanabilirsiniz. Biçim, 1-4 bayt / okteti temsil ettiği sürece esnektir.
Golf uzakta!
[0x01, 0x80, 0x02] => 1
?