diff options
Diffstat (limited to 'prog/aoc/23/3/1.py')
-rwxr-xr-x | prog/aoc/23/3/1.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/prog/aoc/23/3/1.py b/prog/aoc/23/3/1.py new file mode 100755 index 0000000..fce4aa9 --- /dev/null +++ b/prog/aoc/23/3/1.py @@ -0,0 +1,45 @@ +#!/usr/bin/python3 +parts = {} +numbers = [] +ln = 0 +try: + while True: + l = input() + "." + i = 0 + num = "" + for c in l: + if not c.isdigit(): + if num != "": + numbers.append((int(num), ln, i-len(num))) + num = "" + if not c == ".": + parts[(ln, i)] = c + if c.isdigit(): + num += c + i += 1 + ln += 1 +except: + gears = {} + sum = 0 + sumgears = 0 + for number in numbers: + did = False + for char in range(len(str(number[0]))+2): + presek = set([(number[1], number[2]-1+char), (number[1]-1, number[2]-1+char), (number[1]+1, number[2]-1+char)]) & set(parts.keys()); + if len(presek): + if not did: + sum += number[0] + did = True + if len(presek) != 1: + print("unreachable") + part = [x for x in presek][0] + if parts[part] == "*": + if part not in gears: + gears[part] = [] + gears[part].append(number[0]) + for pair in gears.values(): + if len(pair) != 2: + continue + sumgears += pair[0]*pair[1] + print(sum) + print(sumgears) |