LeetCode 12. Integer to Roman in F#
URL
leetcode.com/problems/integer-to-roman
Code
github.com/syohex/dotnet-study/blob/master/..
let intToRoman (num: int) : string =
let intToRoman' num baseNum tenChar fiveChar oneChar acc =
let digit = num / baseNum
match digit with
| 9 -> tenChar :: oneChar :: acc
| 5
| 6
| 7
| 8 ->
seq { 1 .. (digit - 5) }
|> Seq.fold (fun acc _ -> oneChar :: acc) (fiveChar :: acc)
| 4 -> fiveChar :: oneChar :: acc
| 0
| 1
| 2
| 3 ->
seq { 1..digit }
|> Seq.fold (fun acc _ -> oneChar :: acc) acc
| _ -> failwith "never reach here"
intToRoman' (num % 10000) 1000 '?' '!' 'M' []
|> intToRoman' (num % 1000) 100 'M' 'D' 'C'
|> intToRoman' (num % 100) 10 'C' 'L' 'X'
|> intToRoman' (num % 10) 1 'X' 'V' 'I'
|> List.rev
|> System.String.Concat