Untitled
unknown
python
3 years ago
1.7 kB
5
Indexable
import math input = open("data.txt", "r").readlines() def tolist(str): str = str.replace("[", "[ ").replace("]", " ] ").replace(",", " , ").split() return map(lambda ch: int(ch) if ch.isdigit() else ch, str) def closest(left, right): il, ir = -1, -1 for i, ch in reversed(list(enumerate(left))): if type(ch) == int: il = i break for i, ch in enumerate(right): if type(ch) == int: ir = i break return (il, ir) def explode(num): depth = 0 for i, ch in enumerate(num): if ch == "[": depth += 1 if ch == "]": depth -= 1 if type(ch) == int and depth > 4: a, b = num[i], num[i+2] left, right = num[:i-1], num[i+4:] il, ir = closest(left, right) if (il > -1): left[il] += a if (ir > -1): right[ir] += b num = left + [0] + right return explode(num) return num def split(num): num = explode(num) for i, ch in enumerate(num): if type(ch) == int and ch > 9: left, right = num[:i], num[i+1:] val = int(ch) / 2.0 a, b = int(math.floor(val)), int(math.ceil(val)) num = left + ["["] + [a] + [","] + [b] + ["]"] + right return split(num) return num tostr = lambda num: "".join(map(str, num)) add = lambda a,b: ["["] + a + [","] + b + ["]"] magnitude = lambda num: eval(tostr(num).replace("[", "(3*").replace(",", "+").replace("]", "*2)")) max_magn = 0 for a in input: for b in input: max_magn = max(magnitude(split(add(tolist(a.strip()), tolist(b.strip())))), max_magn) print "Max. magnitude:", max_magn
Editor is loading...