LeetCode 948. Bag of Tokens in F#

URL

https://leetcode.com/problems/bag-of-tokens/description/

Code

https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/challenge/202403/bag_of_tokens/main.fsx

open System

let bagOfTokensScore (tokens: int list) (power: int) : int =
    let rec bagOfTokensScore' left right (tokens: int[]) power score ret =
        if left > right then
            ret
        else if power >= tokens.[left] then
            bagOfTokensScore' (left + 1) right tokens (power - tokens.[left]) (score + 1) (Math.Max(ret, score + 1))
        elif score >= 1 then
            bagOfTokensScore' left (right - 1) tokens (power + tokens.[right]) (score - 1) ret
        else
            ret

    let tokens' = tokens |> List.sort |> List.toArray
    bagOfTokensScore' 0 (tokens'.Length - 1) tokens' power 0 0