Compare commits

...

2 Commits

Author SHA1 Message Date
590637e0de Upgrade Ocamlformat version. 2024-12-06 15:42:18 +00:00
7b51696740 Flush stdout between each part.
This helps indicate where we have reached in case of problems.
2024-12-06 15:42:00 +00:00
5 changed files with 21 additions and 21 deletions

View File

@@ -1 +1 @@
version = 0.26.2
version = 0.27.0

View File

@@ -1,7 +1,7 @@
(** [pair_nums_from_string s] takes a string of two numbers separated by
whitespace and returns the pair of the numbers *)
let pair_ints_of_string s =
match Aoc.ints_of_string s with
match Aoc.ints_of_string ~sep:" " s with
| [ h; h' ] -> (h, h')
| _ -> raise (Invalid_argument "pair_nums_from_string")
@@ -16,7 +16,7 @@ let rev_split lst =
impl [] [] lst
(** [count lst n] counts the number of times [n] appears as an element in [lst].
*)
*)
let count lst n =
List.fold_left (fun acc x -> if x = n then acc + 1 else acc) 0 lst

View File

@@ -36,8 +36,8 @@ let rec is_page_order_valid m pages =
match pages with h :: t -> impl h t && is_page_order_valid m t | [] -> true
(** [parse_rules lst] parses the rules in the list [lst] stopping when
encountering an empty line. Returns a pair [(rule_map, tail)].
[tail] starts the line after the empty line. *)
encountering an empty line. Returns a pair [(rule_map, tail)]. [tail] starts
the line after the empty line. *)
let parse_rules =
let m = Hashtbl.create 17 in
let rec impl = function

View File

@@ -12,7 +12,8 @@ let main prep parts =
| [| _; fname |] ->
let lines = prep fname in
let do_part i (fmt, fn) =
Printf.printf "Part %d = %s\n" (i + 1) (fmt (fn lines))
Printf.printf "Part %d = %s\n" (i + 1) (fmt (fn lines));
flush stdout
in
List.iteri do_part parts;
exit 0

View File

@@ -6,13 +6,12 @@ val distance1 : int -> int -> int
(** [distance1 a b] returns the absolute difference between [a] and [b]. *)
val strings_of_file : string -> string list
(** [strings_from_file fname] returns a list of strings from the file
[fname]. Each string represents a line from the file. *)
(** [strings_from_file fname] returns a list of strings from the file [fname].
Each string represents a line from the file. *)
val main : (string -> 'a) -> (('b -> string) * ('a -> 'b)) list -> unit
(** [main prep parts] executes an advent of code problem. [prep fname] should
be a function that returns the input from [fname]. Each elemet of
[parts] is a pair of functions. The first converts the output to a string
(for example [string_of_int]). The second executes the given part.
Output is given as if done by:
[print_string ( prep fname |> snd |> fst )] *)
(** [main prep parts] executes an advent of code problem. [prep fname] should be
a function that returns the input from [fname]. Each elemet of [parts] is a
pair of functions. The first converts the output to a string (for example
[string_of_int]). The second executes the given part. Output is given as if
done by: [print_string ( prep fname |> snd |> fst )] *)