From e3c9c309851598a4da7336f34ed18095dbe8fb59 Mon Sep 17 00:00:00 2001 From: Kanken Date: Wed, 18 Jan 2023 10:51:31 +0100 Subject: [PATCH] working code and tostring --- .../UserInterfaceState.xcuserstate | Bin 43289 -> 42792 bytes 4forcesPack/Sources/4forcesPack/Board.swift | 35 +++++++++++++++--- .../Tests/4forcesPackTests/BoardTests.swift | 3 +- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/4forces.xcworkspace/xcuserdata/yorickgeoffre.xcuserdatad/UserInterfaceState.xcuserstate b/4forces.xcworkspace/xcuserdata/yorickgeoffre.xcuserdatad/UserInterfaceState.xcuserstate index 1a764e81e2c1e9ecdb08ac798267636991195aef..ef502cb1b413bfb7277204ecccb908d742a90631 100644 GIT binary patch delta 19840 zcmbV!cR&8a4JF zV>HFYUSjMqi7m!N6BEn3vkS(2-}nA_51nE6_TM?@o_1$=?+jdb3eL|1%?t9C`s-yI zWLsq)%eKjO%l0og7ivBP3bKnLgqGr&yH z4HkmsUb|);12i+ z{0yFgXW$R;CwLBCf>)4)6yzWe2f%@F5VV5Ua4;MO9icn)hS6{g9IJujU<@1&C%{-3 z2NU3Am<%&v7A%3Kund;N3RnqMuoYHmXYOT9oa$(WINeG&LU@% z-Q+xSKDmHgNWM!hC0CIfNXJjw| z^_cpVdPe<0{Y^8poYtd_Xk*%(wxF%)!L$uMoVKT3X*W864y1$VU^;}>gwv69E?qz? z=@Pn>uB26TEv=@f(v9>qx|MFDr_(d&ne<$`i(Wu4q~E0%)9=$C&^zc)=$-T~dN;j? z-b?SJ_tOXHgY;4QB>e^bEq$84OkbhDqi@r9=oj=$`W5|}kuiXQ48f2L#n24T7&Dg4 z0LE6s*fGNyH^!ZbX2vjMnQ=@EGoG2i#4>TrL}n5*g-K^Jm^>z*DP_u-az@S6FM)NoGf+bms9n9LWLs(nZjvdMlV~4Z$tOM)Fy0SiO2ph_d zU=!ISHknOfQ`s~&oy}k~*(^4j&1Xwk6c|BgAH{eb9f&3uembc@b zc^BT5_vQWgSU!%Q$WP+q`2>D4KZQ@^llWvlozLTo_+q|_ujXs`Ccc^P;5+#l{7el$ zpI^Yg!!P0A=U4Ho`E~pzehdEzzmwm?AL0-5NBE2UCH^vhh5wGf%74#a_0< zZ@G`$UmhS2kw?l$%g4&i6XmJ$G=;*0cd6fmqf*7^3qBgNcsmw7l#KlvT(dV9@$=*%gU94r&wh% zL`*mEC$fZWaiPIkkh#6k&;x)B@g1XCRJsr+q>00fCs0X3vXCm)8ar59d)bau<<%5; zlvLI#Yt-?|5{1&Kq#&e5)es`CH%|4JodAYHqL3g=PE9PXQRWrcdY=VypodZ1)7HgE zb$vy^R$G)J2AOydwFeF<6Q@Mg)Z{hx0(;p?Q_XAL&l%bKvJZeWa1rO2xC2*lkBP6n zJMhS!I3=!5ormeA?XwEFOT97!3za_JUO|OEzWJiD>CiY|5GHe35Bz{X2mpZ~2n2%= z5DG>Jxk8?hFDQfpK`9gpMMCj<5Dp?hq%2>S1xCqoK{Oa6lnA9lnP4y23FX3Yp<=sW zIs*V}@mo_1+GDgbzphA3&>JLr>e1p9xq~=G4_EO%;&OAtpf->WGC(HCl4(GW;3`xJ z)k2L>D>w=24?&*HUS{prU|W>4?mcXH2;Oc&Z$gZIEv@ILrJ z=n!TKvxIKZ(5A$26<8yUx?1S$0c(XBqQ++Mc4ojk&~Ov@NUGQ@%?nAZai3-jL$bqo)6TpEh#5*CO@trNB5q~dYDc037ANf^EWUxKf|*McZ465bKs zT@Ahg--6TN8)31qM0ihFEMXungDc{%!6=a8r2y%{)Kgd4BAh=Y#Ek z*^B~?_rNdG@b|$3@DMx_mJ2I{l|s*I@EH6Go`A%j+C~1W8RvOcxD@gv4wyGNbiP zEUj#ZJGi)c`2>W7M@5f|opgp_IlaWHJaute306K+$CXs7dwF?Azk0}1l%-5j)k&(t z2%a%8G%^-%4s~#PF|zQKy^##}Hnr$AGk?2zQlhd}U28;~88C3ro5r`U;HK6?dI#IQ z-Lzi`8Ifn~h7QvO6TKJSL0qAn=|en&YpM~Lye38 zF7q~CH5eEA`uS_y8c1!I;POD@RYB&#qT6s=GIT_kwr((9_fG?HU4&;(>ypirEs}jG+bKIFJ0d$SJ1ILa`%WYKUUp0N z6p%n4m;iHNhZUkLj&DYR$ym+gf_zW}n!qd^(JaQBas`fIj^OC!1eW#FI9~Y;ynp~l zD8_I&bcQ2v5RwSfUE$}Ej4X?oKIGp$e{!TE21u=whB3ucL z2N6hw5Tl4#Vj?kxNYY`&0<8PV?)%;Mizw?;9Z(L9WiD%EpF(|T01cs$5H742HV7Mq zO>3Zuqy?clv=BCHHQ-0WR>^WYVoNv@n~t(76&BrzdG#eld1}$XA=yP2d)HxTPIfXU{I3&Z90^BZgqGTW z{`k{A;edp6xM=HWAr5vj5Jx!<7l$}Hh_@Wg#BRr_c1Hi{J)Dso0XPwGJ#dn+A6w&4 zr$DVP^)dX{3F3f}Z!V%%9@TqWYwd@2` z!a`Vt?eS;Aap80EhEs+Z<~+o*3Rc4!SPRv7!a7(Fyk#$7BWx0Do&Bx86i%>$O!z|h z>Kv|Zfzx0s)W}`{V_B#8sk5W=NnGi#HP~=EY|k+=mw1_{RuqrHx+tMeS<{%Ptf}aQ z9ipjA7%>aZ78_mch+a5HY;bW6?1GDAE^Dzo&V%#e0=N*0!YSb!;alOfa7H-078CMa zd@aG(QcT2i_&SfT3*u!LM={ma-f|$GEml?3Co-yXO0|WlgOlEhBt`r%lt5c(v^5N+Cn{`9tmJVUbmlTDk5g@B@B};wzkpxDui)446#NE$i#OyM;g)b)xFh@^+!cNleiD8b?g{sW2OHrz%)|@u zBD@4I<6Zk5yb8aE*Mx_drO$=GgujIs2uw#{CIZV4SdIX8`ErbmwSG&HvStdlD(d7C zWkZgU%Sfd-!hM|h+f8d6HiXV&`tVy3#rL2spOw7x#HIntw znJ_0TblX(RIAS2)7{nmq<(nlCgNfl-vK!yN703txFCF}_Y z!V%w{W%dY=2v7*9v>)0qlRVR-3rf_g8j?$G{ ztL@_ma6+UIDK7GMnTQ?#(T$aP6(tJ1?ik4|>lPXXxK+eRtX4-Oz#|ZbfI>*UM2scI z5i!JgnISO&E8IA&awie-L;^7xe@Y~h#HZd{!$J|TMPMibas);ofWO)xV0S_GhwM+; zbL?*aCHtF5AySDn*=r(0b^?I`2l~v&Vs+-AJgu4`<`P{QqmvWIl$0yual>AsTekA;g0sYYJkkQ$3qmAX zae(2GpI58Qz`tvh<$3CodZmCxUBhDk>k3fL9 zE^u(DZh|X-TPdU(gCB++daSeD{li`-Zb|)b5H}GBMj+(v{=WsfU^f-VWW+tfn(1Vl97tf3h(HV$Z9yh3m^WGTMg+-$ zec~3=M`>~>>5k=#97YZ&?MVmHk#r)RNf*+UbVDE(fj9&vA}|Socmxsh$Z?pGWDGf8x)4Z3 zAWe720_JaI*T2F9atanP5>K7cL*l73v4}ZNP9-z2gpg^(X#}#ckoA(8#5n}8Jo^h? z*##;^T?IC=vC7IKb+Iu&y??NLQmGXzvOp_Xxmd8sOs!yMizOrcH2%D;=?qvpnp^i+1bbEk{qL<3RQ(iUR71O(xX8A zRsf(-RjM(G)Qwf5hrg{jJkE5)|B4f`;&H^5SETgNO0aedkRrBk+2cvxXch3 zlb>f!oH9ADvPd~fRac3{4Euvv$B`$=FVZJY(VFZjN_8*!rEKL}-*xQxTB5`$1T;=U z>S@dkyd?x(@3Z8&{IL_>Z@Uj2vO zGZ1M1PkP^yX1R?($3OJGt0Q;k|0lVBA%Dk_0r{Bxl^p(r{0)Iw2+T%c4gzymlTXQK zL<9LJ0$m6!)Y_i+#TJhUSMoJQ;$D=D0u-bO1iBHJhroOU7Ockh?gVj8=7dcgR#yJv zO^@b*eLJ5rq;MqILm43;_E07WERsCN5tIe?7%58%J16fTu;h)yMp;oq{?iqtY-LW= zPz2r;upwM5c!|JkpoVg!T>q<~8*b=Y){Fs8zAlRlA%7jKQSaa^J0D-}US zV#h)&Dq2^Bio&kQTLogbmxUQMT4qQ^Q)47oq##e7H_4bG#PHFTz-9a9(RVdXqt;DF#)b|6IE5Xb&3{GUu#tYUUE$>Ru7{~6p{wXt7+`5Nf39(2%7ou zU3dVeOJ3oyAr>E)wi4~c5#j>zhI!x{MGa1A~c{FFLFoyX^Z zKT`K}?waOJ0;Wz^(0`|%Bhagp%5hXo)|*uMXe@E7sBzSI*-EUJq;LHjA(l$Peh3vu zO{6AK@l*menVLc+Qb|-Y0;>_g-tJliK15(00_zdjfWSrsHer8q^9H=v(x`MQgUY0` zsB9{S%BAw8jrS2E+z=6lh)6`lBccou<%p<6glc=r1PXXoQnivAQBhS?HHGca76i5; z@G%10R#R%Kj;g1yecFz|*9crk;CFFO>@A;GN=j!_8cIN52Ld~LsWxgl0=p47CV0N( z=~FZN%$4w$ z0|*>kOD!Q9sHN2V)Cbfu1h5&x&<-PT1c9Rne2R1JHzzu7UpyHA&b05q;`R1blV-x` zjnp=2^i9-e>LY3kwUxryK0^S62acy#U0QDWVHq=!F&I_sMsOval!*LsRgStuGqHd?@3@hFW z2wXzoA_5l>xcb(-K7I2J!}-$t&Z%rj{{ke*#SHw3`Wb=C2wdrLNX}-h)$p<(^Kd~I*CrEQ|MGWjgCvFGw4h@i_S(+AHksr1|T>A!5jqZ5bQwk zJp{KPcnrbI2tGsveo|z>ziF=MBjU3hqhPIwj?6T%c(Xa_;=bxXbBsc?)hly2@q4(JOip;doS32n7W zi)i`~mPz_Bf&=?vO8QeAQ_{y|C!`C(LD&zJZaAW(`{ndY`fD6d(qAEH-9w*3aIloJ zm_nbS&*R9DK8piNXd?xb^aUJH!Xf`NpaiS>N4rX2*9MgIH7THkb~vDX4K*n0abeh5R_C?UAml=$+H_#VnZ~iN`)N(*>A76PV7 zD+J>tz*bB>gB^zrOan8OX=Iw1W~POi#meUfJ(tZwMi>*rw!CEbran~g*HxMlAXVPtnNq3kZqzl1v1S@oR%q9aP zr+$bJm`4)ChX|^A7`&6JbP#`Io=J@QU1C(VmQjB&gAuI3!Ylq&Ze`89WMw*tueA`> zSTvbGB+-U7m{S7>(JYP>vrDphGAu#@-p0DQu(Kv?|J!b;1Z)ysuFoLe@><*6@CAvA%48c1bMuX0g~$$5dy7 zv}|b?$E&OrVeB|*N#Se+8_7noBiT{xXf~Q1!;VF;6Tuk>&O~q)g0m5vgWy~QyAbR~ zaNY(sMz>HlPR9y1L0ahiepW1e!-~ayE5!-<9yS-j1^p{k{7bIbQnnluoh?I9>|rrm z7HNsjRR$Ey$v#mOS)3gAWyj_oJu4rfHNdP<8PId-6 zlbyxRX6LYT*)A5NSc>5L2!4RzG6a_+xB|hI2=*Y@i{Ppa?EF4}i~0aAkpQml2Z%$3 zK3UtW1sKDwl>mN-;F^Ab8?dmk8`(|Lg&^K4xKg@fVY4)H>=QP2J1afO#O^?FeGj`6 z!3{dxd)Wgz+}KsexHn3;uz!wK|0dB(ZDq|KV?Wmc$KEpL>_=}mkbr;9UXp;HV!vU( zWlytb*t6_8_B?xmy@=pe1V2V_8-m*r#1nslAf9*^g1Zsivw^+b2mJd!;5Q}Ud;5VO zcmw>X7Wi297YX=d1o!m=|4pk3*{4hr`xI+I1o!Li7&uN8X&?Jy|7KrGuwNi}u!ntx z;2|w+4ssMm#SzjT!-0rzFGowt5Cjo8j`@6K#Y*XhU42lgdFx(S92rSr_zNWUMof@-7!L|K7`yTE*c}`Mk9E(hZ}?7 zIUU0BT%4A%T&$L{=OqN#dBu#qAWmqswo2qubO@8R2rs=|FCon0iY0{ETn?AZ<#G9( zf-B&ZTp?E^x;01$Zy|Vl16R_Au%ZuPwS@3aKf)j1AiS?bsF4r~2>#HIaJnSCPq_~1 z(!#r|yJLhd{Rro9T@pg96@KdB@P7JPhj1bHj>JPz;^94shwLGVhuARqOFXiApIfd& zxJ--i!P}CH>lLfHEfT^t+*AXdm&*nUOu34*^N_&b7_ z1c(7PqjfA)iZ(GQvcTF~Q;OQ1hT@OeMzFC?~p$$ceV2>ylO-?}>n zt!G5_!#>MlXRe3CkY4t17Z7|U!Jf=r;l9@~76+Di$G(;rcU@vEA^R`K#^{&+!R~NB z>WG13xnM-Vw|Ys$DtO5KDG}ol_Y3!!`;~jb{l@*yJ>{Npe;|TH1ceA15ey<&L~w}U z5g|u}9wPKNaM+{M%J@s}6*od=&jU;heAuizq9cqEVUA@M+Y-WJ`wE1G+z?ZPH$sGA zA2oPWOby2vgCn)iHG_Z?7c>U1FzyNH^Y7OA+2fOA*VrI%}O?-k*=eB;f=2Kt6~M=0o^U zegq%Jhw~AL7>I~Lh_FHgUeRDg;1vx)ge@ZM5HWNEAEhG+AFY!Q9@{X456k;VV*f@y zT(lH1Ns%a$iiqL;6v_CP$>Q_*0tvhV5e_}P5)qCP_=FN38!~LM_%bbcC(KbEdnQ;8 zoc{~FQC2_dTE1R~x=xGQ^{rkKYFEAm2lW=K_-TAAuR(-6B0Lb`xr#@88$TTpUWmXG zga}?aMmC~RyO~I|*J@_*b8$j~pN+E+gty?=%XjhJi10y#pWylS$@Lk2q0EpM`9)F+ zQe9G^lu{dIqlI<9Bf?jkXyf1I7wd9r%3l6moa@*2c#mHswftl5D}#32vLDI^{0eE> zWdYK>0n)rH`5uIyAs~YPV_rP#8h$PRVH%#dR(A?c1c@&@Mg&O56a0F91AeyPO@2>z zPQD5kZDhlubV{s1B(#KO)YS^QD{E1AW5{!{)K{~3Rr|C~R;pX9&bzeGe7 zB1R%&6v7WU5YdPjgNU(+7>9_M^)e^^6y9>*@~8PT{8?T)HLyg)cxksyKtwDe;t(+r z5tFvx>NEvj{Ez$tob2I$;(zAv@%IstfQZS6n1YDJ)%-*L5&sMS7~vykA{h}Wh)5Of zXD%Ma|0R36ivOE`!M{XA8X|HKp?Gt`AeYJUImRkEkV836Riq;#0}+|4uzc|a7 zoY>pPe7TJrKYg|qPi!lf*^GyBSG-%9lSlMRvQ^;OsPC2oBGSK@}crE3K)ygg%SU)QPsO7O{5eZ@`N z)90rGO)8U(Uqh+IF=7WZo0*GWL=o}pCrg;6IPAKFgQMS>XUw1YwUQUiD^|ur)|fSA z%~?x!5NnO!FR{h%mUy!@_#Khs>`xrY4dH^gXfBmY$FFT@{!BJ82d9Xg-V2!LL^+cqM+tqJ%HwD|i)t z&7zjCq^?=?G zy)eC8y$ZdldQEyQdaZhbUYlN*-aNepdZOMtdW-cm@9AyTJF54+zMj67zLUPIzPrAc zzK_12{uuo!`ic5U`YHOk`epiR{n`2p^q1>@sJ~VJ6aAz5pXqRl8pat;GE6X> zVwhx@Vwh%FZTOzy*M^Ub%!~#b4K*5Wb(c${&9ak_D)akg=;u_oWRz_{AD#kkG5-MG_urtycy z>y5V=pEkZ={L}=RkS4SVYhr9-V`6JE)MU7cw~4Qbze%7;wn>qR%0z84&7{-hW0RdG zH%;!DJU5k@>YLh|I+*&Jjxil)I^HzabfRgz>15MH(`3_B(=yWvQTRgM)(^76Zz;dwV5KB8t2TLbQ7fUzG2+K%IO^RiKWszlxWw~XgWtHVL z%T`N`C9>?cTx|KC<@=V)ELT{rv)o|0$?_x1t(My?Pg;I&`D}pk0Gk1J1BMN77~nL( zWkB?xU4zaHx<2UEpgV(p9Q5;``&P7-p_QAJhn1JrcUE_-^{vgU!>oI)w^(np-eJAV zdXM!!>kHP`tzTHb8Z6V;*x0z*_}K*51lfexjIfEe8EX?`Gr=a#W|B>zO_Pmi^O4Oy zoBcKiY!2C6vH8*Fp3MWBUu=H0`E7{75X&KcLjr~b+1A<$wzF*K*ml{@vt3}j)b<10 z<+dwrdu>I_9r{S&dAQ#&cx2l&eLv$U4&hf-DtZpcH`_6cI9@OS$1>my6i96 z|6u>v{)zqX_RsA9wExS2a$p=d2f2g3gQ0`5L#Ttoq0V8h!)k|*9d z7Y<)KeC2S;;X8+G4mTWbJN)4Aqr>kGPaU2){OL$JS~w1H9OP*2Xya(>IMi{tql06h zW3XeWW0+%vW0d14$7si~jxml^8pnl>yB)7OK6kQp8ts(glIU5?H^z;3({nR$^KlDx8{ro2Hr6fCEyXR(Ez>RA zE!VBpZI0V~w}ozt+}?A0-)))O3b$Pvx65vK-CnxAb_ec+JLS%}bMA6?eRo55V|P<` z7k4*z4|gwjA9p|Z0QX?`5$+N0Bi*Cj$GT^@&vakvzQ+B8`wb7;!`j2uW1>g3N2>?& znC{W(G1FtV$8wJkJvMoKf5_+3eZk+3GpNbGGMP&u-86J=b|| z@Z99N#dDkIC!V`KKl41{`K9M6&(oggJTG`&^1SW&hnK#Wm6xN}Sg#nbWUnl*TrY)J zp;v`hl~;|I+N<7cj@NRptzLV)4tss-bzI|h((6mF2i~l=n|HW(rgxQhi}zCRW!@{j zS9!1XUhlohdyDrr?=QVid7t(^=Y7HZviEmB`aTvuLwtt%*!wv7xca#Jg!qK{MEFGc zB>Lp}6!;YS6#F#$%=DS#)9o|g=UtyAK5Kl|`E2yr?6b#bpU(-Ob3WI6Zu;Eux$7J5 zJJwf|<(uz2)ff5B^_}Ot(07aPZr@|RCwX1}d|+x&L;?eyE@x8Lue-(kN`{XX;i-0zM* z;qT}l<6q$~`tS0;;QuthB)}@bCcrLWSb$rAe?X8XAT%I6ASz%~Ky<+5fTV!bfQ*3b zfZTv-0kZ?<1uP7BCtzv7vVfHVy#XHu90)ib@Oi+=fUg412iywyG2mXn!+<9NPXqo8 z_$yErXc#y&&^2&m;MlgUy01gWZBXgS~@& zgZ+bpf$g+@?A-y3RLw1Dh z3fUWSAmnh!(U4;y$3xDBTnM=way8_7$jy*fq4H3pP}5M0P^(azP`l7!p+2Ghp(8`b zhK>)73!NOA6q*{E9$FGw7dkg|bLiI4?V+E9?hf4-dNA}z=&{i6LvMuM4!s-tQ|SHB zhoR3xpNGB(eKkTpLSrz(XoSfKrxE@mf=1wnO-8&kqIbmV5g(4&FyfmLufxp4hK0F> zd4~Cf`GtjrrG{mMWru0P+QK@*W`@lP>keBGwkT|I*w(P^VLQY2gzXDE7 z--MkGyB2mc>~`1>VSk6S;qq{UaHH_S;lsln!(GDN!~Mbo!$ZRHqb-{7*lk?+!l@ej@yI__^?l;g`d&h2IRn7yfJbv+&mumJ!wwei36Law760lo7=d zr4bbos)(r(%@M5;LPS@@{D_4Siy}5e?26bMaUkMQ#8(mLBQ8aJ7jZ4(X2iXShY^n> zev5b(@nNhps86C!MtvD|De6Jg>ydDze59pjr1eOr zkzpgpjGP#g6q6d07o&=)kC_%TJ7z^pZ_JvQbuk-bK8pD`W=G7fn7uIvV$Q^zi@6wc zCFc8>8!@+I?#BEa^C0Gzm|w@Uj~_EWYyAB2z2gs!KRy1z_~#Sg1Zo01K|aA? zg5`uk69!MPoiJ>I{RG8?WfQ)h@G_QZkZsOGV!|})BPsd-2zZrig{>S)x@eku4$G=RFB@hX80+*ndV3=T>5S`GFurcBG zWJAs5;K>Dvn-cdV?oT|Fcr@{|#LpAYC02lK5r0YpHlb$5KNP3+Nlc{7jc}()8ZTa#J!& zem8kV@}cD8$#;`qq!_2zqzp;1O&OZvnG%!|nxY9$iAour5|lN$pBqnz}M|bL!UA?WsFc z_oVJiJ&}4o^-}70sn=3(rru6{occ12Ok>jcH2pNQG|RL>X@k>-q`9RgG4Tc!_6ADnKRJ}lin-6!2IJup2ay*_<XE$UwWlzJ8y}y&aBztN02ieQBd$Lz&ugzYUy)k=p_Ll6gvhU{@=6L5M zhibER35yhv9For^t+y^H;d1B#=I#}+3Rrxj-w=M)zd z7ZsNlmurffi)R)uD_&W=s(5Yj`r=K+TZ*?8e^R`=cwh0i#b=Ap7hf#CTzs|odhyNT z+r@W_e=5FL!jw3aj4vrKnP0NAC~Yd8Rw|TEFYPGpE!|SOqjXp4-qJ&*M@v5|{k&9jq4aX;-O~G|k4k?neOCIs z^hN2bGX1haWu9d|W&UMBWuax^Wl?3L%f^&uUqe^Y*@{CxSv@*Cwpm)|dcSpG}-ujRj0$SSA` zwnAQERAE|SQ87SM;aK5P5m*shF{xs5MN&m-MMgz-MP5ZgMNvg*g{GpdqP?QCVrIph zitdW}6$>lgsaRa`Ud7Ie^A*o4ttulbm6fw9*HwOAd8hJW<>SiVDxX%qQZXt{C0FUI z3{}P|8sCrawQte$GUtLjMU)@;UQr%iTqk4X|Sp9DGd(|IQFRxx%-CMn-dRz4; z)w`?rRUfFnqN)C|`a$(C)laJbsQ#<^W%cVCgBs%+o0?%Y4mHj-9yQ)Iel-C#(KVB6 zifT%0Dr%}~YHR9i8f#i=G&OBC9W_g9mes7N>8V*&v$ke^&BmI|HCt=8)$FJ_UGuos ztTv!Fy;i7QUHfV6t=iXWRxMW>sEyPE)kD?xYA3a;+C#1JQv0YQ)Fai=>T&7`>Ns_& zxCmOzJ_^RQXhSLpa8y-(Joa#GOlQgw)>WZnKPQBF#8f_XK z8(kXR8$BC?8lxIVH;!!_-x$|8sWG83yD_h^ps}d2w6VN#R^z*k?>8=Q>}g!vxV~{y z<427L8oy}#rtwVU`Nk`a-#6Z9yw&(?9-u!pVfEN1}mlpRHuNME7pq9{J z%e9spEw@|lw*1_3zvWTOIF)-kOyt+A~WTT@zd zTNSN^ttGAHt(C1+t540Z}<@gFX^j^7%+gI@-HCj5zC27MvCLNcU} zjF2g^Km(B#3PRCnJc>i{C<&#a43ve+Q6*|d0-BCAooEi~MhlRLdeIiN6YW9!(IIpk zokU-uZ_sJ~QD^?TGHk>ZtFS)-k<>uW_h=I)+*WbPN5xnIw{I`@aUKh3>2_rcufb6?DT)djl9F1pLG%cRS!%c5&Y zmu=V3F4wNeu2EfMx?;LwyC!u_?n>%P?aJuN?#k_|=u&mnbk%ho>pIY+BKFIstXV!g_ I$>ux!AA8Tj!~g&Q delta 20081 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 diff --git a/4forcesPack/Sources/4forcesPack/Board.swift b/4forcesPack/Sources/4forcesPack/Board.swift index 8daf431..edccba3 100644 --- a/4forcesPack/Sources/4forcesPack/Board.swift +++ b/4forcesPack/Sources/4forcesPack/Board.swift @@ -8,15 +8,25 @@ import Foundation public struct Board { - private let nbRows = 4 - private let nbColumn = 4 + private var nbRows = 4 + private var nbColumn = 4 private var grid: [[Int?]] public init(){ grid = Array(repeating: Array( repeating: nil, count: nbRows), count: nbColumn) } - public init(input: [[Int?]]){ + public init?(nbRows: Int, nbCol: Int){ + guard (nbRows < 1 || nbCol < 1) else { + return nil + } + self.nbColumn = nbCol + self.nbRows = nbRows + grid = Array(repeating: Array( repeating: nil, count: nbRows), count: nbColumn) + } + + public init?(input: [[Int?]]){ + guard input[0][0] != nil else {return nil} //inutile grid = input } @@ -33,8 +43,8 @@ public struct Board { public mutating func insertPeice(id: Int, row: Int) -> Bool{ if(isFull()){ - //return false - }; + return false + } var colToInsert: Int = nbColumn-1 @@ -51,7 +61,7 @@ public struct Board { } print("jeton ok: ",colToInsert) - return insertPeice(id: id, row: row, col: colToInsert) && isFull(); + return insertPeice(id: id, row: row, col: colToInsert) || isFull(); } public func isFull()-> Bool{ @@ -72,4 +82,17 @@ public struct Board { return grid[row][col] } } + + public func toString() -> String{ + var str: String = "" + str += String(repeating: "_", count: (nbColumn*2)+1) + "\n" + for collNum in 0...nbColumn-1{ //parcours de la grille du bas vers le haut + for rowNum in 0...nbRows-1{ + str += String("│"+String(grid[rowNum][collNum]!)) + } + str += String("│\n") + } + str += String(repeating: "¯", count: (nbColumn*2)+1) + "\n" + return str + } } diff --git a/4forcesPack/Tests/4forcesPackTests/BoardTests.swift b/4forcesPack/Tests/4forcesPackTests/BoardTests.swift index 61d97ec..a4e2175 100644 --- a/4forcesPack/Tests/4forcesPackTests/BoardTests.swift +++ b/4forcesPack/Tests/4forcesPackTests/BoardTests.swift @@ -9,10 +9,11 @@ final class _forcesPackTests: XCTestCase { for col in 0...3{ for n in 0...3{ print("----------------------------\niteration", col*4+n) - XCTAssertTrue(b.insertPeice(id: 611, row: col)) + XCTAssertTrue(b.insertPeice(id: 9, row: col)) } } XCTAssertTrue(b.isFull()) + print(b.toString()) } }