From 33ae91758b3ccdba37c420af922e4a64bda5f986 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Sun, 9 Jun 2024 22:52:02 +0200 Subject: [PATCH] Smart display 101 --- a.out | Bin 277680 -> 282961 bytes trees.cmi | Bin 8979 -> 11283 bytes trees.cmo | Bin 19024 -> 26082 bytes trees.ml | 201 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 4 files changed, 189 insertions(+), 12 deletions(-) diff --git a/a.out b/a.out index fbb0ce215da9d79f864684277334be44489cc3a5..96bce02c2cc5f9553fa3e982d2ab1b049ec00d68 100755 GIT binary patch delta 4304 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 diff --git a/trees.cmi b/trees.cmi index 073098d17fa9c88e16a069360202f186585f8544..aba4cab01ee4317febc233d9d14f8401b6f6b8c1 100644 GIT binary patch literal 11283 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 u=o^XR4yuy|zp%Hs9FP<$OQ?=l;RX?I2** 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 diff --git a/trees.ml b/trees.ml index b150b0d..5cfb4bb 100644 --- a/trees.ml +++ b/trees.ml @@ -379,6 +379,25 @@ let is_collision (mat : node list array) = with | CollisionDetected x -> Some x ;; +let rec singlepass_sort (l : node list) = match l with + | [] -> Stdlib.print_endline "]"; [] + | h::[] -> Printf.printf "(%d : [%d, %d]) \n" h.tag h.self.x h.self.y; h::[] + | h1::h2::t -> begin + Printf.printf "(%d : [%d, %d]) " h1.tag h1.self.x h1.self.y ; + if h2.tag > h1.tag && h2.self.x < h1.self.x then begin + let nh1 = {parent = h1.parent ; self = h2.self ; tag = h1.tag} in + let nh2 = {parent = h2.parent ; self = h1.self ; tag = h2.tag} in + nh1::(singlepass_sort (nh2::t)) + end + else + h1::(singlepass_sort (h2::t)) + end ;; + +let sortify (mat : node list array) = + for i = 0 to (Array.length mat -1) do + mat.(i) <- singlepass_sort mat.(i) + done ;; + let encode_tree_into_mat tr current_increment = let d = depth_of_tree tr in let clist = Array.make d [] in @@ -391,9 +410,9 @@ let encode_tree_into_mat tr current_increment = | Leaf x -> begin let self_x = ref dad.x in if where = Left then - self_x := dad.x - current_increment.(d) + self_x := dad.x - current_increment.(d)*2 else if where = Right then - self_x := dad.x + current_increment.(d); + self_x := dad.x + current_increment.(d)*2; let self = {x = !self_x ; y = -d} in clist.(d) <- (clist.(d))@[{parent = dad ; self = self; tag = x}] @@ -414,6 +433,7 @@ let encode_tree_into_mat tr current_increment = end in fill tr 0 {x = 0; y = 0} Root; + (*sortify clist;*) match is_collision clist with | Some x -> raise (CollisionDetected x) | None -> clist ;; @@ -464,15 +484,20 @@ let print_encoded (a : node list array) r width height = let rec yet_another_printing tr r width height current_increment = try print_encoded (encode_tree_into_mat tr current_increment) r width height; - () with | CollisionDetected ly -> begin - current_increment.(ly-1) <- current_increment.(ly-1) * 2; + current_increment.(ly-1) <- current_increment.(ly-1) + 2; + for i = 0 to 19 do + Printf.printf "- %d " current_increment.(i) + done; + Unix.sleepf 0.25; + Stdlib.print_endline "E"; + Printf.printf "{%d}\n" ly ; yet_another_printing tr r width height current_increment end ;; -let finalized_printing tr r width height = - yet_another_printing tr r width height (Array.make (depth_of_tree tr) 2) ;; +let finalized_printing tr r width height cincr = + yet_another_printing tr r width height cincr ;; (* ABR things *) @@ -487,22 +512,174 @@ let successive_insert () = let cur_tree = ref (Empty) in open_graph " 1400x1000" ; set_window_title "Trees" ; + try + let current_increment = Array.make 20 1 in while true do Stdlib.print_endline "What element would you like to insert ? (crash to terminate)"; let elt = Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity in + cur_tree := insert_abr !cur_tree elt; + + open_graph " 1200x1000" ; + set_window_title "Trees" ; + (*ignore (pretty_tree_printing_new_version !cur_tree 40 100 1200 1000 true)*) + (*ignore (even_more_pretty_printing !cur_tree 20 100 false);*) + finalized_printing !cur_tree 30 1400 1000 current_increment; + + for i = 0 to 19 do + Printf.printf "| %d " current_increment.(i) + done; + print_char '\n'; + done; + () + with + | Stdlib.Scanf.Scan_failure _ -> close_graph () ;; + +(* HERE WE GO AGAIN *) + +type 'a abr2 = Empty | Node of 'a * pt * 'a abr2 * 'a abr2 ;; + +type bal = Root | Left | Right ;; + +let rec print_path pt = match pt with + | [] -> print_char '\n' + | Left::t -> Printf.printf "LEFT -> "; print_path t + | Right::t -> Printf.printf "RIGHT -> "; print_path t + | _ -> () ;; + +let update_col tr path v = match path with + | [] -> failwith "Not possible" + | fst::t -> begin + let rec aux t pth isf = match t with + | Empty -> Empty + | Node (x, p, l, r) -> begin + match pth with + | [] -> if isf then Node (x, {x = p.x; y = p.y}, aux l [] false, aux r [] false) else Node (x, {x = p.x + v; y = p.y}, aux l [] false, aux r [] false) + | Left::t -> if isf then Node (x, {x = p.x + v/2; y = p.y}, aux l t false, r) else Node (x, {x = p.x + v; y = p.y}, aux l t false, r) + | Right::t -> if isf then Node (x, {x = p.x + v/2; y = p.y}, l, aux r t false) else Node (x, {x = p.x + v; y = p.y}, l, aux r t false) + | _ -> failwith "Not possible" + end + in aux tr path true + end ;; + +exception CollisionPath of (bal list) ;; + +let rec detect_collision (tr : int abr2) haschanged = + let hash = Hashtbl.create 48 in + let rec aux t d path = match t with + | Empty -> () + | Node (x, p, l, r) -> begin + let smth = Hashtbl.find_opt hash (p.x, d) in + if smth = None then begin + Hashtbl.add hash (p.x, d) 1; + aux l (d+1) (path@[Left]); + aux r (d+1) (path@[Right]); + end + else + raise (CollisionPath path) + end + in + try + aux tr 0 []; + haschanged := false; + tr; + with + | CollisionPath pth -> haschanged := true; update_col tr pth 4 ;; + + +let decode2 (p : pt) r width height = + (width/3 + p.x * r, height - r - (2*r)*p.y) ;; + +let raw_print (tr : int abr2) = + let rec aux t d = match t with + | Empty -> () + | Node (x, p, l, r) -> begin + Printf.printf "[layer %d : (%d, [%d %d])]\n" d x p.x p.y; + aux l (d+1); + aux r (d+1) + end + in aux tr 0 ;; + +let print_tree2 (tr : int abr2) r width height = + let rec aux_ver t dad isf = match t with + | Empty -> () + | Node (e, pt, g, d) -> begin + let (xp, yp) = decode2 pt r width height in + let (xd, yd) = decode2 dad r width height in + set_color (rgb 128 128 128); + set_line_width (max 1 (r/3)); + + if isf = false then + draw_poly_line [|(xd, yd); (xp, yp)|]; + + aux_ver g pt false; + aux_ver d pt false; + end + in + let rec aux_edg t = match t with + | Empty -> () + | Node (e, pt, g, d) -> begin + let (xp, yp) = decode2 pt r width height in + + set_color (rgb 128 128 128); + fill_circle xp yp r; + + set_color black; + set_line_width (max 1 (r/6)); + draw_circle xp yp r; + + set_color (rgb 32 255 32); + set_line_width (max 1 (r/6)); + draw_integer xp yp e r; + + aux_edg g; + aux_edg d; + end + in + aux_ver tr {x = 0; y = 0} true; + aux_edg tr ;; + +let rec insert_abr2 (tr : int abr2) e = + let rec aux t dad side = match t with + | Empty -> + if side = Root then + Node (e, dad, Empty, Empty) + else if side = Left then + Node (e, {x = dad.x - 2; y = dad.y + 1}, Empty, Empty) + else + Node (e, {x = dad.x + 2; y = dad.y + 1}, Empty, Empty) + | Node (x, p, g, d) when e < x -> Node (x, p, aux g p Left, d) + | Node (x, p, g, d) -> Node (x, p, g, aux d p Right) + in aux tr {x = 0; y = 0} Root ;; + +let successive_insert2 () = + let cur_tree = ref Empty in + open_graph " 1400x1000" ; + set_window_title "Trees" ; + try + while true do + Stdlib.print_endline "What element would you like to insert ?"; + let elt = Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity in + open_graph " 1200x1000" ; set_window_title "Trees" ; - cur_tree := insert_abr !cur_tree elt; - (*ignore (pretty_tree_printing_new_version !cur_tree 40 100 1200 1000 true)*) - (*ignore (even_more_pretty_printing !cur_tree 20 100 false);*) - finalized_printing !cur_tree 30 1400 1000; + cur_tree := insert_abr2 !cur_tree elt; + + let changed = ref true in + + while !changed do + cur_tree := detect_collision !cur_tree changed; + done; + + (*raw_print !cur_tree ;*) + + print_tree2 !cur_tree 30 1400 1000 ; done; () with - | Stdlib.Scanf.Scan_failure _ -> finalized_printing !cur_tree 30 1400 1000;close_graph () ;; + | Stdlib.Scanf.Scan_failure _ -> close_graph () ;; (* --------------------------------------| TESTS |-------------------------------------- *) Random.self_init () ;; @@ -514,7 +691,7 @@ ignore (Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity) ;; close_graph () ;; failwith "E" ;; *) -successive_insert () ;; +successive_insert2 () ;; open_graph " 1800x1000" ;; set_window_title "Trees" ;;