diff --git a/README.md b/README.md index 73df309..f756f83 100644 --- a/README.md +++ b/README.md @@ -99,3 +99,6 @@ CFcSBwgCCBoHRhkKU1cGAA4AGU5YQR5THBwNFwoGGAxTQQMQVBUSBg4EAAwQRhUQVBUHFAQTGRpT QQM ### gearing-up-for-destruction * Completed in: 1 hr, 19 mins, 28 secs. + +### dont-get-volunteered +* Completed in: 2 hrs, 56 mins, 6 secs. diff --git a/extra/dont-get-volunteered/solution.py b/extra/dont-get-volunteered/solution.py new file mode 100644 index 0000000..ebe7a24 --- /dev/null +++ b/extra/dont-get-volunteered/solution.py @@ -0,0 +1,46 @@ +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)