Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Find Enemy by rybld2
"""utilisation des coordonnées axiales col, ligne = (q, r) ou cubiques q+r+s=0"""
def de_traduc(a):
""" inutile sauf pour la mise au point
fonction reciproque de traduc()"""
res = chr(a[0] + 65)
res = res + str(a[1] + 1 + a[0] // 2)
return res
def traduc(t):
t = [x for x in t]
t = [ord(t[0]) - 65, int(t[1]) - 1 - (ord(t[0]) - 65) // 2]
return t[0], t[1]
def dist(a, b):
x, y = a[1] - b[1], a[0] - b[0]
z = x + y
return max([abs(l) for l in {x, y, z}])
def region(a):
"""renvoie la region où est a par rapport à (0, 0) en regardant le N
region((8, 5) renvoie B"""
q, r = a
if r == 0: return 'L' if q < 0 else 'R'
if q == 0: return 'F' if r < 0 else 'B'
if r > 0:
return 'B' if q + r > 0 else 'L'
else:
return 'F' if q + r < 0 else 'R'
def rotation(b, dir):
direct = ['N', 'NW', 'SW', 'S', 'SE', 'NE']
b = (b[0], b[1], -b[0] - b[1]) # passage aux coordonnées cubiques
for i in range(direct.index(dir)): # autant de rotations de centre (0, 0) d'angle -60 ° que nécessaires
b = (-b[1], -b[2], -b[0])
return b[0], b[1] # retour coordonnées axiales
def find_enemy(you, dir, enemy):
a, b = traduc(you), traduc(enemy)
d = dist(a, b)
b = (b[0] - a[0], b[1] - a[1]) # l'origine est en a
if dir != 'N': b = rotation(b, dir)
return [region(b), d]
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!")
Jan. 8, 2021
Comments: