Last active
July 16, 2016 13:20
-
-
Save evanthebouncy/1bf5556fbc7bf63c9d4f5aae191c4256 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 = [(1, 400)] | |
# are you using egg? True or False | |
lucky_egg = False | |
###### CODE ####### | |
# 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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment