#!/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)