Tentukan panjang urutan byte UTF-8 yang diberikan byte pertama. Tabel berikut ini menunjukkan rentang peta yang mana untuk setiap panjang yang mungkin:
Range Length
--------- ------
0x00-0x7F 1
0xC2-0xDF 2
0xE0-0xEF 3
0xF0-0xF4 4
Catatan tentang celah dalam tabel: 0x80-0xBF adalah byte lanjutan, 0xC0-0xC1 akan memulai urutan yang tidak valid dan panjang, 0xF5-0xFF akan menghasilkan codepoint di luar Unicode maksimum.
Tulis program atau fungsi yang menggunakan byte pertama dari urutan UTF-8 sebagai input dan output atau mengembalikan panjang urutan. I / O fleksibel. Misalnya, input dapat berupa angka, karakter 8-bit atau string satu karakter. Anda dapat mengasumsikan bahwa byte pertama adalah bagian dari urutan yang valid dan termasuk dalam salah satu rentang di atas.
Ini golf kode. Jawaban terpendek dalam byte menang.
Uji kasus
0x00 => 1
0x41 => 1
0x7F => 1
0xC2 => 2
0xDF => 2
0xE0 => 3
0xEF => 3
0xF0 => 4
0xF4 => 4
Jawaban:
Keempat, 6 byte
lihat https://forth-standard.org/standard/xchar/X-SIZE
Input dan output mengikuti model Forth standar:
Memasukkan
Alamat memori + panjang (yaitu 1) dari byte tunggal "string" UTF-8.
Keluaran
Panjang urutan UTF-8 dalam byte.
Kode sampel
Simpan 0xF0 dalam sel memori, dan aktifkan ukuran x:
Periksa hasilnya:
sumber
Z80Golf ,
1914 byteCobalah online!
-5 byte berkat @Bubbler
Contoh dengan input 0x41-Cobalah online! Majelis
Contoh dengan input 0xC2-Cobalah online!
Contoh dengan input 0xE0-Cobalah online!
Contoh dengan input 0xF4-Cobalah online!
Majelis:
Cobalah online!
sumber
xor 0xff -> cpl
, tidak perluor a
,jr nz, return -> ret nz
,ld a,1 -> inc a
.C (gcc) , 39 byte
Cobalah online!
sumber
char
dan tidakint
?~(char)0xF0 == ~(int)0xFFFFFFF0
(anggapchar = signed char
,sizeof(int) == 4
)Jelly ,
87 byteTautan monadik yang menerima byte sebagai integer.
Cobalah online! Atau lihat semua input dievaluasi .
Jika input daftar 8 bit dapat diterima maka metode ini hanya 6 byte:
1;IITḢ
namun telah dianggap sebagai berbicara I / O fleksibel terlalu jauh.Bagaimana?
sumber
Haskell , 28 byte
Cobalah online!
sumber
Python 2 , 28 byte
Cobalah online!
sumber
Jelly ,
87 byteCobalah online!
Bagaimana itu bekerja
sumber
JavaScript (Node.js) , 24 byte
Cobalah online!
sumber
Ruby ,
2723 byteCobalah online!
sumber
Arang , 12 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
Jelly , 7 byte
Port jawaban 05AB1E saya .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Perl 6 , 18 byte
Cobalah online!
Port dari jawaban JavaScript user202729. Alternatif dengan Apapun Kode:
sumber
x86 Assembly, 11 byte
Cobalah online!
Port dari jawaban JavaScript user202729. Menggunakan konvensi panggilan cepat.
sumber
Labirin , 35 byte
Cobalah online!
Versi kode yang belum dibuka:
sumber
05AB1E ,
87 bytePort of @Neil 's Charcoal answer .
-1 byte terima kasih kepada @Grimy .
Input sebagai integer.
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
s)
ke‚
untuk 7. Porting jawaban Jelly lainnya memberi 8:₁+b¥η€ËO
‚
awal ..: S Tapi terima kasih atas -1.C, 31 byte
Cobalah online!
27 byte dengan gcc (-O0)
Alternatif, 31 dan 33 byte
Saya menemukan ekspresi ini ketika bermain-main dengan Aha! Superoptimizer beberapa tahun yang lalu .
sumber