from utils import open_day from ast import literal_eval from functools import cmp_to_key with open_day(13) as f: pairs = [tuple(literal_eval(v) for v in p.split('\n')) for p in f.read().rstrip().split('\n\n')] def compare(l, r): if isinstance(l, list): if isinstance(r, list): for a, b in zip(l, r): cmp = compare(a, b) if cmp != 0: return cmp return compare(len(l), len(r)) else: return compare(l, [r]) else: if isinstance(r, list): return compare([l], r) else: return min(max(l - r, -1), 1) p1 = 0 for i, (l, r) in enumerate(pairs): cmp = compare(l, r) if cmp < 0: p1 += i + 1 print(p1) p2 = [[[2]],[[6]]] for l, r in pairs: p2.append(l) p2.append(r) p2.sort(key=cmp_to_key(compare)) print((p2.index([[2]]) + 1) * (p2.index([[6]]) + 1))