fork(1) download
  1. let rec combinations n l =
  2. match n, l with
  3. | 0, _ -> [[]]
  4. | _, [] -> []
  5. | k, (x::xs) -> List.map ((@) [x]) (combinations (k-1) xs) @ combinations k xs
  6.  
  7. let rec cross xs = seq {
  8. match xs with
  9. | h :: t -> for e in t do yield h, e
  10. yield! cross t
  11. | [] -> ()
  12. }
  13.  
  14. let solve n (lst : int list) =
  15. seq { for e in 1..n do yield! combinations e lst }
  16. |> Seq.groupBy List.sum
  17. |> Seq.collect (snd >> Seq.toList >> cross)
  18.  
  19. solve 7 [1..14]
  20. |> Seq.last
  21. |> printfn "%A"
Success #stdin #stdout 0.46s 27744KB
stdin
Standard input is empty
stdout
([6; 9; 10; 11; 12; 13; 14], [7; 8; 10; 11; 12; 13; 14])