Compare commits
2 Commits
7fbad713c3
...
590637e0de
Author | SHA1 | Date | |
---|---|---|---|
590637e0de
|
|||
7b51696740
|
@@ -1 +1 @@
|
|||||||
version = 0.26.2
|
version = 0.27.0
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
(** [pair_nums_from_string s] takes a string of two numbers separated by
|
(** [pair_nums_from_string s] takes a string of two numbers separated by
|
||||||
whitespace and returns the pair of the numbers *)
|
whitespace and returns the pair of the numbers *)
|
||||||
let pair_ints_of_string s =
|
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')
|
| [ h; h' ] -> (h, h')
|
||||||
| _ -> raise (Invalid_argument "pair_nums_from_string")
|
| _ -> raise (Invalid_argument "pair_nums_from_string")
|
||||||
|
|
||||||
|
@@ -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
|
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
|
(** [parse_rules lst] parses the rules in the list [lst] stopping when
|
||||||
encountering an empty line. Returns a pair [(rule_map, tail)].
|
encountering an empty line. Returns a pair [(rule_map, tail)]. [tail] starts
|
||||||
[tail] starts the line after the empty line. *)
|
the line after the empty line. *)
|
||||||
let parse_rules =
|
let parse_rules =
|
||||||
let m = Hashtbl.create 17 in
|
let m = Hashtbl.create 17 in
|
||||||
let rec impl = function
|
let rec impl = function
|
||||||
|
@@ -12,7 +12,8 @@ let main prep parts =
|
|||||||
| [| _; fname |] ->
|
| [| _; fname |] ->
|
||||||
let lines = prep fname in
|
let lines = prep fname in
|
||||||
let do_part i (fmt, fn) =
|
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
|
in
|
||||||
List.iteri do_part parts;
|
List.iteri do_part parts;
|
||||||
exit 0
|
exit 0
|
||||||
|
15
lib/aoc.mli
15
lib/aoc.mli
@@ -6,13 +6,12 @@ val distance1 : int -> int -> int
|
|||||||
(** [distance1 a b] returns the absolute difference between [a] and [b]. *)
|
(** [distance1 a b] returns the absolute difference between [a] and [b]. *)
|
||||||
|
|
||||||
val strings_of_file : string -> string list
|
val strings_of_file : string -> string list
|
||||||
(** [strings_from_file fname] returns a list of strings from the file
|
(** [strings_from_file fname] returns a list of strings from the file [fname].
|
||||||
[fname]. Each string represents a line from the file. *)
|
Each string represents a line from the file. *)
|
||||||
|
|
||||||
val main : (string -> 'a) -> (('b -> string) * ('a -> 'b)) list -> unit
|
val main : (string -> 'a) -> (('b -> string) * ('a -> 'b)) list -> unit
|
||||||
(** [main prep parts] executes an advent of code problem. [prep fname] should
|
(** [main prep parts] executes an advent of code problem. [prep fname] should be
|
||||||
be a function that returns the input from [fname]. Each elemet of
|
a function that returns the input from [fname]. Each elemet of [parts] is a
|
||||||
[parts] is a pair of functions. The first converts the output to a string
|
pair of functions. The first converts the output to a string (for example
|
||||||
(for example [string_of_int]). The second executes the given part.
|
[string_of_int]). The second executes the given part. Output is given as if
|
||||||
Output is given as if done by:
|
done by: [print_string ( prep fname |> snd |> fst )] *)
|
||||||
[print_string ( prep fname |> snd |> fst )] *)
|
|
||||||
|
Reference in New Issue
Block a user