Last active 2 weeks ago

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