-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
119 additions
and
151 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,42 +1,29 @@ | ||
module IntSet = Set.Make (Int) | ||
open Cmdliner | ||
|
||
let years = IntSet.of_list [ 2019; 2022; 2023 ] | ||
|
||
let year_arg = | ||
Command.Arg_type.create (fun year_str -> | ||
match Int.of_string_opt year_str with | ||
| Some year when Set.mem years year -> year | ||
| _ -> failwith "Year must be in [2019, 2022, 2023]") | ||
let year = | ||
let doc = "Year to run" in | ||
let years = [ 2019; 2022; 2023 ] |> List.map ~f:(fun y -> Int.to_string y, y) in | ||
Arg.(value & opt (enum years) 2023 & info [ "y"; "year" ] ~docv:"YEAR" ~doc) | ||
;; | ||
|
||
let day_arg = | ||
Command.Arg_type.create (fun day_str -> | ||
match Int.of_string_opt day_str with | ||
| Some day when 1 <= day && day <= 25 -> day | ||
| _ -> failwith "Day must be between 1 - 25") | ||
let day = | ||
let doc = "Day to run (1 - 25)" in | ||
let days = List.range 1 26 |> List.map ~f:(fun d -> Int.to_string d, d) in | ||
Arg.(required & opt (some & enum days) None & info [ "d"; "day" ] ~docv:"DAY" ~doc) | ||
;; | ||
|
||
let part_arg = | ||
Command.Arg_type.create (fun part_str -> | ||
match Int.of_string_opt part_str with | ||
| Some part when part = 1 || part = 2 -> part | ||
| _ -> failwith "Part must be 1 or 2") | ||
let part = | ||
let doc = "Part to run (1 or 2)" in | ||
let parts = [ "1", 1; "2", 2 ] in | ||
Arg.(required & opt (some & enum parts) None & info [ "p"; "part" ] ~docv:"PART" ~doc) | ||
;; | ||
|
||
let run_command = | ||
let open Command.Param in | ||
let open Letops.Command in | ||
let+ year = | ||
flag | ||
"year" | ||
(optional_with_default 2023 year_arg) | ||
~aliases:[ "y" ] | ||
~doc:"int year to run (default: 2023)" | ||
and+ day = flag "day" (required day_arg) ~aliases:[ "d" ] ~doc:"int day to run (1 - 25)" | ||
and+ part = | ||
flag "part" (required part_arg) ~aliases:[ "p" ] ~doc:"int part to run (1 or 2)" | ||
and+ bench = flag "bench" no_arg ~aliases:[ "b" ] ~doc:"benchmark solution" in | ||
fun _ -> Runner.run year day part bench | ||
let aoc_t = Term.(const Runner.run $ year $ day $ part) | ||
|
||
let cmd = | ||
let doc = "Run aoc solution" in | ||
let info = Cmd.info "aoc" ~version:"1.0.0" ~doc in | ||
Cmd.v info aoc_t | ||
;; | ||
|
||
let () = Command_unix.run @@ Command.basic run_command ~summary:"Run aoc solution" | ||
let () = exit (Cmd.eval cmd) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -26,10 +26,9 @@ | |
utop | ||
|
||
angstrom | ||
cmdliner | ||
core | ||
core_bench | ||
core_kernel | ||
core_unix | ||
pcre | ||
ppx_jane | ||
z3 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,7 +2,6 @@ | |
(name runner) | ||
(libraries | ||
core | ||
core_bench | ||
year2019 | ||
year2022 | ||
year2023) | ||
|
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,7 @@ | ||
let p = Printer.p | ||
|
||
let run day part input b = | ||
match day, part with | ||
| 1, 1 -> p b "%i" @@ Year2019.Day01.part1 input | ||
| 1, 2 -> p b "%i" @@ Year2019.Day01.part2 input | ||
| day, part -> failwith @@ Printf.sprintf "Unknown day %i and part %i" day part | ||
let run day part input = | ||
(match day, part with | ||
| 1, 1 -> Stdio.printf "%i" @@ Year2019.Day01.part1 input | ||
| 1, 2 -> Stdio.printf "%i" @@ Year2019.Day01.part2 input | ||
| day, part -> failwith @@ Printf.sprintf "Unknown day %i and part %i" day part); | ||
Stdio.print_string "\n" | ||
;; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,28 +1,27 @@ | ||
let p = Printer.p | ||
|
||
let run day part input b = | ||
match day, part with | ||
| 1, 1 -> p b "%i" @@ Year2022.Day01.part1 input | ||
| 1, 2 -> p b "%i" @@ Year2022.Day01.part2 input | ||
| 2, 1 -> p b "%i" @@ Year2022.Day02.part1 input | ||
| 2, 2 -> p b "%i" @@ Year2022.Day02.part2 input | ||
| 3, 1 -> p b "%i" @@ Year2022.Day03.part1 input | ||
| 3, 2 -> p b "%i" @@ Year2022.Day03.part2 input | ||
| 4, 1 -> p b "%i" @@ Year2022.Day04.part1 input | ||
| 4, 2 -> p b "%i" @@ Year2022.Day04.part2 input | ||
| 5, 1 -> p b "%s" @@ Year2022.Day05.part1 input | ||
| 5, 2 -> p b "%s" @@ Year2022.Day05.part2 input | ||
| 6, 1 -> p b "%i" @@ Year2022.Day06.part1 input | ||
| 6, 2 -> p b "%i" @@ Year2022.Day06.part2 input | ||
| 7, 1 -> p b "%i" @@ Year2022.Day07.part1 input | ||
| 7, 2 -> p b "%i" @@ Year2022.Day07.part2 input | ||
| 8, 1 -> p b "%i" @@ Year2022.Day08.part1 input | ||
| 8, 2 -> p b "%i" @@ Year2022.Day08.part2 input | ||
| 9, 1 -> p b "%i" @@ Year2022.Day09.part1 input | ||
| 9, 2 -> p b "%i" @@ Year2022.Day09.part2 input | ||
| 10, 1 -> p b "%i" @@ Year2022.Day10.part1 input | ||
| 10, 2 -> p b "%s" @@ Year2022.Day10.part2 input | ||
| 11, 1 -> p b "%s" @@ Year2022.Day11.part1 input | ||
| 11, 2 -> p b "%s" @@ Year2022.Day11.part1 input | ||
| day, part -> failwith @@ Printf.sprintf "Unknown day %i and part %i" day part | ||
let run day part input = | ||
(match day, part with | ||
| 1, 1 -> Stdio.printf "%i" @@ Year2022.Day01.part1 input | ||
| 1, 2 -> Stdio.printf "%i" @@ Year2022.Day01.part2 input | ||
| 2, 1 -> Stdio.printf "%i" @@ Year2022.Day02.part1 input | ||
| 2, 2 -> Stdio.printf "%i" @@ Year2022.Day02.part2 input | ||
| 3, 1 -> Stdio.printf "%i" @@ Year2022.Day03.part1 input | ||
| 3, 2 -> Stdio.printf "%i" @@ Year2022.Day03.part2 input | ||
| 4, 1 -> Stdio.printf "%i" @@ Year2022.Day04.part1 input | ||
| 4, 2 -> Stdio.printf "%i" @@ Year2022.Day04.part2 input | ||
| 5, 1 -> Stdio.printf "%s" @@ Year2022.Day05.part1 input | ||
| 5, 2 -> Stdio.printf "%s" @@ Year2022.Day05.part2 input | ||
| 6, 1 -> Stdio.printf "%i" @@ Year2022.Day06.part1 input | ||
| 6, 2 -> Stdio.printf "%i" @@ Year2022.Day06.part2 input | ||
| 7, 1 -> Stdio.printf "%i" @@ Year2022.Day07.part1 input | ||
| 7, 2 -> Stdio.printf "%i" @@ Year2022.Day07.part2 input | ||
| 8, 1 -> Stdio.printf "%i" @@ Year2022.Day08.part1 input | ||
| 8, 2 -> Stdio.printf "%i" @@ Year2022.Day08.part2 input | ||
| 9, 1 -> Stdio.printf "%i" @@ Year2022.Day09.part1 input | ||
| 9, 2 -> Stdio.printf "%i" @@ Year2022.Day09.part2 input | ||
| 10, 1 -> Stdio.printf "%i" @@ Year2022.Day10.part1 input | ||
| 10, 2 -> Stdio.printf "%s" @@ Year2022.Day10.part2 input | ||
| 11, 1 -> Stdio.printf "%s" @@ Year2022.Day11.part1 input | ||
| 11, 2 -> Stdio.printf "%s" @@ Year2022.Day11.part1 input | ||
| day, part -> failwith @@ Printf.sprintf "Unknown day %i and part %i" day part); | ||
Stdio.print_string "\n" | ||
;; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,56 +1,56 @@ | ||
let p = Printer.p | ||
|
||
let run day part input b = | ||
match day, part with | ||
| 1, 1 -> p b "%i" @@ Year2023.Day01.part1 input | ||
| 1, 2 -> p b "%i" @@ Year2023.Day01.part2 input | ||
| 2, 1 -> p b "%i" @@ Year2023.Day02.part1 input | ||
| 2, 2 -> p b "%i" @@ Year2023.Day02.part2 input | ||
| 3, 1 -> p b "%i" @@ Year2023.Day03.part1 input | ||
| 3, 2 -> p b "%i" @@ Year2023.Day03.part2 input | ||
| 4, 1 -> p b "%i" @@ Year2023.Day04.part1 input | ||
| 4, 2 -> p b "%i" @@ Year2023.Day04.part2 input | ||
| 5, 1 -> p b "%i" @@ Year2023.Day05.part1 input | ||
| 5, 2 -> p b "%i" @@ Year2023.Day05.part2 input | ||
| 6, 1 -> p b "%i" @@ Year2023.Day06.part1 input | ||
| 6, 2 -> p b "%i" @@ Year2023.Day06.part2 input | ||
| 7, 1 -> p b "%i" @@ Year2023.Day07.part1 input | ||
| 7, 2 -> p b "%i" @@ Year2023.Day07.part2 input | ||
| 8, 1 -> p b "%i" @@ Year2023.Day08.part1 input | ||
| 8, 2 -> p b "%i" @@ Year2023.Day08.part2 input | ||
| 9, 1 -> p b "%i" @@ Year2023.Day09.part1 input | ||
| 9, 2 -> p b "%i" @@ Year2023.Day09.part2 input | ||
| 10, 1 -> p b "%i" @@ Year2023.Day10.part1 input | ||
| 10, 2 -> p b "%i" @@ Year2023.Day10.part2 true input | ||
| 11, 1 -> p b "%i" @@ Year2023.Day11.part1 input | ||
| 11, 2 -> p b "%i" @@ Year2023.Day11.part2 input | ||
| 12, 1 -> p b "%i" @@ Year2023.Day12.part1 input | ||
| 12, 2 -> p b "%i" @@ Year2023.Day12.part2 input | ||
| 13, 1 -> p b "%i" @@ Year2023.Day13.part1 input | ||
| 13, 2 -> p b "%i" @@ Year2023.Day13.part2 input | ||
| 14, 1 -> p b "%i" @@ Year2023.Day14.part1 input | ||
| 14, 2 -> p b "%i" @@ Year2023.Day14.part2 input | ||
| 15, 1 -> p b "%i" @@ Year2023.Day15.part1 input | ||
| 15, 2 -> p b "%i" @@ Year2023.Day15.part2 input | ||
| 16, 1 -> p b "%i" @@ Year2023.Day16.part1 input | ||
| 16, 2 -> p b "%i" @@ Year2023.Day16.part2 input | ||
| 17, 1 -> p b "%i" @@ Year2023.Day17.part1 input | ||
| 17, 2 -> p b "%i" @@ Year2023.Day17.part2 input | ||
| 18, 1 -> p b "%i" @@ Year2023.Day18.part1 input | ||
| 18, 2 -> p b "%i" @@ Year2023.Day18.part2 input | ||
| 19, 1 -> p b "%i" @@ Year2023.Day19.part1 input | ||
| 19, 2 -> p b "%i" @@ Year2023.Day19.part2 input | ||
| 20, 1 -> p b "%i" @@ Year2023.Day20.part1 input | ||
| 20, 2 -> p b "%i" @@ Year2023.Day20.part2 input | ||
| 21, 1 -> p b "%i" @@ Year2023.Day21.part1 64 input | ||
| 21, 2 -> p b "%i" @@ Year2023.Day21.part2 input | ||
| 22, 1 -> p b "%i" @@ Year2023.Day22.part1 input | ||
| 22, 2 -> p b "%i" @@ Year2023.Day22.part2 input | ||
| 23, 1 -> p b "%i" @@ Year2023.Day23.part1 input | ||
| 23, 2 -> p b "%i" @@ Year2023.Day23.part2 input | ||
| 24, 1 -> | ||
p b "%i" @@ Year2023.Day24.part1 Q.(~$200000000000000, ~$400000000000000) input | ||
| 24, 2 -> p b "%i" @@ Year2023.Day24.part2 input | ||
| 25, 1 -> p b "%i" @@ Year2023.Day25.part1 input | ||
| day, part -> failwith @@ Printf.sprintf "Unknown day %i and part %i" day part | ||
let run day part input = | ||
(match day, part with | ||
| 1, 1 -> Stdio.printf "%i" @@ Year2023.Day01.part1 input | ||
| 1, 2 -> Stdio.printf "%i" @@ Year2023.Day01.part2 input | ||
| 2, 1 -> Stdio.printf "%i" @@ Year2023.Day02.part1 input | ||
| 2, 2 -> Stdio.printf "%i" @@ Year2023.Day02.part2 input | ||
| 3, 1 -> Stdio.printf "%i" @@ Year2023.Day03.part1 input | ||
| 3, 2 -> Stdio.printf "%i" @@ Year2023.Day03.part2 input | ||
| 4, 1 -> Stdio.printf "%i" @@ Year2023.Day04.part1 input | ||
| 4, 2 -> Stdio.printf "%i" @@ Year2023.Day04.part2 input | ||
| 5, 1 -> Stdio.printf "%i" @@ Year2023.Day05.part1 input | ||
| 5, 2 -> Stdio.printf "%i" @@ Year2023.Day05.part2 input | ||
| 6, 1 -> Stdio.printf "%i" @@ Year2023.Day06.part1 input | ||
| 6, 2 -> Stdio.printf "%i" @@ Year2023.Day06.part2 input | ||
| 7, 1 -> Stdio.printf "%i" @@ Year2023.Day07.part1 input | ||
| 7, 2 -> Stdio.printf "%i" @@ Year2023.Day07.part2 input | ||
| 8, 1 -> Stdio.printf "%i" @@ Year2023.Day08.part1 input | ||
| 8, 2 -> Stdio.printf "%i" @@ Year2023.Day08.part2 input | ||
| 9, 1 -> Stdio.printf "%i" @@ Year2023.Day09.part1 input | ||
| 9, 2 -> Stdio.printf "%i" @@ Year2023.Day09.part2 input | ||
| 10, 1 -> Stdio.printf "%i" @@ Year2023.Day10.part1 input | ||
| 10, 2 -> Stdio.printf "%i" @@ Year2023.Day10.part2 true input | ||
| 11, 1 -> Stdio.printf "%i" @@ Year2023.Day11.part1 input | ||
| 11, 2 -> Stdio.printf "%i" @@ Year2023.Day11.part2 input | ||
| 12, 1 -> Stdio.printf "%i" @@ Year2023.Day12.part1 input | ||
| 12, 2 -> Stdio.printf "%i" @@ Year2023.Day12.part2 input | ||
| 13, 1 -> Stdio.printf "%i" @@ Year2023.Day13.part1 input | ||
| 13, 2 -> Stdio.printf "%i" @@ Year2023.Day13.part2 input | ||
| 14, 1 -> Stdio.printf "%i" @@ Year2023.Day14.part1 input | ||
| 14, 2 -> Stdio.printf "%i" @@ Year2023.Day14.part2 input | ||
| 15, 1 -> Stdio.printf "%i" @@ Year2023.Day15.part1 input | ||
| 15, 2 -> Stdio.printf "%i" @@ Year2023.Day15.part2 input | ||
| 16, 1 -> Stdio.printf "%i" @@ Year2023.Day16.part1 input | ||
| 16, 2 -> Stdio.printf "%i" @@ Year2023.Day16.part2 input | ||
| 17, 1 -> Stdio.printf "%i" @@ Year2023.Day17.part1 input | ||
| 17, 2 -> Stdio.printf "%i" @@ Year2023.Day17.part2 input | ||
| 18, 1 -> Stdio.printf "%i" @@ Year2023.Day18.part1 input | ||
| 18, 2 -> Stdio.printf "%i" @@ Year2023.Day18.part2 input | ||
| 19, 1 -> Stdio.printf "%i" @@ Year2023.Day19.part1 input | ||
| 19, 2 -> Stdio.printf "%i" @@ Year2023.Day19.part2 input | ||
| 20, 1 -> Stdio.printf "%i" @@ Year2023.Day20.part1 input | ||
| 20, 2 -> Stdio.printf "%i" @@ Year2023.Day20.part2 input | ||
| 21, 1 -> Stdio.printf "%i" @@ Year2023.Day21.part1 64 input | ||
| 21, 2 -> Stdio.printf "%i" @@ Year2023.Day21.part2 input | ||
| 22, 1 -> Stdio.printf "%i" @@ Year2023.Day22.part1 input | ||
| 22, 2 -> Stdio.printf "%i" @@ Year2023.Day22.part2 input | ||
| 23, 1 -> Stdio.printf "%i" @@ Year2023.Day23.part1 input | ||
| 23, 2 -> Stdio.printf "%i" @@ Year2023.Day23.part2 input | ||
| 24, 1 -> | ||
Stdio.printf "%i" | ||
@@ Year2023.Day24.part1 Q.(~$200000000000000, ~$400000000000000) input | ||
| 24, 2 -> Stdio.printf "%i" @@ Year2023.Day24.part2 input | ||
| 25, 1 -> Stdio.printf "%i" @@ Year2023.Day25.part1 input | ||
| day, part -> failwith @@ Printf.sprintf "Unknown day %i and part %i" day part); | ||
Stdio.print_string "\n" | ||
;; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,9 @@ | ||
let run year day part bench = | ||
let run year day part = | ||
let path = Printf.sprintf "data/%i/day%02i.txt" year day in | ||
let input = In_channel.read_all path in | ||
let maybe_bench ~f = | ||
let open Core_bench in | ||
let name = Printf.sprintf "Year %i, Day %i, Part %i" year day part in | ||
if bench then Bench.bench [ Bench.Test.create ~name f ] else f () | ||
in | ||
maybe_bench ~f:(fun _ -> | ||
match year with | ||
| 2019 -> Run2019.run day part input bench | ||
| 2022 -> Run2022.run day part input bench | ||
| 2023 -> Run2023.run day part input bench | ||
| year -> failwith @@ Printf.sprintf "Unknown year: %i" year) | ||
match year with | ||
| 2019 -> Run2019.run day part input | ||
| 2022 -> Run2022.run day part input | ||
| 2023 -> Run2023.run day part input | ||
| year -> failwith @@ Printf.sprintf "Unknown year: %i" year | ||
;; |