self.log() for player in self.players: self.log('player:', player.id, player.n_cards, sorted(player.must_have, key=lambda x: x.name), sorted(player.may_have, key=lambda x: x.name), '\n ', player.selection_groups) self.log('current:', [type.solution for type in self.card_types]) self.log('possible_solutions:', len(self.possible_solutions)) for sol, count in self.possible_solutions.items(): self.log(' ', sol, count) self.log('id|', end='') def end(): return ' | ' if card.name in [g[-1] for g in CARDS] else '|' for card in self.cards: self.log(card.name, end=end()) self.log() for player in self.players: self.log(' *'[player.id == self.player.id] + str(player.id), end='|') for card in self.cards: self.log( ' ' + 'xo'[player in card.possible_owners or player is card.owner], end=end()) self.log() if __name__ == '__main__': main(AI01, BufMessager)
class SimpleAI(Player): def reset(self, player_count, player_id, cards): self.n_players = player_count self.id = player_id self.cards = cards self.suggest_choices = list(itertools.product(*CARDS)) def suggest(self): cards = random.choice(self.suggest_choices) self.suggest_choices.remove(cards) return cards def suggestion(self, player_id, cards, disprove_player_id=None, card=None): pass def accuse(self): return None def disprove(self, suggest_player_id, cards): for card in self.cards: if card in cards: return card def accusation(self, player_id, cards, is_win): return None if __name__ == '__main__': main(SimpleAI, BufMessager) # main(SimpleAI, LineMessager)
self.log() for player in self.players: self.log('player:', player.id, player.n_cards, sorted(player.must_have, key=lambda x: x.name), sorted(player.may_have, key=lambda x: x.name), '\n ', player.selection_groups) self.log('current:', [type.solution for type in self.card_types]) self.log('possible_solutions:', len(self.possible_solutions)) for sol, count in self.possible_solutions.items(): self.log(' ', sol, count) self.log('id|', end='') def end(): return ' | ' if card.name in [g[-1] for g in CARDS] else '|' for card in self.cards: self.log(card.name, end=end()) self.log() for player in self.players: self.log(' *'[player.id == self.player.id] + str(player.id), end='|') for card in self.cards: self.log(' ' + 'xo'[player in card.possible_owners or player is card.owner], end=end()) self.log() if __name__ == '__main__': main(AI01, BufMessager)