Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
too much elif solution in Clear category for Find Enemy by Oleg_Domokeev
def find_enemy(you, dir, enemy):
a, b = ord(you[0]) - 64, int(you[1])
x, y = ord(enemy[0]) - 64, int(enemy[1])
N_shift = (a + 1) // 2 - (x + 1) // 2
S_shift = a // 2 - x // 2
if a == x:
abs_dir = 'N' * (y < b) + 'S' * (y > b)
elif x < a:
if y < (b - N_shift):
abs_dir = 'N-NW'
elif y == (b - N_shift):
abs_dir = 'NW'
elif y < (b + S_shift):
abs_dir = 'NW-SW'
elif y == (b + S_shift):
abs_dir = 'SW'
else:
abs_dir = 'SW-S'
else:
if y > (b - S_shift):
abs_dir = 'S-SE'
elif y == (b - S_shift):
abs_dir = 'SE'
elif y > (b + N_shift):
abs_dir = 'SE-NE'
elif y == (b + N_shift):
abs_dir = 'NE'
else:
abs_dir = 'NE-N'
if dir == 'N':
if abs_dir in {'NE-N', 'N', 'N-NW'}:
rel_dir = 'F'
elif abs_dir in {'NW', 'NW-SW', 'SW'}:
rel_dir = 'L'
elif abs_dir in {'SW-S', 'S', 'S-SE'}:
rel_dir = 'B'
else:
rel_dir = 'R'
if dir == 'NW':
if abs_dir in {'N-NW', 'NW', 'NW-SW'}:
rel_dir = 'F'
elif abs_dir in {'SW', 'SW-S', 'S'}:
rel_dir = 'L'
elif abs_dir in {'S-SE', 'SE', 'SE-NE'}:
rel_dir = 'B'
else:
rel_dir = 'R'
if dir == 'SW':
if abs_dir in {'NW-SW', 'SW', 'SW-S'}:
rel_dir = 'F'
elif abs_dir in {'S', 'S-SE', 'SE'}:
rel_dir = 'L'
elif abs_dir in {'SE-NE', 'NE', 'NE-N'}:
rel_dir = 'B'
else:
rel_dir = 'R'
if dir == 'S':
if abs_dir in {'SW-S', 'S', 'S-SE'}:
rel_dir = 'F'
elif abs_dir in {'SE', 'SE-NE', 'NE'}:
rel_dir = 'L'
elif abs_dir in {'NE-N', 'N', 'N-NW'}:
rel_dir = 'B'
else:
rel_dir = 'R'
if dir == 'SE':
if abs_dir in {'S-SE', 'SE', 'SE-NE'}:
rel_dir = 'F'
elif abs_dir in {'NE', 'NE-N', 'N'}:
rel_dir = 'L'
elif abs_dir in {'N-NW', 'NW', 'NW-SW'}:
rel_dir = 'B'
else:
rel_dir = 'R'
if dir == 'NE':
if abs_dir in {'SE-NE', 'NE', 'NE-N'}:
rel_dir = 'F'
elif abs_dir in {'N', 'N-NW', 'NW'}:
rel_dir = 'L'
elif abs_dir in {'NW-SW', 'SW', 'SW-S'}:
rel_dir = 'B'
else:
rel_dir = 'R'
if abs_dir in {'NW', 'NW-SW','SW', 'SE', 'SE-NE', 'NE'}:
dist = abs(a - x)
elif abs_dir in {'NE-N', 'N','N-NW'}:
dist = abs(a - x) + (b - y - N_shift)
else:
dist = abs(a - x) + (y - S_shift - b)
return [rel_dir, dist]
Sept. 10, 2018
Comments: