Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Berserk Rook by tom-tom
def berserk_rook(berserker, enemies):
def can_capture(rook):
p1, p2 = min(berserker, rook), max(berserker, rook)
return (p1[0] == p2[0] and not any(p1 < e < p2 for e in enemies)) or \
(p1[1] == p2[1] and not any(p1[0] < e[0] < p2[0] for e in enemies if e[1] == p1[1]))
return max((berserk_rook(rook, enemies - {rook}) + 1 for rook in enemies if can_capture(rook)), default=0)
if __name__ == '__main__':
#These "asserts" using only for self-checking and not necessary for auto-testing
assert berserk_rook('d3', {'d6', 'b6', 'c8', 'g4', 'b8', 'g6'}) == 5, "one path"
assert berserk_rook('a2', {'f6', 'f2', 'a6', 'f8', 'h8', 'h6'}) == 6, "several paths"
assert berserk_rook('a2', {'f6', 'f8', 'f2', 'a6', 'h6'}) == 4, "Don't jump through"
Aug. 5, 2017
Comments: