Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Berserk Rook by Tinus_Trotyl
from itertools import permutations
def berserk_rook(berserker, enemies):
def obstructed(pa, pb, pcs): # is there any obstacle in pcs between pa and pb ?
for pc in pcs:
for x, y in (0, 1), (1, 0):
if pa[x] == pc[x]:
if min(pa[y], pb[y]) < pc[y] < max(pa[y], pb[y]): return True
return False
coordinates = lambda p : ("abcdefgh".index(p[0]), int(p[1]))
berserker = coordinates(berserker)
enemies = tuple(coordinates(enemie) for enemie in tuple(enemies))
score, restore = 0, (berserker, 0)
for opposers in permutations(enemies):
berserker, captures = restore
while opposers:
opposer, opposers = opposers[0], opposers[1:]
if berserker[0] == opposer[0] or berserker[1] == opposer[1]:
if not obstructed(berserker, opposer, opposers):
berserker = opposer
captures += 1
else: break
score = max(score, captures)
return score
July 10, 2017
Comments: