Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Speedy category for Find Enemy by Alejandro_El_Diablo
def find_enemy(you, dir, enemy):
def tur(x, t):
# 0 - up then in clock order
if t == 0:
return (x[0], x[1] - 1)
elif t == 1:
return (x[0] + 1, x[1] - (x[0] & 1))
elif t == 2:
return (x[0] + 1, x[1] + 1 - (x[0] & 1))
elif t == 3:
return (x[0], x[1] + 1)
elif t == 4:
return (x[0] - 1, x[1] + 1 - (x[0] & 1))
elif t == 5:
return (x[0] - 1, x[1] - (x[0] & 1))
tt = lambda x: str(chr(x[0] + ord('A') - 1)) + str(x[1])
ff = lambda x: (ord(x[0]) - ord('A') + 1, ord(x[1]) - ord('0'))
you, enemy = ff(you), ff(enemy)
z = ["N", "NE", "SE", "S", "SW", "NW"]
zz = z.index(dir)
p = [(zz + i) % 6 for i in range(6)]
q = [(tur(you, p[0]), (p[-1], p[0], p[1]), "F"),
(tur(you, p[1]), (p[1], p[2]), "R"),
(tur(you, p[2]), (p[1], p[2]), "R"),
(tur(you, p[3]), (p[2], p[3], p[4]), "B"),
(tur(you, p[4]), (p[4], p[5]), "L"),
(tur(you, p[5]), (p[4], p[5]), "L")]
d = dict()
for i in q:
d[i[0]] = [i[2], 1]
p = 0
while enemy not in d.keys():
cz = q[p]
p += 1
for i in cz[1]:
nz = tur(cz[0], i)
if nz not in d.keys():
d[nz] = [cz[2], d[cz[0]][1] + 1]
q.append((nz, cz[1], cz[2]))
return d[enemy]
if __name__ == '__main__':
assert find_enemy('G5', 'N', 'G4') == ['F', 1], "N-1"
assert find_enemy('G5', 'N', 'I4') == ['R', 2], "NE-2"
assert find_enemy('G5', 'N', 'J6') == ['R', 3], "SE-3"
assert find_enemy('G5', 'N', 'G9') == ['B', 4], "S-4"
assert find_enemy('G5', 'N', 'B7') == ['L', 5], "SW-5"
assert find_enemy('G5', 'N', 'A2') == ['L', 6], "NW-6"
assert find_enemy('G3', 'NE', 'C5') == ['B', 4], "[watch your six!]"
assert find_enemy('H3', 'SW', 'E2') == ['R', 3], "right"
assert find_enemy('A4', 'S', 'M4') == ['L', 12], "true left"
print("You are good to go!")
April 24, 2021
Comments: