Skip to content

Instantly share code, notes, and snippets.

@goatslacker
Created January 25, 2017 05:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save goatslacker/4f34e19b4583fcc065d90813a8ca31e5 to your computer and use it in GitHub Desktop.
Save goatslacker/4f34e19b4583fcc065d90813a8ca31e5 to your computer and use it in GitHub Desktop.
import math
pokemon = {
"bulbasaur":{"stamina":90,"attack":118,"defense":118},
"ivysaur":{"stamina":120,"attack":151,"defense":151},
"venusaur":{"stamina":160,"attack":198,"defense":198},
"charmander":{"stamina":78,"attack":116,"defense":96},
"charmeleon":{"stamina":116,"attack":158,"defense":129},
"charizard":{"stamina":156,"attack":223,"defense":176},
"squirtle":{"stamina":88,"attack":94,"defense":122},
"wartortle":{"stamina":118,"attack":126,"defense":155},
"blastoise":{"stamina":158,"attack":171,"defense":210},
"caterpie":{"stamina":90,"attack":55,"defense":62},
"metapod":{"stamina":100,"attack":45,"defense":64},
"butterfree":{"stamina":120,"attack":167,"defense":151},
"weedle":{"stamina":80,"attack":63,"defense":65},
"kakuna":{"stamina":90,"attack":46,"defense":86},
"beedrill":{"stamina":130,"attack":169,"defense":150},
"pidgey":{"stamina":80,"attack":85,"defense":76},
"pidgeotto":{"stamina":126,"attack":117,"defense":108},
"pidgeot":{"stamina":166,"attack":166,"defense":157},
"rattata":{"stamina":60,"attack":103,"defense":70},
"raticate":{"stamina":110,"attack":161,"defense":144},
"spearow":{"stamina":80,"attack":121,"defense":61},
"fearow":{"stamina":130,"attack":182,"defense":135},
"ekans":{"stamina":70,"attack":110,"defense":102},
"arbok":{"stamina":120,"attack":167,"defense":158},
"pikachu":{"stamina":70,"attack":112,"defense":101},
"raichu":{"stamina":120,"attack":192,"defense":165},
"sandshrew":{"stamina":100,"attack":126,"defense":145},
"sandslash":{"stamina":150,"attack":182,"defense":282},
"nidoran_female":{"stamina":110,"attack":86,"defense":94},
"nidorina":{"stamina":140,"attack":117,"defense":126},
"nidoqueen":{"stamina":180,"attack":180,"defense":174},
"nidoran_male":{"stamina":92,"attack":105,"defense":75},
"nidorino":{"stamina":122,"attack":137,"defense":112},
"nidoking":{"stamina":162,"attack":204,"defense":157},
"clefairy":{"stamina":140,"attack":107,"defense":116},
"clefable":{"stamina":190,"attack":178,"defense":171},
"vulpix":{"stamina":76,"attack":96,"defense":122},
"ninetales":{"stamina":146,"attack":169,"defense":204},
"jigglypuff":{"stamina":230,"attack":80,"defense":44},
"wigglytuff":{"stamina":280,"attack":156,"defense":93},
"zubat":{"stamina":80,"attack":83,"defense":76},
"golbat":{"stamina":150,"attack":161,"defense":153},
"oddish":{"stamina":90,"attack":131,"defense":116},
"gloom":{"stamina":120,"attack":153,"defense":139},
"vileplume":{"stamina":150,"attack":202,"defense":170},
"paras":{"stamina":70,"attack":121,"defense":99},
"parasect":{"stamina":120,"attack":165,"defense":146},
"venonat":{"stamina":120,"attack":100,"defense":102},
"venomoth":{"stamina":140,"attack":179,"defense":150},
"diglett":{"stamina":20,"attack":109,"defense":88},
"dugtrio":{"stamina":70,"attack":167,"defense":147},
"meowth":{"stamina":80,"attack":92,"defense":81},
"persian":{"stamina":130,"attack":150,"defense":139},
"psyduck":{"stamina":100,"attack":122,"defense":96},
"golduck":{"stamina":160,"attack":191,"defense":163},
"mankey":{"stamina":80,"attack":148,"defense":87},
"primeape":{"stamina":130,"attack":207,"defense":144},
"growlithe":{"stamina":110,"attack":136,"defense":96},
"arcanine":{"stamina":180,"attack":227,"defense":166},
"poliwag":{"stamina":80,"attack":101,"defense":82},
"poliwhirl":{"stamina":130,"attack":130,"defense":130},
"poliwrath":{"stamina":180,"attack":182,"defense":187},
"abra":{"stamina":50,"attack":195,"defense":103},
"kadabra":{"stamina":80,"attack":232,"defense":138},
"alakazam":{"stamina":110,"attack":271,"defense":194},
"machop":{"stamina":140,"attack":137,"defense":88},
"machoke":{"stamina":160,"attack":177,"defense":130},
"machamp":{"stamina":180,"attack":234,"defense":162},
"bellsprout":{"stamina":100,"attack":139,"defense":64},
"weepinbell":{"stamina":130,"attack":172,"defense":95},
"victreebel":{"stamina":160,"attack":207,"defense":138},
"tentacool":{"stamina":80,"attack":97,"defense":182},
"tentacruel":{"stamina":160,"attack":166,"defense":237},
"geodude":{"stamina":80,"attack":132,"defense":163},
"graveler":{"stamina":110,"attack":164,"defense":196},
"golem":{"stamina":160,"attack":211,"defense":229},
"ponyta":{"stamina":100,"attack":170,"defense":132},
"rapidash":{"stamina":130,"attack":207,"defense":167},
"slowpoke":{"stamina":180,"attack":109,"defense":109},
"slowbro":{"stamina":190,"attack":177,"defense":194},
"magnemite":{"stamina":50,"attack":165,"defense":128},
"magneton":{"stamina":100,"attack":223,"defense":182},
"farfetchd":{"stamina":104,"attack":124,"defense":118},
"doduo":{"stamina":70,"attack":158,"defense":88},
"dodrio":{"stamina":120,"attack":218,"defense":145},
"seel":{"stamina":130,"attack":85,"defense":128},
"dewgong":{"stamina":180,"attack":139,"defense":184},
"grimer":{"stamina":160,"attack":135,"defense":90},
"muk":{"stamina":210,"attack":190,"defense":184},
"shellder":{"stamina":60,"attack":116,"defense":168},
"cloyster":{"stamina":100,"attack":186,"defense":323},
"gastly":{"stamina":60,"attack":186,"defense":70},
"haunter":{"stamina":90,"attack":223,"defense":112},
"gengar":{"stamina":120,"attack":261,"defense":156},
"onix":{"stamina":70,"attack":85,"defense":288},
"drowzee":{"stamina":120,"attack":89,"defense":158},
"hypno":{"stamina":170,"attack":144,"defense":215},
"krabby":{"stamina":60,"attack":181,"defense":156},
"kingler":{"stamina":110,"attack":240,"defense":214},
"voltorb":{"stamina":80,"attack":109,"defense":114},
"electrode":{"stamina":120,"attack":173,"defense":179},
"exeggcute":{"stamina":120,"attack":107,"defense":140},
"exeggutor":{"stamina":190,"attack":233,"defense":158},
"cubone":{"stamina":100,"attack":90,"defense":165},
"marowak":{"stamina":120,"attack":144,"defense":200},
"hitmonlee":{"stamina":100,"attack":224,"defense":211},
"hitmonchan":{"stamina":100,"attack":193,"defense":212},
"lickitung":{"stamina":180,"attack":108,"defense":137},
"koffing":{"stamina":80,"attack":119,"defense":164},
"weezing":{"stamina":130,"attack":174,"defense":221},
"rhyhorn":{"stamina":160,"attack":140,"defense":157},
"rhydon":{"stamina":210,"attack":222,"defense":206},
"chansey":{"stamina":500,"attack":60,"defense":176},
"tangela":{"stamina":130,"attack":183,"defense":205},
"kangaskhan":{"stamina":210,"attack":181,"defense":165},
"horsea":{"stamina":60,"attack":129,"defense":125},
"seadra":{"stamina":110,"attack":187,"defense":182},
"goldeen":{"stamina":90,"attack":123,"defense":115},
"seaking":{"stamina":160,"attack":175,"defense":154},
"staryu":{"stamina":60,"attack":137,"defense":112},
"starmie":{"stamina":120,"attack":210,"defense":184},
"mr_mime":{"stamina":80,"attack":192,"defense":233},
"scyther":{"stamina":140,"attack":218,"defense":170},
"jynx":{"stamina":130,"attack":223,"defense":182},
"electabuzz":{"stamina":130,"attack":198,"defense":173},
"magmar":{"stamina":130,"attack":206,"defense":169},
"pinsir":{"stamina":130,"attack":238,"defense":197},
"tauros":{"stamina":150,"attack":198,"defense":197},
"magikarp":{"stamina":40,"attack":29,"defense":102},
"gyarados":{"stamina":190,"attack":237,"defense":197},
"lapras":{"stamina":260,"attack":186,"defense":190},
"ditto":{"stamina":96,"attack":91,"defense":91},
"eevee":{"stamina":110,"attack":104,"defense":121},
"vaporeon":{"stamina":260,"attack":205,"defense":177},
"jolteon":{"stamina":130,"attack":232,"defense":201},
"flareon":{"stamina":130,"attack":246,"defense":204},
"porygon":{"stamina":130,"attack":153,"defense":139},
"omanyte":{"stamina":70,"attack":155,"defense":174},
"omastar":{"stamina":140,"attack":207,"defense":227},
"kabuto":{"stamina":60,"attack":148,"defense":162},
"kabutops":{"stamina":120,"attack":220,"defense":203},
"aerodactyl":{"stamina":160,"attack":221,"defense":164},
"snorlax":{"stamina":320,"attack":190,"defense":190},
"articuno":{"stamina":180,"attack":192,"defense":249},
"zapdos":{"stamina":180,"attack":253,"defense":188},
"moltres":{"stamina":180,"attack":251,"defense":184},
"dratini":{"stamina":82,"attack":119,"defense":94},
"dragonair":{"stamina":122,"attack":163,"defense":138},
"dragonite":{"stamina":182,"attack":263,"defense":201},
"mewtwo":{"stamina":212,"attack":330,"defense":200},
"mew":{"stamina":200,"attack":210,"defense":210}
}
level_to_cpm = {
"1": 0.094,
"2": 0.16639787,
"3": 0.21573247,
"4": 0.25572005,
"5": 0.29024988,
"6": 0.3210876,
"7": 0.34921268,
"8": 0.37523559,
"9": 0.39956728,
"10": 0.42250001,
"11": 0.44310755,
"12": 0.46279839,
"13": 0.48168495,
"14": 0.49985844,
"15": 0.51739395,
"16": 0.53435433,
"17": 0.55079269,
"18": 0.56675452,
"19": 0.58227891,
"20": 0.59740001,
"21": 0.61215729,
"22": 0.62656713,
"23": 0.64065295,
"24": 0.65443563,
"25": 0.667934,
"26": 0.68116492,
"27": 0.69414365,
"28": 0.70688421,
"29": 0.71939909,
"30": 0.7317,
}
catchable_levels = level_to_cpm.keys()
#print list(level_to_cpm.keys())
def get_cp(name, ivs, ECpM):
poke = pokemon.get(name)
BaseAtk = poke.get('attack')
BaseDef = poke.get('defense')
BaseSta = poke.get('stamina')
IndAtk = ivs.get('atk')
IndDef = ivs.get('def')
IndSta = ivs.get('sta')
return max(10, math.floor(
(BaseAtk + IndAtk) *
math.pow(BaseDef + IndDef, 0.5) *
math.pow(BaseSta + IndSta, 0.5) *
math.pow(ECpM, 2) /
10
))
def get_level_from_cp(poke, ivs, cp):
lvl = filter(
lambda lvl: cp == get_cp(poke, ivs, level_to_cpm.get(str(lvl))),
catchable_levels
)
return lvl[0] if len(lvl) > 0 else None
### Example ###
print get_cp(
'dragonite',
{ 'atk': 15, 'def': 15, 'sta': 15 },
0.7317
)
print get_level_from_cp(
'dragonite',
{ 'atk': 15, 'def': 15, 'sta': 15 },
3070
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment