From fd64b52fa3f797ebdf6e70bbd97e78330b91eab5 Mon Sep 17 00:00:00 2001
From: Erik Hjalmarsson <erihj832@student.liu.se>
Date: Wed, 20 Sep 2023 16:28:03 +0200
Subject: [PATCH] Cheeky Lab1

---
 .../project/tddc17/MyAgentProgram.class       | Bin 8634 -> 9087 bytes
 .../project/tddc17/MyAgentState.class         | Bin 2551 -> 2551 bytes
 .../project/tddc17/MyVacuumAgent.class        | Bin 380 -> 380 bytes
 .../project/tddc17/MyVacuumAgent.java         | 537 ++++++++++--------
 Lab1/lab1_workspace/project/tddc17/Node.class | Bin 463 -> 1304 bytes
 5 files changed, 304 insertions(+), 233 deletions(-)

diff --git a/Lab1/lab1_workspace/project/tddc17/MyAgentProgram.class b/Lab1/lab1_workspace/project/tddc17/MyAgentProgram.class
index 4c848dbc32b579b5812855b624077a5df6eaf5ad..528cf680de2ddbbf992e656023da0567ac68da9b 100644
GIT binary patch
literal 9087
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
NF)%XPf=0_2?Ep7lyifoD

literal 8634
zcmX^0Z`VEs1_mQW6LtnBMh4N6l$2ycbA8`R$Mn>^l7OQ8^rFOEb_Nzk27#=^vPAuy
z#JqHU|D>$c<PvrUHbw@S#LV18{p9?jRQ*Jd4t->Oj0~cgd6^}7nTa_;iFqmcxsJ&t
znfZCej0}vPj0^%rV6pi0)V$Q9#FG3XMg}1tuqCA>nK}9p9oCEt0+}Ts`ON%0=ls&V
zlGGwb2G-(|#FA7-22meW_XdN6tr;0u3rkZ=QyCcqk<1GO30X5Ta0X|l=Ovbu7Ns&W
zXrs&9_+a=4>||>@Yeok4)ST4Z)VvZ#1_@ls7#Vo-QY%UV@{2P;K4oO!g}Kl#KPA<g
zk%2q8w5TXGuLQ(pWZ)`FEh#O^^T^LlWn>VBI0hWTPWkycsfl^kj10UW^IS5EQo-(E
zWZ+0E%Fipw1cd^!?}AGble4WE85AIffI|>0W`p7Yus4cQ6O%JiQy3XIi%SxVpiTh=
zX;BFy17j2<c$2dk8Q5$<(PziVz^tJe#>l|poS%})#lXy<#>1e*pv=j@$e_W)z|O$I
z&Y%TLA7G0iQOCug$)E;Oq|3v=$-o6->GLpfgOnRGG6-XdIW7hRhz=7T1|9}pb_O#>
z1`$Mx@X5@}PEGO2EH2?<Foh_z<YC}r;Adw5g)G!SP{?vISV83Nco;+&L_t<N@Gyum
zh;lJFF}ScZI5RQ`g3Uz^Y#s(z1~*0q_OisB(p3L6Mg}pBC{0LkA}g~7ndZU6AkH8G
zVtMf}NP@iN!^pr7HWC~H;GpMX@P@d;pNBz;K^mkwkcUAQ!V2bLkb}4^l!rl{K>;Ki
z&cmR{AkE0Y?~|FA>Q|bZlv)&$n3R(W${6{{i8*13MVTNzRFI`4BeR&1K^zvtsF~K9
zkwG#yzbrK*9}*qGptwdPOnVKCG@O}RkfZNXnU|QGnH-Q>l$=^nVy%gx3X+GdL9rXp
z!;rv`$jHDBN~4~jjKQMesp$!d#$+Cb6oynr2ENjQl*E!$guNO>+8f5nV8D>h!;rzi
z!N|Z5E?eSLVA%ka2(x$?vKew18935YOPq5Oi;Ec<gf)=k3oK|2GA56QAs=LnAjFuQ
z#Nv|pL~wrMWGG}PW@jj3WH3Qw{M5X%%%c1}P*&H^$t*2POfD_W)%WoX4Fj`W5z;&i
zB@Duh3<8eMA)fwz@gbo>e(^r8ZXqCJ%Xk>dL6U;Vl0lyC9$?u@9)>EAtT0s8*FVfP
z-pxNK+%d?7k%7Gc68ww|su<yqEtVJ=*dYF4WZ(rSJ>SFvXd+=xtw>ES1r?UYm?2Lv
zmf0Da7#WliK?4pzeJoDkVqj!w;bDkjh~;ExW9VRKXor;u;Jg!DSzMBu%fryg(8b8W
zoL^c3D!akiB{N??peQr1B)Fs~H8IzkgQ16!!8@QRKRLCyI5RI@0U8p;3W;eYsYMDU
z8L0}O_)~y*D>FY&AwNw4XFAu=<YMS!n841^&&VK*#XcT}i42oK;SF*^P97tJs0LDw
z4=yRn%uBb{3<JgI6ds1DpcvzZ##nHuvo|}#bVdeou(=R#f;BjmX6B@%7I84lWMp8f
zu;pTy#xNUHVon03#ko8T^FV1)034L@74Zeox&owZ0T07MhDD&*EGS6LOJQV?(eOl0
z(hvth&9?^WSi-}wlwlbo14l_dM3Rv~1SJ<hM6Ed(RxmO!Roa4_u!@IaHIfr5;ZERS
zSj)&D0Lskp3P-_Kfs<i9!$x+74U7!(SQCO@zJCFvP~c(M#ITu>fz{7H-amkmK@oe}
zMX0ytVA#sYz>-v&TfoK8$grJ<VF$xbMh2er)Dp*%lA_EcaJp4PjuJ@I!x}kIph6rB
zyBQf+QZkE5I2iUaGO%Ri=caNn>}O=)geD;?1yFz;1O@RSMh0C1rb5CE5!6l$M|c>H
zG8|)M;7Nj1&S9W>0$evnfl9m+JPaopPBAiYLrT2x{Gyx`Mg}$wPft(HFpz>XJPc<U
zlo=WL3qXktEbo$<RGQAoV8w8rhv5P!N*F6Zyh}U`m%+SBP!)2Ohv6D1SXc^5i!(q1
zH+UFsGTdThU@pinK#y){V1P`y!^3cwK><{uWfo_aq^58%+-GFqafY-%6e<*K6*w3k
zGBR)~B<7_kR4UklgXb|Qc%GmI4<sy50v#fR2p(^SXFLqgLBYeGS?royP*Mph5nl2z
zykdCG$iSbHnp)tNSyWsSoSImaoB<9sPf(TjmWM%zL71E2J;O(Kh7TxpD7eAK!|;jW
zGb00YVoC~H=7joGGYX{nD-XjrkVP!TnN_JEfgd~!KS5!{R+I`V9M~CtGct&wCtpaa
z1v&ID55qr(|BMXW8Hsr*IjO$+WvRuC4APh-CPa%hs5vBwk-TBWDI)`80V4xDw5i9=
z$im1Vj&3(pEvR{$SDac@;+LA4o{^MaT2u^*Qb-|$Xi9)BRE8#5gfM#J4&*G(qRjLR
zXrqoJCp8Vq<j%|kw;VyuBSr?Uq|}Veyc7sW%m<}$QCW}*t~<CGyczj;82Lew%9;v^
zQg22<9!4Qhz_Jvire<?7Ff)qqFp7erh%L3SG%=@`lfi&doQF|@QIe5?wH%TOn4_aT
zxfmE3rFj@-7-bn5c#|_yld~ODvJ#WQ&1oeKSQ7^1Ae3|lYY2n1%kwZQFe)-K@FXYZ
zB$wtSmZZ957BMmipy~ExWMC;t%>~6kUTQhWL`DV<P@x84vgGBbq%tyaRlv(QMh31*
zIERZ-lTn+UQHzm*4^giBCYEIIFzSHXI?Rbl#f%JWDVaqf`4Nl^%qbuzK)8_{jE0O1
zV$d9xQ>g%I+k@&bP%JPqa0Ta=7A2>;Wr7=YzLk*H1h~JX2eOJmfq{{MnSqgkm4Tmu
z3DmA;U|?VZHJuq47#KkfXE4pfz{>yvd<^^yj0^%`HG&Kbplk#ZW)NWz1=C_sTAV=w
z%$H=~0Mk+o(r|q;3=E+5C<<Q=s!yIl0jypTMLib-1E}rKz{sG&z`*bp>|O?jcCGCU
zs#*eETN%`~b~9*3ZfDTm%AlhqXf<OigPzuI27}1$3`ScSjJ0+%m_}}AFyG2xp|zXA
zDsnr6%~l3m1k+xNc?W~zRt9%1=B*5#TDuv%Beyg7Ze{R8Far>(gS1$-GK3(c!Zv~f
zBZ7f}!3i8N`3x)!g$!H_MGT@0r3^9*Wen;Jl?+A<)eN=_H4GjMwG06abqt{l^$ZCN
z4Gh@~%?xD>EezERZ47M;`3#W^3=BLBj0_A6?F>;2(O|P<7-At_XH;NdW?*JuV3?z|
zg+WJvZ5u<Jtybg~26dJcP#|n!FxKA2kR&sU!9i;agE0tiVMt?1VK3OqkOt+=VGsbZ
zBDXN4u_r)<K?2(tGQ-)nGURSzDA*vwvVcJoBnZMF6B6JifJ8t_S;0z6H-Pvc3=(4j
zi&bo3U|?Wo0ELGg13v=;LmvYdLqCHE!vqEyhKURc43ij)7$!5=Fic_aWSGhj$uNx}
zmSH+W62lCJ5{8)!Eex|5IvD0K%wU)c4hxWv85rh3!ve&rW~gCcWZ+_$#8At?!N9~&
z$H2hA!NB~7!IM!~i-D1$o}mE}S}flfSQywD7?|U=wlJvAW8l%!KETkpouL`zYV}zR
zCTKx-fT3|4L((ROR-x`~480&<fiTEt>|mcw-mr<GbvMJbNTC_q8D@dxwlK`u#xQ>y
z!{TiWy)e1uaJiKja%&)Ro^T0}3-mydr>C`rL2niV`zD5U8$hn~)e+jVjbYmX1}8rq
zp<NJ`6^oA09w?I)X5GH+46}5$F&uz60^}%=_H7JFy4x5I&t%vL64}C#whEN1mV*dz
z>@YCMF)%PVGB7ZtfKnPr5eRPqCoJPF3@ceuKzxwjS++48U(S#T;)3uNhB+(=5XMRn
zg;3%K;({=eDPWZdCCVUa5C)k7wqXkciYbyTU{|Yv)POL;C=d^15F6MziXbisV=7?X
z#&8@YvyI_2)HHDr7lc9jVNt2Ig&|}nLyp!Kh9HpC7KS-n8O|YiE4MOS1QiD%T3Z;x
zK*HM?u7odVumN$mF<d{uU}eQ7$;Psk;WjKH?rmq7CCRph;oLTc`9cr2F+2isE+S%j
z3q#m8hNm<CAJEd;#_$4E&}?Dwgjk)nfI(Vo6GO#ThBsPU7%a55Fud8x@Q#Tgd^tlE
zRE5?S2G0~wB!>O}|Nk#E4ngr3#=yX!$-uw>qTzh4O$?=243p5>#87}Cj@4$6J9aXB
zVPu%cpr8fed}m}h!0-#C9pu1m41Yk>22g?pJ12sHfsu*9fq{WxDFZvhG6n&L<qYBs
zD;X3SRx#)>tY$D_Si|7Lu$IAtVKYMt!xn}HhOG=U8Fnx%X4u8BieWdyI)=Rrn;G^o
z>}A-`aDw3g!)1np3@;guFnnP+%J7@v7^4Ei2}TEolZ?&`rx}wO&M>AioMUWbIM3M0
zaFKB(!*#}u3^y1rG2CMOz;K80JHrFU{|pbA_!%BE2{Sxrl45wlq`~l#$&BF@lQqL@
zCU=I9OkND1n8FyoFvT!@Wol;l$kfa5muV`)f2PHZ3{0yS8JTu4GBNFDWM=xn$j0=Y
zk)4^9k%O6ok(-&Hk%w89QGi*6QIOe)QIy$^QJmS2QGz*)QIa{DQ3hOSc|eLCSfRxn
z&rr<>s!caDtzl$js9|7Y*vqttVJm|K12e-3rs)j386+537%nsQFzjWJU|?kmW6)(}
zVi09u0~c=k48j8DzZp{hGZZqgu`@8TGcvO?G_o@|K@bCjl9H0VhOCmAg}I5ih=>LQ
zBO@y#8v_%#HezCA2UVKP?hMQfYzz#Hf1ov>FO>F!(pD@m1}iklfl?a-;|`=ULmpiD
zGBC6;FffKlvOv^<@(ql=5>%93)PYK{By43k2jzhBlP*j=Wh=uuC<i1i3AGVy5|q6X
zr1|1<MpKy4U`eQz5J{-Xb3k@twFYE8L2FXBGF)8Fa1L$_$X+-P<T{u&NPYpSxd=5G
z<Sr-^;(NGn!0v+aKqf6`NJm%$3IiAqB#F%$klUbUqga!$mEj`H;5i`2oP+T|CTUBu
zf(k2b9Wbd2CP5|Pm2gl?g#}zQZ)4D9U|>{d;9%5X5Mb0~kYv<iP-4_&@L<$u2w^l}
zNMbZ($Y(TSsA4o`XlFEGn8awxFptrUVGW}>!+J(bhTV)-3?~__8LlzfFg#?mWq8ME
z$MBQUo{^Q&fl-*zkx`7%nNfw&h0%b~mC>5fjnRYAoiUivgE4{8lQECci?NE)o3WPB
zm$94Ck8wJqKjR|C0LJx<fsDHtgBXu91~Xn|3}Jl87|Hm8F^cgWV>IIz#u&!mjB()1
zWd}*eu*}8y2Q+-iz{tSC_=S;!K@^nk8Q(B+GKexTGe|N%X5?ZJWnf`YV!Xx3%^=Fa
z%E-e2ZDE0R$}lj3GnqOA>wg9hNd98*W@oU1BL;@w3~4Zw%)kihTtXTctPIcwhBY+r
z_&{l2EU^iyP_{4xY-8k|$-twvg&{y26f+=&0oxb_wlNCNV#);xgQE><4wlRbm9b)j
zWF~OM&bS{blY%Pt51>k&fq^j+mM%ca2gZgZQ&_qJCm$#WlzL!k5|XW8Jg^MZO0Zc_
zHY6u5XS9YH4wgj8!%(v!=0Q1N<Di)tnt-7^ung32uvt(x#L>$cF2OAVI~>LXX@i;#
z(gkHgTnF<5NCL)&7$*re9O5<@4`kMIhD?~zP)V4dwld((`A|QgS_IClaEm}?60$|$
zSY#B_-NJCrNOudvMNm7?7}QQ-UI0!de&GBIRVB#+QU)SX)bVO<Veo_GaF{|?utHWe
z10f2*r30+h0&S7{A-5p?wlO@N#gG9q71Gr4)6(6>C<Shrack*rWw2e&;0S6I1VE%g
zovAGhwp+mMC*v&)a~3ctX@LbUg5ATgash)NntG7@Hb%KMOl#nc2R2Z9lrf2cgE5&w
zfH8$ZnlY6@jWM0UfH8x?k};dXoiT?YfH9XLf-#RFkujeki?M*An6a2)24gA162>xy
zO^oFX`xz@3PBB(8++eI?c*0oC@PV<0;U8lyBO_xyBQIkEqcme9qXuIWqcLMMqa$Mr
zqc3ACV<cl6V>)9yV-{m4V+CUuV+&(9V?SdL;~d6b#ubcxjN2Id8ILedV7$OMk?}I)
zWX6Y#QyAYePG$VTIE{&waXOPA;|wNw#+gjIjI)?585b~xF)n0^XI#uw$GC*4gK-(t
za>nIM8yUATonqX@bcJy@(|yLhOs^RCF}-Kp&-97$ATtBwVP+-9Bg_Vjr<g4n&x6aj
zAW*lN*_r{;1LR;fW>jJj1$CI2wHcMcWn2VPB)GI=W=LcT0GD<w3|UO>;L?tjp_s`I
zT-vcQ-DikmQ~{TTpnj4+1J7RuOGwf7pCOKc9n_paD(fIJpb{_RHv<Hvs%rda&|qMO
zt7KsK!{ETqU}gJ@frEh&G&lk&4H;H2Ffp(&FfbTuBa%Xjt@aiMSTabl1NAIfS=Puf
zEnr|}TO-S|fPs~D4Kq9qFsLzbGB7Y+Vc=!F${@vfok5=Q27@BwO$If_TMQbEw;6O9
z?=a{y-UEk`7Q`}W7%?yyGOB{Zh?hZyQ4QQPlwuGE)o~2W;1Zsbf%z|kA|oRk8v`R~
zL<s8YOAJg5ObiSRW#F{RC<b!85y;W-tjMx}fde!`umL0mR>d$UWe1}M%X|h=G@)4x
zx*)9(MJtgM!GmB2qsA--4wfAZjvK&c!jeCO5-7?UpE1ZXK4(y3e92(S_=>@u@ijvf
z;~Rz?#`g?`j32??7K6AJ?(H(Dw?Wa%#=xSaqQb(!$f(PZ2=(6-21c+BV`*@Mj==z_
zt^hUYKqD%k4ul@F&2k2Q7MtY^Tp$)JlZ`ZbynJO)VEoRY#Q1|jmGKvYI^%B!EylkL
zI*k7q^qCkK44Igb9B2%8pfRH!D4~GkfSrL=frW*Ik%5s>pL7>8fm{f392dx$tjriL
zWa3~@VB%s>V&Y~{W#VN}XX0bfViI7`VG?A}XA)*GWD+C6g`lxnXc+!yU<QX_pY|q(
z(q#-9p!fx0++!ol8B(-2F%&Fg0QZWwFr>|5-~;Jk+scr(oIwu61YwW?kl~q446VY9
z2593BpaGfX3{u*g7%G-A2!k|$FsOO}jkSQ9bC7`+GtlT9lPm)}lN^I2lRSealOlsL
zlM;h1lQM%VlL~_elPW_LlNv)ZlLkXElNLiQlQu&ylO9rF^ueR6kD-=97}_XeXJFNl
RmJ$+UU}Q7`jYKgT0{{YgzZd`j

