Frans Bergman před 3 roky
rodič
revize
5dd99e4372
3 změnil soubory, kde provedl 202 přidání a 0 odebrání
  1. 100 0
      18.input
  2. 92 0
      18.py
  3. 10 0
      18.small.input

+ 100 - 0
18.input

@@ -0,0 +1,100 @@
+[[[6,[0,5]],2],3]
+[[3,9],[[4,[5,5]],[9,4]]]
+[[3,[2,[0,7]]],[[1,[0,1]],[8,[2,4]]]]
+[[[[3,0],[8,1]],[[5,6],[3,5]]],[5,[[7,9],[5,1]]]]
+[[[9,5],1],[[2,6],[4,[4,6]]]]
+[2,[5,[3,0]]]
+[[[[3,8],9],[[9,2],[7,7]]],5]
+[[[[8,5],3],[0,[0,8]]],[9,[6,[8,1]]]]
+[[[[9,6],[9,1]],[[3,4],3]],[2,2]]
+[[3,[[7,7],2]],[[[9,9],[8,6]],2]]
+[[[[3,5],8],[4,[9,4]]],7]
+[[1,[6,[2,6]]],[[7,0],[[3,1],9]]]
+[[[[0,5],0],[0,[2,4]]],[7,[6,[1,6]]]]
+[0,[6,[3,1]]]
+[4,[[[1,2],0],[[6,3],6]]]
+[[[[4,3],[8,5]],[9,[0,5]]],[[[8,1],3],[8,8]]]
+[[3,[6,7]],[[[1,4],[2,1]],[9,[2,8]]]]
+[[[[3,0],[4,5]],4],[[3,[5,7]],6]]
+[[8,[5,[3,9]]],[[[1,9],[8,7]],7]]
+[[[0,[3,4]],[[0,1],6]],[1,5]]
+[6,[[9,4],[9,0]]]
+[[4,9],[[[0,9],9],8]]
+[5,[0,[3,6]]]
+[[[[3,9],[1,1]],[4,0]],[4,[[5,7],6]]]
+[[[6,[2,1]],[4,[3,3]]],[[6,[5,6]],[7,[5,0]]]]
+[[[8,4],[[1,2],[2,0]]],[[6,[5,6]],[6,4]]]
+[[[5,9],7],[[[3,4],[2,1]],2]]
+[[[8,8],5],[6,[[9,1],1]]]
+[[[[3,4],1],[1,[4,2]]],[[[9,1],[2,0]],3]]
+[[[5,[1,7]],[3,[9,7]]],[[2,0],[[7,7],5]]]
+[[[6,9],6],[6,[[4,2],[5,3]]]]
+[[[[6,5],[5,0]],[[6,9],7]],6]
+[[[[2,8],[3,2]],[8,8]],[[[4,6],7],[2,[2,3]]]]
+[[[3,4],1],5]
+[[6,[[7,4],8]],[[6,[9,2]],9]]
+[[[[0,4],0],[[3,1],[3,6]]],[0,[[2,8],[5,5]]]]
+[[5,[[1,2],6]],[[[1,9],[2,2]],[9,[1,0]]]]
+[[[[7,7],5],[[0,0],[0,5]]],[[5,4],[5,[8,1]]]]
+[[[[8,7],6],[0,[0,3]]],[2,[[9,8],0]]]
+[6,7]
+[[[[5,2],[2,2]],[[8,1],[2,7]]],2]
+[[[1,0],[[9,8],[2,1]]],4]
+[[[[5,2],[2,0]],7],[[2,[4,4]],[3,3]]]
+[[8,3],[[7,2],[[1,5],9]]]
+[[[[9,4],[7,5]],[[4,9],1]],[[[0,6],[1,6]],[[4,2],3]]]
+[4,[5,[5,3]]]
+[[1,[[0,1],6]],[[[8,8],6],0]]
+[[[0,3],[1,2]],[[6,8],[7,[4,7]]]]
+[3,[[[5,8],[6,9]],[8,[5,4]]]]
+[[1,1],[[8,[7,0]],9]]
+[2,2]
+[[3,[[0,4],1]],[[7,[2,3]],[8,4]]]
+[[[0,2],[5,[5,6]]],[[[8,1],[5,2]],8]]
+[[[[9,5],6],[[7,2],[2,1]]],[[[0,0],0],[[7,9],[9,1]]]]
+[[1,7],[1,[[6,3],8]]]
+[4,[[[7,4],1],[[1,9],6]]]
+[[[[7,8],9],3],[[[5,0],9],8]]
+[[[1,3],[[8,3],[1,9]]],[[[6,2],5],5]]
+[[8,[[6,6],[1,4]]],[[2,[9,0]],[9,[2,2]]]]
+[[0,[[1,6],8]],[[[3,7],[9,2]],[3,[3,6]]]]
+[[0,[5,6]],[[[6,5],1],8]]
+[[[[9,0],[1,1]],[[1,0],1]],[[[2,5],7],[5,[0,3]]]]
+[2,[2,[[3,8],[5,5]]]]
+[[[[4,0],2],[4,2]],[[5,[8,1]],[[2,7],6]]]
+[[[1,[3,5]],6],0]
+[[[3,3],[1,[2,1]]],[[3,[1,1]],[7,0]]]
+[[[[8,5],3],[2,[3,0]]],[[[4,8],[8,8]],[9,[2,0]]]]
+[[[[8,3],[9,8]],[[8,3],2]],[5,[5,8]]]
+[[[1,9],8],[[[0,3],[9,1]],[[9,1],[4,2]]]]
+[[[4,1],6],[[5,2],[4,2]]]
+[[7,[5,[3,0]]],[[0,[0,1]],[1,[9,6]]]]
+[[[[0,3],[8,9]],1],[6,2]]
+[[5,[7,8]],[[5,3],[[9,8],[6,2]]]]
+[[[[3,6],8],9],[[3,[6,2]],[0,1]]]
+[[[5,3],[6,[0,3]]],6]
+[[[2,9],7],[[[4,2],9],8]]
+[[[7,[3,5]],[6,[5,9]]],[[[3,2],[5,6]],1]]
+[[0,[[9,1],6]],8]
+[[[[3,5],[2,2]],[[9,8],9]],[8,8]]
+[[[[6,9],[2,0]],[6,1]],[1,5]]
+[[[0,[9,9]],[[3,1],9]],[[[4,8],2],[3,[4,8]]]]
+[[[5,3],[6,3]],[6,[[2,7],[3,2]]]]
+[[[5,[7,3]],8],[[2,[0,0]],[9,5]]]
+[[[7,[4,3]],[[9,6],[5,7]]],[[[1,8],[3,0]],[[2,4],[7,3]]]]
+[[[3,[2,1]],[1,2]],[7,[[5,4],8]]]
+[[4,[[2,6],[7,9]]],[[[1,8],3],[[0,1],[5,4]]]]
+[[[4,0],4],[3,7]]
+[[[4,[7,7]],5],[2,3]]
+[[[[7,7],[9,3]],8],[[[3,8],6],[[1,2],[9,6]]]]
+[[7,[[7,5],[7,8]]],[2,[[4,3],[6,3]]]]
+[[[7,3],[[8,2],[6,5]]],1]
+[[8,[7,[9,6]]],[5,[[2,2],2]]]
+[[[3,[8,9]],[[3,8],[3,3]]],[4,[7,[5,0]]]]
+[[[[2,0],[1,0]],3],[6,[[1,3],[5,4]]]]
+[[1,8],[8,[[6,7],3]]]
+[4,[[[3,4],[7,8]],[7,[7,1]]]]
+[[[4,8],[9,[7,4]]],6]
+[[[7,3],[[2,9],7]],[[[2,5],8],[2,5]]]
+[7,[[[8,7],0],[[3,1],6]]]
+[[6,[2,[3,2]]],[[[5,4],2],[[2,6],[8,4]]]]

