LeetCode 838. Push Dominoes in F#
URL
leetcode.com/problems/push-dominoes
Code
github.com/syohex/dotnet-study/blob/master/..
let pushDominoes (dominoes: string) : string =
let len = dominoes.Length
let (values, _, _) =
dominoes
|> Seq.fold
(fun ((acc: int []), idx, value) c ->
match c with
| 'L' ->
acc.[idx] <- 0
acc, idx + 1, 0
| 'R' ->
acc.[idx] <- len
acc, idx + 1, len
| _ ->
let v = System.Math.Max(0, value - 1)
acc.[idx] <- v
acc, idx + 1, v)
(Array.zeroCreate len, 0, 0)
let (values', _, _) =
dominoes
|> Seq.rev
|> Seq.fold
(fun ((acc: int []), idx, value) c ->
match c with
| 'L' ->
acc.[idx] <- acc.[idx] - len
acc, idx - 1, len
| 'R' -> acc, idx - 1, 0
| _ ->
let v = System.Math.Max(0, value - 1)
acc.[idx] <- acc.[idx] - v
acc, idx - 1, v)
(values, len - 1, 0)
values'
|> Array.map (fun v ->
if v > 0 then 'R'
elif v = 0 then '.'
else 'L')
|> System.String