solve by emulate the game
Verifying solution... Test 1 passed! Test 2 passed! Test 3 failed [Hidden] Test 4 failed [Hidden] Test 5 failed [Hidden]
This commit is contained in:
parent
dc1a8de37a
commit
d548438ea7
47
extra/distract-the-trainers/solution.py
Normal file
47
extra/distract-the-trainers/solution.py
Normal file
@ -0,0 +1,47 @@
|
||||
def solution(banana_list):
|
||||
fewest_possible_number = len(banana_list)
|
||||
for pairs in generate_trainer_pairs(list(range(len(banana_list)))):
|
||||
possible_number = len(banana_list)
|
||||
for i, j in pairs:
|
||||
if check_loop(banana_list[i], banana_list[j]):
|
||||
possible_number -= 2
|
||||
if possible_number < fewest_possible_number:
|
||||
fewest_possible_number = possible_number
|
||||
return fewest_possible_number
|
||||
|
||||
import copy
|
||||
def generate_trainer_pairs(trainer_id_list):
|
||||
if len(trainer_id_list) < 2:
|
||||
yield []
|
||||
else:
|
||||
first_id = trainer_id_list[0]
|
||||
temp_list = copy.deepcopy(trainer_id_list)
|
||||
temp_list.remove(first_id)
|
||||
for second_id in temp_list:
|
||||
tt_list = copy.deepcopy(temp_list)
|
||||
tt_list.remove(second_id)
|
||||
for pairs in generate_trainer_pairs(tt_list):
|
||||
yield [(first_id, second_id)] + pairs
|
||||
|
||||
def check_loop(x, y):
|
||||
a, b = x, y
|
||||
memo = []
|
||||
while a != b:
|
||||
if a > b:
|
||||
a, b = a - b, 2*b
|
||||
else:
|
||||
a, b = 2*a, b - a
|
||||
if (a, b) in memo:
|
||||
return True
|
||||
else:
|
||||
memo += [(a, b)]
|
||||
return False
|
||||
|
||||
tests = [
|
||||
([1, 1], 2),
|
||||
([1, 7, 3, 21, 13, 19], 0),
|
||||
]
|
||||
|
||||
for i, o in tests:
|
||||
result = solution(i)
|
||||
print(i, result == o, result, o)
|
||||
Loading…
x
Reference in New Issue
Block a user