Make ints_of_string generic and move to lib.
This commit is contained in:
@@ -39,13 +39,12 @@ let rec is_page_order_valid m pages =
|
|||||||
encountering an empty line. Returns a pair [(rule_map, tail)].
|
encountering an empty line. Returns a pair [(rule_map, tail)].
|
||||||
[tail] starts the line after the empty line. *)
|
[tail] starts the line after the empty line. *)
|
||||||
let parse_rules =
|
let parse_rules =
|
||||||
let re = Str.regexp_string "|" in
|
|
||||||
let m = Hashtbl.create 17 in
|
let m = Hashtbl.create 17 in
|
||||||
let rec impl = function
|
let rec impl = function
|
||||||
| "" :: t -> (m, t)
|
| "" :: t -> (m, t)
|
||||||
| [] -> failwith "parse_rules.impl"
|
| [] -> failwith "parse_rules.impl"
|
||||||
| h :: t -> (
|
| h :: t -> (
|
||||||
match List.map int_of_string (Str.split re h) with
|
match Aoc.ints_of_string ~sep:"|" h with
|
||||||
| [ a; b ] ->
|
| [ a; b ] ->
|
||||||
add_rule a b m;
|
add_rule a b m;
|
||||||
impl t
|
impl t
|
||||||
@@ -55,10 +54,9 @@ let parse_rules =
|
|||||||
|
|
||||||
(** [parse_page_orders lst] parses a list of page orders. *)
|
(** [parse_page_orders lst] parses a list of page orders. *)
|
||||||
let parse_page_orders =
|
let parse_page_orders =
|
||||||
let re = Str.regexp_string "," in
|
|
||||||
let rec impl acc = function
|
let rec impl acc = function
|
||||||
| [] -> acc
|
| [] -> acc
|
||||||
| h :: t -> impl (List.map int_of_string (Str.split re h) :: acc) t
|
| h :: t -> impl (Aoc.ints_of_string ~sep:"," h :: acc) t
|
||||||
in
|
in
|
||||||
impl []
|
impl []
|
||||||
|
|
||||||
|
@@ -1,4 +1,6 @@
|
|||||||
let ints_of_string s = List.map int_of_string (Str.split (Str.regexp " +") s)
|
let ints_of_string ?(sep = " ") s =
|
||||||
|
List.map int_of_string (Str.split (Str.regexp sep) s)
|
||||||
|
|
||||||
let distance1 a b = abs (a - b)
|
let distance1 a b = abs (a - b)
|
||||||
|
|
||||||
let strings_of_file fname =
|
let strings_of_file fname =
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
val ints_of_string : string -> int list
|
val ints_of_string : ?sep:string -> string -> int list
|
||||||
(** [nums_from_string s] takes a string of space separated integers and gives
|
(** [nums_from_string ?sep s] takes a string of integers separated by [sep] and
|
||||||
back a list of the integers. *)
|
gives back a list of the integers. By default [sep] is " " *)
|
||||||
|
|
||||||
val distance1 : int -> int -> int
|
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]. *)
|
||||||
|
Reference in New Issue
Block a user