牛客华为HJ17_坐标移动

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
import sys, re 
set_asdw = set('ASDW')
set_num = set("1234567890")
set_all = set('ASDW1234567890')
distance = []
class test():
def __init__(self):
self.temp = []
self.j = 0
self.x_change = 0
self.y_change = 0
def judge(self,value):
self.x_change,self.y_change = 0,0 # 每一次 juged 都会 有一个可能的判断,根据true false来看 用不用而已。
if value == None: return False
i = 0
while i<len(value): # 只让 i 落在 字母上。
if value[i] not in set_asdw:
return False
if i == len(value)-1: # 保证 不是字母结尾。
return False
if value[i+1] not in set_num:
return False
if i+2<len(value) and value[i+2] not in set_all:
print('ok,i is:',i)
return False
self.j = i+1 # 找到下一个 字符位置,循环开始上面的判断。
while self.j<len(value) and value[self.j] in set_num:
self.temp.append(value[self.j]) # 把每个字母后面带着的数字找出来,方便后续。
self.j += 1
if self.j-i >=4: return False

# 可能的移动
if value[i] == "A": self.x_change -= int(''.join(self.temp))
if value[i] == "D": self.x_change += int(''.join(self.temp))
if value[i] == "W": self.y_change += int(''.join(self.temp))
if value[i] == "S": self.y_change -= int(''.join(self.temp))

self.temp = []
i = self.j
return True
# t = test()
# j = t.judge('S1A10')
# print(j)
def main():
[x,y] = 0,0
t = test()
for line in sys.stdin:
a = line.split(';')
a.pop()
for value in a:
if t.judge(value):
x += t.x_change
y += t.y_change
print(str(x)+','+str(y))

if __name__=='__main__':
main()