diff --git a/Lab1/lab1_workspace/project/tddc17/MyAgentState.class b/Lab1/lab1_workspace/project/tddc17/MyAgentState.class
index c02a85397d730129cfb9c257030d802811847a35..e05247deb676a8445d214307125589b0e451bc12 100644
GIT binary patch
delta 239
zcmew^{9Sm15*xFifZ$|Rwz-Kq3@i+y3<3;d45AF;3{ngd4Dt+;3@Qv#44Mqm40;SQ
z48{zy3>FM>47LpN3{DIR4DJj{3_c9X41o+P3}Fmf4ABgF3<(VS45<tT40#Ot3^fdT
z3>^%H3=<iQ7^X28PgZ8XqG`^+#bC)G$zaW3!(hwc#$d<b$>6{c%;3ln#^B75z~I7=
z%;3h5%iuj(fg_#OpMjGhU~&(~Q`-;*R)#PJE`|sOQHDqcS%xSEO@?R&LxvazTZUK$
nSB5x-K!$jRNQMN4RE9)`T!t`)YKCNnW`+=keumV^>o`3DGRGy~

delta 239
zcmew^{9Sm15*xFefZSwNwz-Mg3@i*H3<3<I45AET3{ni@4Dt*T3@Qwg44Mp540;UG
z48{yH3>FNs47Ln%3{DL44DJky3_c7>41o;F3}FnK4ABg_3<(T+45<wI40#NC3^fe8
z3>^#x3=<g)8KyB9O;%>VqG`s!#bCi8$za7`!(hYU#$e0f$zabA%;3Nf#^A(|z~Ib~
z%;3t9%iuLxfg_#OkAaiHe{v7UQ`=w$R)$apE{1RhQHBTxS%ydkO@=52LxyMuTZR}0
nSB6-IK!!MmNQQWZRE7kGT!v7FYKA0+W`<yfeuk9E>o`3DG4mzE

diff --git a/Lab1/lab1_workspace/project/tddc17/MyVacuumAgent.class b/Lab1/lab1_workspace/project/tddc17/MyVacuumAgent.class
index 13edb8714272dd0d9855c73eeabc94785155e9b3..31da853a6022d40c526c1f8bd0798769f03d9a2f 100644
GIT binary patch
delta 17
Ycmeyv^oMCfG$U&h12<Fi<OD_;060PgFaQ7m

delta 17
Ycmeyv^oMCfG$X4u12>b+<OD_;05o6(q5uE@

diff --git a/Lab1/lab1_workspace/project/tddc17/MyVacuumAgent.java b/Lab1/lab1_workspace/project/tddc17/MyVacuumAgent.java
index 5b5b2a5..ff252af 100644
--- a/Lab1/lab1_workspace/project/tddc17/MyVacuumAgent.java
+++ b/Lab1/lab1_workspace/project/tddc17/MyVacuumAgent.java
@@ -1,6 +1,7 @@
 package tddc17;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.Deque;
 import java.util.LinkedList;
 import java.util.List;
@@ -17,7 +18,7 @@ import java.util.Stack;
 
 class MyAgentState
 {
-	public int[][] world = new int[30][30];
+	public int[][] world = new int[17][17];
 	public int initialized = 0;
 	final int UNKNOWN 	= 0;
 	final int WALL 		= 1;
@@ -100,12 +101,94 @@ class MyAgentState
 	}
 }
 
-
-class Node{
+class GridPos {
 	int x;
 	int y;
-	boolean visited;
-	List<Node> neighbours = new ArrayList<Node>();
+	
+	public GridPos(int p_x, int p_y) {
+		x = p_x;
+		y = p_y;
+	}
+	
+	// To make hash sets work...
+		@Override
+		public int hashCode() {
+			final int prime = 31;
+			int result = 1;
+			result = prime * result + x;
+			result = prime * result + y;
+			return result;
+		}
+		
+		@Override
+		public boolean equals(Object obj) {
+		    if (this == obj)
+		        return true;
+		    if (obj == null)
+		        return false;
+		    if (getClass() != obj.getClass())
+		        return false;
+		    GridPos other = (GridPos) obj;
+		    if (x != other.x || y != other.y)
+		        return false;
+		    return true;
+		}
+
+	
+	
+}
+
+
+
+class Node{
+	Node parent;
+	GridPos aState;
+	
+	public Boolean isRoot() {
+		if (parent == null) {
+			return true;
+		}else {
+			return false;
+		}
+	}
+	
+	public Node(GridPos cState, Node parentNode) {
+		parent = parentNode;
+		aState = cState;
+	}
+	
+	public Node(GridPos cState) {
+		aState = cState;
+		parent = null;
+	}
+	
+	// To make hash sets work
+		@Override
+		public int hashCode() {
+			final int prime = 31;
+			int result = 1;
+			result = prime * result + ((aState == null) ? 0 : aState.hashCode());
+			return result;
+		}
+
+	    // To make hash sets work
+		@Override
+		public boolean equals(Object obj) {
+			if (this == obj)
+				return true;
+			if (obj == null)
+				return false;
+			if (getClass() != obj.getClass())
+				return false;
+			Node other = (Node) obj;
+			if (aState == null) {
+				if (other.aState != null)
+					return false;
+			} else if (!aState.equals(other.aState))
+				return false;
+			return true;
+		}
+
 }
 
 class MyAgentProgram implements AgentProgram {
@@ -120,18 +203,12 @@ class MyAgentProgram implements AgentProgram {
 
     Queue<Action> queue = new LinkedList<Action> ();
     Action element;
-    Node nextPosition = new Node();
-    Node currentNode = new Node();
-    Boolean returnHome = false;
-    int nextDirection = 0;
-    Stack<Node> frontier = new Stack<Node>();
-    Stack<Node> reached = new Stack<Node>();
     
-    //////////// New DFS ///////////////////
-	Node startNode = new Node();
-	boolean start = true;
-
-	Stack<Node> stack = new Stack<Node>();
+    Boolean start = true;
+    ////////////////////////////////////////
+    
+    public HashSet<GridPos> explored = new HashSet<GridPos>();
+    public Stack<Node> frontier = new Stack<Node>();
 
 	////////////////////////////////////////
 
@@ -178,7 +255,6 @@ class MyAgentProgram implements AgentProgram {
     	    	
     	System.out.println("x=" + state.agent_x_position);
     	System.out.println("y=" + state.agent_y_position);
-    	System.out.println("nextDirection = " + nextDirection);
     	
 		
 	    iterationCounter--;
@@ -228,51 +304,36 @@ class MyAgentProgram implements AgentProgram {
 
 	   }	
 	   
-	   if(start) {
-		   startNode.x = state.agent_x_position;
-		   startNode.y = state.agent_y_position;
-		   start = false;
-		   stack.push(startNode);
+	   if(bump) {
+		   Queue<Action> temp = queue;
+		   queue = ifBump();
+		   queue.addAll(temp);
 	   }
 	   
-	   
-	   /////////////////////////////////////////////////////////////////////////////
-	  
-		while(!stack.isEmpty()) {
-			Node current = stack.pop();
-			
-			current.visited = true;
-			System.out.println("Current x = " + current.x + " and y = " + current.y);
-			
-			
-		}
-			
-	   /////////////////////////////////////////////////////////////////////////////
-
-	   
-	   nextDirection = deepFirstSearch();
-	   
-	   if(nextDirection == state.agent_direction) {
-		   element = LIUVacuumEnvironment.ACTION_MOVE_FORWARD;
-		   queue.add(element);
-	   } else {
-		   switch(state.agent_direction-nextDirection) {
-			   case -1:
-			   case 3:
-				   element = LIUVacuumEnvironment.ACTION_TURN_RIGHT;
-				   queue.add(element);
-				   break;
-			   case 1: 
-			   case -3:
-				   element = LIUVacuumEnvironment.ACTION_TURN_LEFT;
-				   queue.add(element);
-				   break; 
-				  
+	   if(queue.size() > 0) {
+		   
+		   element = queue.remove();
+		   handleMoves(element);
+		   return element;
+	   }
+	 
+	   for(int i = 1; i<state.world.length;i++) {
+		   for(int j = 1; j <state.world[i].length; j++) {
+			   if(state.world[i][j] == state.UNKNOWN) {
+				   queue.clear();
+				   queue = walkToNode(new Node(new GridPos(i, j)));
+				    System.out.println("Goal node: x =" + i + " y= " + j );
+				    if(queue.size() > 0) {
+						   
+						   element = queue.remove();
+						   handleMoves(element);
+						   return element;
+					   }
+				   
+			   }
 		   }
-		   element = LIUVacuumEnvironment.ACTION_MOVE_FORWARD;
-		   queue.add(element);
 	   }
-	   
+
 	   
 	   if(queue.size() > 0) {
 		   
@@ -281,222 +342,232 @@ class MyAgentProgram implements AgentProgram {
 		   return element;
 	   }
 	   
-	   return NoOpAction.NO_OP;
+	   return LIUVacuumEnvironment.ACTION_SUCK;
+
 	   
 	}
 	
+	
 	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	//
 	// HERE STARTS THE METHODS
 	//
 	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	
-	public void insertNeighbours(Stack<Node> stack) {
-		Node rightNode = new Node();
-		Node leftNode = new Node();
-		Node infrontNode = new Node();
-		Node behindNode = new Node();
-
+	public Queue<Action> ifBump() {
+		Queue<Action> pathQueue = new LinkedList<Action>();
 		
-		switch(state.agent_direction) {
-		case MyAgentState.NORTH:
-			infrontNode.x=state.agent_x_position;
-			infrontNode.y=state.agent_y_position -1;
-			rightNode.x=state.agent_x_position +1;
-			rightNode.y=state.agent_y_position;
-			leftNode.x=state.agent_x_position -1;
-			leftNode.y=state.agent_y_position;
-			behindNode.x=state.agent_x_position;
-			behindNode.y=state.agent_y_position +1;
-			break;
-		case MyAgentState.SOUTH:
-			infrontNode.x=state.agent_x_position;
-			infrontNode.y=state.agent_y_position +1;
-			rightNode.x=state.agent_x_position -1;
-			rightNode.y=state.agent_y_position;
-			leftNode.x=state.agent_x_position +1;
-			leftNode.y=state.agent_y_position;
-			behindNode.x=state.agent_x_position;
-			behindNode.y=state.agent_y_position -1;
-			break;
-		case MyAgentState.EAST:
-			infrontNode.x=state.agent_x_position +1;
-			infrontNode.y=state.agent_y_position;
-			rightNode.x=state.agent_x_position;
-			rightNode.y=state.agent_y_position +1;
-			leftNode.x=state.agent_x_position;
-			leftNode.y=state.agent_y_position -1;
-			behindNode.x=state.agent_x_position-1;
-			behindNode.y=state.agent_y_position;
-			break;
-		case MyAgentState.WEST:
-			infrontNode.x=state.agent_x_position -1;
-			infrontNode.y=state.agent_y_position;
-			rightNode.x=state.agent_x_position;
-			rightNode.y=state.agent_y_position -1;
-			leftNode.x=state.agent_x_position;
-			leftNode.y=state.agent_y_position +1;
-			behindNode.x=state.agent_x_position +1;
-			behindNode.y=state.agent_y_position;
-			break;
+		pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT);
+		pathQueue.add(LIUVacuumEnvironment.ACTION_MOVE_FORWARD);
+		pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_LEFT);
+		pathQueue.add(LIUVacuumEnvironment.ACTION_MOVE_FORWARD);
 
-		}
-		
-		stack.push(behindNode);
-		stack.push(rightNode);
-		stack.push(leftNode);
-		stack.push(infrontNode);
+		return pathQueue;
 
 	}
+
 	
-	public int deepFirstSearch() {
-		
-		Node temp = new Node();
-		Node newNode = new Node();
-		newNode.x = state.agent_x_position;
-		newNode.y = state.agent_y_position;
+	public int calculateDir(Node node) {
+		int xDirection = node.aState.x - state.agent_x_position;
+		int yDirection = node.aState.y - state.agent_y_position;
 		
-		if(reached.empty()) {
-			reached.push(temp);
+		if(xDirection == 1) {
+			return MyAgentState.EAST;
+		} else if(xDirection == -1) {
+			return MyAgentState.WEST;
+		} else if (yDirection == 1) {
+			return MyAgentState.SOUTH;
+		} else {
+			return MyAgentState.NORTH;
 		}
-		//Checks if the new node has already been reached
-		if(!newNode.equals(reached.peek())) {
-			reached.push(newNode);
-			Node rightNode = new Node();
-			Node leftNode = new Node();
-			Node infrontNode = new Node();
-			Node behindNode = new Node();
-
+		
+		
+	}
+	
+	public Queue<Action> walkToNode(Node node){
+		Queue<Action> pathQueue = new LinkedList<Action>();
+		int diffX = state.agent_x_position-node.aState.x;
+		int diffY = state.agent_y_position-node.aState.y;
+		int nextDirection;
+		int directionFix = 0;
+		
+		if(diffX < 0) {
 			
-			switch(state.agent_direction) {
-			case MyAgentState.NORTH:
-				infrontNode.x=state.agent_x_position;
-				infrontNode.y=state.agent_y_position -1;
-				rightNode.x=state.agent_x_position +1;
-				rightNode.y=state.agent_y_position;
-				leftNode.x=state.agent_x_position -1;
-				leftNode.y=state.agent_y_position;
-				behindNode.x=state.agent_x_position;
-				behindNode.y=state.agent_y_position +1;
-				break;
-			case MyAgentState.SOUTH:
-				infrontNode.x=state.agent_x_position;
-				infrontNode.y=state.agent_y_position +1;
-				rightNode.x=state.agent_x_position -1;
-				rightNode.y=state.agent_y_position;
-				leftNode.x=state.agent_x_position +1;
-				leftNode.y=state.agent_y_position;
-				behindNode.x=state.agent_x_position;
-				behindNode.y=state.agent_y_position -1;
-				break;
-			case MyAgentState.EAST:
-				infrontNode.x=state.agent_x_position +1;
-				infrontNode.y=state.agent_y_position;
-				rightNode.x=state.agent_x_position;
-				rightNode.y=state.agent_y_position +1;
-				leftNode.x=state.agent_x_position;
-				leftNode.y=state.agent_y_position -1;
-				behindNode.x=state.agent_x_position-1;
-				behindNode.y=state.agent_y_position;
-				break;
-			case MyAgentState.WEST:
-				infrontNode.x=state.agent_x_position -1;
-				infrontNode.y=state.agent_y_position;
-				rightNode.x=state.agent_x_position;
-				rightNode.y=state.agent_y_position -1;
-				leftNode.x=state.agent_x_position;
-				leftNode.y=state.agent_y_position +1;
-				behindNode.x=state.agent_x_position +1;
-				behindNode.y=state.agent_y_position;
-				break;
+			nextDirection = MyAgentState.EAST;
+			if(!(state.agent_direction == nextDirection)) {
+				switch(state.agent_direction-nextDirection) {
+				
+				case -1:
+				case 3:
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT);
+					directionFix = 1;
+					break;
+				case 1:
+				case -3:
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_LEFT);
+					directionFix = -1;
+					break;
+				default:
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT);
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT);
 
+
+				}
 			}
-			
-			
-			if(state.world[rightNode.x][rightNode.y] == state.UNKNOWN) {
-				frontier.push(rightNode);
-			}
-			if(state.world[leftNode.x][leftNode.y] == state.UNKNOWN) {
-				frontier.push(leftNode);
-			}
-			if(state.world[infrontNode.x][infrontNode.y] == state.UNKNOWN) {
-				frontier.push(infrontNode);
-			}
-			
-			/*for (int i = 0; i <= 3; i++) {
-				if (state.world[state.agent_x_position + dirToX(i)][state.agent_y_position + dirToY(i)] == state.UNKNOWN) {
-					Node node = new Node();
-					node.x = state.agent_x_position + dirToX(i);
-					node.y = state.agent_y_position + dirToY(i);
-				    System.out.println("Counting = " + i);
-
-					frontier.push(node);	
+			System.out.println("Next Direction: ");
+
+		} else if (diffX > 0) {
+			nextDirection = MyAgentState.WEST;
+			if(!(state.agent_direction == nextDirection)) {
+				switch(state.agent_direction-nextDirection) {
+				case -1:
+				case 3:
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT);
+					directionFix = 1;
+
+					break;
+				case 1:
+				case -3:
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_LEFT);
+					directionFix = -1;
+
+					break;
+				default:
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT);
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT);
+
+
 				}
 			}
-			*/
 		}
-	    System.out.println("nextDirection = " + frontier);
 		
-		///////////////////////////////////////////
+		for(int i = 0; i < Math.abs(diffX); i++) {
+			pathQueue.add(LIUVacuumEnvironment.ACTION_MOVE_FORWARD);
+
+		}
+		
+		int newDirection = (state.agent_direction+directionFix)%4;
+		if(newDirection < 0) {
+			newDirection = 3;
+		}
 		
-		while (!frontier.isEmpty()) {
-			Node nextNode = frontier.pop();
+		if(diffY < 0) {
 			
-			if(checkAdjacent(nextNode)) {
-				nextPosition = nextNode;
-			} else {
-				
-				nextPosition = reached.pop();
-				//If popped node is the same node we are currently in
-				if(nextPosition.x == state.agent_x_position && nextPosition.y == state.agent_y_position) {
-					nextPosition = reached.pop();
+			nextDirection = MyAgentState.SOUTH;
+			if(!(newDirection == nextDirection)) {
+				switch(newDirection-nextDirection) {
+				case -1:
+				case 3:
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT);
+					break;
+				case 1:
+				case -3:
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_LEFT);
+					break;
+				default:
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT);
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT);
+
+
 				}
+			}
+		} else if (diffY > 0) {
+			nextDirection = MyAgentState.NORTH;
+			if(!(newDirection == nextDirection)) {
 				
-				
+				switch(newDirection-nextDirection) {
+				case -1:
+				case 3:
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT);
+					break;
+				case 1:
+				case -3:
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_LEFT);
+					break;
+				default:
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT);
+					pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT);
+
+
+				}
 			}
-			
-			return calculateDir(nextPosition);
-			
 		}
 		
-		//The final return statement when frontier is empty, will signal going home
-		return -1;
+		for(int i = 0; i < Math.abs(diffY); i++) {
+			pathQueue.add(LIUVacuumEnvironment.ACTION_MOVE_FORWARD);
+
+		}
 		
+		
+		return pathQueue;
 	}
 	
-	public int calculateDir(Node node) {
-		int xDirection = node.x - state.agent_x_position;
-		int yDirection = node.y - state.agent_y_position;
+	public ArrayList<GridPos> insertNeighbours(GridPos aState) {
 		
-		if(xDirection == 1) {
-			return MyAgentState.EAST;
-		} else if(xDirection == -1) {
-			return MyAgentState.WEST;
-		} else if (yDirection == 1) {
-			return MyAgentState.SOUTH;
-		} else {
-			return MyAgentState.NORTH;
+		GridPos rightNode;
+		GridPos leftNode;
+		GridPos infrontNode;
+		GridPos behindNode;
+
+
+		
+		switch(state.agent_direction) {
+		case MyAgentState.NORTH:
+			infrontNode = new GridPos(state.agent_x_position, state.agent_y_position -1);
+			rightNode = new GridPos(state.agent_x_position+1, state.agent_y_position);
+			leftNode = new GridPos(state.agent_x_position-1, state.agent_y_position);
+			behindNode = new GridPos(state.agent_x_position, state.agent_y_position +1);
+			break;
+		case MyAgentState.SOUTH:
+			infrontNode = new GridPos(state.agent_x_position, state.agent_y_position +1);
+			rightNode = new GridPos(state.agent_x_position-1, state.agent_y_position);
+			leftNode = new GridPos(state.agent_x_position+1, state.agent_y_position);
+			behindNode = new GridPos(state.agent_x_position, state.agent_y_position -1);
+			break;
+		case MyAgentState.EAST:
+			infrontNode = new GridPos(state.agent_x_position+1, state.agent_y_position);
+			rightNode = new GridPos(state.agent_x_position, state.agent_y_position+1);
+			leftNode = new GridPos(state.agent_x_position, state.agent_y_position-1);
+			behindNode = new GridPos(state.agent_x_position-1, state.agent_y_position);
+			break;
+			//West
+		default :
+			infrontNode = new GridPos(state.agent_x_position-1, state.agent_y_position);
+			rightNode = new GridPos(state.agent_x_position, state.agent_y_position-1);
+			leftNode = new GridPos(state.agent_x_position, state.agent_y_position+1);
+			behindNode = new GridPos(state.agent_x_position+1, state.agent_y_position);
+
 		}
 		
+		ArrayList<GridPos> list = new ArrayList<GridPos>();
+		ArrayList<GridPos> temp = new ArrayList<GridPos>();
 		
-	}
-	
-	//Checks if nextNode is adjacent to current position
-	public Boolean checkAdjacent(Node node) {
-		if(state.world[node.x][node.y] == state.WALL) {
-			return false;
+		list.add(behindNode);
+		list.add(leftNode);
+		list.add(rightNode);
+		list.add(infrontNode);
+		
+		
+
+		
+		for(GridPos zeroCheck: list) {
+			if(zeroCheck.x == 0 || zeroCheck.y == 0) {
+				temp.add(zeroCheck);
+			}
 		}
-		if((Math.abs(node.x-state.agent_x_position) == 1 ||
-		   Math.abs(node.x-state.agent_x_position) == 0) &&
-		  (Math.abs(node.y-state.agent_y_position) == 1 ||
-		   Math.abs(node.y-state.agent_y_position) == 0)) {
-			
-			
-			return true;
+		
+		for(GridPos remove: temp) {
+			list.remove(remove);
 		}
-		return false;	
+		
+		return list;
+		
+
 	}
 	
+	
+	
+	
 	public int dirToX(int dir) {
 		switch (dir) {
 		case 0: 
diff --git a/Lab1/lab1_workspace/project/tddc17/Node.class b/Lab1/lab1_workspace/project/tddc17/Node.class
index ea0dd47cc8f1a7b656fd215b394666b36a27a118..f2f51e56ba956043814f1686cec041e8df8a7114 100644
GIT binary patch
literal 1304
zcmX^0Z`VEs1_mPr3w8!3Mh5PZl$2ycbA7-3lvH*G7Dfhvti-ZJ{hY+SbbbG%tkmQZ
zMh3Qm#G=%^5=I7IA0*Y*j0|jv!6k_$sf-K)FbVgf%#?uqVvt;BaZrAK2_u83hNcg~
zOsD+(oYcfTYeohZ=lqmZP6kE>ULFQk1~x7Reg;8y1_4F}K@8PA3_=XTj125$i8-aI
z{%MR1Vj5A{4dwUA%uDqv%}q)z3Q0`LNo8aZ^2tw5%n3^@$^`MDf-EH&nZ=9@yul@j
z$=SY%1yEr&o6Nk-5<5l)1r2l$!T6wXvepdaVqj*F=3$UvkYQwC*3b+C`9qF}ft`Va
zk%2848Y*0na06*!WDv$MQZtN^fg>ZaI0F<AU}HSF7*rY5*%{Or8Tg<f4GmBp1|<e%
zMh4b`qRiY>Mg~StMh3Q`)Z)?{Q1ql0mL}#DgF+f9pdpcGtr-P!svZx6K7#=x14nvl
ziE~b3aWTj}$RP+8v<6vk#KWM?pu@<(oS&2h3Oz(*Kuu(1V9hVdNG)Py;0n$!ElN&x
z%LIqBZ)I3wa%pL<V|r>{i5^HBg8~C112Y2y0}}%SD2f?CfSrK@%wuHWWZ+_8WZ-6C
zVDMpJWME`qU=Y;W!oYK!frDiS1K$Q_5W&E}z|0`Rz`(!<HfRb1JHu249){@*q6`cS
zJP=I`Vhn5y3=HC6wTvJ^2?j~1$&n09V2%7*+Zm*^bha|^XlZX{klhG&6v$j51{MYe
zhS>}(409Mb8RjzZG0X#-tpL#mHJgEfpFy6118g5Zg8~B^0}}%yg9L*j)Ea*VCa@<V
z)_`o#V%*BWgKo_N1{Q{e44e#$82A_#gRK#RXv46E5ftB0!+W59kQb1*VX+mEm&wrD
z!XSH`ft`6d0~d(7jX@>BR%Q*@{|G;=U|?og$-v66ib0lPHP|wUpX8yIF*C?8XfS9p
zFfy<*NHJ(JXfiN?!%&ui=|6)A12a1VBO@aNBjbMtHW-HqBmhbtP?sHqy3A2adl>^O
z%Np(D46Mv+w6-zmYHwrET?*o8A7Ehg1v&CK1CP!Y2H9f_qReYRd=O_FgW)WYA{K<(
z%@}wY7#KD(urh37U}xCOz|F9QftO(`g9O7i1}TQ^4Dt*+7}OYcGUzhwV$f&U&0x#0
zhrym<FOvTpq5flFaAYuMFkxV1kY`Y0Fa^gMD2?ziu(GrA{9zDbXJF)KU}P`@rv-BW
D$Y|(Y

delta 350
zcmbQib)K2))W2Q(7#J9g8002$Y1T7VFfuTDGBPk$GBU82Wfo_aq^2-3Fh(&laOI_D
zre`GOmlhQ>G6?u&C6*=XmzHGa==)?Amsm40a0X|l=Ovbu7Ns&W$fHTy_>`oiBpaIR
z`{k#kTH9GOGO*cX=4F=HF)}b~XofK|usG+Zq;fGZ>oW-PFz_+(vonY=G6*B=a4afH
ztOQxa#URWe#L2+OAkM?U#lSuBjv+6K*^@n)wCh<I7#LU?*cd>79ZGXBaDuoXO$>|-
zJPZsBObomXj0_AQ>lhdr1Q-|?oEVtFA_7|583eU<GYCg+XAs@WAhr>#S^}(=nSp^J
kgMo!1hk>6VgF%vkfq@62he3)#nt_3VkwFGzF%yF<0F;eCbpQYW

-- 
GitLab