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