diff options
| author | nekineki <nekineki@nekineki.net> | 2022-12-13 07:26:36 +0100 |
|---|---|---|
| committer | nekineki <nekineki@nekineki.net> | 2022-12-13 07:26:36 +0100 |
| commit | d5a479c44f28be5b57949fb855c5e16c9fa90a04 (patch) | |
| tree | 749b6a366d78e85b6a2f1a65dd0601c9b2c71664 /2022/day13.py | |
| parent | 45183abd7924f2d01aac0df10c012d564a94cf91 (diff) | |
day13
Diffstat (limited to '2022/day13.py')
| -rwxr-xr-x | 2022/day13.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/2022/day13.py b/2022/day13.py new file mode 100755 index 0000000..cf65dfb --- /dev/null +++ b/2022/day13.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 + +# import numpy as np +from functools import reduce +from re import findall +from copy import deepcopy +import sys + +# filename = "in/day13.ref" +filename = "in/day13.pzl" +data = open(filename).read() +lines = [line for line in data.rstrip('\n').split('\n')] + +pairs = list() +for pair in data.strip().split('\n\n'): + p = list() + for l in pair.split('\n'): + p.append(eval(l.strip())) + pairs.append(p) + +res1 = 0 +res2 = 0 + +def check_pair(l,r): + if type(l) == int and type(r) == int: + if l > r: + return 0 + elif l < r: + return 1 + else: + return 2 + elif type(l) == list and type(r) == list: + ret = 2 + for ll,rr in zip(l,r): + ret = check_pair(ll,rr) + if ret == 0: + return 0 + elif ret == 1: + return 1 + if ret == 2: + if len(l) > len(r): + return 0 + if len(l) == len(r): + return 2 + elif type(l) == list and type(r) == int: + return check_pair(l, [r]) + elif type(l) == int and type(r) == list: + return check_pair([l], r) + return 1 + +## part 1 ## +for i,(l,r) in enumerate(pairs): + ret = check_pair(l,r) + # print(i+1, ret, l,r) + if ret != 0: + res1 += i+1 + +## part 2 ## +ordered = list() +divs = [ [[2]], [[6]] ] +for div in divs: + ordered.append(div) +for l,r in pairs: + ordered.append(l) + ordered.append(r) + +for i in range(len(ordered)): + for j in range(1,len(ordered)): + if check_pair(ordered[j-1], ordered[j]) == 0: + ordered[j-1], ordered[j] = ordered[j], ordered[j-1] +# for line in ordered: +# print(line) + +res2 = 1 +for i,ele in enumerate(ordered): + if ele in divs: + res2 *= i+1 + +print('res1:', res1) +print('res2:', res2) + |
