diff options
Diffstat (limited to 'day13')
| -rw-r--r-- | day13/__init__.py | 87 | ||||
| -rw-r--r-- | day13/example.txt | 23 | ||||
| -rw-r--r-- | day13/input.txt | 449 |
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 -*- | ||
| 2 | import json | ||
| 3 | from abc import ABC | ||
| 4 | from functools import cmp_to_key, reduce | ||
| 5 | from typing import Iterator, Any, List, Tuple, Union | ||
| 6 | |||
| 7 | from aoc import BaseAssignment | ||
| 8 | |||
| 9 | |||
| 10 | Packet = Union[List[int], int, List["Packet"]] | ||
| 11 | |||
| 12 | |||
| 13 | class 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 | |||
| 39 | class 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 | |||
| 59 | class 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]]] | ||
| 120 | |||
| 121 | [[2,3,[3,6,8],5,2]] | ||
| 122 | [[],[0,0,[],8,2],[[[],[0]],[[],4,6,0,[8]],5,7,10],[[],[[1,6,3],[6],[6,7,0],4],[],[[1,10,4],2,0]],[[9,[1,0,7,1,7],3],3,9]] | ||
| 123 | |||
| 124 | [6,1,3,9,6] | ||
| 125 | [6,1,3,9] | ||
| 126 | |||
