diff --git a/analyze.py b/analyze.py new file mode 100644 index 0000000..bed21ba --- /dev/null +++ b/analyze.py @@ -0,0 +1,81 @@ +import re +import sys +from mtg import * +import database + +def graph(data, title, hideEmpty=True): + categories = sorted(data.keys()) + cjust = sorted([len(str(k)) for k in data.keys()]).pop() + vjust = sorted([len(str(v)) for v in data.values()]).pop() + max = sorted(data.values()).pop() + print title + print '-' * 80 + for category in categories: + if hideEmpty and not data[category]: + continue + heading = str(category).ljust(cjust) + value = str(data[category]).rjust(vjust) + bar = '*' * int(data[category] * (80 - cjust - vjust - 6) / float(max)) + print '{0} [{1}] | {2}'.format(heading, value, bar) + if hideEmpty and not max: + print ' *** Nothing to display ***' + +def mana_curve(deck): + costs = [c.cost.converted() for c in deck if c.cost.converted() > 0] + data = {} + for i in range(1, sorted(costs).pop() + 1): + data[i] = 0 + for c in costs: + data[c] += 1 + return data +def types(deck): + return { + 'Lands': len([c for c in deck if 'land' in c.type.split(' ')]), + 'Creatures': len([c for c in deck if 'creature' in c.type.split(' ')]), + 'Artifacts': len([c for c in deck if 'artifact' in c.type.split(' ')]), + 'Enchantments': len([c for c in deck if 'enchantment' in c.type.split(' ')]), + 'Sorceries': len([c for c in deck if 'sorcery' in c.type.split(' ')]), + 'Instants': len([c for c in deck if 'instant' in c.type.split(' ')]), + } +def colors(deck): + data = {} + for color in Mana.types.values(): + data[color] = 0 + for card in deck: + if 'land' in card.type.split(' '): + if 'swamp' in card.attributes: data[Mana.types['B']] += 1 + if 'island' in card.attributes: data[Mana.types['U']] += 1 + if 'mountain' in card.attributes: data[Mana.types['R']] += 1 + if 'forest' in card.attributes: data[Mana.types['G']] += 1 + if 'plains' in card.attributes: data[Mana.types['W']] += 1 + else: + for color, value in card.cost.mana.mana.iteritems(): + data[Mana.types[color]] += 1 if value > 0 else 0 + return data + +db = database.TextDB('db.txt') + +if len(sys.argv) < 2: + print 'No decks specified.' + sys.exit(1) +for filename in sys.argv[1:]: + print 'Loading deck in "{0}"...'.format(filename) + deck = Deck() + with open(filename, 'r') as f: + for line in f: + line = line.strip() + if not re.match('^\d+ .+$', line): + continue + line = line.split(' ') + count = int(line.pop(0)) + name = ' '.join(line) + card = db.getCard(name) + if not card: + print 'Invalid card: ', name + continue + deck.extend(card * count) + + print 'Loaded', len(deck), 'cards.' + graph(mana_curve(deck), '\nMana Curve', hideEmpty=False) + graph(types(deck), '\nCard Types') + graph(colors(deck), '\nColors')