47 lines
1.1 KiB
Python

def solution(src, dest):
unvisited = [i for i in range(64)]
curr_stage = set([src])
moves = 0
while dest not in curr_stage:
next_stage = set()
for curr in curr_stage:
next_stage.update(possible_next_position(curr))
moves += 1
curr_stage = next_stage
return moves
def possible_next_position(curr):
result = []
if curr % 8 >= 1:
if curr / 8 >= 2:
result += [curr-17]
if curr / 8 <= 5:
result += [curr+15]
if curr % 8 >= 2:
if curr / 8 >= 1:
result += [curr-10]
if curr / 8 <= 6:
result += [curr+6]
if curr % 8 <= 5:
if curr / 8 >= 1:
result += [curr-6]
if curr / 8 <= 6:
result += [curr+10]
if curr % 8 <= 6:
if curr / 8 >= 2:
result += [curr-15]
if curr / 8 <= 5:
result += [curr+17]
return set(result)
tests = [
([0, 1], 3),
([19, 36], 1),
([0, 0], 0),
]
for i, o in tests:
result = solution(*i)
print(i, result == o, result, o)