From a90bc92f7bf5e6bba3d6da915da03321032009f2 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Mon, 20 May 2024 15:48:36 +0200 Subject: [PATCH] fancy DFS implemented --- a.out | Bin 265041 -> 267475 bytes pretty_printing.cmi | Bin 2360 -> 3836 bytes pretty_printing.cmo | Bin 13198 -> 16501 bytes pretty_printing.ml | 112 +++++++++++++++++++++++++++++++++++++------- 4 files changed, 96 insertions(+), 16 deletions(-) diff --git a/a.out b/a.out index 02fabc25bbc183dfc006b2772dbb0037978a196a..6eb3c481c9fc0c6fec89fda61a8a86216145fd8f 100755 GIT binary patch delta 3166 zcmZ`*ZERH65#9UdEqQD2n%z7bura+6ES|Z(|hBio1Rkf-b6jkbvv;v7Xt=dTC2Q8{vyXUO; zDQ-!xbbQ~PnLBsxxihoAl8t_FE_$%rbXylB+7lcJ1p?dEbXwK9)je|1@~(!Rx|age z<4#Nl;F@!BVLpI)3WMwWf%yQxJ9Mn{VZ0NVlT?*VL0_sGJU=kd7( zr~+03Er1Qo24cXp>E#}A^};19TDBIlD8P`M+x2=rD~@q=;*#ZtXiK|LewkP4(-*98 znoef{^ME)&M-{*wfUm2>H}AuszG(#lt1;gPECmt(m;_%^&7xgp8q;9ek< z8}F3|O&tylGyrV?Z?hNR+mbg%w0}lKcaV$}+z?=%0hBy0`rb{xyMaXN-sQ>o>Kq^cT&fTZv%KK7KQDZp@qqtlQYT$QpQCF zX`KN4%JkQ*nm8}j`nP_G>Y_0#tQ}dgwXH`gV-Lfe3|9e6-tF4C#d6JTZOTfyDb`F@ zs!TM$(%)vKG{je$zRRVo%+teJ2~YQ$zoHj;w+@7}D$C8gnpAnT{t!yUZyEIdEv&hj zPDtX@h@5XY1n^BLXI;DoFe>hOSud(AG>2K^%ghmt9hdSTo!sH2uew397tq*%R9A2( zcX4zBY}TY8s9lYgtI-m%O_TN?2NlD!#JRf-x_`rlU71mk3qLa)z0xmLi3Je(fxI%~ zGGsjevfjihH$?7P=G8iJQryT=eDWC>{j1tEAj@=fFQ{*P$FjA%(Td(p%~81fv^M*i zUdClsb`-i4U!AA%a!heCpix*VH=8j?k9e@Mk5eiD!^^8?IZ<=U>NO zrag5eiDLyozrD~c!puIy^LP>7p0&)3EcTjKx=*qLk-9a&UVzlGo;k<~`(r5=7;uS%E^Jx1wI3Z_y^+(c%sgan^Ez84SLNO z*IPGPS@9^AyawO46<{$j`yyV~byt_1Kn9N-lero{A*A`*xH{2{QoLMCk9cH=LaQ>%Dp&uhxFPxaPFr9KNu z8)iCt5a8f9E5V<2^Y`WFb$l%jN~?fkfINQ((S8jxz1#=*zdp2!1GbK~qk-PqV8SNk zb^Q^)58gz?4dr#vTROVSa)WF+C3@qm_3hvn@Hxlp`mAft=&#;FzMRc{{FZ!N6Z;{& z%|S(PKpEb20!3rFzx+m`i#8;-E!^GK+}sgQuBmU|)4VI5ZhtVncc90S*B$qrL!lcQlpb{r`AqNzq4T7 z`nC1(#BxneNoNj!ToYWdXfAaq!8Vq}$;xDpu?nCtbbD zr@E>1!7)wKwgV@q0ndPgz`bOggYhHaHBM*B@w!q=wJCEGS1>)K4sncWwQA;ZnH}a? zrlO}_!k$B5Gtj{<;0Fpw`>%CbGk^&slx844@Ku^&)nD{+Q=Hu1<^Q&{62|1q4x=vy zYrtwCEuSyPsZ?e1oj4V(Tm{QA5CoC|Y4-r}+h}<=`@CL^c7ROa17xY5LbZ*(mcz%1 zZVK`fJ>*eduJ5426;bSvY~}&U*o#2t*mj4{Dt=VwTRr6G_EB>4R~V@bzS%G6d z1gLy$k~C4WVWW1)6O zklBZ^sTFgHU7T%!O_J9QqyUoCP2f0?Xl4Hq9_mLB;XcImI=7yt5bx|Gw`${tJ_bJuyI099!pAWw3&ePQ)Y zjto#JvLA1duMY!}mIN6P~`DsmsjqQm5zRRZS+N03ezkHQza%Og~@LJIVcoib;Is5qFQ^8Z^unV@@B^WVbC zJx^}yr#ZKYL9ELP_b*{>61n5R>=F0oy*!yi*ZncXQPFWDGR z+1|CWF+}P;E|{bu)x%Ft()xlIZZ8yCeq~Yzc}*`)l%v0$n)mVaBpp*O>*jYkxSEC` ze}P#Xd)*2b5#b-m_ef8J-I>cfOBRu9~ZVE~D|_ zd}n}v@#$l0&)%r4u9ZuvRaRHmp)+bXR&CI`zPFGe>;vA%2` Td(xuy4SP$<%F4DBmlpp8mY7+J diff --git a/pretty_printing.cmi b/pretty_printing.cmi index 8363eb2930a842fd490a9a9ade30766854deb8b7..e77d35563b8d9376bd2bb545af4b1abd6bce82d8 100644 GIT binary patch literal 3836 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 literal 2360 zcmZvedr%cs9LM)}Jr`((nkmvKW*7%~<|7nKvU7It;Slx5+4-E`IltF; z&+OS;(c@0b%F0?{%dpiowRUq{|Fj2}^- zU3{CK?)`TGOFiz~(sCVHa!Z{&zZE6%ywHm%Cc@=P}PVTog(y z2g^pVY|>GZNw1Mw3JZwy0@3aRcq6O~dV;y`Mu@id35k;NJXqcZORJ6^F=;!AvT8Yr zl8B?Y0D{v3&#t2#MbKcMl3;l+fMozILpsVg=`;yexq<{+D*FUg@_0puB--5)K!Xu> z`sM5~-Xf~fP$a8%uilOd*>oSx_8El^lJ+?V%t0_GN=M};%_C{ouOw+RoT^wOxMeJ{ zU6p*2QYm@>wwNuUb;e=YV7?wlrKskxWStDV816UAtj8|sUc+zJA^V)|?Pl0xo>A1u zOnTV#4l^AHn>1$X#U>O@9#P@N8K?LQTtq9|dyuN~C51i;{S>~UaEQX!6b@53LPQN! z19}KhypG;8DUFEQUqVDpamqfgTMPia85XjS=yB+Obv()nJjQUq=mwo4erJduI?fgc z8Ggg?INmyAWr&u0g2G8s_fg>LASMN37U}31<#bZ}RR^iv7Oq|Jc_oMJk{tkz;U=z- zVy=_NLYDOu!_y4EHOrsEo2|eRmlU@69m6vWhsjHf#5*UM?JO<*9EI;GoF~mp0M`U_ zCt>bw9o-1?ylC8v6&{pHH_1}1Us9X^O=b^Ph$Y3e;0OMw%{tLPu*4$_M~zmjkV+hP z5JxK{vgIEc{>1Qt;e>ZCX11SAO(K|O%(OH!%P&N)bT6C0h38KRVWi72VEQ^GfeAD_>+3|Y{4_y+hL0S$J=2=*9o9T2w?;)-#w z$LVC15lncI1bY%IjK5owJ0Q43#SsuHRMA^GeHj5XQ{~IBc2*D#>1TZuuCk7=F}!Zd zlgTW9P+4VWn=oymWS<{jfEC4TZUO&_Ks&TF2^UhM$kkpNnyh10skz^ZJ%=6}L z5BG5#mx@O-9s%t?*L~2o_wcRJHF@!uMEgD7nmbz_(6mLRey3Zu3qonY7qr!kHdS0Z zd4F12sBc%o`mRT3u1jlzwjyUHY&ao!HbsvX?T)O9)wCtk{ti)b1#Q+Nn=7V@61TP7 zjA`vycX>$D7SkQM_*Mwo#0x27owYrUCB2Q$=GG((&j^uC{yKuTviN7lw-)W(H?;lk z5AN#g$<(xDGepp~Br4g}{c>+-gQ8|+`5Vq_T4pZ(>A^oIlB$UAf@&52$mEDV*@2rm ixaZaPQ!b`X>~9IJKItd0c_D;Zjl=l=nswuR&X diff --git a/pretty_printing.cmo b/pretty_printing.cmo index 358514f01c3048e5ac4bf9b871375a1526b96e57..0d4d9bee002a6ce832d024c0cfda5f5e06c85bde 100644 GIT binary patch literal 16501 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 U$LIYn@ItIRK~KRew6^xY038qv(*OVf literal 13198 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 diff --git a/pretty_printing.ml b/pretty_printing.ml index b7d1450..47ed0ae 100644 --- a/pretty_printing.ml +++ b/pretty_printing.ml @@ -163,13 +163,14 @@ let display_specific mat cls digit = print_char '\n' done;; -let extend mat cls i0 j0 dst = +let extend dgt mat cls i0 j0 dst = let ni = Array.length mat in let nj = Array.length mat.(0) in + cls.(i0).(j0) <- dgt + 1; for i = -dst to dst do for j = -dst to dst do if i0 - i >= 0 && j0 - j >= 0 && i0 - i < ni && j0 - j < nj then begin - cls.(i0-i).(j0-j) <- Char.code mat.(i0).(j0) - 48 + 1; + cls.(i0-i).(j0-j) <- dgt + 1; if abs i = dst || abs j = dst then mat.(i0-i).(j0-j) <- '*' else if i <> 0 || j <> 0 then @@ -184,6 +185,39 @@ let extend mat cls i0 j0 dst = let identity x = x ;; +let copy_arr src = + let dest = Array.make (Array.length src) [||] in + for i = 0 to (Array.length src -1) do + dest.(i) <- Array.make (Array.length src.(i)) src.(0).(0); + for j = 0 to (Array.length src.(i) -1) do + dest.(i).(j) <- src.(i).(j) + done + done; + dest ;; + +let rec pw x n = match n with + | 0 -> 1 + | 1 -> x + | k -> x * pw x (n-1) ;; + +let to_hexa n = + let res = ref "" in + let remaining = ref n in + if n = 0 then + "0" + else begin + while !remaining > 0 do + let cd = ref (48 + !remaining mod 16) in + if !cd >= 58 then + cd := !cd + 7 + else + (); + res := ((String.make 1 (Char.chr !cd)) ^ !res); + remaining := !remaining / 16; + done; + !res ; + end;; + let extremely_fancy_graph_printing g size wmult mode = (* creation of the image *) let px = Array.make (size) [||] in @@ -197,26 +231,41 @@ let extremely_fancy_graph_printing g size wmult mode = cls.(i) <- Array.make (wmult*size) 0 done; + if Array.length g >= 100 then + failwith "ERROR : graph is too big" + else + (); + let coords = Array.make size (0, 0) in (* placing the points on the trig circle *) for k = 0 to Array.length g - 1 do - let theta = 2. *. pi *. (float_of_int k) /. (float_of_int (Array.length g)) in + let theta = 2. *. pi *. (float_of_int k) /. (float_of_int (Array.length g)) +. pi /. (float_of_int (Array.length g)) in let i = ref (int_of_float ((float_of_int size) /. 2.) + int_of_float ((float_of_int size) /. 2. *. cos theta)) in let j = ref (int_of_float ((float_of_int size) /. 2.) + int_of_float ((float_of_int size) /. 2. *. sin theta)) in - if !i < 0 then i := 0 else (); - if !j < 0 then j := 0 else (); - if !i >= size then i := size-1 else (); - if !j >= size then j := size-1 else (); - px.(!i).(wmult* !j) <- Char.chr (k + 48); - extend px cls !i (wmult* !j) 2; + if !i < 1 then i := 1 else (); + if !j < 1 then j := 1 else (); + if !i >= size-1 then i := size-1-1 else (); + if !j >= size-1 then j := size-1-1 else (); + px.(!i).(wmult* !j) <- '~'; + extend k px cls !i (wmult* !j) 2; + let str_to_place = to_hexa k in + for sl = 0 to (String.length str_to_place -1) do + if !i + 1 < size && wmult* !j-sl-1 >= 0 && wmult* !j+sl-1 < Array.length px.(0) then + px.(!i + 1).(wmult* !j-sl-1) <- str_to_place.[sl] + else + () + done; coords.(k) <- (!i, wmult* !j); done; + + let blankcls = copy_arr cls in + let bpx = copy_arr px in (* draw the connections *) for i = 0 to Array.length g -1 do for j = 0 to Array.length g.(i) -1 do - draw_line_bresenham px cls i (fst coords.(i)) (snd coords.(i)) (fst coords.(g.(i).(j))) (snd coords.(g.(i).(j))) 4 + draw_line_bresenham px cls i (fst coords.(i)) (snd coords.(i)) (fst coords.(g.(i).(j))) (snd coords.(g.(i).(j))) 0 done done; @@ -253,14 +302,45 @@ let extremely_fancy_graph_printing g size wmult mode = () done end - else - display px cls ;; + else if mode <> "HIDE" then + display px cls; + (coords, px, bpx, cls, blankcls) ;; + (* coords = (x, y) coords of graph point *) + (* px = 2D matrix containing what to display *) + (* cls = colors of associated pixel *) +let fancy_dfs gr coords px bcls = + Stdlib.print_endline "Enter any integer to begin DFS : "; + + ignore (Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity); + let n = Array.length gr in + let visited = Array.make n false in + visited.(0) <- true; + let rec explore nd = + if true then begin + for i = 0 to (Array.length gr.(nd) -1) do + draw_line_bresenham px bcls nd (fst coords.(nd)) (snd coords.(nd)) (fst coords.(gr.(nd).(i))) (snd coords.(gr.(nd).(i))) 4; + display px bcls; + Stdlib.print_endline "_"; + ignore (Sys.command "sleep 1"); + if visited.(gr.(nd).(i)) = false then begin + visited.(gr.(nd).(i)) <- true; + explore gr.(nd).(i); + end + done + end + else + () + in + explore 0; + display px bcls ;; -let gr = [|[|3; 5; 7|]; [|0|]; [|1; 7; 8|]; [|2; 6|]; [|0; 1; 3|]; [|6; 7|]; [|0; 1; 2|]; [|8|]; [|0; 7; 6|]|] ;; +(* --------------------------------------| TESTS |-------------------------------------- *) -(*print_mat gr ;;*) +let gr = [|[|3; 5; 7|]; [|0|]; [|1; 7; 8|]; [|2; 6|]; [|0; 1; 3|]; [|6; 7|]; [|0; 1; 2|]; [|8|]; [|0; 7; 6|]; [||]; [||]; [|9|]|] ;; + +let (coords, map, blank_map, color_map, blank_color_map) = extremely_fancy_graph_printing gr 46 3 "SHOW" ;; -extremely_fancy_graph_printing gr 44 4 "SPECIFIC" ; +fancy_dfs gr coords map blank_color_map ;; -(* ocamlfind ocamlc -linkpkg -package unix pretty_printing.ml *) \ No newline at end of file +(* compilation command : ocamlfind ocamlc -linkpkg -package unix pretty_printing.ml *) \ No newline at end of file