Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
15-liner: break sum inline-if in list solution in Clear category for Wall Keeper by przemyslaw.daniel
# migrated from python 2.7
def wall_keeper(on_panels): # light chasing algorithm
def flip(a, b):
for c, d in [(a, b), (a+1, b), (a-1, b), (a, b+1), (a, b-1)]:
if 0 <= c < 5 and 0 <= d < 5:
data[c][d] ^= 1
return [5*a+b+1]
ret, data = [], [[int(x+5*y+1 in on_panels) for x in range(5)] for y in range(5)]
for _ in range(2):
for x, y in __import__('itertools').product(list(range(1, 5)), list(range(5))):
ret += flip(x, y) if data[x-1][y] else []
if sum(data[4]) == 0:
break
for i, j, k in [(0, 3, 0), (0, 4, 0), (0, 1, 1), (0, 4, 1), (0, 3, 2)]:
ret += flip(i, j) if data[4][k] == 1 else []
return ret
March 21, 2017