某次戰役中,爲便於信息交互,我軍偵察部門將此次戰役的關鍵高地座標設定爲(x=0,y=0)並規定,每向東增加100米,x加1,每向北增加100米,y加1。
同時,我軍情報部門也破譯了敵軍向坦克發送的指揮信號,其中有三種信號(L,R,M)用於控制坦克的運動,L 和 R 分別表示使令坦克向左、向右轉向,M 表示令坦克直線開進100米,其它信號如T用於時間同步,P用於反轉信號,既出現p,後面的信號向左變爲向右,向右變爲向左,向前變爲向後,反之亦然。
一日,我軍偵察兵發現了敵軍的一輛坦克,偵察兵立即將坦克所在座標(P, Q)及坦克前進方向(W:西,E:東,N:北,S:南)發送給指揮部,同時啓動信號接收器,將坦克接收到的信號實時同步發往指揮部,指揮部根據這些信息得以實時掌控了該坦克的位置,並使用榴彈炮精準地擊毀了該坦克。
假設,偵察兵發送給指揮部的信息如下:坦克座標:(11,39)坦克運行方向:W,坦克接收到的信號爲:MTMPRPMTMLMRPRMTPLMMTLMRRMP,請通過編程計算出坦克所在的位置。
class Tank:
option = {'E': 'self.x_add(1)', 'S': 'self.y_add(-1)', 'W': 'self.x_add(-1)', 'N': 'self.y_add(1)'}
direction_list = 'ESWN'
def __init__(self, x, y, direction, signal=''):
self.__x = x
self.__y = y
self.__direction = direction
self.__signal = signal
self.__reverse_flag = True
def x_add(self, step):
self.__x += step
def y_add(self, step):
self.__y += step
# 設置反轉標識
def reverse(self):
self.__reverse_flag = False if self.__reverse_flag else True
# 根據反轉標識,獲取反轉後的指令
def correct(self, order):
if self.__reverse_flag:
return order
else:
return 'R' if order == 'R' else 'L'
# 根據方向移動
def move(self):
exec(self.option[self.__direction])
# 設置前進方向
def set_direction(self, order):
self.correct(order)
index = self.direction_list.index(self.__direction)
if order == 'L':
self.__direction = self.direction_list[(index - 1) % 4]
else:
self.__direction = self.direction_list[(index + 1) % 4]
# 分析信號
def analysis(self):
for order in self.__signal:
if order == 'M':
self.move()
elif order in ('L', 'R'):
self.set_direction(order)
elif order == 'P':
self.reverse()
else:
print('Time')
print('location:(%d,%d),direction:%s' % (self.__x, self.__y, self.__direction))
tank = Tank(11, 39, 'W', 'MTMPRPMTMLMRPRMTPLMMTLMRRMP')
tank.analysis()