diff options
Diffstat (limited to 'aoc-2022-dotnet/Common/Util.fs')
-rw-r--r-- | aoc-2022-dotnet/Common/Util.fs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/aoc-2022-dotnet/Common/Util.fs b/aoc-2022-dotnet/Common/Util.fs new file mode 100644 index 0000000..a9f3a1e --- /dev/null +++ b/aoc-2022-dotnet/Common/Util.fs @@ -0,0 +1,43 @@ +namespace Common + +module Util = + open System.Globalization + open FParsec + open FSharpPlus + + let parse parser input = + match run parser input with + | Success (result, _, _) -> result + | _ -> failwith "Invalid input format!" + + let countDistinct seq = seq |> Set |> Set.count + + let countWhere pred = Seq.filter pred >> Seq.length + + let charToInt = CharUnicodeInfo.GetDigitValue + + let cutInHalf xs = + let half = Seq.length xs / 2 + [ Seq.take half xs; Seq.skip half xs ] + + let splitStringToTuple sep str = + match Seq.toList <| String.split [ sep ] str with + | [ x; y ] -> x, y + | _ -> failwith "Invalid string format!" + + let topN n xs = + let rec insertSorted x = + function + | h :: t -> min h x :: (insertSorted (max h x) t) + | _ -> [ x ] + + Seq.fold + (fun acc x -> + if List.length acc < n then + insertSorted x acc + elif List.head acc < x then + insertSorted x <| List.tail acc + else + acc) + List.empty + xs |