Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Wall Keeper by tokiojapan55
def turn_on(panel, n):
panel[n] = 1 - panel[n]
if n >= 5: panel[n - 5] = 1 - panel[n - 5]
if n < 20: panel[n + 5] = 1 - panel[n + 5]
if n % 5 > 0: panel[n - 1] = 1 - panel[n - 1]
if n % 5 < 4: panel[n + 1] = 1 - panel[n + 1]
return panel
def wall_keeper(on_panels):
CHEAT = {
'10001':'11000',
'01010':'10010',
'11100':'01000',
'00111':'00010',
'10110':'00001',
'01101':'10000',
'11011':'00100'}
path = set()
panel = [1 if (c+1) in on_panels else 0 for c in range(25)]
for n in range(5, 25):
if panel[n-5] == 1:
turn_on(panel, n)
path.add(n+1)
while sum(panel):
bottom = ''.join([str(c) for c in panel[20:]])
for n in range(25):
if (n < 5 and CHEAT[bottom][n]=='1') or (n>=5 and panel[n-5]==1):
turn_on(panel, n)
if {n+1} <= path: path -= {n+1}
else: path.add(n+1)
return sorted(list(path))
June 2, 2020