blob: a328dd9dfc1b3fd58a06beaef4b2f0bb1be7f11e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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"
|