```# how much exp if I catch 2 pidgeys and 4 ratatas? # here 2 pidgey is expressed as (2, 12) where 2 is number of pidgey # and 12 is how many candy it takes for a pidgey to evolve # the same goes to ratata, 4 ratatas, and a ratata takes 25 candies caught = [(2, 12), (4, 25)] # You can compute how much exp is a single pokemon (such as a ratata) by catching only 1 of it # uncomment this code to find out # caught = [(1, 25)] # are you using egg? True or False lucky_egg = True ###### CODE ####### # the short-hand formula to find out how much experience # is a pokemon given its cost to evolve def exp_worth_poke(candies_to_evolve): return 100 + 500.0 / ((candies_to_evolve - 1) / 4.0) * 2.0 # given you caught a new pokemon, can you evolve it? # returns a tuple (can_evolve, candy_after_evolve) def evolve1(n_candy, num_to_evolve): # a new pokemon is added, we get 3 more candies cur_candy = n_candy + 3 # if cannot evolve, sell it and store 1 more candy if cur_candy < num_to_evolve: return (0, cur_candy + 1) # otherwise, evolve the pokemon, consuming the candies else: candy_after_evo = cur_candy - num_to_evolve # evolution grants 1 candy, selling the poke 1 extra return (1, candy_after_evo + 2) # if you have n_candy at start # given the cost of candy it takes to evolve # and the number of pokemon you caught # what's the final number of evolution u can afford and candy leftover def evolve_n(n_candy, num_to_evolve, num_poke_caught): cur_state = (0, n_candy) for i in range(num_poke_caught): # print cur_state num_evol, n_candy = cur_state additional_evol, res_candy = evolve1(n_candy, num_to_evolve) cur_state = (num_evol + additional_evol, res_candy) return cur_state # find the average evolution def avg_evol(num_to_evolve): # mapping from num_candy to num_of evolves and num_poke at that point seen_states = dict() # the cur_state is (num_evol, num_candy) cur_state = (0, 0) pokemon_caught = 0 while True: # print cur_state num_evol, num_candy = cur_state if num_candy in seen_states: previous_evol, previous_caught = seen_states[num_candy] current_evol = num_evol return float(num_evol - previous_evol) / (pokemon_caught - previous_caught) else: seen_states[num_candy] = (num_evol, pokemon_caught) pokemon_caught += 1 additional_evol, res_candy = evolve1(num_candy, num_to_evolve) cur_state = (num_evol + additional_evol, res_candy) def exp_worth_evo(num_to_evolve): return 500.0 * avg_evol(num_to_evolve) def total_evo_exp(lst_caught): ret = 0.0 for xx in lst_caught: num, lvl_candy = xx ret += exp_worth_evo(lvl_candy) * num return ret def total_exp(lst_caught, lucky_egg): multi = 1 if lucky_egg: multi = 2 num_poke = sum([x[0] for x in lst_caught]) return total_evo_exp(lst_caught) * multi + 100 * num_poke print "you have made this many exp: " print total_exp(caught, lucky_egg)```