From 60105002db08ee3d724cc3feaba21defca45e474 Mon Sep 17 00:00:00 2001 From: Nimrod Abramovich <grumpydormin@gmail.com> Date: Wed, 11 Mar 2020 00:04:39 +0000 Subject: [PATCH] row/column constrains fixed & font sizes added --- bin/coursework/Cage.class | Bin 2496 -> 5196 bytes bin/coursework/Main.class | Bin 20740 -> 24809 bytes bin/coursework/Square.class | Bin 2338 -> 2594 bytes src/coursework/Cage.java | 128 ++++++++++++++++-- src/coursework/Main.java | 255 +++++++++++++++++++++++++----------- src/coursework/Square.java | 9 ++ 6 files changed, 310 insertions(+), 82 deletions(-) diff --git a/bin/coursework/Cage.class b/bin/coursework/Cage.class index 35378411b02a029b9347a545d98c2226b59dd351..cf42078f2a031fef67fad643a5262c83393bbbda 100644 GIT binary patch literal 5196 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 GZUX=gNiBr{ delta 1691 zcmX@3aX^^s)W2Q(7#J8#7@8(>_49KjC#I+RBqpWi6f-i&MNj5olAZWX-&2@}fuBKy zk%3u5GmMjgkwJ`yft7&`#FF4)U}xX}v7~qyI2pLO7-Sga*coIQ8Tga)ON)wA%kzt} z^?egF^LQBK85AbxG3u!)@i1^R@PJgR@Gz({s4+6|rl*!TBiXE=p$W2E(L{rXftP`g zi-D0ri-$oQ<OI&7(#)I`kYbRiE)RnqNR+!6Vt{8}TK?o3CMPbCqzMm$DTCSMAFT3h zRtz@m4Azrn*<`tG8SEGtIDI_bJwhfsuqn$sFgUR@I5IK_BDpuXur#qKm50HZ!DVt2 zn~9wRgBuTnJA(@&18;F^iBD=;NpML~es(Gsg9C#n4}%v-hQBzq#3{d|BtI7+=flI` z%iuEk3!ASiBLi=6Nn&!gZ(>16Vp2{jI|CaRLnK2qJ3|yBgFsedS)zVvNoJ0|V^L9J zWiby!3_~m<150s!Q3)dht46e^W*9p|{Nx;V8MZ`*WOjz6$p*}#yeSN+j125$i8-aI z{%MmZuuE~rF{FdyDua<hbn*js5uq>+hAc(~Mg=a0IEEY^hFpfc$yeB|P2(5}co+&9 ziWnI<O7eqCiZb)k85u-0G=0Dh$w|yh*N2E&b1{@Kl(93EGBQX_=3|m_=V2&k$Y5k( zFHS89Nv$XWNmuePR54UDGH?~AmV{*%XC~#OGBU7eL}`XGGO*=l=7lBZFfuS@rZ6%v z7v+~TGB79S=S)7sp~T2K`8|hbJqrUP13!ZR10#bV0|Ub(1||j;1_lN#t?dj#TH0F~ zM73nLGKg#GZe@_v+QA^bl|fN!2ZQof26e4%44PWo7<4u=FfcGN=rb@ds4;LdFfa%( zurLTRa54xn@G%H82s4N<NHK^qC^CpKs4|E%XfjAJ7=X-&*ur2~&tSv=0$QLX&A<qj zVrSrBU;?u^8Mqjj85lun58^<kPzDwTeg+0cA+0S8qWf4DFtBU{u_CQl_SrGpE@${I z$s(g?0}<lbXU5KK#<rZ{h9rk5o1Ph~v?%L*h7-~|7>unrMOi@<SG^=Bi=HGGi(ZNu zw<IUCo+KBuUWyry2!pvLuP8Uu0tQu4o>>eET3Z+tLDB+j86XV_Mj{O6n;0y&G1xC> zs1W65A*jxEIYWRb_bdiAQ68oRNak6h8|bl|K?9^vS(Jxm0fQ_~i@hfs3QE+2!aa#W zf`NfSnt_u+hJlMgjzN||p237cfx(JFk->pMiNT#gg&~MRl_8cvogs-qlOdNui=mxC zo1u$AhhZv%F2i~TJ%&vT`V4y+3>dC67&6>qFk*PhV9fBJL7tJ5L5@+7!2%p-K@1$A zfM+lSN0}_c8wS661`Y;B1`~$U4E_up46F<e4Eq@Z7}yv%8Qd9mFa$ENF>o;iF|1_( zY2{{!Wmv=z%)r6G!;r)<mm!29l!2EajDdlnkb#ryKLalVD?0-t10y3lLpTG&e+Cf- zPId-HMhG85GW=(VVc>&{GBR?36tgpgvonNG4iplp4~J=I`p>|LVjcq{sHlP@B8HO; zEZ_uI0!k<QSe7twffzd&B0v-~IQghc8!;R0W{8W_+QJ~dgCSu%Lz+<LHim4iEew*| z7_zr9<Zojr*4o0LE^WjDS65F+A@eqd3Q&e&24@&K26hGp25SaR1{($e23rPk20I3O z2788d1_y>>21jt9i$NR;4RmpaScV#Kn1jNNnSoJ&ffH29Lj5&aL0H8ZlqC2Vm>C!t wTo_mxTp73++`uL&fW^cZYC+M+z{()VPzN@Ni-Cs$6pu^{j0_D7pv>F|0A&d&2><{9 diff --git a/bin/coursework/Main.class b/bin/coursework/Main.class index ae468b9521fc5d9f39ff9b1a989129e7ce984656..50b401ba1f7cfe454d8d9798e6a8f2ef4f8247e8 100644 GIT binary patch literal 24809 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 literal 20740 zcmX^0Z`VEs1_l%6)$9yRj12tA`K3k0spa`a+4{bTnR)CCEQ}0tS&3zdX%+g31qC^o z$%!SI`FZ+|2sR@FqaPy!qbDN+uXBE0aY<rcNmyb|X(}@V0|Of)1HXHar%QZ*Yml?6 zUx=f-D<cD=3!D851~6b`U@cBg%}Zru5b=T90_N)ngG8-C(j|%MDAFLlelUo%W@O+_ zFUm{_E-XzfN-bt&5Q+9daz8{ErpT`}Hz~EKn2|v-8r7!c{JfH){2cv|)QS?f%+#C| zYeojH<izw;pTwlpoMJ`>xo8|ZzzVDx83Zyi(=&21(=$p^Q(TLR@{1T5n4_bk7#X-g zuJdrpuK+nt8qJiP#LE2A5`B=gH6sHjNU3vTI!L7e*n#?`C7C(;KAFWOAnD-D^t{B9 z(xOyG24ys98)Q#|jIg$|W@KQ`EDq01NiAYzV2om9;3+6dEz8U=Ee2V~$RGtaBCSFn z64<Ct;e)A#1Rx`WFtP;@L2E_^j^v!w#G=f+bVdgD(!7*>FpH-+Bfs1?v$!NN8{`vC zkVJ4vVsbVkgCN*Wh_Apx){G3A=wc{-aZk)m4K7J6Nd<d|vnVwsAFPp)feU1=Q)x*_ zejX!(EZ7jZXJGLOkp@L3NF#*D$iQKfoRgWCSz^b?z^tJe#>l|poS%})&S1>QAc&E6 zI2jljOnDdt8HCsw#6TPi9tKecF-8V{pUk{eNQw$cOv*`RWDxSnPfpAUODxI+@u7lj zHejo`7?>Gsc^Ir23_xbs^DuBSaIrHuGQu+!Bo<%}hbKgkYG)n>VFnR)1_=<yjfX*; zL4uvZgONc3CAT0&AV{4T4}&Cw6gz_tBZDwV9VE~li;5B}LFtK$!JEMrq|Tp*L7G7Z z#0unLP-IX7v4VLRlo?b&tWX{XRR#qRE1ZWx4Z@1#VNhpKU}uPCWZ*}b42~5phA4=s zaXbtf44NQ)2|Nti44RA#EF~G4#h?^`6vCj=1(dLhQ%gz<+>0_(7#S2aAn5@fl~8Yi zWCIfOQmxq;(ij<JK=$HN!o`pZazrLWHakNW)c0u>`su0pxv3>ZmHGks#XJl-47rR9 zY@p)EHHeWx6qbCD6<LD}%I9GyU?^l{;3-Zmam>j~&&y5CD`8}i(7>ugGYsVAVjc!w z20ku^QigJNhB8J5Ar#kwOEn&b3WiEX29EU9lJLxwk_>Q4bYXLl0GEgiTnvm1wLA=U z4E2l*yoo6(A^9->Gcq{Bt%f8S^Z;`4^du03AbX24Q$WGV$RG#v2zJvL8CZ%lt5O*m z7&93e7_%4|c)=0vn^*u&-yny!^DuNUbTTsV!=n*WJ}@$fX}D-&DK|ixx_KCS7<w5Q zgy5RsNuH5G8Ke&-&@l3aHOP>D9)<}F6B!wJ;f6qpwm=OmwxaqI(?DFo1~Sr`i@}It zG7rNPhN+;yOD%CP$}cSdc@QnA!Q$YAGo6QF2E$B72Ij<+6y)>*31+|ilvHa^Pt7nc z1_y@OJPdOf<}xzyl%!Ua1Qg{Lq!yJ_GBRi&vO-d7VqUR+0aQvqxCB(@!c<xdF)%R9 z=V4gDu#k~~Jvk#WFFiGdks$&l5WrcDgdl*}SO%)Y^_{^+f=Z3lywoCVE{4SnOW7Hg zFfyn>;|QV{hx2$CmN6`6WZ+IrNr4%`$e;#K#1Oq$Edqs(5yMIzhE)u!85wxeQ%izU zlS>lw(m{nSMnO@Wkywzb4_9H$#juuPJv+lX^wI)N9S_3>1_MS0_L6+JqI^)+W-A6a zB^VhvLD2zj4KOk&5DGd*29}JZ{0c?})^teHKx@lD5(XoKKypTEayGb)RFs&RS5nN# zpb8HQNZP=fG{FgF7Z1a3hCPf7?CGf`pzOlPAOcMz`Z<Yt>Ckjx&B3sbk%57W;Q+%S zc7}tD3<98NLRP`UaG2o;BLiD%VQC_$bt4LK0Yr&^QdVkmiM3`FD2E;6VK~lkf{}p- z-n<FQFK1+6(Eul1Mut;745vZzkcL1|emO|fSssRSAVGe(Cg=Q|(%d|d+yx$niy%2} zaLWN9ewl~i3Md}<5PDK`KyG7B&d*_FU@ih#%L+~=po$jVN1#?>T7GF>3J1e&Mg~pY zv<ls%#N=#HT;!$bCg<nm7g;G3r6(n77@3;t80Z)o=osjkXj*eIxHH`4VYtU|pOJy1 zIJG3Wq!N_4Pyz&!+pIOiI2ax>GN=<}HpFCGc7`W7s_8JN{0c6H#|*aY49^)Eq(J_G z*JrQ<0B&1yF+5{<32Hdp2PuEe!|;aTEvU_#TH>6MnUhkKng>cj@M0)AKPM+O8Pq&4 z*7r{;PAw_}wM9S~&zha#JtKo4icO$mh@0Uf!)JDePmBzTP&wRY@GyK~_{zw@mY9;_ zn3Dr4{~!%ojFj`3As-a9uR(_Y1eJtGK-_##3i!jr@R#8qBZCMizc}Y)CTByc3)eDe z&FbmtgVaWVNLquNX=UIXhP~km3Q%iC23}CB-7_yO9~^j$3^Ld=E?Cx@k%1>EF()xE z8Pd+@VlZN4<zcX9WCNve7tJs>2M$Pm%*n{b$ivRajUJf=pe(HK3`$-+jJ%9|j0~(! zK90`b7_Dn0g`m2GQGkb0kWmQItO&_32reng&rW4zkkfEMbuY3$aB;{e!ow&E(g~_< zo$^ac@^c}YL5>&aVUz&Lf$Bq_)U*<Wj1&)}G)RW8IJG1Q)Js7~$?`DDfqcwelnScp zL9N<iHv4C3U;wI~Y}p(HAi==J;J~QL!>9&UUYuIuo0$i0y@13uco;PqwHO(=i&IMi zic-^p!L0^X4Hp-XyB!$vIT&>r8Dv4ZCoMm@v>28tONtWniVG5pQu9izLAKrHU^HN4 zPz0$1mA|@4`4zfJ`9&$IMOF&PY8e^Wq5VlnD3%t4<QIVIYDNYbXrTztP|zk4NY<K@ zA(PRRhtUkw{^ND>4+-)2jfXS?*&I}0-gIZQ;$Z}*11?aZP>`6MnU~JaXv@eT4b3B{ zMKz>n!NF+H$ROa8pO~VMo|v1epsSFUnUl)JXv6T5ozaPrK^CiCXHbRUlwZNY=mKh8 zW#pGD<U%`7T#SwkFF6?985zWoO$CLELS|k;X$hM{Ce+D{HjLgpj6R^40X0=YF#w4g zMjJ*y9!7sqYZFw1B1t$h2J$clF$Oa-2o$G+3XRkhSd)U0K@$;%kQy3ZyF2CQ=cFd) z!IWAHF)%WQ@-Qr53}a*nCAQ50^RzX*;DXo!F5od59E=eROW7GC85vZeAqY{7%Sl2E zOpMVyj4_O{j0|iUiFqlYB3%#DX>hw!K}C-~xB&71D=)I<Vzgn5=V44>OoSw9|2#)< zsS3)Yuq=v28>pCKFM%aQp`8506i^S=Ei)$-l13OA1d+SP;Ba7MkcSzGnykRGPWctq zj11y1qd@h(Cn)Y==J6&Mr6!i7`lXhG`u!Z>cDe!=!vV%@9>yHTT+r}IK~81~BZE3} zEf1^IkjrnV7zblMBLkxj7h@q~F*{=sw9bGO@t%1lsp+XjJd7obrHl+51&Kw)sh*%# z6V@8jlY<e|SUB8#XgkP3l{}19jMbn~gZ#Xb#LT>6Mh0nQH#uh{76qpkmZs(<r&?=9 zaWK|0GB6zmYpv&DY+!6;WMD5!EyzhsPGw|p!Ko7*mJsKnnusI;^(x3!%{+`PjIE3e zY&ofU>Cm2-CrF~5hp~gPlaYb5xHPF4+~NjRc(85)!~!I9x<Sf&7#T!0p#3it73_?C zs3U8j$l_w`Wt;%2a3+F!2+^LNm@Wh*D3+W|(C8RvF(@8E<ufCLFqU{@WZ){!$V@9q zP4P@AW@KQ_1d&Y9o{S6}pe{vXNq!MK;}mwr>5L5gr3ER8C8?mK2_9TwWROJ39&ib3 z%`h&;d5jC#8Rs)Hh#*zVa1}g^3mF$dTIX;vP#|bxaUrOlSi-}&6x7;cFNU>YIYEUb z)EQ#PRX^N3&;Sld5qL<k7}nE-)PA5s9aN^T=3!g|D$}__`~#o`Iy)mq<3BSuF+Ek^ z6GVn(rk1laZa}ZnkyLOnZenDR1eM`dU>(K!pdqLD%;fw$y@I@SF2?l?FS!`kGHwM$ z;WkDFSxAyhgAJ)683hhU8^#?Vl{-OQJIt5{i@^1QT4vVZ;RMFrJPbMvx*Uvq(HsLB z(t<mNlYx<OKM#W*NZ~<723BX#z?={RGh?(60}Ep`s5m>y!+4DGI4G5*mbhdVgW83l zc1{$io#TY4Mo#lEo&i-Ophg6!w(v*=wHMeN;-E?x7#T0{FkWQ5#K<5DZp1?hB5+F% zT!exKaZo)2YtTYeg4=RjN#M2%DE1f`Ae{k-EGOeN#vAO6*U_s>aDAumn_pU-3buuZ z@h0OfMh0GA|IlF9cxN9^XKz;*Mg|F(%}9lFNM%8)wGaa<;~h|?aF>z686~lUyT;fX zomdQmR}c*DjQ4pMA22>-WZ+LsNdY?wD#^%T22Tp;?!aRtD6ey+r<Qo;rKDE)r(q^2 z<aUgvCl}*WhC}R(&rmveklvdR0~=#BBZE**VsVLoL240rydIn+zynQDTntf+uXz~X zFurAEU@1sV%|`D@LW}{8&86lRlvIL7pBNeVKn)LYhZvj@85u;2K|}E1c194m@dyqC zMg~*3@4*V7BlR$!L+UuFUqB{<2BN?j<TK+}cE&GA17;xOA-Z`OzcGGiWZ*3ajh4aM z9*hhIIGZU!sfj86c{!CX`K3uYsW2VZLJaJTKS8aPUyKYHn8^U{Mug4Qa52zygg%D5 zVbYK`362KLA5a74FC&8v_67`g$1*aAfx{1y1Cc_Qi}5oP0}m4;C`9-&!1)vAK_LbX z#-EG~T#&{*D0CSa*fd-~t#D2TMkY2M26+YrE{0Mj4jv{>P@|ADJ+%a40T;tsCT<=k z9#G~7^@YLl3KHbwVd4h~au&msf`>UWQzD>rBy{cqtb>t(BQLcannE~>5F<8dBaLX| zFxIeQ-8nU{B((@sFt9U8FfxdPLJYYobt=uwNl7i@VmQDg#ls}c*u%)c4i0tyG%hA_ zhL>DS;!JWpO!A<C5{{C5NDU1d3@T@HfD~a2Z1y*2g1{_Lv8chpq|V5|2kLO7<>!^? zf;vG~AVV~Hn6#L*LA~9Ag4DbeP`|<j(qzQq9BU3HT}B3`f)bEUeUMHAMh0C-K0sCu zZSW!sK|KU&ax&Z%V&G&l=3$IsGGS!!#*;q5X%W3#g(XF#GRFhjo@HcUOM=doa3-hb z<iMf|<Yh=#O*{`WI|eC+5yd&E|FVmbfiE32>WMVbCZ?f@eX5N&J+%bXx&imGi$S%4 zCZX9g*5Z=Hq7p_1aY%rHYC)t72rd_0E0R+Sz~dV1Ois{IeMl(6W!M}#ArTBp-)=k% z)=ch<3{nUq!C@8v>1u*91Q)|&Mk{tEFGdD2P$EN~Bk;^CPAw^Bb1;D#$mGf72Qtu~ zk%1kQo4}pg$4r4dOhHV+kSaAGF(m~&{{?N+Vj2f3;}{s3LU|aH8B(|y=P`xzFhwv$ zGBOB*Laek1)CY#Qc|dgtqzMHI4Y1Q;(GBVXfQw;ktc@(jc}&qDx5j{)s}Lg~0R_nl zU{^#j#qlu3GbMnE|I*?N_<$@#A++>IPV7)2E(S)XBpya1Mq>~wg@;KD!b;;|TnS-i z@GyR0{0NfG;$i&9_>s+_^#M2#xfnk)s)9<cd>*C(P;mn4r}}2*K?@(o&rC%;OvOwk z(1AFRk5Li?NB}w|tQp3^RL01_;hR{Jk&>TX3Np2Vhp7_Ot^}1_A(<the)nglY96K< z(5NB{sL#d7z*6P}8lvS&h8Ho63@o{cnV^wLrbZs7CZ-rrKOnI*FFAvefhDmhy_k`K zBPTI8DJ4<GfRP~=EiGY22($^GR-unv9Uuncz{Mh@Mu7x1G)}-d7exfr@U~%U=V9t# ze96ebm01jJvZa86wu^^hJHrk}2CjVg5FaCh3fK?=R)abNIVoUgfJYUOCoC%qQo)lt zj0~1U7-gdkR-}(S@(h}EhJ}|QBSQ|3@PhYi!6p!JF<1@67U<9ea`?f7K*8n6G?|BK z3N*Nap+g#+Ow*WVurp0ZX(a_$7MG;v@-WS0n#IV#oL^c3n*!9&%-0Vn%FF`|ouww` zT7zntIXq0#OmjhfnkeKP0gX8hrumEvOgajna(^MH++PH$D6pu67xPR@n3l0KErpd~ zs5bI2EeEAy_5zS2a`Hf~ODbk$V9N(b8fYFKR8*k`2O|R;q{d}rumXn`{t!ipI9T{0 z$D9#z%M((UKn6ctLE|LWnqllr$lWGzNevp|aL&ljFHSAuVp`8&%f+;wX)_Pg7SLcd zsCaX&C`rvL&dkqq%giZBEh=Vb+Q!JB0rCr|ctbZr1x+~z6DYBR$~^^;Ma3LUyBHZ* zwe(6VO1PM|GVK8scYCpStFRV;pr+7%9tM5}0gyWn@-Q7@I?Twx2P!4}3sUo3G81$1 z(?R3vu;2u@!}P;5^HTE5VO4l$zCOq?*6d72p*097^*EKLrKJ|7rhuAssYUEe$Dz$x zkQ_)kM4XH17}H6Rt4}d92tslROaZ8TW;()j1|)lykwF+C3(*RaXJBMH&%>C`aG#6m z2-8I#rc2<)PEl%N3TSu$BzT2~=_;t?V@=M<FHYrRy3TZyo#_U&Qw6iiFTcbMG-(2_ zL3x;Nfi&@hQ(tgNVsds!QDSl`7t<Y(_Pa<)*3%!ZiIIUZ6=}d5Gr=%2aHnPFq(YMi zl2S;hf<gr<2O5!wjYWcl85#J%F#vP0H6sHH$S7Dp4<wEn;MR-`OsR&j5jBuJ$Q%rh zf|VH|=XxX$S+g^}MhpvJ_=lb8Eh7UDDCxqCM^qBVTntf6A9$EPf_hfW1^ES_()u$G z<7~z`AepZ`Oy5A|6Dzn^1rqte!_Wj8eS(#mCJ3`k85ztqu=Y#AVFJoG;5re#XADgs ze|Z=mF+S#C`p?K<4{F>JH6Nw`RtX+%*9CXAtPBb&tT~t&85u-zNHH@qM1iG<nQucj zA37_iY+zt$=ImmPECsRJ7;H5wBZC3he2A-v(#6H#z|79W%mGTw94V=gBn3+pxC4%n zffu&!3ET%~XAnU|hZz?GBQqZl;|s=@?92kV=Ik7EQj1DBnT41|*qMb9GvtsyFRZ-) zR-^(ZL1Pm<%%aR<j0`-^{(f$rLB5V5p8kG}3~H#cj6<(A7c)Pz1P_BXvm|KHo;W?4 zVI0iTj0~ENMX3sv`K1cQrBFtBW^sl>NxlMjTt}fKBUK?OKd~sq9%P9u53?MoY649m zIp^n<q~?L=pgEWo7#aA%V+)yi=?YFD^?F>){7e-fP0BpXD$J^&A@q#=a>u-s@I=r^ zv>3G44q21r4{p{c=2#0ca51a%Fl#Vtf;wHvp!PnfhmSlY2p+3}*23VmacQM_;Bk3< z(3E;<E@*iIvo^CXJF^a~+yyIx*}=oC$E?rDz?qpAP?TB>o^Vuv7O-G-n8s;_fnw8; zhuH`eN9^H_L4KZo?i|b}j0|#q`6U@3Ps2kjKMxUTdK}DVj11hapz#w(urM;PCW4X& z&RI!tiU2LEgEl!W7#V6It^=i6a3u*@^oSbG=tB}PSt6UDkTq<`jVh>!W*8T<4YM6P zvn@*F2_nnGY!4bf;7$RLuYenrpk_D+7egwu6A!a9ND?%d<pW;g7y%M?<zaS16^;Zg zu>!3bVD{u;VrF7No!W<3WKBkM6si-sQDe!)_?e-ck%1E$wuT0b3|5H11(&3-JO=3k zLqa62LLZ|BfRwPzfjmqWpkYv0*=^3qpn}&#P-X`W>N1BihqE(>F*3-5Y7tP}VzC~i zn1?xnIg*iq$={oiK@k?MsAUPntsupq%CV%fAeE7UD>%QjC^;2W^D#1Tg7S<W$Rb7t z0jK=@lH!u0!~);cl8pS6VlL)*=0tYp1V#oWkP1k<GBd9%KRZ?52i))RO)W`GOH3}w zFRJ8WPGU}GWZ=$42r)98f%q6jC&X~b&_l6`Pkw%OX#pfOA<CdlXRwDLB2X(K8o{0+ zOA=xwvQ?M{LrV{Ew*@NeoS2gnoLQ1;&CkXh2Of6;1qS|BG_obo&M}gcp(2`L0?etP zdLx5}sfDSPpPf0K4C66_3n~IKJ_~9?9uLz5riuLQ%(;vVzK}Q}-UF~+0Fn=2LLfT| zkUQd#+yLte2rw6c{8!4uw3cZdKRa`Y0Mk0CSQQV`JFr+KLad&L=_gpM4k6aU!}N>k zH$OXbGb4i%+~tr|j-_oQz}yD4po@o@2W(g;*f4NF_wz7YGF$PpGxw1Z(9mK7DHNb0 zpg@=i4d|&n%syZnrU)=kgt}xF53?V$KR-M3OaZ2Kpq?U<5lBg4E-0uL@Gu842lKNt z&lg}0W@O;;%*#tHa?VLCE>10GXI=`O<i?UMAc-56pV*m~Ll+O@R?5i02FZMk44mM) z1(dTG8Tiq9R}6{_j0~Wa`XUUH46F=n42%ry3=9lR3>*wXpmoY{J~smsXk{x{j-LUv zD1-~NFdEDkW)NWjEjklr5CikY89-}UnLvw>!F*{383slMSuk6UfeADW4Q4AcD1m8Z z2GHsYCeU(YFkg*90ZgkyX$=NVxPC1LCeWf{6uu6FE?B)DnAT+AV9;kUU|?i0WME)0 zXJ7&kK?w_}>}4?8%wQs*!g`d!jA=82`9`oNOR&>Hip&`}7%UmAz@iKcjGzVEP(uzf zFf%YRFfb%*ZD+925@F!p%3!AjGSFcwgOiqk3foZz7pAQYu3$0utqh)8yBWMAw=?)| zW$@Et+{zFDB7(G-w=#r)h%gWlp|zVKDsnqR%vOe21T!AtC@Tg&1_lN_1{MZG25trm z1`!4;26+Z+1`P%q24e<$1`7rU23rP41}6q526qN$1|J4jhHwTqh9m|(uqSvRPG(4C zNCJB)nIQ%0oofti3~USx3_iOVQX{uBr2A-ZV#wIWkf*hUp=cXJi3kICwg^L2z9+L8 z%W?)qW;53141!wP8lo(stlJrCd|Fr;MOg*d7XE+N!on!Z0%G0M-oU`Xz{~&&Of?2h zkl73z489Ef41Nsq3;_(P41o;V3_%QL41o*|3;_&Y4545*nlP|})k56J!QjHsz|hFR z$RN+4%h1HY#lXa%#Gt{@%)rLL!l1z*!O+6M#=y$Z%D})N#K7{8L6w~$m6`Dm11lr% zF9uEqCeW&Bh#wh67+4v&7#J9ev^2Iev{|u%s4gpZElD;>c8Ev%tT-guwlPey;@rew z0`f+NC~JZwTd>v^1}8X|Jy=_kQ<PPdWgEjZZAlI&OOkyX!z?XHb`W<L!#oCtZ48S* zX06!9um&6wOyH2vW8h|BV2EU3XNY3pV~A#uVTfT+W{6`jWQb>QU`S-}Vn|{LVMt-f zV8~-AV8{oDNDMgiilDK^z)%DY5fBR!A|MtdL_jP^h_EwcGi+o~VPIq6V@P4x#ITux zok4~njA09d5(5W=GJ`+ER)%fh5ZcbL0~$iB8JNL&{jl~nhMiU{%x0|2W^BtDTtWVq z6=2H{WlJ#H#;{Xp?>2`0vlz6|ge6(FG3=koAR@{pGoOJ^OLjZMQ5H}_;ca1K6lDXY ziCv<svluu)GAB{Y2FYf~V3>_0j4)dkWVXz9hBMgBmf6m5UTZtUB~Ye;B)&KXaRvs4 zVg@#b5(Z9&QU-p8G6pq<at3FH3I-2`N(OI+Dh5A>QiceII)+$=dWIy1CWcgoW`=Br z7KSE<R)+ZuZ465o+8LHJbTF)9XlB^L(8I8kp_gGFLqEeIh6&&(3Ss~)4Ll5wqQl?- z2bB+p8Ll$0feW0&44_QL%)rL5m*G0Y4F(nlPKI3!HyIQdSQ&U2e85SXjUfZh0wrlF z2Cjb${Ok+|7#Z!Delf6d{$b#NvKW{^Yi%JB$56t+3@)-|nQfOdh-htLaFrHd1BECv zb4UvlqYNnU-yniSh=GNHfnhQOE5j59VTQ>JG7Qte-cW!T0{4b2*vX6xObk+B=P`lv z89M_LD1QksFo72D;&g$G09%H1f)NWI7tCZ}Wthbv%rKKdhG7m47l48fj|+}7oWSV< zSQxP24ukm&tPBengc;^D$S^Fz;Q~;!;c>w^JT8ER0Uj4DWng7k#vshFltG4J1r8Sw z2!ku|s%;Ge6F98}FxxC=a0jOYBWB}S43ZEgi}5T5J_wW5cqW5{))t0{nGAwjTNpg0 zjf8G(W4N;%EDz#6*v4?Dg^^KOKxN_oort6(2QDC1Gq5tOVbEn*%V5E<j=`E?1A`mG zY6gFX&0r6RLEHdMMobL8;KaiSPCQ%;tf0iBAi@Q5=>&#}kl15%W?%&ub2E1{xJPbh zcx1)8o8fWfc7~@`Y`YnrMGEcR&hWyD9l_+-#9$6Cl2{Uqm?hbRk+>|99KoQX_Z8b- zhIf%5$w(HR;7C?Uj^LdPAD9@zCE380+c!zpZ4BQf*>*Dg012{!1%H7818T4&Yp|BA zD2w)XhToE`pxO*lhMO_)GJwi=PKNCaLJT_?WEplcXfW(%FlX4q;Ks0zA(>%6LpH+! zh6;v*3=Is282T6vGfZPR3Jw}bSw0gQGz<(g!DTe4pqL3RGC+-vnc(08wZLYAYd26q zF#%j|voZ)Vv@`r?WME)pkY%W0WMpJwU}w-^C}d=21hvnYKwEDh0m{(Fzyi+Y7P}dY zBGtDuviRwWFtTrA<lM%{4`&I(Sz>UOq^|llMj2g%e<4wRl7W-q6oW9sX$Dz_GYsks zXBi9`&M}xVoCo_0QgT?p{bd2Js~H(M8T7$EWM*Ij?eKxRZ7BmgxV7OZ!YJ>xo53M+ zJENi%t0b$s2%}Q|HbxaNOFmm&gi$_w8>6};IBFQRC0T_Tb+$3;foOd&jc_EWQe$Aa z%)r8Mg@KphDuXz~H3l_?>kN7fHyF$qZZg<0+yXmP3mhnpaECfV9m>LB%V@{|+Ly=6 zU;>T`Rt6?UBSvGWlYcX?f*U5a(Ddn}y@}Ce8^bSc5k~WEjF!6@Z6bvk?Y1*I`0i$O zj1*>c-p=Ui2N8AK&gfvpq9elSv5nD7l0|15qwh9GFYRp%-ysQ9CpeNt7nD9(py^Y0 z8)JZ$?k>g<28L~n;W}Eo7^6U}IHY!j5d#kc1H(NA4u<;-{0t8m#26kiC^9@|&|!GO zV8QT|!Jgq6g9pP4hGd3U4229I7^)eW!QO|ou4<v)=U^yhOkz-CU}R8ah+#}-&}Cp^ z&|wH<OkqrAU}msjaAizm&}Cp@U;<4pKmvl%k%1Ll1T<+2GiGdK%<|P?F%o9X+s2sX zr@L<t7r521oIymAMU+)nl+|blV*yKwKe&CUyKmwD*E-Bb!i;6x7%OHn2<b3Gc*2Y| z+ZgMDb(oDn0^1mySW>nzw(VdnFk{tWHqv1>f(mt6vF&E;1(__#ww<vbQ7C~!gOQzq zgOP(lh>?>)f{}|sj**)|hmniHjFFGQiIJZnkWq*sl~I_Xlu?wSkx>jB8jxzc2^ty< z3{8xa7;Z2yGH@_dF-~Tj!ob8J#8ALEm2nCKGlK*}7UML==?p9k(hSnz9Lma&${@>d z9o+sbW#DC;!El3t4P3~{GBE#VkYiwDXJBM!IKa+06O3jtGB61IVo+pY0!;uwf|H?} zff<}4m9@7q&h=%sTh1T^ZdMuT$Qo^9T-?IUC=23)f)3$dF;G%ulwx3IlxE;!lwlBK zlx9$3lmq(-lE9VWeo|&!#<-k;k%5&#j&TLpPwY_lGlSjA#lZBJfs37SCL<pM6KL8V z;xI-d22OBmU=KXOLsGi-CdO6U7=CGi(zejv-HdA^cQdY!6lUDGopJMa#x2_!w{K<K zg(15KNp>Gdt1#mMP-fBE!njLo7vmvt`qtXQxKC>r<6#(Q7t1!rBOpN#ts}yCVjJTr z9TCQ}+ZesHbha~|M`R(8F~N{h9;6<ckC5_<9RoiD1EV4X2cr@LKcg~(7^5nK38NZA z5TiOnETaZP7NZ$MIinLpJ)<*2JEIFjAEPV7R7N+3S&SYGyBIyeAqy$v_CQ0HgJBEf zWpLh!Wr%0I0?s>3puH@R@MA~^_fQxZq(K!5v?a2M@v4@zjP5SR+aNFA14SsLO5p<4 zn2f#*QjBR}t00jm4Yi5^8eyPnLK<8pfT{^;SiuUK*nwJF4Q&U?gW7?jpa#09jL|m6 zCo>sXW!8Wjf+`FDzh+tk@0meTQYHf{V-|xDV>W{bV<v+vV;<NM5dX@<9U%{{gFr1I zNcxAg200j*K@~b569W@y87R~t&d`Pkx3<<U#^)g4#-aPRh=Gf-6KoNry}%8(h#MT7 zj0{Ym*%hdP+ZaGq9Rq`f))t1?ZH%uDFwXN~u?1zCNGrB|ppFX5at2XJHc=KMKizGN zP4gI7nQg(HQBl@~|6j=<ybP|+7<(AF8G9Lc8T%NN8T%Qu7$-33F!nK+F-``%2onCV z>WrH~7n+H98MGPSF(@!FF(@-|GQMZH!2rob5}*t(%fJrG@Qm{q85kMa8D}yufCJ?N z<433;f*4r9SxP{A8{;P}ZJk|=KR_Y#8$D#EGw?Ic1-k<h1p@Gp5dck6gFEp8;7%YY z(EnjI|3AolCMK-rFJRzjTt=k%jG%#di2E50!95iQhGwlTOsq2*c)^1MOzg`UxWFui z5=(YwGtT7<am;31%NhJYeP~WluaOJXvs+=sEy*px4jW0>#>9on<waJGq>fRhg^N*? z3)F+z*uu#u$_ZjE1O*wSd#45J(=)DQkYZfLpuo7AL5*<@gE`|`1~<la455tc8S)rc zGgL6HVrXLA1okqd%x{JVX)}`mc!M<qLo<^gxB&oS2{CXnurf$7WHJdea51nm$b!3s zYz&+X$_%04EXc)R&S1_Y!X(PT4K7DT7}x~enEx`cLq;EdGkAf=A3#f@puwlhzzXgr z_QOh47Te_v`JlpZH<Ngz%nl~W?MyP;m}IvzI)K8C*=QTXifv2^B20?;mMju1B23EJ zmTbBbED|i+m{fH^dW4zOwlm2{ux(?~5N6WZ#-z86Np>5Pp{|zhE+!*T)W?B}NL@$+ z7o7dsmi(UxZL&Z{cz%HkNk~wF8@7yF88{fXG4L{OXHaI`!C=C;lfi~@H-ih~9)<+Q zy$som2N=p2w=vW+9%5)?Jj~F`cmy1*cHjnGKQvf57}}wQ1!&(pXlMeIV}hAX8FU$# z8B7?Qn9LZs7+4r=7_6Ag8MvU;CJ(48;$>%WXZ+2O&A<ejPJsj+!*po5W}>x)A?O%` zKB#z80<kwSm_Q3S0Z=t5W2C)}$r4m=GBL_*Vldga@c$h|Qjr3=k?{lrJL5?P9>!A) z(u}7WG#F1Z7&Bf1`vH>MOrU;XU@!r@7u1N=0$2Eu0*{-4<qrc7qcqbm26hHcCMzau zs3TRt8Iys5WfOx5qG1XeKV@LN3bp`LY;!W%Fxg`2Fh|#M6Rv}i$&SgMfr$yUUX_J` zk;xG>ipiMCzzuGP?S}S~e6@Bnlt$`^Fgc4bId5lj-O5m;1FEr^Jal$5c}9vbdBf3m zCf{vL0XpFR&Nr>?Od)=tLUlLeyhu<O?qCYr&J?wcDK=bdJ5!<+i`I6gWGhy!?M$gw zY&zQ*Ua>=ZRV=VpD{F8hn<N{w%GJ`=-OiK_CNs4~n6kGq<wB@DP-RrKjj2#un5lFd zQ@QpwrYca(K<Ym~24MyU#(NALjQ1I&7#}bwGCpLmV0^@2&-jGFh4Cpv6ytM-1jZK( zX^bx!au{DT^fJC>n9TT&VJ71Th6Rit8J07CVpz}knPD5_7lvJoU%^4=0SO*>Z0?4Z zog56CnQ9q91KKVO<=|43nIVB88r%?OVMt>LWvXLPVqj&+Veki6@N5j6O!Z7L&?p1- z2SD{OtJV&t280J775EPZ7RH}o%ONAJtW3>}Qy3Tom_XA#Py@Cyuz($Ar?rJ4WEO*w z))s~^$XHq|mKfN=xN93z+e`*-Pz#3{)Ev^5k=@SJ39^|5Jfa9r)C{Q%d<<y}Dh%li zdJGv1W(?U3whTF7mq4mAJ9seIF?BQbfSa6lOuY;@KrKlIJ0@X<8w_kreGCi?5SN2g z^)s-5OEzW(Ml%5>(0mfq3!p|YXpq)WOM4sBq^%4Qo0z78iX+f)!Vad{+nHp9ndWU{ z(gVqEV_E<%loq27%0Wh;UNdkoykXE`c*|hG@D9nfhH%#!GOb|h0X2>o44GCktpZn{ zhD@uORxz+3xfY~q4Fi(^6KL8A;z-6=1`bemXUN*kv_5h>(?(yNZA_bXGi{9&X4=lO zm*GGpvoO=n;O$JiA*G{^))uCH+n5gc?PfX>xtr-&r0#a66Wf_iTd^!>;M9_2-OhAQ zl4Tpyg-9#b<NrT_n3tC`2!IT|ww!?jMBm;Bc4s6*4AXV+7;g&G9q9NsxL{@Y#K6Ju znL&-=3xhtxR|W@$9}Lb6KN&n3elUbE{AP$`_`?v(@RuQl;U7aP!+(ZMMn-UmKt>F* z;31O5bdTvixQ`OZ^nmFh0~3QjgBH^xrpFA-3=RyEOi!4eGO#c>Gq8dCGOP@N3>;8a zECUPEGp6SZObn?EEKDz$UNS%mG-C$V{~!&Z#tYLccBb|0OmEnkj<7QvU|{$Kk`rQJ zg2*v2vNK(GXJ@*@BESTi&4UCr!#ZeVFF=cBD?^yp7KV6Gd9sb^{Q<^#;Bo}a1-IF@ zGkpTdZ)5s03!J9+fzvdoNyqe^WdT?S(&}g4$`A%h<dB*PJb}Qd$-v5}%^=RG!=TEj z$Dq%s&tT4I$l%0i#Nfqf!r;$n3Jx$xYcc>HU;)qo1C6J$Fff@52{3_X9ieWY!@vYi zRHhJTft>8Cr2}zhEZmv9pw5in#`Fb}8TWzuBnSsW8kOb@+>90s0*qD+QjFFNN{qG) zI*fJ<CX5bXhe4_rQ@F!Sp$_9_&;&OxA+f;?8eLUlXPozoK~R7RG#3hSDI+M;f~HaK zXl-E#IL6?i1){ez{V`(&jp&K8f(QCQy$x4URwK|zA3szaG}H&G9Rq}!{(*=1ctJXa znHjb*fXspq6&ufDPzGs%c2+<}2qW=9#)u<zW`voUz@~wQn?0d=gqc}Dh9ao~&2;H* zWe5V*ERj|m`^?zEQwl<o9HMMSpfR6q%xvKK0a5ma|KB14)Cn}9$mqww&gjn|$QZz2 z${5IC<qu#2CWh!x+I(!x+iX%NWHlfiZ?*A!7o=2F65&t&B+wXBd+iE;1%D+-6J# z2Rfwqy8{pOJ52YOIT=_O1R1QELG2D!hBFMT(D5En3Q=R=_`_hz$n%SVQ(su%Kd7D0 z&cMjX$j)HI&Ug*fuxI9GVBiyAV&-952Z<Sm+tAiYq}Fz3-dPN0pllGbo0&gy6SLrU zW^rE~VP>gq%rZK{%<|iq6?L{TD{1XwR%2k;#;gUJ_6u3gpa@ZI099=aQEduU9gYYV za7n^g%)riA!ob5=${@~I#vsR7&Y;Rz!C=JLz+leU$Y90T%;3t{!r;T$$`H)h#t^~S zffN*x@Suo<ray581!i+*3kD_zR|a7y3ltPA3`|zC0!*M8bf`xsLC5WsC0VyITWfD) zc9=1TK|+gpD-)}h&NgO8oo&o6I@_4tw=sKwoD8X;z(qad3<h4tnG8aVvlx^ZAw&I; zm_Zt-02lS3VNYeImCRn?DoUAYHM183D^gLf%(Q~p8`|q)W?)njU;@p*<8q%b*nKQS zxNji?FXJKxA;!fFN{ma9f{P07^JDghy3Y<;*sy77Z)Xkw1renA18F_%V_;?654IXo zgt5V6iVYl7Oae@xwE|GH_As!3>o-U3P0S(77;GRJjCG$G3uq8YP?A;F$X7>bFQ_fd z%qT0$vhe?VP%(_z#sE13Qp$px5{#7$?2J_m(u~y%ii}kZT8y;}4vh6+XF&=uq_I=x zDCS58Mh0mHHgFDt6ky7rzOWc%@QXPVmScGTGe|?K5#~_P=mT>!Xa<@&hB=mjfuVqb zn>mGnnK_L)lQ|pA%3;oDE(EiRnah~V!K@1AYUUa+tCqQexe?52Vs2$_2eUeuyP12y ztX}2`%#*;Z$;{K3r-NBDm}fK30kh^YFJxZCyqJN3L5hKyc?t6}<`oQ*%tFlk%qtxv NnYJ>mXI{l12>_}WRonmo diff --git a/bin/coursework/Square.class b/bin/coursework/Square.class index ef7b1b6f1ab6cf0ef440306e32c5b7b42af133f4..d244d5b2579894b681036730669ad911a3c75bf4 100644 GIT binary patch literal 2594 zcmX^0Z`VEs1_l#`GIj<gMh3y;{L-T0)bjkIZ2jQE(!`=vb_Nzk27#=^vPAuy#JqHU z|D>$c<Pt^(mg3B+R7M6y7e)roqSWM)#Ju#JR7M6lACS_t3jN~b)Vx&v;*7+CRQ({B zyfq^Ob4h*yBZDM1Wj>jCsn(1PtVNmW86}JiY)SbgCHc9G3@kaRX(fydtm#Ghr3H)( zBB*-ZL88`-3@pis>8Xqif<8!Ia867InaF07nU`5&$H>5<;i4JF$iU*9pOVVOz|0`V z!yv>U&d9*5p&7=`Aj!xegyMRz(Oe7?3}T!Nj0`e7415gyAeI~tg8+jdh^4^8z{<eJ z#lXm*#KWKrGKwXoD6yQ8fgj`<ztY^K)S{5YBv8l*`Q#@j=7c2{WrFxnL6(w?%wk3c zVPr=`!rhvYfxS4j1mpuo1`!Qp1t2kNkU!YdVG4vbG%-}LGw3oh$e?%#EjqXubQttO zL14hhz^>uq;^Lwi2J)2=4+A>`2PcCGgBd%6DI<dfiXjDwnRzAp&iOg{MLZ1V3>J(G ztl=J>A+C%JQm8S5q|h2<l@$+zHG>VrUv8N>IgAXl8rXCMfGn`q3<K%0<6*F85N2fH zD^4v5E-A{-P7TjYDal}GaAaf<M{yR!Z=hi3VsK#42l>N=hk=uU3&e8cVc>?aJa`y* zAS^E)23`g(Q1trnF!(a~F*0z2!ZRZ?C#5JgkC8!DLlfq@<oukR)Z~)P{Jdg)|D@v7 zqB2k%`eYWDShF((Ffs_DxWq3%C6${Yh#`cXA()Xt5h{n<3?7D1hA>73w#1YaM^LDU zX+(o9M$T~7no*1l9O<bg;55m|Ack-pB&UJJtr;13(o;*|`Hhi50bLy=nBXd`85y{X zQbBnc6mrF&po`^Uhyw*VDEYbOr9^<l5_lLAL1LWXXh<w70gEQ{Fr<J)p(-OmD${rv z(m`Tym641L?0Ko>!QkS8r#Q7FB)<R>lZ*^<8ZKa;!pjTfBm+tS4h(i6Lvwi;@<1sE zVkjsTFfy=~gAxKG18XuUB|=h25UAvU8O~pvTH*vQLSQ1i#i=DescF!J#K^!EoL^d$ zoa&Yd%Aeeje5VJBE(S#gMh0dE1_llWCQt@vU|?VZWeG6N$-o7sxuG-<l;(xfd<^_x zc>xAN1_lOh21W)U24Mz91`!4ZhBO9du(@(t+ZjZ)b~8vsZfB6%${?-9xRpUxOMNSY zyw)}b#f@P7Dhvz^QVeVi3=F~yEDQn+{0xE&A`Bu7k_@5@vJ7GjstgPaVhl_S3=DD% zY7FWOARq^JEh7UXg9d{p)J{7FCa@|tE$yugvIw)ez@m~2tPD~}X0gG|VgnU&3?Q?# z7_^~g>4W(U46IsP7-ToVoyo?)$iToL3pR!a%w~le!w4!Bp_+ez1A~EKgVt^aok%`D ztt|}lAiSMHZ!3eL))ofCO$^4{7%V|7zHJP)TDut>pvw5RGdOK!a0ZKjv>@qq+RESx z7l+G%)w_em!D{&+CU|OXVUXU&;LWj@!9S82WKnP=i`Etf=io??mt2D**|fGWxCckF zYi(ih4Bp8Q$ixti2r@MWP6h@BMFvp@B?fs0Wd?Ny6$VQNRfa$YHHJ(Eb%tsN4Tkj$ znn>ZW0Ui$F3=z<9Kn_G{^gz@>(u@eiNQNjZnhnu48(`HO4Nrbkp~=q?<Yo133^7_; z7+lr2F~mb@7(WRV2vBi%^=%BPP(Dc96U0Xk5)%dv1~Uc$26F}p1`7rS1}g>)25SZb z1{($o20I1^279o>AgR?68YB!1jtm(Lprpgdkjan*^<OvxGXo0)1A`#ciP<1pcN;?v z!b(1H7II?XU~py-U~mB&tpFAigc~i$kPkMRfkBX=fWd-+nSqg^5UV91|AQ=X#b${+ z0|$c#g8+jk(UufpwFDH1AWPh_S>nUM!Qjgvz~D!;CB;}R0mTf+5>ITF1Tt_i1ThFO N1QTsZ2{?O~0sspa@rwWe literal 2338 zcmX^0Z`VEs1_l#`Jaz^qMh3y;{L-T0)bjkIZ2jQE(!`=vb_Nzk27#=^vPAuy#JqHU z|D>$c<Pt^(mg3B+R7M6y7e)roqSWM)#Ju#JR7M6lACS_t3jN~b)Vx&v;*7+CRQ({B zyfq^Ob4h*yBZDM1Wj>jCsn(1PtVNmW86}JiY)SbgCHc9G3@kaRX(fydtm#Ghr3H)( zBB*-ZL88`-3~V-;d6^}4j0`LqE}CJC3@pz1DXClx%nTwt3<3<Ij10^gnqlk=;*1PJ zC{6_H=VB0J5aDECWRT)v;A7wiv1E7{SQ*&37#JDkco^hC2C$?QC6+TX@PpjxSDKrY zS`?C)1oE_yPkwS@PFP}5CWsFeWGTtWEM{a7_Q42JYjy@zMg|!aSD*zH7lR6eI>_A` zj124=E-o%EnqeSEY4I?yGjMP+=rHK9Gw3ohNT3)}keHcQqVJralV8NcpwD2y$iN!z z;Tht}$RLFpW=IOHK~@>@Fc>qKFfy<gr<S;7=HxIk$ZBBI5dgBlS~Co!$Bc);oI#M0 zfv-5VB)Fs~KRY!%Go>VhoxzfkK^(<d5Wj&!jf=s8K^^1|8y*Hu1}+fGj)#F8!gAnY z;DNB5co=vYxIl5@!o%Ro;Ks<not|3aoROK6Qk0s<$e^mB33FX?eojtma!F=>Ua`J^ zQgLcg87K;TGK)*B*%>?-83a*W;+LP2%FW=#;KR<~&B&k#mBVcY4}&j*A0q=>VoHi5 zC{)BWqQMp;X9a7`C`Ja3^wbh?LSkePLpTnS2f*Uij0`;KsU`57z{sG0t_~7Ra23{! z4BSPjpj-wDxnfYzh4L_jfr1<qO|E$<5g@S$9)?Je7$-Oy5{pW}qR~7IF(6T>%1DsP zI39+0kQiKLBqIZRUTS$TI3x2Er<R1|7eHc?kwH$w1?*FJPDV~LpafvSU<NWYm4_h> zlyV@3f>Hq^18X@bAuuwqCWBHUB!vWl@-)nF{^HaUCvfJ5iSQPumiVNmK@$=q16Oc< zX;E^jTP7%baYITXJy3KpC^9fIFf%YPurn}$@+SiW0~07qfN4$!E-=jvrFoz<FO=qE z;Adc90Hrzs20;c!1|bFphFAt>uz8YN+Zlwlb~A`YZfB6#${?wwzLh~*Ya4^?MzE0z z3=9ln46F<c3_=Vn3<3=N48jZ|3?d8?45AE*U^ylR1_nt6B?e^%5Re2rj*)>8RCGYC z`o+M_z{tSBut94#gGwYHpVk%zX%ODdpthAkQ)>%@<|YR1Z48DW7T-1oQ?1<$7Eon; z+Zn93GFXE}Kw6OWT5V;pg^R=G!0PS6;$XFW5EC4=wlGL;V{qo!%itc#46-OVl0|C^ zgLQButJW3<+u%qxtt|}p!IA7*TNoUJcQSY~F@z&RK#hTufdTAiNd|caDF$^0X$DIM z8HPXxS%ypoIfiNmd4}~23g8gof%p{~B8&|F3<1z^&}RUJ3j+hlM#&BE;AI1AP)5?s z3fCOS5QIguCc0*IteS)2kv$a}*`Q#sR^P@D0`jx^HimF04dX|F0s$&+ufB~T7Rm>S zJA(M=L88sT!Jx|^z@Wz<!JyBez+lLr!C=H-z+lW^!C=bZz+eV;m>2^nkvKwq#lYam zkiY=)H6ueJLlV?~;S9_SEDQ_`f}mJY-^P#(qII`1q#&&111DHZ1`Y-*1_1_Zu+a)& zF+sS|f(+?kqZt?k88R3Q7?>Ft88We2Vhgpz7Mmq@3>*yh3<3-eL|c-D)e=x3f_!3+ t%@St@4h9zn0R~s1Ey>1e2`FYjmN;Uw#Djr@!IMFN!HZ~1a=<Aw7XWXF#<Bna diff --git a/src/coursework/Cage.java b/src/coursework/Cage.java index c8db961..ac9a83f 100644 --- a/src/coursework/Cage.java +++ b/src/coursework/Cage.java @@ -1,8 +1,12 @@ package coursework; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; +import java.util.List; import javafx.scene.control.Label; +import javafx.scene.control.TextField; import javafx.scene.paint.Color; public class Cage { @@ -11,16 +15,116 @@ public class Cage { private int value; private String operator; private Square[] gridSquares; - private Label[][] cageLabels; + private TextField[] gridNumbers; + private Label[] cageLabels; public Cage(int[] squareIds, int value, String operator) { this.squareIds = squareIds; this.value = value; this.operator = operator; this.gridSquares = Main.getGridSquares(); + this.gridNumbers = Main.getGridNumbers(); this.cageLabels = Main.getCageLabels(); buildCage(); setCageInfo(); + setSquareCages(); + } + + private boolean plusOperator() { + String gridValue; + int cageVal = 0; + for (int id : squareIds) { + gridValue = gridNumbers[id].getText(); + if (!gridValue.equals("")) { + cageVal += Integer.parseInt(gridValue); + } + else { + return false; + } + } + if (cageVal == value) { + return false; + } + return true; + } + + private boolean multiplyOperator() { + String gridValue; + int cageVal = 1; + for (int id : squareIds) { + gridValue = gridNumbers[id].getText(); + if (!gridValue.equals("")) { + cageVal *= Integer.parseInt(gridValue); + } + else { + return false; + } + } + if (cageVal == value) { + return false; + } + return true; + } + + private boolean subtractOperator() { + String gridValue; + List<Integer> sortedCageValues = new ArrayList<Integer>(); + for (int id : squareIds) { + gridValue = gridNumbers[id].getText(); + if (gridValue.equals("")) { + return true; + } + else { + sortedCageValues.add(Integer.parseInt(gridValue)); + } + } + Collections.sort(sortedCageValues); + int cageVal = sortedCageValues.get(0); + for (int i = 1; i < sortedCageValues.size() - 1; i++) { + cageVal -= sortedCageValues.get(i); + } + if (cageVal == value) { + return false; + } + return true; + } + + private boolean divideOperator() { + String gridValue; + List<Integer> sortedCageValues = new ArrayList<Integer>(); + for (int id : squareIds) { + gridValue = gridNumbers[id].getText(); + if (gridValue.equals("")) { + return true; + } + else { + sortedCageValues.add(Integer.parseInt(gridValue)); + } + } + Collections.sort(sortedCageValues); + int cageVal = sortedCageValues.get(0); + for (int i = 1; i < sortedCageValues.size() - 1; i++) { + cageVal /= sortedCageValues.get(i); + } + if (cageVal == value) { + return false; + } + return true; + } + + public boolean checkCageValues() { + switch (operator) { + case "+": + return plusOperator(); + case "x": + return multiplyOperator(); + case "-": + return subtractOperator(); + case "�": + return divideOperator(); + default: + return false; + } } public void buildCage() { @@ -39,16 +143,16 @@ public class Cage { final double WIDTH = 2; if (rowDiff == -1 && colDiff == 0) { - gridSquares[aCoord[0]*Main.N + aCoord[1]].setRightStroke(WIDTH, Color.LIGHTGREY); + gridSquares[aCoord[0]*Main.N + aCoord[1]].setRightStroke(WIDTH, Color.GREY); } else if (rowDiff == 1 && colDiff == 0) { - gridSquares[aCoord[0]*Main.N + aCoord[1]].setLeftStroke(WIDTH, Color.LIGHTGREY); + gridSquares[aCoord[0]*Main.N + aCoord[1]].setLeftStroke(WIDTH, Color.GREY); } else if (rowDiff == 0 && colDiff == -1) { - gridSquares[aCoord[0]*Main.N + aCoord[1]].setBottomStroke(WIDTH, Color.LIGHTGREY); + gridSquares[aCoord[0]*Main.N + aCoord[1]].setBottomStroke(WIDTH, Color.GREY); } else if (rowDiff == 0 && colDiff == 1) { - gridSquares[aCoord[0]*Main.N + aCoord[1]].setTopStroke(WIDTH, Color.LIGHTGREY); + gridSquares[aCoord[0]*Main.N + aCoord[1]].setTopStroke(WIDTH, Color.GREY); } } } @@ -59,9 +163,7 @@ public class Cage { if (squareIds.length > 1) Arrays.sort(squareIds); int minVal = squareIds[0]; - cageLabels[minVal][0].setText(value + " " + operator); - cageLabels[minVal][1].setText(value + " " + operator); - cageLabels[minVal][1].setVisible(false); + cageLabels[minVal].setText(value + operator); } public static int[] idToCoord(int id) { @@ -69,5 +171,15 @@ public class Cage { int col = id % Main.N; return new int[] {row, col}; } + + public void setSquareCages() { + for (Square square : gridSquares) { + square.setCage(this); + } + } + + public int[] getCageIds() { + return squareIds; + } } \ No newline at end of file diff --git a/src/coursework/Main.java b/src/coursework/Main.java index 09e4417..e068d7c 100644 --- a/src/coursework/Main.java +++ b/src/coursework/Main.java @@ -6,6 +6,7 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Stack; import java.util.Vector; @@ -53,18 +54,19 @@ public class Main extends Application { private static Square[] gridSquares = new Square[N*N]; - private TextField[] gridNumbers = new TextField[N*N]; - private static Label[][] cageLabels = new Label[N*N][2]; + private static TextField[] gridNumbers = new TextField[N*N]; + private static Label[] cageLabels = new Label[N*N]; private boolean[][] highlightedError = new boolean[N*N][3]; - private HBox[] gridHBoxes = new HBox[N*N]; + private VBox[] gridBoxes = new VBox[N*N]; private List<Cage> gridCages = new ArrayList<Cage>(); private boolean isWider; - private HBox previousHBox = null; + private Pane previousPane = null; private Square previousSquare = null; private boolean clearing = false; private boolean undoing = false; private boolean showMistakes = false; + private int fontSize; private Stack<GameState> undoStack = new Stack<GameState>(); private Stack<GameState> redoStack = new Stack<GameState>(); @@ -88,14 +90,18 @@ public class Main extends Application { private GridPane addToGridPane(GridPane gridPane, double size, int i, int j) { Square square = setupGridSquare(size); TextField textField = setupGridTextField(size); - HBox hbox = setupGridHBox(square, textField, i, j); + HBox hbox = new HBox(textField); + hbox.setAlignment(Pos.CENTER); + VBox vbox = setupGridVBox(square, i, j); + GridPane.setMargin(vbox, new Insets(2)); Group group = square.getGroup(); gridSquares[i*N + j] = square; gridNumbers[i*N + j] = textField; - + gridPane.add(group, j, i); gridPane.add(hbox, j, i); + gridPane.add(vbox, j, i); textField.textProperty().addListener((observable, oldValue, newValue) -> { if (!clearing && !undoing) { @@ -104,43 +110,71 @@ public class Main extends Application { undoButton.setDisable(false); } } - checkConstraints(textField, j, i); + checkConstraints(j, i); }); square.getRectangle().toFront(); return gridPane; } - private void checkConstraints(TextField textField, int col, int row) { - String value = textField.getText(); - boolean found = false; + private void checkConstraints(int col, int row) { + columnConstraint(row, col); + rowConstraint(row, col); + highlightCells(); + } + + private void rowConstraint(int row, int col) { + boolean repeat = false; + HashSet<String> rowValues = new HashSet<String>(); + String number; for (int i = 0; i < N; i++) { - if (!gridNumbers[row*N + i].getText().equals("")) { - if (gridNumbers[row*N + i].getText().equals(value) && i != col) { - highlightRow(row); - found = true; - break; - } + number = gridNumbers[row*N + i].getText(); + if (rowValues.contains(number) && !number.equals("")) { + repeat = true; + } + else { + rowValues.add(number); } } - if (!found) { + + if (!repeat) { clearRow(row); } - - found = false; + else { + highlightRow(row); + } + } + + private void columnConstraint(int row, int col) { + boolean repeat = false; + HashSet<String> colValues = new HashSet<String>(); + String number; for (int i = 0; i < N; i++) { - if (!gridNumbers[i*N + col].getText().equals("")) { - if (gridNumbers[i*N + col].getText().equals(value) && i != row) { - highlightColumn(col); - found = true; - break; - } + number = gridNumbers[i*N + col].getText(); + if (colValues.contains(number) && !number.equals("")) { + repeat = true; + } + else { + colValues.add(number); } } - if (!found) { + + if (!repeat) { clearColumn(col); } - highlightCells(); + else { + highlightColumn(col); + } + } + + private void cageConstraint(int row, int col) { + if (gridCages.size() > 0) { + Cage cage = gridSquares[row*N + col].getCage(); + boolean cageConstraintsValue = cage.checkCageValues(); + for (int id : cage.getCageIds()) { + highlightedError[id][2] = cageConstraintsValue; + } + } } private void clearRow(int row) { @@ -170,51 +204,47 @@ public class Main extends Application { private void highlightCells() { for (int i = 0; i < N*N; i++) { if ((highlightedError[i][0] || highlightedError[i][1] || highlightedError[i][2]) && showMistakes) { - gridHBoxes[i].setStyle("-fx-background-color: rgba(255,0,20,0.4);"); + gridBoxes[i].setStyle("-fx-background-color: rgba(255,0,0,0.5);"); } else { - gridHBoxes[i].setStyle("-fx-background-color: rgba(255,0,20,0);"); + gridBoxes[i].setStyle("-fx-background-color: rgba(255,0,0,0);"); } } } - private HBox setupGridHBox(Square square, TextField textField, int i, int j) { - HBox hbox = new HBox(); + private VBox setupGridVBox(Square square, int i, int j) { VBox vbox = new VBox(); Label cageInfoLabel = new Label(""); - Label balanceLabel = new Label(""); - cageLabels[i*N + j][0] = cageInfoLabel; - cageLabels[i*N + j][1] = balanceLabel; + cageLabels[i*N + j] = cageInfoLabel; - vbox.getChildren().addAll(cageInfoLabel, textField, balanceLabel); - vbox.setAlignment(Pos.CENTER); - hbox.getChildren().add(vbox); - hbox.setAlignment(Pos.CENTER); - gridHBoxes[i*N + j] = hbox; - hboxClickSquareEvent(i, j, square); + vbox.getChildren().addAll(cageInfoLabel); + vbox.setStyle("-fx-border-width: 0px;"); + vbox.setPadding(new Insets(5)); + gridBoxes[i*N + j] = vbox; + paneClickSquareEvent(i, j, square); - return hbox; + return vbox; } private Square setupGridSquare(double size) { + final double WIDTH = 3; Square square = new Square(size); - square.setTopStroke(3, Color.BLACK); - square.setBottomStroke(3, Color.BLACK); - square.setLeftStroke(3, Color.BLACK); - square.setRightStroke(3, Color.BLACK); + square.setTopStroke(WIDTH, Color.BLACK); + square.setBottomStroke(WIDTH, Color.BLACK); + square.setLeftStroke(WIDTH, Color.BLACK); + square.setRightStroke(WIDTH, Color.BLACK); square.resizeLines(size); return square; } private TextField setupGridTextField(double size) { - final double PERCENT = 0.7; TextField textField = new TextField(); textField.setMinWidth(size/4); - textField.setPrefSize(size*PERCENT, size*PERCENT); + textField.setPrefSize(size*0.9, size*0.9); textField.setAlignment(Pos.CENTER); - textField.setStyle("-fx-focus-color: transparent;"); - textField.setStyle("-fx-text-box-border: transparent;"); + textField.setPadding(new Insets(5)); + textField.setStyle("-fx-focus-color: transparent; -fx-text-box-border: transparent; -fx-background-color: -fx-text-box-border, -fx-control-inner-background;"); return textField; } @@ -233,7 +263,6 @@ public class Main extends Application { showMistakesCheck.selectedProperty().addListener((obs, oldVal, newVal) -> { showMistakes = showMistakesCheck.isSelected(); - System.out.println(showMistakes + ", " + showMistakesCheck.isSelected()); highlightCells(); }); @@ -274,7 +303,8 @@ public class Main extends Application { int value = Integer.parseInt(splitLine[0].substring(0, splitLine[0].length()- 1)); String operator = splitLine[0].substring(splitLine[0].length() - 1); - new Cage(ids, value, operator); + Cage cage = new Cage(ids, value, operator); + gridCages.add(cage); } @@ -329,37 +359,36 @@ public class Main extends Application { return bottomHBox; } - private void hboxClickSquareEvent(int i, int j, Square square) { - gridHBoxes[i*N + j].addEventHandler(MouseEvent.MOUSE_CLICKED, e -> { - if (previousHBox != null) { - int previousIndex = getIndexOf(previousHBox); - if (highlightedError[previousIndex][0] || highlightedError[previousIndex][1] || highlightedError[previousIndex][2]) { - previousHBox.setStyle("-fx-background-color: rgba(255,0,20,0.4); -fx-border-width:0px;"); + private void paneClickSquareEvent(int i, int j, Square square) { + gridBoxes[i*N + j].addEventHandler(MouseEvent.MOUSE_CLICKED, e -> { + if (previousPane != null) { + int previousIndex = getIndexOf(previousPane); + if ((highlightedError[previousIndex][0] || highlightedError[previousIndex][1] || highlightedError[previousIndex][2]) && showMistakes) { + previousPane.setStyle("-fx-background-color: rgba(255,0,20,0.5); -fx-border-width: 0px;"); } else { - previousHBox.setStyle("-fx-border-width:0px;"); + previousPane.setStyle("-fx-background-color: rgba(255,0,20,0); -fx-border-width: 0px;"); } } - - if (highlightedError[i*N + j][0] || highlightedError[i*N + j][1] || highlightedError[i*N + j][2]) { - gridHBoxes[i*N + j].setStyle("-fx-background-color: rgba(255,0,20,0.4); -fx-border-color: #0016CD; -fx-border-width:3px;"); + if ((highlightedError[i*N + j][0] || highlightedError[i*N + j][1] || highlightedError[i*N + j][2]) && showMistakes) { + gridBoxes[i*N + j].setStyle("-fx-border-color: #2309FB; -fx-border-width: 2px; -fx-background-color: rgba(255,0,0,0.3);"); } else { - gridHBoxes[i*N + j].setStyle("-fx-border-color: #0016CD; -fx-border-width:3px;"); + gridBoxes[i*N + j].setStyle("-fx-border-color: #2309FB; -fx-border-width: 2px; -fx-background-color: rgba(255,0,0,0);"); } - - previousHBox = gridHBoxes[i*N + j]; + previousPane = gridBoxes[i*N + j]; previousSquare = square; for (TextField textField : gridNumbers) { textField.deselect(); } + gridNumbers[i*N + j].requestFocus(); }); } - private int getIndexOf(HBox hbox) { + private int getIndexOf(Pane pane) { for (int i = 0; i < N*N; i++) { - if (hbox.equals(gridHBoxes[i])) { + if (pane.equals(gridBoxes[i])) { return i; } } @@ -441,6 +470,7 @@ public class Main extends Application { double fontSize = cellWidth * 0.4; button.setPrefSize(cellWidth, cellWidth); + button.setMaxSize(150, 150); button.setStyle("-fx-font-size:"+fontSize+"pt"); button.setOnAction(e -> { numbersButtonClickEvent(button); @@ -460,8 +490,79 @@ public class Main extends Application { } } } - else { - // Some message about selecting a cell first + } + + private HBox setupFontSizeHBox() { + HBox hbox = new HBox(); + Button minus = new Button("-"); + Button font12 = new Button("Tiny"); + Button font16 = new Button("Small"); + Button font20 = new Button("Medium"); + Button font24 = new Button("Large"); + Button font28 = new Button("Huge"); + Button plus = new Button("+"); + + plus.setStyle("-fx-font-size:28px;"); + plus.setOnAction(e -> { + changeFontSize(fontSize + 1, minus, plus); + }); + minus.setStyle("-fx-font-size:12px;"); + minus.setOnAction(e -> { + changeFontSize(fontSize - 1, minus, plus); + }); + + font12.setStyle("-fx-font-size:12px;"); + font12.setOnAction(e -> { + changeFontSize(12, minus, plus); + }); + + font16.setStyle("-fx-font-size:16px;"); + font16.setOnAction(e -> { + changeFontSize(16, minus, plus); + }); + + font20.setStyle("-fx-font-size:20px;"); + font20.setOnAction(e -> { + changeFontSize(20, minus, plus); + }); + + font24.setStyle("-fx-font-size:24px;"); + font24.setOnAction(e -> { + changeFontSize(24, minus, plus); + }); + + font28.setStyle("-fx-font-size:28px;"); + font28.setOnAction(e -> { + changeFontSize(28, minus, plus); + }); + + hbox.getChildren().addAll(minus, font12, font16, font20, font24, font28, plus); + hbox.setSpacing(10); + hbox.setAlignment(Pos.CENTER); + return hbox; + } + + private void changeFontSize(int size, Button minus, Button plus) { + fontSize = size; + for (TextField textField : gridNumbers) { + textField.setStyle("-fx-focus-color: transparent; -fx-text-box-border: transparent;" + + "-fx-background-color: -fx-text-box-border, -fx-control-inner-background;" + + "-fx-font-size:" + size + ";"); + } + for (Label label : cageLabels) { + label.setStyle("-fx-font-size:" + size + ";"); + } + if (fontSize == 10) { + minus.setDisable(true); + } + else if (fontSize > 10) { + minus.setDisable(false); + } + if (fontSize == 30) { + plus.setDisable(true); + } + else if (fontSize < 30) { + plus.setDisable(false); } } @@ -469,32 +570,38 @@ public class Main extends Application { return gridSquares; } - public static Label[][] getCageLabels() { + public static Label[] getCageLabels() { return cageLabels; } + public static TextField[] getGridNumbers() { + return gridNumbers; + } + @Override public void start(Stage stage) throws Exception { VBox vBox = new VBox(); - scene = new Scene(vBox,500 + 50*N,500 + 50*N); + scene = new Scene(vBox,400+50*N,450+50*N); vBox.setSpacing(10); - vBox.setPadding(new Insets(20, 20, 20, 20)); + vBox.setPadding(new Insets(20)); vBox.setAlignment(Pos.CENTER); GridPane gridPane = setupGrid(); undoStack.push(new GameState(GameState.getCurrentGameState(gridNumbers))); + fontSize = (int) gridNumbers[0].getFont().getSize(); + HBox fontSizeHBox = setupFontSizeHBox(); HBox topHBox = setupTopHBox(); HBox centerHBox = setupCenterHBox(); HBox bottomHBox = setupBottomHBox(); - vBox.getChildren().addAll(topHBox, gridPane, centerHBox, bottomHBox); + vBox.getChildren().addAll(topHBox, gridPane, centerHBox, bottomHBox, fontSizeHBox); stageWidthResizeEvent(stage, gridPane); stageHeightResizeEvent(stage, gridPane); - stage.setMinWidth(400 + 50*N); - stage.setMinHeight(400 + 50*N); + stage.setMinWidth(500 + 50*N); + stage.setMinHeight(500 + 50*(N+1)); stage.setScene(scene); stage.setTitle("Mathdoku"); stage.show(); diff --git a/src/coursework/Square.java b/src/coursework/Square.java index c441424..8aa589a 100644 --- a/src/coursework/Square.java +++ b/src/coursework/Square.java @@ -14,12 +14,21 @@ public class Square { private Line bottom; private Line left; private Group group = new Group(); + private Cage cage = null; public Square(double size) { this.size = size; draw(); } + public void setCage(Cage cage) { + this.cage = cage; + } + + public Cage getCage() { + return cage; + } + public void draw() { rectangle = new Rectangle(0, 0, size, size); rectangle.setFill(Color.WHITE); -- GitLab