47 lines
1.1 KiB
Python
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)
|