knowable_facts = [ 'children:', 'cats:', 'samoyeds:', 'pomeranians:', 'akitas:', 'vizslas:', 'goldfish:', 'trees:', 'cars:', 'perfumes:'] known_facts = { 'children:' : 3, 'cats:' : 7, 'samoyeds:' : 2, 'pomeranians:' : 3, 'akitas:' : 0, 'vizslas:' : 0, 'goldfish:' : 5, 'trees:' : 3 , 'cars:' : 2, 'perfumes:' : 1 } file = open('input.txt', 'r') sues = {} sue_score = [] def fact_remembered(sue_key, key): if sues[sue_key][key] == -1: return False else: return True for line in file: splits = line.split(' ') sues.setdefault(splits[1], { 'children:' : -1, 'cats:' : -1, 'samoyeds:' : -1, 'pomeranians:' : -1, 'akitas:' : -1, 'vizslas:' : -1, 'goldfish:' : -1, 'trees:' : -1 , 'cars:' : -1, 'perfumes:' : -1 }) for i in range(2, len(splits)-1, 2): key = splits[i] value = splits[i+1] value = int(value.strip(',')) sues[splits[1]][key] = value score = 0 for fact in knowable_facts: if fact_remembered(splits[1], fact): if fact == 'cats:' or fact == 'trees:': if sues[splits[1]][fact] > known_facts[fact]: score += 1 elif fact == 'pomeranians:' or fact == 'trees:': if sues[splits[1]][fact] < known_facts[fact]: score += 1 elif sues[splits[1]][fact] == known_facts[fact]: score += 1 sue_score.append([score, splits[1]]) print( min(sue_score), max(sue_score) )