n | def handle_input(): | n | def process_input(): |
| player_data = {} | | players = {} |
| deck_data = {} | | decks = {} |
| while True: | | while True: |
n | line = input() | n | inp = input() |
| if not line: | | if not inp: |
| break | | break |
n | process_line(line, player_data, deck_data) | n | parse_input(inp, players, decks) |
| return (player_data, deck_data) | | return (players, decks) |
| | | |
n | def process_line(line, player_data, deck_data): | n | def parse_input(line, players, decks): |
| first, second = line.split(' / ') | | part1, part2 = line.split(' / ') |
| if first.isdigit(): | | if part1.isdigit(): |
| store_card_in_deck(first, second, deck_data) | | add_card_to_deck(part1, part2, decks) |
| else: | | else: |
n | assign_deck_to_player(first, second, player_data) | n | add_deck_to_player(part1, part2, players) |
| | | |
n | def store_card_in_deck(deck_id, card_name, deck_data): | n | def add_card_to_deck(deck_num, card_name, decks): |
| if deck_id not in deck_data: | | if deck_num not in decks: |
| deck_data[deck_id] = set() | | decks[deck_num] = set() |
| deck_data[deck_id].add(card_name) | | decks[deck_num].add(card_name) |
| | | |
n | def assign_deck_to_player(player_name, deck_id, player_data): | n | def add_deck_to_player(player_name, deck_num, players): |
| if player_name not in player_data: | | if player_name not in players: |
| player_data[player_name] = set() | | players[player_name] = set() |
| player_data[player_name].add(deck_id) | | players[player_name].add(deck_num) |
| | | |
n | def identify_largest_pack(player_data, deck_data): | n | def find_largest_pack(players, decks): |
| largest_pack = 0 | | max_size = 0 |
| top_players = [] | | result = [] |
| for player, decks in player_data.items(): | | for player, player_decks in players.items(): |
| unique_cards = collect_unique_cards(decks, deck_data) | | unique_cards = gather_unique_cards(player_decks, decks) |
| current_pack_size = len(unique_cards) | | pack_size = len(unique_cards) |
| if current_pack_size > largest_pack: | | if pack_size > max_size: |
| largest_pack = current_pack_size | | max_size = pack_size |
| top_players = [player] | | result = [player] |
| elif current_pack_size == largest_pack: | | elif pack_size == max_size: |
| top_players.append(player) | | result.append(player) |
| return sorted(top_players) | | return sorted(result) |
| | | |
n | def collect_unique_cards(player_decks, deck_data): | n | def gather_unique_cards(player_decks, decks): |
| all_cards = set() | | unique_cards = set() |
| for deck in player_decks: | | for deck in player_decks: |
n | if deck in deck_data: | n | if deck in decks: |
| all_cards.update(deck_data[deck]) | | unique_cards.update(decks[deck]) |
| return all_cards | | return unique_cards |
| | | |
t | def run_program(): | t | def main(): |
| player_data, deck_data = handle_input() | | players, decks = process_input() |
| top_players = identify_largest_pack(player_data, deck_data) | | result = find_largest_pack(players, decks) |
| for player in top_players: | | for name in result: |
| print(player) | | print(name) |
| run_program() | | main() |