def get_cards_for_fastest_win(cards, identity=None, full_deck=None): if not identity: identity = cards.identity if not full_deck: full_deck = cards points_to_win = 7 if identity.name == "Harmony Medtech: Biomedical Pioneer": points_to_win = 6 agendas = data.get_cards_of_type('agenda', cards) agendas = data.get_agendas_to_fastest_win(agendas, identity, points_to_win) if not agendas: return False actions_to_play = data.sum_over_attr("actions", agendas, convert_type=int) total_cost = data.sum_over_attr('cost', agendas, convert_type=int) start_credits = 5 clicks_per_turn = 3 # for now, assume player must use actions to take credits #turns_for_credits = max(0, total_cost - 5) credits_needed = max(0, total_cost - 5) money_makers = data.get_money_making_cards(full_deck, instant=True) money_makers = parse.get_full_card_list(money_makers) money_makers = sorted(money_makers, key=lambda card: int(card.net_cost)) money_makers_used = [] actions_used_for_moneymakers = 0 for card in money_makers: if credits_needed < card.actions: break money_makers_used.append(card) credits_needed -= card.net_income actions_used_for_moneymakers += card.actions return agendas + money_makers_used
def agenda_points(cards, **kwargs): num_agenda_points = data.sum_over_attr('agendapoints', cards, convert_type=int) if num_agenda_points == 0: return '/' return num_agenda_points
def total_out_of_faction_influence(cards, faction=None, **kwargs): if not faction: raise ValueError out_of_faction_cards = data.get_cards_of_attr_not_in( "identity", faction, cards) return data.sum_over_attr("loyalty", out_of_faction_cards, convert_type=int)
def average_actions_to_score_winning_agendas(cards, identity=None, **kwargs): points_to_win = 7 if identity.name == "Harmony Medtech: Biomedical Pioneer": points_to_win = 6 agendas = data.get_cards_of_type('agenda', cards) print '^'*20 for card in agendas: print card.name, card.actions, card.agendapoints print '^'*20 num_agendas = data.get_total_cards(agendas) total_actions = data.sum_over_attr('actions', agendas, convert_type=int) total_points = data.sum_over_attr('agendapoints', agendas, convert_type=int) ratio = points_to_win / float(total_points) #actions_per_agenda = float(total_actions) / num_agendas average_actions_to_score = float(total_actions) * ratio if average_actions_to_score == int(average_actions_to_score): return int(average_actions_to_score) return round(average_actions_to_score, 2)
def average_actions_to_score_winning_agendas(cards, identity=None, **kwargs): points_to_win = 7 if identity.name == "Harmony Medtech: Biomedical Pioneer": points_to_win = 6 agendas = data.get_cards_of_type('agenda', cards) print '^' * 20 for card in agendas: print card.name, card.actions, card.agendapoints print '^' * 20 num_agendas = data.get_total_cards(agendas) total_actions = data.sum_over_attr('actions', agendas, convert_type=int) total_points = data.sum_over_attr('agendapoints', agendas, convert_type=int) ratio = points_to_win / float(total_points) #actions_per_agenda = float(total_actions) / num_agendas average_actions_to_score = float(total_actions) * ratio if average_actions_to_score == int(average_actions_to_score): return int(average_actions_to_score) return round(average_actions_to_score, 2)
def average_agendas_scored_to_win(cards, identity=None, **kwargs): points_to_win = 7 if identity.name == "Harmony Medtech: Biomedical Pioneer": points_to_win = 6 agendas = data.get_cards_of_type('agenda', cards) num_agendas = data.get_total_cards(agendas) total_agenda_points = data.sum_over_attr('agendapoints', agendas, convert_type=int) points_per_agenda = float(total_agenda_points) / float(num_agendas) num_scored_to_win = float(points_to_win) / points_per_agenda if int(num_scored_to_win) == num_scored_to_win: return int(num_scored_to_win) return round(num_scored_to_win, 2)
def net_income_draw_rate(cards, full_deck=None, **kwargs): income_cards = data.get_money_making_cards(cards, instant=True) total_net_income = data.sum_over_attr('net_income', income_cards) total_cards = data.get_total_cards(full_deck) net_income_draw_rate = float(total_net_income) / total_cards return round(net_income_draw_rate, 2)
def total_cost_of_deck(cards, full_deck=None, **kwargs): if not full_deck: return False total_cost = data.sum_over_attr("cost", full_deck, convert_type=int) return total_cost
def total_cost(cards, **kwargs): total_cost = data.sum_over_attr("cost", cards, convert_type=int) return total_cost
def total_cost_without_duplicates(cards, **kwargs): total_cost = data.sum_over_attr("cost", cards, convert_type=int, unique=True) return total_cost
def total_net_cost_with_draw(cards, **kwargs): return data.sum_over_attr("net_cost_with_draw", cards, convert_type=int)
def total_memory_units_without_duplicates(cards, **kwargs): total = data.sum_over_attr("memory", cards, convert_type=int, unique=True) return total
def total_out_of_faction_influence(cards, faction=None, **kwargs): if not faction: raise ValueError out_of_faction_cards = data.get_cards_of_attr_not_in("identity", faction, cards) return data.sum_over_attr("loyalty", out_of_faction_cards, convert_type=int)
def number_of_agenda_points(deck, **kwargs): agendas = data.get_cards_of_attr("type", "agenda", deck) total = data.sum_over_attr("agendapoints", agendas) return ("Number of agenda points", total)
def total_memory_units(cards, **kwargs): total = data.sum_over_attr("memory", cards, convert_type=int) return total