Skip to content

Commit

Permalink
Upgrade to ocaml 5.3.0
Browse files Browse the repository at this point in the history
  • Loading branch information
drewolson committed Jan 18, 2025
1 parent 1b212ad commit 4ff7154
Show file tree
Hide file tree
Showing 11 changed files with 119 additions and 151 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

```
dune exec aoc -- -help
dune exec aoc -- -day 1 -part 1
dune exec aoc -- --day 1 --part 1
dune exec aoc -- -d 1 -p 1
```

Expand All @@ -23,13 +23,13 @@ dune test
## Create Local Switch

```
opam switch create ./ ocaml-base-compiler.5.2.1 --deps-only --locked
opam switch create ./ ocaml-base-compiler.5.3.0 --deps-only --locked
```

## Install New Dependencies

```
opam install . --deps-only --locked
opam install . --deps-only
```

## Lock New Dependencies
Expand Down
3 changes: 1 addition & 2 deletions aoc.opam
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,9 @@ depends: [
"odoc"
"utop"
"angstrom"
"cmdliner"
"core"
"core_bench"
"core_kernel"
"core_unix"
"pcre"
"ppx_jane"
"z3"
Expand Down
2 changes: 1 addition & 1 deletion bin/dune
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
(public_name aoc)
(name main)
(libraries
cmdliner
core
core_unix.command_unix
letops
runner)
(preprocess
Expand Down
53 changes: 20 additions & 33 deletions bin/main.ml
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)
3 changes: 1 addition & 2 deletions dune-project
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,9 @@
utop

angstrom
cmdliner
core
core_bench
core_kernel
core_unix
pcre
ppx_jane
z3
Expand Down
1 change: 0 additions & 1 deletion lib/runner/dune
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
(name runner)
(libraries
core
core_bench
year2019
year2022
year2023)
Expand Down
8 changes: 0 additions & 8 deletions lib/runner/printer.ml

This file was deleted.

13 changes: 6 additions & 7 deletions lib/runner/run2019.ml
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"
;;
53 changes: 26 additions & 27 deletions lib/runner/run2022.ml
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"
;;
110 changes: 55 additions & 55 deletions lib/runner/run2023.ml
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"
;;
18 changes: 6 additions & 12 deletions lib/runner/runner.ml
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
;;

0 comments on commit 4ff7154

Please sign in to comment.