Untitled

 avatar
unknown
python
2 years ago
1.5 kB
6
Indexable
def process_input_file(input_filename):
    data = {}
    with open(input_filename, 'r') as fh:
        for line in fh:
            (card_num, numbers) = line.strip().split(":")
            # grab the card number in case we need it later
            # it uses spaces to align
            card_num = int(card_num.split(" ")[-1])
            (winning_nums, our_nums) = numbers.split("|")
            winning_nums = [int(n) for n in winning_nums.split(" ") if n != ""]
            our_nums = [int(n) for n in our_nums.split(" ") if n != ""]
            data[card_num] = {"winning_numbers": winning_nums, "revealed_numbers": our_nums, "number_of_cards": 1}
    return data

def get_number_of_matches(data):
    results = {}
    for (card_num, game_data) in data.items():
        matches = 0
        for n in game_data["revealed_numbers"]:
            if n in game_data["winning_numbers"]:
                matches += 1
        # for every n matches, the next n cards get another card added to them
        for m in range(1, 1 + matches):
            next_game_num = card_num + m
            if next_game_num in data:
                data[next_game_num]["number_of_cards"] += game_data["number_of_cards"]
        results[card_num] = game_data["number_of_cards"]
    return results

if __name__ == "__main__":
    data = process_input_file("p4_input.txt")
    results = get_number_of_matches(data)
    print(sum(results.values()))
Editor is loading...
Leave a Comment