From ef312564ca84a2b49fc291434d8fb2f8501bb618 Mon Sep 17 00:00:00 2001 From: Sébastien Dailly Date: Tue, 15 Nov 2016 13:00:01 +0100 Subject: Initial commit --- cell.ml | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100755 cell.ml (limited to 'cell.ml') diff --git a/cell.ml b/cell.ml new file mode 100755 index 0000000..c4aa9c3 --- /dev/null +++ b/cell.ml @@ -0,0 +1,70 @@ +type t = (int * int) * (bool * bool) + +let u = UTF8.from_utf8string + +let from_string (fixed_x, x_name) (fixed_y, y) = + + let x = ref 0 in + String.iter (function + | 'a'..'z' as c -> x:= (!x * 26) + ((int_of_char c) - 96) + | 'A'..'Z' as c -> x:= (!x * 26) + ((int_of_char c) - 64) + | _ -> () + ) x_name; + (!x, Num.int_of_num y), (fixed_x, fixed_y) + +let to_hname x = begin + let rec extract acc value = + if value > 0 then ( + let value' = value - 1 in + let rem = value' mod 26 in + let quot = (value' - rem) / 26 + in extract ((char_of_int (65 + rem))::acc) quot + ) else ( + acc + ) + in + let res = extract [] x + and buff = UTF8.Buffer.create 4 in + List.iter (fun c -> UTF8.Buffer.add_char buff c) res; + UTF8.Buffer.contents buff +end + +let to_string ((x, y), (fixed_x, fixed_y)) = + let buff = UTF8.Buffer.create 2 in + + if fixed_x then UTF8.Buffer.add_char buff '$'; + UTF8.Buffer.add_string buff (to_hname x); + if fixed_y then UTF8.Buffer.add_char buff '$'; + UTF8.Buffer.add_string buff @@ u @@ string_of_int y; + UTF8.Buffer.contents buff + +let to_buffer buff ((x, y), (fixed_x, fixed_y)) = begin + if fixed_x then UTF8.Buffer.add_char buff '$'; + UTF8.Buffer.add_string buff (to_hname x); + if fixed_y then UTF8.Buffer.add_char buff '$'; + UTF8.Buffer.add_string buff @@ u @@ string_of_int y +end + +let to_string t = + let buff = UTF8.Buffer.create 2 in + to_buffer buff t; + UTF8.Buffer.contents buff + +let to_pair = Pervasives.fst + +module Set = (struct + include Set.Make(struct + type t = (int * int) + let compare = Pervasives.compare + end) + + let show_int_tuple b t = Tools.Tuple2.printb + (fun b x -> UTF8.Buffer.add_string b @@u(string_of_int x)) + (fun b x -> UTF8.Buffer.add_string b @@u(string_of_int x)) + b t + + let printb buff = + iter (fun x -> to_buffer buff (x, (false,false)); UTF8.Buffer.add_char buff ' ') + +end) + -- cgit v1.2.3