def parseline(line): meaningful_input = line.split(":")[1] input_split = meaningful_input.split("|") winning_numbers = input_split[0].strip().split(" ") your_numbers = input_split[1].strip().split(" ") return winning_numbers, your_numbers def get_point_value_for_line(winning_numbers, your_numbers): count = 0 hashmap = {} for number in winning_numbers: for index, y in enumerate(your_numbers): if y == number and not hashmap.get(index): count += 1 hashmap[index] = True if count == 0: return 0 return 2**(count - 1) def get_lines(filename): values = [] with open(filename, "r") as inputfile: for line in inputfile: winning_numbers, your_numbers = parseline(line) value = get_point_value_for_line(winning_numbers, your_numbers) values.append(value) return sum(values) if __name__ == '__main__': print(get_lines("input"))