From bf2ecb7de57c242ef2dfbbcc16bfac60438bcbf2 Mon Sep 17 00:00:00 2001 From: marcinljablonski Date: Mon, 29 Apr 2019 06:52:57 +0200 Subject: [PATCH] . --- Trac.py | 11 ++- __pycache__/Cucumber.cpython-37.pyc | Bin 0 -> 2154 bytes __pycache__/Plant.cpython-37.pyc | Bin 0 -> 740 bytes __pycache__/Point.cpython-37.pyc | Bin 0 -> 923 bytes __pycache__/Tomato.cpython-37.pyc | Bin 0 -> 2124 bytes __pycache__/Trac.cpython-37.pyc | Bin 0 -> 1219 bytes env.py | 143 ++++++++++++++++++++++++++++ tractor.py | 55 +++++++++++ 8 files changed, 205 insertions(+), 4 deletions(-) create mode 100644 __pycache__/Cucumber.cpython-37.pyc create mode 100644 __pycache__/Plant.cpython-37.pyc create mode 100644 __pycache__/Point.cpython-37.pyc create mode 100644 __pycache__/Tomato.cpython-37.pyc create mode 100644 __pycache__/Trac.cpython-37.pyc create mode 100644 env.py create mode 100644 tractor.py diff --git a/Trac.py b/Trac.py index fcd73c3..68f1f67 100644 --- a/Trac.py +++ b/Trac.py @@ -15,12 +15,15 @@ class Trac: else: return '<' - # def set_rotation(self, rotation): - # self.__rotation = rotation + def set_rotation(self, rotation): + self.__rotation = rotation - # def set_position(self, position): - # self.__position.set_cord(position) + def set_position(self, position): + self.__position.set_cord(position) def get_position(self): return self.__position + def get_rotation(self): + return self.__rotation + diff --git a/__pycache__/Cucumber.cpython-37.pyc b/__pycache__/Cucumber.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8912969d6afacab8ddd449a884b39c8c713f427 GIT binary patch literal 2154 zcmbVNPmdcl6u0MJX0ypQo9Uy+dV6*%#Go@6q~u2_Lbet!0QwtxP;XU~`Ic9WqzKK$e5S-{wz z)L9k}$}`mb0fc0dr)9m%Ehh8?@ol^$A8`Z7T4%Z3cm269U_(Kh6^Y@rQhTkfFUlDA|BZBy=I z*RBZ<&j;t@S4s~!7N{?A7{bQ>o)3$tGsM zHkxNiDpGZ!Qgg31ELG($>@0I<&1$DzHH_oeqFnJ}eLXU)R!m{-)Yj7~mQ#e#%T;>v zJJTH;@$aa2mW@?!9P2?c>Ald|P>qUduh8+R$aHUc`cJ=~nh+FBl0pbdoxBUdc(CzZ z?p8CF-fNL_G08^mJ18?YWO-BaBhnDXAtHCcMxK5G9nl+lwLYRY3}AaC-6KXhiT-k| zFMW&!s1(&kKXMFz-JesMkeV6)R4X+h{Tuz39o742OfXexn*A6#`VPAKZ89}9t_ss3 zi8hHX5-k!95<3tP*SAO~3QMsI%`{I{A@b??RhE)DCo^&6@s9mGr^7FAR}8JZ2LzQ0 zwG~GX(V4Md*^K|jIcdDooKmyr<^9MtEvW_waIOSpzd%5BVc_&zOh6&iEHNji4~$ijExp5E?G%$l+y}+`gu} z{2VBVSJSPfDy~|ZoTvpr{Vwbq5H+ED4|RcXhY;>p2&=<_jq8z?8EL{tGPAO(u&tRMdaCf%2e2dDV9fD{X8q3%yZGR*A(uw#F^fA6UfB z0`a`$)h!XzFF@Y_TOYvb6VwHpd&K753g?wRLrasm*zVAd(3jywcnGgN z0vi)|iCQYe1}EK5?)STM&inm{0J-7YEvJOMxR3(JULHzf87 z@NbBLH3T+CASB7CAQ=->uocNX;RzqKF9Oj49f%#M4_z=S^V$|LxFOWo<^tICKv*0{ zpP?0`vvhelDrIiu;JTWXvXZqO*zv>+Drv_`#MB+6%5Gv(TxzW}xP2qb`&XiUX!&`Z zj8!F*D%ZuNPDWZi%Bfu>R_9ZzbkZO?nJrxOAT2kG>Q0q-2!p@~UGB9B-@&2@Kn(R? z&}%G?nZ{|3)(zTL1nBYYq?mTVS|f>CBUm3 PMJ_yT2cBW&2Qc{pQIMb@ literal 0 HcmV?d00001 diff --git a/__pycache__/Point.cpython-37.pyc b/__pycache__/Point.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94894d1782f7007d9af798278fbc3253aaad866e GIT binary patch literal 923 zcmbVLyH4vs5S?Ay$&v?1w}Kx)a)TR61PBVc2#H%oNUO+WAdtkcHWEhZ;Ai*|KEf>( z_3duO92*CL03jxtGvgiaoOw8V{eFi;R{uU8?ebH=HV6IrL(VQ$iU3o%-QU=cwre|q^LS3qxQWawTESa2?ew;dfAZH}_e?2-& zr%5y&xp+K_4qbYlT;xTRyU|6Sx~M8(5 zd-5=+bErDOq|_kP4mn&P5GvP#k9ulY60bC;Np4Xpf*F$0g0Bg^;{#_k8e9Nh&7>-( zFGvDpx&dFq(5*YF&VQEvn;xq41^WLaeetWsI!wahTYNV|UC*$M;KxB`uY+7c9UoWM z1P7tPl4ql7Vr|*6cAE0_1b)xjtLxFEjyU{3To-`0TpzFucw? zwCr1mSYU-Xa!8W%MjW~1l84@-8u{pJRHp#FPg~SLU#BLu&&z31s9?oA>+7*2Z!IvvI1eAdf#G|p4qEAIOFi<;ps3}iqj?IwLLzG_GH6?Dd*#YvL>6gv7EOnsfF>N;SZ zL#=mNG+FGh*kaL!2&L|@&J+}451MJ5#JS35lONKAS7z+W40*C`tLL=kS*PUZ+;_l0 zxo}@GbQ{K8{37P^S1DPOmF5(hy{+tru4z#`KxngAarSlCVx!6e)2$phVQlW<(tHOa zr<>RC^5J02Tx9qraDfKuS+j)Aa~A{V*E1I$f;yL9;x39qgeN(6^lfPP0>+LkLge-} zzul+6z?_M;DAL=xk#7dclQj?Tk zCakxV`tfCy6f=6CkG{d;77NaP%}H#dr|+=F2d}&m`z!H>q&ZC7>`xTPpov-wd^A)$ ai@#Fyw_}Zq_AtR$1+a&lUm5$hoPPk@%EDIw literal 0 HcmV?d00001 diff --git a/__pycache__/Trac.cpython-37.pyc b/__pycache__/Trac.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..38c3cbd2d6969777832859571346f5fbbd2db2c4 GIT binary patch literal 1219 zcma)4&2G~`5Z+na$;Ne3Kp;RMZXC>kNSvbzfe^Q-QaDA3mGKyG^W(C1krL(BK1h4y z#v5?sA@<6NSICK(bsZAaBF5So&(7|Av){~%ZZ{Mp-^(9wzeyo}veSr1KhJ5Ek4T|F zn2MPg3lOgbO7zYIdZ%&>=#NAk{Gu}=1{)j}`MgTmYlQOFc?R^83A!Q15&`9z7<=fU zPu9l(TVw-lqaxeF4u)jgxQ7v0gVaw|!t@0kJO048LT!>Rx2`yKw zJrr~khOuwB5UW0Bl}-zTc3*Qct&fW`ukvEP*)TvY>sztvt$)qYwpAnuOFRao!pXZgsf&(Q~r;%{(O>5>xhXci@D8;c`|od@hi-IRy+Y)ipR@vr+AfoRe|zV fs675$WJrDCjyq@Ts>|fYQw{1;4w!96RwRD|= 0 and x < len(field) \ + and y >= 0 and y < len(field[0]) \ + and not field[x][y]: + return True + return False + + +if __name__ == "__main__": + + field = initialize_field() + tractor = Trac('S', Point((0,0))) + + async def handle_echo(reader, writer): + data = await reader.readline() + message = data.decode().split() + + if message[0] == "rotate": + tractor.set_rotation(message[1]) + writer.write("OK\n".encode()) + elif try_move(field, tractor): + x = tractor.get_position().get_x() + y = tractor.get_position().get_y() + rotation = tractor.get_rotation() + if rotation == 'N': + x -= 1 + elif rotation == 'S': + x += 1 + elif rotation == 'W': + y -= 1 + else: + y += 1 + tractor.set_position((x,y)) + writer.write("OK\n".encode()) + else: + writer.write("FAIL\n".encode()) + if sys.platform == "win32": + os.system("cls") + else: + os.system("clear") + print_field(field, tractor) + # print(tractor.get_position().get_x()) + # print(tractor.get_position().get_y()) + # print(tractor.get_rotation()) + update_state(field) + await writer.drain() + + writer.close() + + async def main(): + server = await asyncio.start_server( + handle_echo, '127.0.0.1', 8888) + + addr = server.sockets[0].getsockname() + + async with server: + await server.serve_forever() + + asyncio.run(main()) diff --git a/tractor.py b/tractor.py new file mode 100644 index 0000000..1c89628 --- /dev/null +++ b/tractor.py @@ -0,0 +1,55 @@ +import asyncio +import sys +import time + +def heuristic(a, b): + (x1, y1) = a + (x2, y2) = b + return abs(x1 - x2) + abs(y1 - y2) + + +async def tractor(): + graph = ['N', 'W', 'S', 'E'] + graph_index = 0 + current_rotation = 'S' + start = (0,0) + goal = (10,6) + + frontier = PriorityQueue() + frontier.put(start, 0) + came_from = {} + cost_so_far = {} + came_from[start] = None + cost_so_far[start] = 0 + + while not frontier.empty(): + is_possible = False + while not is_possible: + graph_index = (graph_index + 1) % 4 + + + current = frontier.get() + if current == goal: + break + + for next in + new_cost = cost_so_far[current] + 1 + if next not in cost_so_far or new_cost < cost_so_far[next]: + cost_so_far[next] = new_cost + priority = new_cost + heuristic(goal, next) + frontier.put(next, priority) + came_from[next] = current + reader, writer = await asyncio.open_connection( + '127.0.0.1', 8888) + + writer.write("move XD\n".encode()) + data = await reader.readline() + sys.stdout.write(data.decode()) + time.sleep(0.7) + + writer.write("rotate E\n".encode()) + data = await reader.readline() + sys.stdout.write(data.decode()) + time.sleep(0.7) + writer.close() +asyncio.run(tractor())