-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path12.py
63 lines (57 loc) · 2.19 KB
/
12.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import os
from collections import namedtuple
Dir=namedtuple('Dir',['command','value'])
class Ship:
def __init__(self,nav,wp=[0,0]):
self.heading=90
self.position=[0,0]
self.nav=nav
self.wp=wp
def distance(self):
return abs(self.position[0])+abs(self.position[1])
def navigate(self):
for n in nav:
if n.command=='N' or ( n.command=='F' and self.heading==0) :
self.position[1]+=n.value
elif n.command=='E' or ( n.command=='F' and self.heading==90):
self.position[0]+=n.value
elif n.command=='S' or ( n.command=='F' and self.heading==180):
self.position[1]-=n.value
elif n.command=='W' or ( n.command=='F' and self.heading==270):
self.position[0]-=n.value
elif n.command=='R':
self.heading=(self.heading+n.value)%360
elif n.command=='L':
self.heading=(self.heading-n.value)%360
def navigate_wp(self):
for n in nav:
if n.command=='N':
self.wp[1]+=n.value
elif n.command=='E':
self.wp[0]+=n.value
elif n.command=='S':
self.wp[1]-=n.value
elif n.command=='W':
self.wp[0]-=n.value
elif n.command=='R':
for _ in range(n.value//90):
self.wp=[self.wp[1],-self.wp[0]]
elif n.command=='L':
for _ in range(n.value//90):
self.wp=[-self.wp[1],self.wp[0]]
elif n.command=='F':
self.position=[self.position[0]+self.wp[0]*n.value,self.position[1]+self.wp[1]*n.value]
#self.wp=[self.position[0]+self.wp[0],self.position[1]+self.wp[1]]
#print (f"command: {n} position: {self.position} wp: {self.wp}")
nav=[]
with open(os.path.join(os.path.dirname(os.path.abspath(__file__)),__file__.replace('.py','.in')),'r',encoding='utf8') as f:
for l in f:
l=l.strip()
nav.append(Dir(l[0],int(l[1:])))
print (nav)
s=Ship(nav=nav)
s.navigate()
print(s.distance())
s=Ship(nav=nav,wp=[10,1])
s.navigate_wp()
print(s.distance())