summaryrefslogtreecommitdiffstats
path: root/bin/main.ml
diff options
context:
space:
mode:
authorAlexandre Jesus <adbjesus@gmail.com>2025-12-01 11:44:39 +0000
committerAlexandre Jesus <adbjesus@gmail.com>2025-12-01 11:44:39 +0000
commit735b792bcf2a8cc1fb77c19c42e6362a9abb429f (patch)
tree4f141174fbc2468d2e47b3c30ae7d171197270f2 /bin/main.ml
downloadaoc2025-735b792bcf2a8cc1fb77c19c42e6362a9abb429f.tar.gz
aoc2025-735b792bcf2a8cc1fb77c19c42e6362a9abb429f.zip
Initial commit
Diffstat (limited to 'bin/main.ml')
-rw-r--r--bin/main.ml43
1 files changed, 43 insertions, 0 deletions
diff --git a/bin/main.ml b/bin/main.ml
new file mode 100644
index 0000000..2cddf84
--- /dev/null
+++ b/bin/main.ml
@@ -0,0 +1,43 @@
+(*
+ * SPDX-FileCopyrightText: Copyright 2025 Alexandre Jesus <https://adbjesus.com>
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *)
+
+open Aoc2025
+
+let parse_day s =
+ match int_of_string_opt s with
+ | Some n when n >= 1 && n <= 12 -> n
+ | _ -> failwith (Format.sprintf "Day '%s' is invalid, expected an integer between 1 and 12" s)
+
+let parse_part s =
+ match int_of_string_opt s with
+ | Some n when n >= 1 && n <= 2 -> n
+ | _ -> failwith (Format.sprintf "Part '%s' is invalid, expected an integer between 1 and 2" s)
+
+let day_part_fn day part =
+ let day = parse_day day in
+ let part = parse_part part in
+ match (day, part) with
+ | (1, 1) -> Day01.part1
+ | (1, 2) -> Day01.part2
+ | _ -> failwith (Format.sprintf "Day %d, part %d, has not yet been implemented\n" day part)
+
+let () =
+ let usage_msg = "aoc2025 <day> <part> <inputfile>" in
+ let args = ref [] in
+ let anon_fun arg = args := arg :: !args in
+ let speclist = [] in
+ Arg.parse speclist anon_fun usage_msg;
+ let args = Array.of_list !args in
+ if Array.length args != 3 then
+ failwith "Wrong number of arguments, expected 3: <day> <part> <inputfile>"
+ else
+ let fn = day_part_fn args.(2) args.(1) in
+ let ic = open_in args.(0) in
+ try
+ fn ic
+ with e ->
+ close_in_noerr ic;
+ raise e