Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
quarkov solution in Speedy category for Berserk Rook by quarkov
def next_moves(pos, enemies):
x, y = pos
possible_targets = {e for e in enemies if set(e) & set(pos)}
if not possible_targets: return {}
acquired_targets = set()
for first, last, step in (x, 9, 1), (x-1, -1, -1):
for new_x in range(first, last, step):
if (new_x, y) in possible_targets:
acquired_targets |= {(new_x, y)}
break
for first, last, step in (y, 9, 1), (y-1, -1, -1):
for new_y in range(first, last, step):
if (x, new_y) in possible_targets:
acquired_targets |= {(x, new_y)}
break
return {new_pos: enemies-{new_pos} for new_pos in acquired_targets}
def berserk_rook(berserker, enemies):
max_frags = len(enemies)
berserker = ord(berserker[0]) - 96, int(berserker[1])
enemies = {(ord(e[0])-96, int(e[1])) for e in enemies}
options = {berserker: enemies}
for frags in range(1, max_frags+1):
new_options = {}
for b, e in options.items():
new_options = {**new_options, **next_moves(b, e)}
options = new_options if new_options else options
return max_frags - len(min(options.values(), key=len))
March 25, 2019
Comments: