From 4622be512179c06d50d8cc7bfb9097a7108fb855 Mon Sep 17 00:00:00 2001 From: noah Date: Wed, 9 Mar 2022 14:41:05 -0600 Subject: [PATCH] Cleanup and non-class print solutions --- .../HLlib.dir/src/HiddenLines.cpp.o | Bin 37232 -> 39872 bytes build/CMakeFiles/main.dir/src/main.cpp.o | Bin 5832 -> 5888 bytes build/libHLlib.a | Bin 39236 -> 41916 bytes build/main | Bin 44224 -> 48376 bytes src/HiddenLines.cpp | 116 ++++++++---------- src/HiddenLines.h | 5 +- src/main.cpp | 4 +- 7 files changed, 58 insertions(+), 67 deletions(-) diff --git a/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o b/build/CMakeFiles/HLlib.dir/src/HiddenLines.cpp.o index 20101bd25f5c22cad106d92e7c6fd0e534ed962b..98ba2bd07b79b107f70f5c859e0baa9644fc1d90 100644 GIT binary patch literal 39872 zcmc(I3w%`7wfD&jB5KYA)J9YsVW^2&-Wf>Xj7%^RP+G+yj|rqEnKYU3kcZeL zmeXOB+soD7TkkEm)jquX)$gmdluH!|uiD3l-uk%KDz-k74k|^l)K>ZaYd>bzOy)?i zz4zO{-AaQK!it+VVu`|bCwXuI2*)LvvA8VTI64lT%6 zXBVB#-p2{udGxeMcUqMP%rAeHAp6|`BCza(mOa(7yYj89la_tE%O4GR-2UhWPmxvm zr^s!Veaf;=yk~|DvoISc%Vic`@4`i`+bmq{wtDuJSv`BotjfLJFIh3)5v$~swRa%b z+V$@bi!{nIzrWAgC5u08T2~ygVpZN8YwyuqD+@)VT>Hgamiun)xBA{*mnUQrKTnc$ zgDa46TS{&7tx2VhmHjr=Xy++j*OCc@*A7X2H~Vh# zEfsaV>)6)-H(Al#iN!+fUe6Ys%lBB(Yphw}e6x2)wqf|~j{-5WE+Y_|PN%`Yz;3PB z29HZamFbk_Z`2qX2T^2oz3c{Ua--70Z=?ZxAo6XYmiNPJ&k*k|6v;EJ2mk9Vn zKy!BGP^7?$(p9V@ zOFX8BUV2!Ihh}f75RvXQ!Qdq+Rf3VS@-4f67g@I!%|4`h|Gkm zh;RiXw4%_GcOVemopT&nYWhw`#`-qjSz$zG`phTR%=4O0exS+Y*J<`b5%LCF_bOPH z9_XU!`IT>fbo#W}w*$W-n{Q{XsK_6v zxvgY#4{jm~yMOS5k8zGlvu&~_NjvTyZQZq>ESvhdZ@KR_U$9?jW?PEwzX%G;{@AiN zc=A*Fz+pTK4_@iwuBHIBn%6}kW{~>elp{LJ*I}I7sc_tI^Yx;Qu=*vLnIrg1Rx`?#y zv)%JuFiT1k|92}YWwBztp2zTv`cWY%SKR2HLR6dSDX6wdDzo<{(V-NeDF?kkebH`^ zCi}8uUy|CfqK`}NXX;T>d?MdLLL|vmzp|o_h<*hxA1T_r5#4IO`9ybWuew1P1tiic zlJ~0R)J?+6C5lkKJz8yuZibOfcC&9KyV<8yq*S-is#c=EXMa(k5~dfKT4TTAkKXFZ z*QQ17-|uKMgDuoWqIuAca5Pp-SdSHbAp1B$eZP)ex_LeHGQoVJOX`I+Q~XM;o54R( z7t@uG=BPTqD(j3PM>#|EmNN2j`7$E}Eeqhb!e9A{*?R>nArPa811Dh&gQE8#Q>~!4 z4+ate!hwv=HbI(;SxrtkI0rM}G@JgE94c-n|Z8HH@t z_!M1n>i=cpX7B^3GGMR?Zz_?~_^$yXvX;0q^_E3Cyu7u+K}Kd#op zJ#O%H@SdtGJ$OR+F;XGMf%D~{Qu47B1!I>h0lTdP-0L}v`Xs&HSa?0sD)V~eA}2$5 z!DyS+b4;~P&;I=W6koUn`TX`@{PqWa`vv9J-kBNlY70bfl_TfS9)8u39zIoS&_*|rt(P!l zZEZt(@l(1r{n2s$=r#UXx8<9C=L-J@WhAt1_N_xS60na#>7+cS^k%=={+nj=ntt={ z8I%upBnN6d*mQtyW!yw`&z&%DJ%ZQ?QBcYQNvE=z#fORZ0BHBhi0OoR+mKv3mbzx& z>T!Zsvst`P)}JK6V+3g8-cQ}sKP%#KnZ13Gz1a*yCbRH5ae+8{lM7c7PnlV`+U@T_ zHpJX8ZBj+=Nm#01#D;NP!K^3H@K1rj?XdJ#5eRg_(vcn5MuZ6{99K1X8W25VIiB81 zv6@!I;8={HR%{6dS=CJOdy`KST1zOg{cVhT19yz;zBEbYvxR0Qjj!@R_j&Y8-o`IU z(xq{WUyuM~qYVC%6asDk0xfuW^-95|*?f0TQj>|hq#h$>LSfM13~>P+t|lD@NQaA< z4k?Zr`~h|Ll}6tf~(O#FW0jfhKHe0&Sl<_*}+ zQP^42S=bq9VP`{f!I1C-+S#A9v;9f!WVACxEM~Zs1TPgA5WJoAgK!kqme3D$b3ct* zDe?~_T1d9$-~)eA4h?hCo?}IrmsiZyaon_DVSoUkO4)#9Fe#VL}hRc1n`+dt^h&&1^(vaJVE?s8Xb;XuF&qXs0#E&}m z9EAy(g+cq4<(Xp6VmJ-U{s?}S3Eb-`0t}g}JW?=RlnDtjV?h~Jo(lT$TEH!VXLiWe zpMSuCXb67ii}wGBn2ODC3WAP2wISd7TYakN){ZyJk#^&8h6hxb5)7EJzI3~ zy?e~QeinFeoxzEo_P6!h%$!m3ZqQfj9MFgOlW2HsZ6l^iDHUq$Kh|DZUX)|p6g zBJiW8lzOM;rAO!qOc~J!at$gC0is6)h?C4G>gJhGK5NAummEkAU3V5JK1Q5$`Kf{8 zzW7rXOpwYS{0KjR=p*7r$n3ZGS4Arh0Y-k5L40&z6qxmhxR1>CA@1rqHQwy~5+3*M z>CUaTXM5n$)bxagG>e9`$QJ>QuzC*WTQ;ykny;n>9=@L09z!x9osv|EMom=Aioz*? zs|x`aqA#=eEAZNaY;d#i-)v43+b-uw+T~tmMd20}4}4JNa_4n_*6P_URc`j>U;#$7 zBlNe6R^lxC6~Q$Ab1N!ENi-O(RD4ea@u~&&oM7-D2!$12ZACBj`0dxNN=ysPzB|B_ z=BgDI`3-;NezW%jKz{qc;Bz>qw6ZdJX43KhvunA~)pY!(sB9N4AL>Aj1$v)6ySPLc z&v^5Rc`%-o*e^a&svE(nO{&ajGx4W&Aodh3uc-#o^93swq17AMzIw3Rvl&7L><`ii zVfAEB7;BbzFzRgg?38y1K+M7iLJuHkCn`!RN^?p=oL(p^4O$H<<3O zb6M8JJdfqju7YSU8a}O>MbtzeSJT1|X#H&yW`#wl`)V;M)U4x|3)uqpAH~@p9ie7` zf0Q%8|4h`na-$Ks-HKM{TRj7q3!(>q2O{}<_Ll`Jp^V=5U<)<&ThywPJ!Xk?ZnC)% zA3yHd18Uji2$FYuj^K6|jnbKPx1a1v=?+ns7|exyFzBs9qdv3H6gR{cH#fj5^$Mnb zdx6`0qE}eFZ_9$>K??>rEM|`g8Nn><%Pj1c-5cu++W1Xh@Sq;;?62hk>lhZL2?n;A@W<`R_9_mA6ihMZoT3hTY%VffrXW2eZ`u#fZBt%mt%eUMsd<1x2y-MUq~RG%9!!V9GkkS~3)SHU?EJzCXuw)$3V> zNAzaowtNu*<4#l-;Z#1mruaeNlg637r*Oqz5A~a0ex9I&7+5~rt)jEtf{m4h$&8HE z{n15uRWu^?O_9qi9R0U>QzXmtM{jdebrPXCuF2>r5nimW{gZCP;N!I8v>B`ReQv=e|8=@Am=ev2t)LUJTO=R6fRq@*`Cqx6G&~w|Jy{3Ffxq z(K7?I1aiVMuiA6MoV>^SS|H}}`uDz`>(6>QQ2D!v6^ONZT=5Gm`z2kRSeUAOnL^W|0LacOI zmCN%b#|q-;jl2pDmtfTer$%sW7Rz1WhM$t##Ml>3|I|GC!vNo3OapPKrN78uN$Z8r zk_1WxqHcrVgSa{i1`f6EjwxGzS^Q`8;38bE@K^pOGNvjD2crnK0JY)|%ORu$Yb>YA zBBl7XuwLGCswgtYqL(9a8(}z#BbAEcumPdBlX@E@%JArBr$^n74bH+dT724{B0oZR zTAh^*B#N+e@NOUPz8j%YQhd)LM0=;q-W~*K6wJ+}$ZiJ&qMJJr=gH`m?ruPsw^c+` zN~UyI+As<>__A*3vT`>@>74HI_l7Ra2M&!439BOwo8?n;W}tcPO$Ny4hq|z2$Pq1 zj?gV}AZ5RsFz@+61&lA&0} zavl__H47)8961Fs3vYKSM@%57@`(8Zo+G%G8pbX3O~R3a{aBzpPSTws$}Lr%Q@Ug) z6B*L6z@au^H+eA3iPr;|;cK(d^-ATHY!S^XfqW9L=yL4oSq{gBm{hGg9rETwYz$jo z7oE-CpU@rK#nitB>$T+>Lmd&Nnxe znT1ne%xf{0+(BcBg|X!NzdDW)g?Ho+(tax$X0(bhgNx)VnA0S+k^%cEp(_u?}%sy4fsQzRfHN?J!H)9y3e2_n0LckFaS{ zUoq%t@67zqSUpFNTP6D`WHbFeZyZ0==fX2L$~@F}0j|oZ^jI}!fqg}|wPJl`bh7*0 z;x0zii1K`=pA9q~#as@AvjX-*`GEaBe=*m1@tf7%ip830V+*~8>7z$*lIU+^4(4W~ z;e|8_bLd_`uV!MQfm>)-5T=Q-A5xB8kRz!!8&k5JBrm*?{B6K~M<_4;0IiVS9~XKv zCN>*ax3o7KbOc)3LvDYS+i
    1t_c4Y`{;u^Vdb9K#(6)2SxZxw55wrMuqU8fuQX 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 literal 37232 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 delta 574 zcmYk2O-K}B7{}*%S7)8s*=%Oo9Y=6oQ)pLI+zxFY;M>JmD8i0gL3$LVL`6L8K~E}3 zx%{D;Lz2+JLxsy8+GC-I2oHI4PSK$+=+G%81bb%2!#?o--jCn&ykCn$9|zZSv{KD~ zidFiu)!*6bn>J+VyfxfVI7&;q+uYsTDXs3{K4s_^7HJS~>Aalc2am^PyP_`6^(2 zJpPU7CPuZZXK!CD-MTV8Gx>1t!R(`{QO?zt>lbv5Xc^UnLyu8lKE=N7U?E|kq8rJr z;1L`x+`8~0agDwQx%k6=FJTmpLL2!EkB?8H5EO}^uDfYn#~s6QttQ*kWL+$=?LD>q zZ2FpP4mIN)e@BmLqmq2h|C2v+C}@Zmidvh_nH(#aFpFY?updif+sx4hd{Z)AOVT>Z z%=hq^TktI@{t-Iu5piJPu02AR;Mr1}7134>zS>2uanDK0qRe~_k9iqB^CjGr6m=0E oG@Z&(171qfPx#C+xar`aa$0I*@o2jmHq%AzC>hP3@U6T512;vg?EnA( diff --git a/build/libHLlib.a b/build/libHLlib.a index 604d473428b509c95ece082a45c28c1eb10e11ab..4307d524b2f543855207a96582f7ff3c9058661b 100644 GIT binary patch literal 41916 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 diff --git a/build/main b/build/main index 6f0049546552b85af162c881d8debed657b91207..37d4c927d907191244a35fc998b3979feb540150 100755 GIT binary patch delta 16756 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 OYXgmYs@apTb^kwSUoKw& delta 14944 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 << " visible from x=" << start_print << " to x=" << stop_print << std::endl; } + + std::cout << std::endl; + auto lines = get_lines(); + for(Line line : lines){ + std::cout << "Line ID " << line.get_id() << " visible from x=" << + line.get_vis_start() << " to x=" << line.get_vis_end() << std::endl; + } +} + +void print_sol(std::vector& lines) +{ + for(auto itr = lines.begin(); itr != lines.end(); itr++){ + Line line = *itr; + double start_range = line.get_vis_start(); + std::string start_print = std::to_string(start_range); + if(start_range == std::numeric_limits::lowest()) + start_print = "-inf"; + + double stop_range = line.get_vis_end(); + std::string stop_print = std::to_string(stop_range); + if(stop_range == std::numeric_limits::max()) + stop_print = "inf"; + + if (start_range == stop_range) + continue; + std::cout << "Line ID " << line.get_id() << " visible from x=" << + start_print << " to x=" << stop_print << std::endl; + } } //Divide and Conquer Strategy using recursive call to divide ls and merge using merge() @@ -59,92 +87,53 @@ std::vector HL::gen_sol(std::vector& ls){ auto end_itr = ls.begin(); std::advance(end_itr, split); - for(auto itr = ls.begin(); itr != end_itr; itr++){ + for(std::vector::iterator itr = ls.begin(); itr != end_itr; itr++){ lh.push_back(*itr); } - for(auto itr = end_itr; itr != ls.end(); itr++){ + for(std::vector::iterator itr = end_itr; itr != ls.end(); itr++){ rh.push_back(*itr); } - std::cout << "Left half is size " << lh.size() << " and right half is size " << rh.size() << std::endl; //Recursive call auto merged = merge(inst.gen_sol(lh), inst.gen_sol(rh)); - for (auto itr = merged.begin(); itr != merged.end(); itr++){ + for (std::vector::iterator itr = merged.begin(); itr != merged.end(); itr++){ Line l1 = *itr; - sol.push_back(std::make_pair(l1.get_id(), std::make_pair(l1.get_vis_start(), l1.get_vis_end()))); + + std::vector>>::iterator it = std::find_if(sol.begin(), sol.end(), + [l1](const std::pair>& p ) + { return (std::get<0>(p) == l1.get_id()); }); + + if(it != sol.end()) + *it = std::make_pair(l1.get_id(), std::make_pair(l1.get_vis_start(), l1.get_vis_end())); + else + sol.push_back(std::make_pair(l1.get_id(), std::make_pair(l1.get_vis_start(), l1.get_vis_end()))); } - //Cleanup Solution - /* - std::set>> new_sol; - for(std::set>>::iterator itr = sol.begin(); itr != sol.end(); itr++){ - auto start_range = std::get<0>(std::get<1>(*itr)); - auto stop_range = std::get<1>(std::get<1>(*itr)); - double my_slope = std::get<1>(*line_holder.find(std::get<0>(*itr))).get_slope(); - int my_id = std::get<0>(*itr); - - if(start_range == stop_range) - continue; - - //Handle overlaps - - std::set>>::iterator it = std::find_if(sol.begin(), sol.end(), - [start_range, my_id](const std::pair>& p ) - { return (std::get<0>(std::get<1>(p)) == start_range && std::get<0>(p) != my_id); }); - - if (it != sol.end()){ - double stored_stop = std::get<1>(std::get<1>(*it)); - double stored_slope = std::get<1>(*line_holder.find(std::get<0>(*it))).get_slope(); - int stored_id = std::get<0>(*it); - - std::cout << "Matched" << std::endl; - //Change lines' vis starts and ends - if (my_slope < stored_slope){ - std::get<1>(*line_holder.find(std::get<0>(*itr))).set_vis_start(start_range); - std::get<1>(*line_holder.find(std::get<0>(*itr))).set_vis_end(stored_stop); - new_sol.insert(std::make_pair(my_id, std::make_pair(start_range, stored_stop))); - - std::get<1>(*line_holder.find(std::get<0>(*it))).set_vis_start(stored_stop); - std::get<1>(*line_holder.find(std::get<0>(*it))).set_vis_end(stop_range); - new_sol.insert(std::make_pair(stored_id, std::make_pair(stored_stop, stop_range))); - - } - else{ - std::get<1>(*line_holder.find(std::get<0>(*it))).set_vis_start(start_range); - std::get<1>(*line_holder.find(std::get<0>(*it))).set_vis_end(stored_stop); - new_sol.insert(std::make_pair(stored_id, std::make_pair(start_range, stored_stop))); - - std::get<1>(*line_holder.find(std::get<0>(*itr))).set_vis_start(stored_stop); - std::get<1>(*line_holder.find(std::get<0>(*itr))).set_vis_end(stop_range); - new_sol.insert(std::make_pair(my_id, std::make_pair(stored_stop, stop_range))); - } - } - - else{ - new_sol.insert(*itr); - } - } - inst.set_sol(new_sol); - */ return merged; } //Set with 2 lines is a base case: both are visible at +-inf respectively, and intersection is where they change //visibility else if (ls.size() == 2){ - Line l1 = *(ls.begin()); - Line l2 = *(ls.end()); + std::vector::iterator bit = ls.begin(); + std::vector::iterator eit = std::prev(ls.end()); + Line l1 = *(bit); + Line l2 = *(eit); double isec = (l2.get_ycept() - l1.get_ycept())/(l1.get_slope() - l2.get_slope()); if (l1.get_slope() < l2.get_slope()){ l1.set_vis_end(isec); + *bit = l1; l2.set_vis_start(isec); + *eit = l2; } else{ l2.set_vis_end(isec); l1.set_vis_start(isec); + *bit = l1; + *eit = l2; } //Insert partial solutions @@ -216,12 +205,10 @@ std::vector HL::construct_HWprob(){ << " and a y-intercept of " << line.get_ycept() << std::endl; if (it == lines.begin()){ line.set_vis_start(std::numeric_limits::lowest()); - std::cout << "Changed Line " << line.get_id() << " start vis to " << line.get_vis_start() << std::endl; *it = line; } if (it == (std::prev(lines.end()))){ line.set_vis_end(std::numeric_limits::max()); - std::cout << "Changed Line " << line.get_id() << " stop vis to " << line.get_vis_end() << std::endl; *it = line; } } @@ -233,6 +220,7 @@ std::vector HL::construct_HWprob(){ std::vector merge(std::vector lh, std::vector rh){ std::vector merged; + std::cout << "Merging a left half of size " << lh.size() << " and a right half of size " << rh.size() << std::endl; auto litr = lh.begin(); auto ritr = rh.begin(); @@ -249,7 +237,7 @@ std::vector merge(std::vector lh, std::vector rh){ l2.set_vis_start(isec); } merged.push_back(l1); - merged.push_back(l2); + //merged.push_back(l2); litr++; } @@ -277,7 +265,7 @@ std::vector merge(std::vector lh, std::vector rh){ l2.set_vis_end(isec); } - merged.push_back(l1); + //merged.push_back(l1); merged.push_back(l2); ritr++; } @@ -286,7 +274,7 @@ std::vector merge(std::vector lh, std::vector rh){ return merged; } -std::vector HL::get_lines() const{ +std::vector HL::get_lines(){ return lines; } diff --git a/src/HiddenLines.h b/src/HiddenLines.h index e09a16b..c8eb947 100644 --- a/src/HiddenLines.h +++ b/src/HiddenLines.h @@ -11,10 +11,11 @@ class HL HL(); void print_sol(); + std::vector gen_sol(std::vector& ls); std::vector construct_HWprob(); - std::vector get_lines() const; + std::vector get_lines(); std::vector>> get_sol() const; void set_sol(std::vector>> &new_sol); @@ -28,3 +29,5 @@ class HL }; std::vector merge(std::vector lh, std::vector rh); +void print_sol(std::vector& lines); + diff --git a/src/main.cpp b/src/main.cpp index 2f745b0..74ce6cb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,9 +15,9 @@ int main(int argc, char *argv[]) std::cout << "Generating Solution.\n" << std::endl; auto lines = inst.get_lines(); - inst.gen_sol(lines); + auto sol = inst.gen_sol(lines); std::cout << "Solution is: " << std::endl; - inst.print_sol(); + print_sol(sol); }