태그 보관물: bitwise

bitwise

가변 길이 수량 디코딩 사용 하지 않는 것이 훨씬 더 흥미

가변 길이 량 (이라고도 VLQ 또는 uintvar) 필요한만큼의 바이트로서 만 사용하여 28 비트 정수 값까지 인코딩하는 방법이다. 이것은 특정 이벤트 데이터의 크기를 최소화하는 방법 으로 MIDI 파일 형식 으로 사용되었습니다 .

작동 방식은 매우 간단합니다. 빅 엔디안 바이트 시리즈로서, 각 바이트의 최상위 비트 (MSB)는 1다른 VLQ 바이트가 뒤따른다는 것을 나타내는 것입니다. 각 바이트의 나머지 7 비트는 디코딩 된 값을 구성합니다.

예 (Wikipedia에서) :

[ 0x86, 0xc3, 0x17 ] => 106903

여기에 이미지 설명을 입력하십시오
추가 참조 : Wikipedia , Some Guy .

도전:

가변 길이 수량이 주어지면 정수 값으로 변환하십시오.

입력:

1에서 4 바이트의 목록 또는 정수의 유효한 VLQ를 나타내는 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

참고 : 바이트를 입력 또는 출력으로 나타 내기 위해 16 진 리터럴을 사용할 필요는 없습니다. 플랫폼에 더 적합한 경우 십진 리터럴 ( [ 129, 128, 0 ]), 정수 ( 0x80818000) 또는 기타 적절한 바이트 / 옥텟 표현을 사용할 수 있습니다. 형식은 1-4 바이트 / 옥텟을 나타내는 한 유연합니다.

멀리 골프!



답변

APL (dzaima / APL) , 8 바이트

128(⊣⊥|)

온라인으로 사용해보십시오!

어떻게:

128(⊣⊥|)  Anonymous function
128   |   Input modulo 128
    ⊣⊥    Decoded from base 128

답변

Pari / GP , 24 바이트

a->fromdigits(a%128,128)

온라인으로 사용해보십시오!


답변


답변

J , 10 바이트

128#.128|]

온라인으로 사용해보십시오!

J Salle의 APL 답변에서 영감을 얻습니다.

  • 128|] 입력 수의 나머지를 128로 나눈 값
  • 128#. 기본 128 숫자의 숫자로 해석

답변

젤리 , 6 바이트

%Ø⁷ḅØ⁷

온라인으로 사용해보십시오!

alephalpha의 Pari / GP answer 와 같습니다 .

엔모드128

128

답변

05AB1E , 6 바이트

žy%žyβ

온라인으로 사용해보십시오!

128

27

답변

Stax , 8 바이트

å→♂á╣>nt

실행 및 디버깅

연산:

  • 각 바이트를 고정 폭 7 비트 배열로 변환하십시오.
  • 비트 배열을 하나로 병합합니다.
  • 비트 배열을 다시 숫자로 변환하십시오.