| 123456789101112131415161718192021222324252627282930 |
- #!/usr/bin/env python3
- import sys
- from operator import eq, gt, lt
- fields = ['children', 'cats', 'samoyeds', 'pomeranians', 'akitas',
- 'vizslas', 'goldfish', 'trees', 'cars', 'perfumes']
- def parse(f):
- for line in f:
- left, right = line.rstrip().split(': ', 1)
- sig = [None] * len(fields)
- for prop in right.split(', '):
- key, val = prop.split(': ')
- sig[fields.index(key)] = int(val)
- yield int(left[4:]), sig
- def find_sue(needle, haystack):
- for sue, sig in haystack:
- if all(s is None or op(s, n) for s, (op, n) in zip(sig, needle)):
- return sue
- sues = list(parse(sys.stdin))
- sig = [(eq, n) for n in [3, 7, 2, 3, 0, 0, 5, 3, 2, 1]]
- print(find_sue(sig, sues))
- sig[1] = gt, 7
- sig[7] = gt, 3
- sig[3] = lt, 3
- sig[6] = lt, 5
- print(find_sue(sig, sues))
|