LeetCode 1845. Seat Reservation Manager in F#

URL

Seat Reservation Manager - LeetCode

Code

https://github.com/syohex/dotnet-study/tree/master/fsharp/leetcode/problems/1845/main.fsx

#r "nuget: Fsharpx.Collections"

open FSharpx.Collections

type SeatManager =
    { seats: IPriorityQueue<int> }

    static member init(n: int) : SeatManager =
        let q =
            seq { 1..n }
            |> Seq.fold (fun acc i -> PriorityQueue.insert i acc) (PriorityQueue.empty false)

        { seats = q }

    static member reserve(s: SeatManager) : (int * SeatManager) =
        let i, q = PriorityQueue.pop s.seats
        i, { seats = q }

    static member unreserve (seatNumber: int) (s: SeatManager) : SeatManager =
        let q = PriorityQueue.insert seatNumber s.seats
        { seats = q }