+ 92 - 0
18.py

@@ -0,0 +1,92 @@
+from util import get_input
+from math import floor, ceil
+from functools import reduce
+from itertools import product
+
+def parse(line):
+    return eval(line)
+
+input = get_input("18.input", parse)
+
+def add(a, b):
+    return red([a, b])
+
+def red(a_in):
+    a = list(a_in)
+    while True:
+        old_a = list(a)
+        a = try_explode(a, 0)[0]
+        if a != old_a:
+            continue
+        a = try_split(a)
+        if old_a == a:
+            break
+    return a
+
+
+def add_const(a, c, left):
+    if type(a) == int:
+        return a + c
+    elif left:
+        return [add_const(a[0], c, left), a[1]]
+    else:
+        return [a[0], add_const(a[1], c, left)]
+
+
+def try_explode(a, depth):
+    if type(a) == int:
+        return a, [0, 0], False
+    if depth == 4:
+        return 0, a, True
+    a0, [l, r], ex = try_explode(a[0], depth + 1)
+    if ex:
+        return [a0, add_const(a[1], r, True)], [l, 0], True
+    a1, [l, r], ex = try_explode(a[1], depth + 1)
+    if ex:
+        return [add_const(a[0], l, False), a1], [0, r], True
+    return [a0, a1], [0, 0], False
+
+def test_explode():
+    print(try_explode([[[[[9,8],1],2],3],4], 0)[0])
+    print(try_explode([7,[6,[5,[4,[3,2]]]]], 0)[0])
+    print(try_explode([[6,[5,[4,[3,2]]]],1], 0)[0])
+    print(try_explode([[3,[2,[1,[7,3]]]],[6,[5,[4,[3,2]]]]], 0)[0])
+    print(try_explode([[3,[2,[8,0]]],[9,[5,[4,[3,2]]]]], 0)[0])
+
+def try_split(a):
+    if type(a) == int:
+        if a >= 10:
+            return [floor(a / 2), ceil(a / 2)]
+        else:
+            return a
+    else:
+        l = try_split(a[0])
+        if l != a[0]:
+            return [l, a[1]]
+        else:
+            return [a[0], try_split(a[1])]
+
+def test_add():
+    print(add([[[[4,3],4],4],[7,[[8,4],9]]], [1,1]))
+    t2 = [[1,1],
+            [2,2],
+            [3,3],
+            [4,4]]
+    print(reduce(add, t2))
+    t3 = [[1,1],
+            [2,2],
+            [3,3],
+            [4,4],
+            [5,5],
+            [6,6]]
+    print(reduce(add, t3))
+
+def magnitude(a):
+    if type(a) == int:
+        return a
+    else:
+        return 3 * magnitude(a[0]) + 2 * magnitude(a[1])
+
+print("Part 1:", magnitude(reduce(add, input)))
+
+print("Part 2:", max(magnitude(add(a, b)) for [a, b] in product(input, repeat=2)))

+ 10 - 0
18.small.input

@@ -0,0 +1,10 @@
+[[[0,[5,8]],[[1,7],[9,6]]],[[4,[1,2]],[[1,4],2]]]
+[[[5,[2,8]],4],[5,[[9,9],0]]]
+[6,[[[6,2],[5,6]],[[7,6],[4,7]]]]
+[[[6,[0,7]],[0,9]],[4,[9,[9,0]]]]
+[[[7,[6,4]],[3,[1,3]]],[[[5,5],1],9]]
+[[6,[[7,3],[3,2]]],[[[3,8],[5,7]],4]]
+[[[[5,4],[7,7]],8],[[8,3],8]]
+[[9,3],[[9,9],[6,[4,9]]]]
+[[2,[[7,7],7]],[[5,8],[[9,3],[0,2]]]]
+[[[[5,2],5],[8,[3,7]]],[[5,[7,5]],[4,4]]]