open Solutions exception NotImplemented of string let args = System.Environment.GetCommandLineArgs() assert (Array.length args = 3) let day, part = int args[1], int args[2] match (day, part) with | (1, 1) -> printf $"{Day1.part1 ()}\n" | (1, 2) -> printf $"{Day1.part2 ()}\n" | (2, 1) -> printf $"{Day2.part1 ()}\n" | (2, 2) -> printf $"{Day2.part2 ()}\n" | (3, 1) -> printf $"{Day3.part1 ()}\n" | (3, 2) -> printf $"{Day3.part2 ()}\n" | (4, 1) -> printf $"{Day4.part1 ()}\n" | (4, 2) -> printf $"{Day4.part2 ()}\n" | (5, 1) -> printf $"{Day5.part1 ()}\n" | (5, 2) -> printf $"{Day5.part2 ()}\n" | (6, 1) -> printf $"{Day6.part1 ()}\n" | (6, 2) -> printf $"{Day6.part2 ()}\n" | (7, 1) -> printf $"{Day7.part1 ()}\n" | (7, 2) -> printf $"{Day7.part2 ()}\n" | (8, 1) -> printf $"{Day8.part1 ()}\n" | (8, 2) -> printf $"{Day8.part2 ()}\n" | (9, 1) -> printf $"{Day9.part1 ()}\n" | (9, 2) -> printf $"{Day9.part2 ()}\n" | (10, 1) -> printf $"{Day10.part1 ()}\n" | (10, 2) -> printf $"{Day10.part2 ()}\n" | (11, 1) -> printf $"{Day11.part1 ()}\n" | (11, 2) -> printf $"{Day11.part2 ()}\n" | (12, 1) -> printf $"{Day12.part1 ()}\n" | (12, 2) -> printf $"{Day12.part2 ()}\n" | (13, 1) -> printf $"{Day13.part1 ()}\n" | (13, 2) -> printf $"{Day13.part2 ()}\n" | (14, 1) -> printf $"{Day14.part1 ()}\n" | (14, 2) -> printf $"{Day14.part2 ()}\n" | (15, 1) -> printf $"{Day15.part1 ()}\n" | (15, 2) -> printf $"{Day15.part2 ()}\n" | (x, y) when (1 <= x && x <= 25) && (y = 1 || y = 2) -> raise (NotImplemented("not implemented yet")) | _ -> raise (NotImplemented("invalid values"))