LeetCode 393. UTF-8 Validation in F#
URL
leetcode.com/problems/utf-8-validation
Code
let validUtf8 (data: int list) : bool =
let rec validUtf8' (data: uint8 []) pos =
if pos >= data.Length then
true
elif (data.[pos] &&& 0b10000000uy) = 0b00000000uy then
validUtf8' data (pos + 1)
elif (data.[pos] &&& 0b11100000uy) = 0b11000000uy then
if (pos + 1) >= data.Length then
false
elif (data.[pos + 1] &&& 0b11000000uy) = 0b10000000uy then
validUtf8' data (pos + 2)
else
false
elif (data.[pos] &&& 0b11110000uy) = 0b11100000uy then
if (pos + 2) >= data.Length then
false
elif (data.[pos + 1] &&& 0b11000000uy) = 0b10000000uy
&& (data.[pos + 2] &&& 0b11000000uy) = 0b10000000uy then
validUtf8' data (pos + 3)
else
false
elif (data.[pos] &&& 0b11111000uy) = 0b11110000uy then
if (pos + 3) >= data.Length then
false
elif (data.[pos + 1] &&& 0b11000000uy) = 0b10000000uy
&& (data.[pos + 2] &&& 0b11000000uy) = 0b10000000uy
&& (data.[pos + 3] &&& 0b11000000uy) = 0b10000000uy then
validUtf8' data (pos + 4)
else
false
else
false
let data' = data |> List.map uint8 |> List.toArray
validUtf8' data' 0