summary refs log tree commit diff stats
path: root/day24.fsx
diff options
context:
space:
mode:
Diffstat (limited to 'day24.fsx')
-rw-r--r--day24.fsx19
1 files changed, 19 insertions, 0 deletions
diff --git a/day24.fsx b/day24.fsx
new file mode 100644
index 0000000..a328dd9
--- /dev/null
+++ b/day24.fsx
@@ -0,0 +1,19 @@
+open System
+
+let rec comb n l =
+    match n, l with
+    | 0, _ -> [[]]
+    | _, [] -> []
+    | k, (x::xs) -> List.map ((@) [x]) (comb (k-1) xs) @ comb k xs
+
+let minQE (nums: int list) grps =
+    [2..(nums.Length/grps - 1)]
+    |> List.map (fun n -> comb n nums) |> List.concat
+    |> List.filter (fun cmb -> cmb |> List.sum = (nums |> List.sum) / grps)
+    |> Seq.groupBy (fun cmb -> cmb.Length)
+    |> Seq.minBy (fun (len,_) -> len) |> snd
+    |> Seq.map (fun cmb -> cmb |> List.map int64 |> List.reduce (*)) |> Seq.min
+
+let nums = IO.File.ReadAllLines "day24.txt" |> Array.map Int32.Parse |> Array.toList
+minQE nums 3 |> printfn "3 Groups: %A"
+minQE nums 4 |> printfn "4 Groups: %A"