Last active 2 weeks ago

releaseprobability.py Raw
1from bs4 import BeautifulSoup
2import wantlist
3
4'''
5Requires 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
8nextrelease = 194
9
10values = ["red","orange","yellow","green","blue","purple","brown","gray","special","limited"]
11
12deckkey = {}
13decknames = []
14
15with open("key.html") as decks:
16 decksoup = BeautifulSoup(decks,"html.parser")
17soupdecks = decksoup.find("table",{"id":"colors"})
18souprows = soupdecks.find_all("tr")
19souprows = souprows[1:]
20for 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
30releasedict = {}
31
32with open("release.html") as releases:
33 releasesoup = BeautifulSoup(releases,"html.parser")
34allreleases = releasesoup.find_all("div")
35for release in allreleases:
36 releaseid = int(release.find("strong").text[-4:-1])
37 releasedecks = release.find("textarea").text.split(", ")
38 releasedict[releaseid] = releasedecks
39
40for 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
51releasecolours = {}
52
53therelease = 1
54while 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
87wantlist = wantlist.thelist
88
89for 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
110foundrelease = False
111foundcolour = False
112foundproportion = 0
113
114releaseno = 1
115while 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
158print("Release " + str(foundrelease) + ", " + foundcolour + ": " + str(100 * foundproportion) + "%")