Created
January 25, 2017 05:49
-
-
Save goatslacker/4f34e19b4583fcc065d90813a8ca31e5 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
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