summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom van der Lee <t0m.vd.l33@gmail.com>2022-12-13 10:11:31 +0100
committerGravatar Tom van der Lee <t0m.vd.l33@gmail.com>2022-12-13 10:11:31 +0100
commitda1c74cc6ac28819332f1d71da9949eea8e26b55 (patch)
treedb0e3e321e796a7fbe4ae2c85567db4c7206b594
parent9ba6ef9d5eeb1e093b2072c10b5092d829594d3b (diff)
download2022-da1c74cc6ac28819332f1d71da9949eea8e26b55.tar.gz
2022-da1c74cc6ac28819332f1d71da9949eea8e26b55.tar.bz2
2022-da1c74cc6ac28819332f1d71da9949eea8e26b55.zip
Day 13
-rw-r--r--day13/__init__.py87
-rw-r--r--day13/example.txt23
-rw-r--r--day13/input.txt449
3 files changed, 559 insertions, 0 deletions
diff --git a/day13/__init__.py b/day13/__init__.py
new file mode 100644
index 0000000..d9fd9f2
--- /dev/null
+++ b/day13/__init__.py
@@ -0,0 +1,87 @@
1# -*- coding: utf-8 -*-
2import json
3from abc import ABC
4from functools import cmp_to_key, reduce
5from typing import Iterator, Any, List, Tuple, Union
6
7from aoc import BaseAssignment
8
9
10Packet = Union[List[int], int, List["Packet"]]
11
12
13class Assignment(BaseAssignment, ABC):
14 def compare_pair(self, pair: Tuple[Packet, Packet]):
15 packet_a, packet_b = pair
16
17 if isinstance(packet_a, int) and isinstance(packet_b, int):
18 diff = packet_b - packet_a
19 return diff / abs(diff) if diff != 0 else 0
20
21 if isinstance(packet_a, list) and isinstance(packet_b, int):
22 packet_b = [packet_b]
23
24 if isinstance(packet_b, list) and isinstance(packet_a, int):
25 packet_a = [packet_a]
26
27 try:
28 for sub_pair in zip(packet_a, packet_b, strict=True):
29 comparison = self.compare_pair(sub_pair)
30
31 if comparison != 0:
32 return comparison
33 except ValueError:
34 return self.compare_pair((len(packet_a), len(packet_b)))
35
36 return 0
37
38
39class AssignmentOne(Assignment):
40 example_result = 13
41
42 def pairs(self, input: Iterator[str]):
43 while True:
44 yield (json.loads(next(input)), json.loads(next(input)))
45
46 try:
47 next(input)
48 except StopIteration:
49 break
50
51 def run(self, input: Iterator) -> Any:
52 return sum(
53 index
54 for index, pair in enumerate(self.pairs(input), start=1)
55 if self.compare_pair(pair) > 0
56 )
57
58
59class AssignmentTwo(Assignment):
60 example_result = 140
61
62 def packets(self, input: Iterator[str]):
63 for item in input:
64 if item == "":
65 continue
66
67 yield json.loads(item)
68
69 def run(self, input: Iterator) -> Any:
70 packets = sorted(
71 [[[2]], [[6]], *self.packets(input)],
72 key=cmp_to_key(lambda a, b: self.compare_pair((a, b))),
73 reverse=True,
74 )
75
76 return reduce(
77 lambda o, i: o * i,
78 [
79 index
80 for index, packet in enumerate(packets, start=1)
81 if packet
82 in (
83 [[2]],
84 [[6]],
85 )
86 ],
87 )
diff --git a/day13/example.txt b/day13/example.txt
new file mode 100644
index 0000000..af73fbb
--- /dev/null
+++ b/day13/example.txt
@@ -0,0 +1,23 @@
1[1,1,3,1,1]
2[1,1,5,1,1]
3
4[[1],[2,3,4]]
5[[1],4]
6
7[9]
8[[8,7,6]]
9
10[[4,4],4,4]
11[[4,4],4,4,4]
12
13[7,7,7,7]
14[7,7,7]
15
16[]
17[3]
18
19[[[]]]
20[[]]
21
22[1,[2,[3,[4,[5,6,7]]]],8,9]
23[1,[2,[3,[4,[5,6,0]]]],8,9]
diff --git a/day13/input.txt b/day13/input.txt
new file mode 100644
index 0000000..3655093
--- /dev/null
+++ b/day13/input.txt
@@ -0,0 +1,449 @@
1[[[[8,6]],[8,[7],[6,7,6,2,4]],10,[[1,7,9],7,[7,9]]],[[4,[],[10,5],[5,4,7],5],8,9,[[5,3,3,6,9],[9,5,10],8],[[0,6,9],[8],4,6,8]]]
2[[[],3,[[10,6,9,6],[6,8,7],[1,2]],8]]
3
4[[4,[4],[[10,7,2],[1,6,5,7,4],[7,3,3,1,5],[]],1],[[],[[7,6,3]],5,5]]
5[[[10]]]
6
7[[[[7,9]],[[0,9]],0,[[2,1,1,2,9],4],[[5]]],[]]
8[[8]]
9
10[[9,[[5,4,5,1,10]]],[[[6,9],3,[0,2]],5,6,[3,4,[2,2],10],[10,5,9]],[[[10,3,8],[],[6,9]],4]]
11[[[4,[7],[1,1,4,3,8],[3],[]],[[5,10,2,1],9,[2],6,7],4,[],[[10],[6,3,1,7]]],[4,[6],[[6],[6,6]]],[[[0,2,5],[3,5,10,7],[10,7,2,9],[],[0]],[[9,9,8],[]],[10,[2,10,7,7,3],4],[2,7]]]
12
13[[[],2,2,9,[[9],[1,10,5,1]]],[[[],9,5,[8]],10,9,[[1,4,0],[5]]]]
14[[5],[3],[],[9,[[7,2,0,9,3],[6,8,6],[]]],[[[6],3],6,[[2,8],8]]]
15
16[[]]
17[[[5,4],5]]
18
19[[7,7,5]]
20[[[[4,7,3],[6,0],1,6],[6,1,4,5]],[]]
21
22[[[[4,7,0,9,8],10,7,2]],[6,6,9],[[2,10],8,9,1,[1,[0,4]]],[[[2,0,2],[]]]]
23[[[[]],[],3],[],[[[],[8]],[[4,7,3,7,10],3,5]],[[9,[10,5,8,9,1]],0],[[[6,7,5,4,10],4,6,0,[8,3,1,2,7]],5,[10,1,5],10,0]]
24
25[[],[[3,8,2]]]
26[[8,4],[5],[3]]
27
28[[0,1,5,[[],[6,6,8,0],[0,2,5,9,9],[3,2,7],[5,2]],10],[],[[8,8],[1,3],3,2],[[[4,0],[]],[[4,1,2],[2],6,9,6],1,10,[[7],[0,7],5]],[4]]
29[[[],[6,[5,9,6,0,8],2,9,[4,2]],7,[9,6,0,10]]]
30
31[[],[],[],[9,[[1],[6,3,4,9]],10,8]]
32[[1,[[2],10,[0,9,3]]]]
33
34[[0,1,4,4],[[7,[6],[2,5,1,3],5],[[8,3,7],[6],[],8],8,1,[9,0,[]]],[[0,[3,9,3,5],[2,0,9,0,7],6]],[[[3,3,1,10,9]],[[0,7,1],8,[10,0],8],[[9,3,5,4],5,[0],5],8,[[3,6,10],0,2,6]]]
35[[[8,[1,2,10,9],2,[8,4,4]],[3,[5,5]],4],[[],2,[],6,3],[[10,7],[],7,[8,6,[5],4,3],2]]
36
37[[[[],1,2],[[7,7,7],6,[1,7,1]]],[4,8],[]]
38[[3,1,[1,6,[9,9,5],5],[[1,7,0,6],[10,8,10],[3,8],[6,2,7,5]]]]
39
40[[1]]
41[[[3],[[9,4,10,10],[8,9,1],[],[0,3,10,5]],[8,[]]],[[[10,6,0],2,1],5,0,[7],[[9]]],[[[],[9,9,3,2,3],5]]]
42
43[[],[7,2],[5,[9,[]],1,[4,6,5],[[9,10,8,3],6]]]
44[[[[]],0,[1,8],[5,2,7,2],6],[],[[],[[2,1,3,9],6,9,5,3],2],[[[10],[0],[4,0,3,6,8]],4],[9]]
45
46[[],[],[],[]]
47[[],[[3,6],6,[6],[[3,10,4],6],[]]]
48
49[[8,7,10],[3],[9,[],[[5,1,6,10,4]],4,[[9,8,1,1],[0,0,2],1]]]
50[[[1,6,[4,5,3,1]]],[[],[[7,0,5,1,9],6,[0,9,4,3]]]]
51
52[[2,2,1,8],[],[[[10,4,10,6],[2,8,3,10,6],[]],1,6],[6,0]]
53[[2,3,[8,[2,7]],8],[4,[[6,6,4,2],4,5,[7,5]],8,1,[]],[7]]
54
55[[[],[1,[9,1,9],[8,8,8,5]],3,[4,9,4,[2,6,6]],[]],[[7,[1,9,6]],6,[[10,0,0],[4,7,1],4,9,7]]]
56[[[[],8,5,1],3,[[8,2,2],4,[2,1,2,3,7]],10,[2,[5,7,6],3,[9,6,5,0,9],4]],[],[9,3,2,7],[4,[[4,10],[8,3,8]],6,[],9]]
57
58[[[],[[],[5]],4],[[0,[],9,[8,5,3,2,2]],[8]],[[[2,5]],[10,8,[7,8,7,3]],5,[[2,10],3,8,0,[6,9,10]],5],[[0,[7],[]],[[3,9,4,1,6],8],[[4,4,7,2],8],[[3],[],3],7]]
59[[[2,0,[7,5]],[1,5,7,6,[]],9,[2,1,[6,0],3,[3]]]]
60
61[[1,3,10,[]],[],[7,[8,4],[[],0,[4,8],6],4,[[4,0],[5,0,8,3],[0,1],8,[2,9,7,6,5]]],[3,5],[9,[[8,3,6,0],[10,0,5],10],[[10,1,4,0],4,8,5],9,[7,[0],[7,9],7,2]]]
62[[2,9,0,[[5,8,10,10,5],8,4,[5,6,10]],10],[8,[0,[10],[6],4,[]],[[9,4,0],[],[2,10,3,3,4],[3]],1,10],[[[],0,7,3,3],9,[[5,3,0],5,[4,6,6,7]],[]],[6,[[3,1],10,[0,8],0],8,[4,[],[8,0,7,9]],7],[9,4,[10],[[2,10,7,6]],1]]
63
64[[[],8,9,2,[6,[0,2,10,2],[4,9,7,2,10]]],[9,[[3,4]],5,9]]
65[[9],[[],[1,6,[5,9,9,9,0]],6]]
66
67[[5,2,10],[2,[[],7,9,3],0,[7,[]]],[[9,[5,6,5,0],4,0,3],10,1,[]],[8,10,3,9]]
68[[[2,[3]],9]]
69
70[[],[6,[3,[],[]],8,[[7,7,8,2],4],0]]
71[[[[0,5,7]],[[]],7,[4,[9,0,5],7,3]],[5,[[0,8,10,0],3],[1,4],[10],[]]]
72
73[[1,5],[10,[[9,7,1]],0,[9,[6,3],[7],9,[]]]]
74[[5,[2,[4,0,4,7,8],[4]]],[8,[2,9],5],[],[4,2]]
75
76[[7,[[0,0,5,4]],4],[[[2,4]],[1,[3,2,8],[9,1,8,2,2],0,1],2],[[[4,7],3,3,9]]]
77[[],[[[8],0,10,[0,4]],2,[9,2]],[10,4],[2,[7],10]]
78
79[[[],10],[[6,7,[8,6,6],2],5,[9,[5,7,9,0],[10,6],7]],[[],[5],10,[[6],6,7,6,[6]]],[[]]]
80[[[[],[]],[]],[[[6],[9],[4,0,8,5]],[3],[[8,2,7,7]],[],[3,[5,1],[9],[7,1]]],[[7,[0],[],3],[2]],[[]]]
81
82[7,10,4,6]
83[7,10,4,6,9]
84
85[[9]]
86[[7,2,6],[[6,9,[]],[5,3,6],[2],[[0,7,1],[0],[2],[9,9,0,8,2],[9,5,7,6,8]]],[[8,6,10,0,8],[9,[3,10],4,[2,4,3,4,4],5]],[],[]]
87
88[[[3,8,[]],1,7],[[4],[10]],[[[2],8,8],[[1,0,6,5],4],6,[4]],[[[],[9,8,7,10,6],2,[1]],[[],9,3,[1,6,5],[]],6,4,9]]
89[[8,[2,[3,7,1,0]]],[8,4,[[9,4],[0,3,5,5]]],[8,[[2,10,4],7,5,[9,0,5,0,4]],3,9,[8,8,3,3,0]],[[9,4,[0],4,[6]],[[0,10,0],6,[9,4,10,0]]]]
90
91[]
92[[[[0,4,6,7],3],2],[5,[10,[8],[4,9,4],[],5],6,[[0,6],[4,7,7],[],10,[]]]]
93
94[[[3],8,10,[[8],2]],[9,8,10],[[[],[],3,[]],[],[1,9]]]
95[[2,0,0,9],[[],[[10,2],[]],[7,[1],4,[2,5,8,1,2],6]],[[8],[[9,3,3,8],2,[5,5,2,9],2],[5,[],6,[2,1,4,10,1],7]],[],[]]
96
97[[[[1],[7,1,9]],[[],0,[0,7]],[6],9,[]],[]]
98[[[[2,8,7,3],[4,2],10,[8,4],7]],[],[[7,[3,2]]],[[[8,7],8,10],0,2]]
99
100[[[1,[6,7,0,8]],6],[2],[6,7],[],[[[1,9,2,10],[9],[0,4,3,1],[6,10,2,4],[4,0,10,6]],[6,5],6,[5,10,[1,0,10,1,2],[5,10,5],9],[[3]]]]
101[[[[3,9,0,6,3],[]],1,7,4,[[9,8,5],1,6,[]]]]
102
103[[],[[[]],9,[[2,6,2,9,5],9,[6,6]],[[1,0,7],[4,4]]]]
104[[1,[[5]],1,0],[2,[[9,9,1,8],2,8,[0,5]],[]],[0,[5,8,4],[[6,2],[3,6,0,8],[4,2,5],[5,10,4,6,6],[5,5,6]],[7,2,10,[]]],[7,[]]]
105
106[[5,[4],[0,[5,3,2],[]],0],[3,[10,2,7,[]]]]
107[[],[4,9],[[[2],[0,10,6,1],1,[0],[9,4,8,1,9]],0,[[0],8,9,[1,1,10,10]],7],[[[3,10],10],10,2,[10,3]],[[5]]]
108
109[[4,[],[[0,3,5]],[[]],1],[9,[0,4,7],[3,[5,10,9,2],6,2,6]],[]]
110[[[1,4,[10,3,8],[7,7]],[1,[]],[[1,2,5]],9],[],[],[0,6,2,8]]
111
112[[[[5,9,4,1]]],[0,1,[],7],[[[]],[9,[2,5,10],5,1],[[]],[[9],[6,4,0,4,9],1],[8]],[[10,1,7],6,10,7,6]]
113[[[8,9,[0,9,2,5]],10]]
114
115[[9,[[4,8,2,0],[0,1,7,7],5,[4,3,0]],6,[1,[3,9],[3,10,10,3,1],6]]]
116[[],[5,[[4,0,9,5],1,[2,0,5,6],8,3],1,[[9,3,10,10],[],[10],7]]]
117
118[[[[4,7,4,1],8],1],[[8,0,0,5,[0]],2,[]],[[[5,8,6,10,0],[],7,[],1],[7,[7,8,0,2,5],9,[8,5]],[8,[7,4]]],[10,[9,3,[0,5],[2]]],[[6,3,6],6,[[7,1,10],5,4,[3,5,1,7,10],9],[1,5,[2],[5],[3,7,0]]]]
119[[],[[],10],[0,[],5],[2,[8,2,0],[3]]]