Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Use FP, Luke! solution in Clear category for Berserk Rook by obone
from itertools import product
alpha = 'abcdefgh'
numbs = '12345678'
berserk_rook = lambda b, enemies, beaten = set(): \
max((1 + berserk_rook(e, enemies, beaten | {e}) for e in enemies \
if e not in beaten and (e[0] == b[0] or e[1] == b[1]) and
all(c + n not in enemies or c + n in beaten or c + n == e
for (c, n) in product(
alpha[alpha.find(min(e[0], b[0])):alpha.find(max(e[0], b[0])) + 1],
numbs[numbs.find(min(e[1], b[1])):numbs.find(max(e[1], b[1])) + 1]))
), default = 0)
Nov. 14, 2019