octets: каждый элемент — число от 0 до 255, то есть ровно один байт. Проверьте, что поток корректно записан в кодировке UTF-8, то есть целиком разбивается на символы по таким правилам.
Символ занимает от 1 до 4 байт:
| Байт в символе | Двоичная запись |
|---|---|
| 1 | 0xxxxxxx |
| 2 | 110xxxxx 10xxxxxx |
| 3 | 1110xxxx 10xxxxxx 10xxxxxx |
| 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
Здесь x — любой бит. Иначе говоря, первый байт символа из k байт (k ≥ 2) начинается с k единиц и нуля, а каждый из остальных k − 1 байт начинается с 10. Однобайтовый символ начинается с 0. Других вариантов нет; смысл самих символов проверять не нужно.
Верните True, если поток корректен, и False иначе.octets=[226, 130, 172, 65] → True
226 = 11100010 — начало символа из трёх байт; 130 = 10000010 и 172 = 10101100 — правильные продолжения. 65 = 01000001 — однобайтовый символ. Поток корректен.
octets=[195, 65] → False
195 = 11000011 обещает символ из двух байт, но следующий байт 65 = 01000001 не начинается с 10.
octets=[128] → False
128 = 10000000 — байт-продолжение, а символ с него начинаться не может.
octets.length ≤ 2·10⁴octets[i] ≤ 255octets=[226, 130, 172, 65]
True
«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 137 тестов на сервере, включая скрытые.