How many different decks with mana costs equal to 20 are currently possible? I wrote a small python script to answer this question. I did the following steps:
The Gold cards are special, as they can be combined with another color. So I created a unique name, e.g. "Gold_Red" for this.
All colors can be combined with Gray cards. "Red" means the combination of "Red" and "Gray" cards. I added also "Pure_Red" which excludes the use of "Gray" cards.
| color | card combinations with mana=20 |
|---|---|
| Red | 2478 |
| Blue | 2304 |
| Green | 1787 |
| Black | 3444 |
| White | 2181 |
| Gold | 77 |
| Pure_Red | 79 |
| Pure_Blue | 81 |
| Pure_Green | 64 |
| Pure_Black | 98 |
| Pure_White | 79 |
| Pure_Gold | 1 |
| Gold_Red | 1298 |
| Gold_Blue | 1198 |
| Gold_Green | 936 |
| Gold_Black | 1805 |
| Gold_White | 1126 |
| Pure_Gold_Red | 71 |
| Pure_Gold_Blue | 69 |
| Pure_Gold_Green | 53 |
| Pure_Gold_Black | 98 |
| Pure_Gold_White | 66 |
| summoner | card combinations with mana=20 |
|---|---|
| Malric Inferno | 1070 |
| Alric Stormbringer | 994 |
| Lyanna Natura | 770 |
| Tyrus Paladium | 936 |
| Zintar Mortalis | 1494 |
| Selenia Sky | 6055 |
| Talia Firestorm | 1408 |
| Xia Seachan | 1310 |
| Xander Foxwood | 1017 |
| Kiara Lightbringer | 1245 |
| Jarlax the Undead | 1950 |
The new Gray cards increase the number of deck combination a lot. Selenia Sky is the summoner with the highest number of card combinations, whereas Lyanna Natura has the lowest number of card combinations.
The new summoner from the beta release increases the number of card combinations, as their mana cost is reduced by 1.
The Black cards have the highest number of card combinations and Green cards have the lowest number of card combinations.
import requests
import itertools
if __name__ == "__main__":
response = requests.get("https://steemmonsters.com/cards/get_details")
cards = {}
for r in response.json():
cards[r["id"]] = r
colors = {"Red": ["Red", "Gray"], "Blue": ["Blue", "Gray"], "Green": ["Green", "Gray"],
"Black": ["Black", "Gray"], "White": ["White", "Gray"], "Gold": ["Gold", "Gray"],
"Pure_Red": ["Red"], "Pure_Blue": ["Blue"], "Pure_Green": ["Green"],
"Pure_Black": ["Black"], "Pure_White": ["White"], "Pure_Gold": ["Gold"],
"Gold_Red": ["Gold", "Red", "Gray"], "Gold_Blue": ["Gold", "Blue", "Gray"],
"Gold_Green": ["Gold", "Green", "Gray"], "Gold_Black": ["Gold", "Black", "Gray"],
"Gold_White": ["Gold", "White", "Gray"],
"Pure_Gold_Red": ["Gold", "Red"], "Pure_Gold_Blue": ["Gold", "Blue"],
"Pure_Gold_Green": ["Gold", "Green"], "Pure_Gold_Black": ["Gold", "Black"],
"Pure_Gold_White": ["Gold", "White"]}
min_mana = 20
max_mana = 20
level = -1
all_summoner_list = []
all_monster_list = []
for r in cards:
if cards[r]["type"] == "Monster":
all_monster_list.append(r)
else:
all_summoner_list.append(r)
color_sets = {}
for color in colors:
print("Calculating combinations for %s" % (color))
summoner_list = []
monster_list = []
for r in cards:
if cards[r]["color"] not in colors[color]:
continue
if cards[r]["type"] == "Monster":
monster_list.append(r)
elif cards[r]["color"] == colors[color][0]:
summoner_list.append(r)
sets = []
for k in summoner_list:
for L in range(0, len(monster_list)+1):
for subset in itertools.combinations(monster_list, L):
mana = 0
mana += cards[k]["stats"]["mana"]
for s in subset:
mana += cards[s]["stats"]["mana"][level]
new_set = set((k,) + subset)
if mana <= max_mana and mana >= min_mana:
if new_set not in sets:
sets.append(new_set)
color_sets[color] = sets
summoner_sets = {}
for summoner in all_summoner_list:
for c in color_sets:
for s in color_sets[c]:
if summoner not in s:
continue
if summoner not in summoner_sets:
summoner_sets[summoner] = [s]
elif s not in summoner_sets[summoner]:
summoner_sets[summoner].append(s)
print("| color | card combinations with mana=20 |")
print("| --- | --- |")
for color in colors:
print("| %s | %d |" % (color, len(color_sets[color])))
print("| summoner | card combinations with mana=20 |")
print("| --- | --- |")
for s in summoner_sets:
print("| %s | %d |" % (cards[s]["name"], len(summoner_sets[s])))
update: I did a small mistake in the script. The results are now corrected.