tre revised this gist 2 weeks ago. Go to revision
1 file changed, 158 insertions
releaseprobability.py(file created)
| @@ -0,0 +1,158 @@ | |||
| 1 | + | from bs4 import BeautifulSoup | |
| 2 | + | import wantlist | |
| 3 | + | ||
| 4 | + | ''' | |
| 5 | + | Requires key.html as generated by the usual script. Download https://colors-tcg.eu/releasechecker.php, strip it to just the divs with class "list" and save as release.html. Save a file called wantlist.py with thelist = current wantlist in list format. This is based on release 192 being the only one not listed. Change nextrelease to the number of the next release. | |
| 6 | + | ''' | |
| 7 | + | ||
| 8 | + | nextrelease = 194 | |
| 9 | + | ||
| 10 | + | values = ["red","orange","yellow","green","blue","purple","brown","gray","special","limited"] | |
| 11 | + | ||
| 12 | + | deckkey = {} | |
| 13 | + | decknames = [] | |
| 14 | + | ||
| 15 | + | with open("key.html") as decks: | |
| 16 | + | decksoup = BeautifulSoup(decks,"html.parser") | |
| 17 | + | soupdecks = decksoup.find("table",{"id":"colors"}) | |
| 18 | + | souprows = soupdecks.find_all("tr") | |
| 19 | + | souprows = souprows[1:] | |
| 20 | + | for row in souprows: | |
| 21 | + | soupcells = row.find_all("td") | |
| 22 | + | deckname = soupcells[2].text.lower().replace(" ","").replace("'","").replace("ç","c").replace(".","").replace("politetness","politeness").replace("á","a") | |
| 23 | + | decktype = soupcells[3].text.lower() | |
| 24 | + | deckdict = {} | |
| 25 | + | if decktype in values: | |
| 26 | + | deckdict["type"] = decktype | |
| 27 | + | deckkey[deckname] = deckdict | |
| 28 | + | decknames.append(deckname) | |
| 29 | + | ||
| 30 | + | releasedict = {} | |
| 31 | + | ||
| 32 | + | with open("release.html") as releases: | |
| 33 | + | releasesoup = BeautifulSoup(releases,"html.parser") | |
| 34 | + | allreleases = releasesoup.find_all("div") | |
| 35 | + | for release in allreleases: | |
| 36 | + | releaseid = int(release.find("strong").text[-4:-1]) | |
| 37 | + | releasedecks = release.find("textarea").text.split(", ") | |
| 38 | + | releasedict[releaseid] = releasedecks | |
| 39 | + | ||
| 40 | + | for deck in decknames: | |
| 41 | + | deckkey[deck]["release"] = False | |
| 42 | + | releaseno = 1 | |
| 43 | + | while releaseno < nextrelease: | |
| 44 | + | if releaseno != 192: | |
| 45 | + | if deck in releasedict[releaseno]: | |
| 46 | + | deckkey[deck]["release"] = releaseno | |
| 47 | + | releaseno += 1 | |
| 48 | + | if not deckkey[deck]["release"]: | |
| 49 | + | deckkey[deck]["release"] = 192 | |
| 50 | + | ||
| 51 | + | releasecolours = {} | |
| 52 | + | ||
| 53 | + | therelease = 1 | |
| 54 | + | while therelease < nextrelease: | |
| 55 | + | red = 0 | |
| 56 | + | orange = 0 | |
| 57 | + | yellow = 0 | |
| 58 | + | green = 0 | |
| 59 | + | blue = 0 | |
| 60 | + | purple = 0 | |
| 61 | + | brown = 0 | |
| 62 | + | grey = 0 | |
| 63 | + | special = 0 | |
| 64 | + | for deck in decknames: | |
| 65 | + | if deckkey[deck]["release"] == therelease: | |
| 66 | + | if deckkey[deck]["type"] == "red": | |
| 67 | + | red += 20 | |
| 68 | + | elif deckkey[deck]["type"] == "orange": | |
| 69 | + | orange += 20 | |
| 70 | + | elif deckkey[deck]["type"] == "yellow": | |
| 71 | + | yellow += 20 | |
| 72 | + | elif deckkey[deck]["type"] == "green": | |
| 73 | + | green += 20 | |
| 74 | + | elif deckkey[deck]["type"] == "blue": | |
| 75 | + | blue += 20 | |
| 76 | + | elif deckkey[deck]["type"] == "purple": | |
| 77 | + | purple += 20 | |
| 78 | + | elif deckkey[deck]["type"] == "brown": | |
| 79 | + | brown += 20 | |
| 80 | + | elif deckkey[deck]["type"] == "gray": | |
| 81 | + | grey += 20 | |
| 82 | + | elif deckkey[deck]["type"] == "special": | |
| 83 | + | special += 20 | |
| 84 | + | releasecolours[therelease] = {"wantred":0,"hasred":red,"wantorange":0,"hasorange":orange,"wantyellow":0,"hasyellow":yellow,"wantgreen":0,"hasgreen":green,"wantblue":0,"hasblue":blue,"wantpurple":0,"haspurple":purple,"wantbrown":0,"hasbrown":brown,"wantgrey":0,"hasgrey":grey} | |
| 85 | + | therelease += 1 | |
| 86 | + | ||
| 87 | + | wantlist = wantlist.thelist | |
| 88 | + | ||
| 89 | + | for card in wantlist: | |
| 90 | + | deck = card[:-2] | |
| 91 | + | deckrelease = deckkey[deck]["release"] | |
| 92 | + | decktype = deckkey[deck]["type"] | |
| 93 | + | if decktype == "red": | |
| 94 | + | releasecolours[deckrelease]["wantred"] += 1 | |
| 95 | + | elif decktype == "orange": | |
| 96 | + | releasecolours[deckrelease]["wantorange"] += 1 | |
| 97 | + | elif decktype == "yellow": | |
| 98 | + | releasecolours[deckrelease]["wantyellow"] += 1 | |
| 99 | + | elif decktype == "green": | |
| 100 | + | releasecolours[deckrelease]["wantgreen"] += 1 | |
| 101 | + | elif decktype == "blue": | |
| 102 | + | releasecolours[deckrelease]["wantblue"] += 1 | |
| 103 | + | elif decktype == "purple": | |
| 104 | + | releasecolours[deckrelease]["wantpurple"] += 1 | |
| 105 | + | elif decktype == "brown": | |
| 106 | + | releasecolours[deckrelease]["wantbrown"] += 1 | |
| 107 | + | elif decktype == "gray": | |
| 108 | + | releasecolours[deckrelease]["wantgrey"] += 1 | |
| 109 | + | ||
| 110 | + | foundrelease = False | |
| 111 | + | foundcolour = False | |
| 112 | + | foundproportion = 0 | |
| 113 | + | ||
| 114 | + | releaseno = 1 | |
| 115 | + | while releaseno < nextrelease: | |
| 116 | + | if releasecolours[releaseno]["wantred"] > 0: | |
| 117 | + | if releasecolours[releaseno]["wantred"]/releasecolours[releaseno]["hasred"] > foundproportion: | |
| 118 | + | foundrelease = releaseno | |
| 119 | + | foundcolour = "red" | |
| 120 | + | foundproportion = releasecolours[releaseno]["wantred"]/releasecolours[releaseno]["hasred"] | |
| 121 | + | if releasecolours[releaseno]["wantorange"] > 0: | |
| 122 | + | if releasecolours[releaseno]["wantorange"]/releasecolours[releaseno]["hasorange"] > foundproportion: | |
| 123 | + | foundrelease = releaseno | |
| 124 | + | foundcolour = "orange" | |
| 125 | + | foundproportion = releasecolours[releaseno]["wantorange"]/releasecolours[releaseno]["hasorange"] | |
| 126 | + | if releasecolours[releaseno]["wantyellow"] > 0: | |
| 127 | + | if releasecolours[releaseno]["wantyellow"]/releasecolours[releaseno]["hasyellow"] > foundproportion: | |
| 128 | + | foundrelease = releaseno | |
| 129 | + | foundcolour = "yellow" | |
| 130 | + | foundproportion = releasecolours[releaseno]["wantyellow"]/releasecolours[releaseno]["hasyellow"] | |
| 131 | + | if releasecolours[releaseno]["wantgreen"] > 0: | |
| 132 | + | if releasecolours[releaseno]["wantgreen"]/releasecolours[releaseno]["hasgreen"] > foundproportion: | |
| 133 | + | foundrelease = releaseno | |
| 134 | + | foundcolour = "green" | |
| 135 | + | foundproportion = releasecolours[releaseno]["wantgreen"]/releasecolours[releaseno]["hasgreen"] | |
| 136 | + | if releasecolours[releaseno]["wantblue"] > 0: | |
| 137 | + | if releasecolours[releaseno]["wantblue"]/releasecolours[releaseno]["hasblue"] > foundproportion: | |
| 138 | + | foundrelease = releaseno | |
| 139 | + | foundcolour = "blue" | |
| 140 | + | foundproportion = releasecolours[releaseno]["wantblue"]/releasecolours[releaseno]["hasblue"] | |
| 141 | + | if releasecolours[releaseno]["wantpurple"] > 0: | |
| 142 | + | if releasecolours[releaseno]["wantpurple"]/releasecolours[releaseno]["haspurple"] > foundproportion: | |
| 143 | + | foundrelease = releaseno | |
| 144 | + | foundcolour = "purple" | |
| 145 | + | foundproportion = releasecolours[releaseno]["wantpurple"]/releasecolours[releaseno]["haspurple"] | |
| 146 | + | if releasecolours[releaseno]["wantbrown"] > 0: | |
| 147 | + | if releasecolours[releaseno]["wantbrown"]/releasecolours[releaseno]["hasbrown"] > foundproportion: | |
| 148 | + | foundrelease = releaseno | |
| 149 | + | foundcolour = "brown" | |
| 150 | + | foundproportion = releasecolours[releaseno]["wantbrown"]/releasecolours[releaseno]["hasbrown"] | |
| 151 | + | if releasecolours[releaseno]["wantgrey"] > 0: | |
| 152 | + | if releasecolours[releaseno]["wantgrey"]/releasecolours[releaseno]["hasgrey"] > foundproportion: | |
| 153 | + | foundrelease = releaseno | |
| 154 | + | foundcolour = "grey" | |
| 155 | + | foundproportion = releasecolours[releaseno]["wantgrey"]/releasecolours[releaseno]["hasgrey"] | |
| 156 | + | releaseno += 1 | |
| 157 | + | ||
| 158 | + | print("Release " + str(foundrelease) + ", " + foundcolour + ": " + str(100 * foundproportion) + "%") | |
Newer
Older