├── .prettierrc ├── advent-2021 ├── 7.in ├── 7.py ├── 1e.py ├── README.md ├── 1.py ├── 6.py ├── 2.py ├── 7e.py ├── 2e.py ├── 3.py ├── 6.in ├── 6e.in ├── 6e.py ├── 4.py ├── 5.py ├── 5e.py ├── 3e.py ├── 4e.py ├── 7e.in ├── 4e.in ├── 4.in ├── 5.in ├── 5e.in └── 2.in ├── python3 ├── .tool-versions ├── tree-invert-binary-tree.py ├── quick-sort.py ├── linked-list-traversal.py ├── binary-search-it.py ├── linked-list-sum-list.py ├── binary-search.py ├── graph-connected-components-count.py ├── graph-undirected_path.py ├── linked-list-values.py ├── graph-largest-component.py ├── graph-has_path.py ├── graph-traversal.py ├── linked-list-reverse.py ├── graph-shortest-path.py ├── tree-tree-sum.py ├── doubly-linked-list.py ├── kmp.py ├── linked-list-get-node-value.py ├── linked-list-find.py ├── lowerbound-upperbound.py ├── tree-max-root-to-leaf-path-sum.py ├── singly-linked-list.py ├── graph-island-count.py ├── tree-pre-in-post-order-treversal.py ├── graph-minimum-island.py ├── tree-breadth-first-values.py ├── tree-tree-min-value.py ├── graph-rmove-non-edge-islands.py ├── linked-list-zipper-lists.py ├── tree-depth-first-values.py ├── tree-tree-includes.py └── min_heap.py ├── .gitignore ├── assets ├── bigo.png ├── GahiR.jpg ├── Z20M5iE.png ├── mergesort.gif ├── redixsort.gif ├── bubblesort.gif ├── quick_sort.gif ├── 2-Figure3.1-1.png ├── insertionsort.gif ├── selectionsort.gif ├── 3.-Weithened-Graph.png ├── Dijkstra_Animation.gif ├── three-node-networks.jpg ├── binaryHeapsParentAndChildRelation.jpg ├── 268857bd-bb32-4fa5-88c9-66d7787952e9.png └── Binary-search-tree-insertion-When-a-sequence-of-data-f1-3-4-6-5-7-9-8-2-g.png ├── hacker-rank-interview-preparation-kit ├── sed-command-5.sh ├── sliding-window-max.py ├── grep-b.sh ├── one-week-preparation-kit-new-year-chaos.py ├── no-prefix-set.py ├── track-tour.py └── README.md └── advent-2022 ├── 1.py ├── 1e.py ├── 4.py ├── 6.py ├── 6e.py ├── 4e.py ├── 3.py ├── 3e.py ├── 5.py ├── 5e.py ├── 2.py ├── 2e.py ├── 7.py ├── 8.py ├── 8e.py ├── 6.in ├── 6e.in ├── 8.in ├── 8e.in ├── 3.in ├── 3e.in ├── 5.in └── 5e.in /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 4 3 | } 4 | -------------------------------------------------------------------------------- /advent-2021/7.in: -------------------------------------------------------------------------------- 1 | 16,1,2,0,4,2,7,1,2,14 2 | -------------------------------------------------------------------------------- /python3/.tool-versions: -------------------------------------------------------------------------------- 1 | python 3.8.12 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | .cache/ 4 | package-lock.json 5 | script.js 6 | *.out 7 | -------------------------------------------------------------------------------- /assets/bigo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/bigo.png -------------------------------------------------------------------------------- /assets/GahiR.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/GahiR.jpg -------------------------------------------------------------------------------- /assets/Z20M5iE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/Z20M5iE.png -------------------------------------------------------------------------------- /assets/mergesort.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/mergesort.gif -------------------------------------------------------------------------------- /assets/redixsort.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/redixsort.gif -------------------------------------------------------------------------------- /assets/bubblesort.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/bubblesort.gif -------------------------------------------------------------------------------- /assets/quick_sort.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/quick_sort.gif -------------------------------------------------------------------------------- /assets/2-Figure3.1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/2-Figure3.1-1.png -------------------------------------------------------------------------------- /assets/insertionsort.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/insertionsort.gif -------------------------------------------------------------------------------- /assets/selectionsort.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/selectionsort.gif -------------------------------------------------------------------------------- /assets/3.-Weithened-Graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/3.-Weithened-Graph.png -------------------------------------------------------------------------------- /assets/Dijkstra_Animation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/Dijkstra_Animation.gif -------------------------------------------------------------------------------- /assets/three-node-networks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/three-node-networks.jpg -------------------------------------------------------------------------------- /assets/binaryHeapsParentAndChildRelation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/binaryHeapsParentAndChildRelation.jpg -------------------------------------------------------------------------------- /assets/268857bd-bb32-4fa5-88c9-66d7787952e9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/268857bd-bb32-4fa5-88c9-66d7787952e9.png -------------------------------------------------------------------------------- /hacker-rank-interview-preparation-kit/sed-command-5.sh: -------------------------------------------------------------------------------- 1 | # https://www.hackerrank.com/challenges/sed-command-5/problem 2 | sed -E "s/([0-9]{4}) ([0-9]{4}) ([0-9]{4}) ([0-9]{4})/\4 \3 \2 \1/g" 3 | 4 | -------------------------------------------------------------------------------- /python3/tree-invert-binary-tree.py: -------------------------------------------------------------------------------- 1 | def invert_binary_tree(c): 2 | if not c: 3 | return None 4 | c.left, c.right = c.right, c.left 5 | invert_binary_tree(c.left) 6 | invert_binary_tree(c.right) 7 | 8 | -------------------------------------------------------------------------------- /hacker-rank-interview-preparation-kit/sliding-window-max.py: -------------------------------------------------------------------------------- 1 | nums, k = [1, 3, -1, -3, 5, 3, 6, 7, 7], 3 2 | 3 | res = [] 4 | 5 | for i in range(len(nums) - k): 6 | res.append(max(nums[i:i+k])) 7 | 8 | print(res) 9 | 10 | -------------------------------------------------------------------------------- /assets/Binary-search-tree-insertion-When-a-sequence-of-data-f1-3-4-6-5-7-9-8-2-g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tajpouria/algorithms-and-data-structures-cheat-sheet/HEAD/assets/Binary-search-tree-insertion-When-a-sequence-of-data-f1-3-4-6-5-7-9-8-2-g.png -------------------------------------------------------------------------------- /advent-2022/1.py: -------------------------------------------------------------------------------- 1 | inf = __file__.split(".")[0] + ".in" 2 | elfs = open(inf).read().strip().split("\n\n") 3 | m = 0 4 | for el in elfs: 5 | arr = [ int(c) for c in el.split("\n") ] 6 | els = sum(arr) 7 | if els > m: 8 | m = els 9 | print(m) 10 | 11 | -------------------------------------------------------------------------------- /advent-2022/1e.py: -------------------------------------------------------------------------------- 1 | inf = __file__.split(".")[0] + ".in" 2 | elfs = open(inf).read().strip().split("\n\n") 3 | ls = [] 4 | for el in elfs: 5 | arr = [int(c) for c in el.split("\n")] 6 | ls.append(sum(arr)) 7 | 8 | ls.sort() 9 | print(ls) 10 | print(sum(ls[-3:])) 11 | 12 | -------------------------------------------------------------------------------- /hacker-rank-interview-preparation-kit/grep-b.sh: -------------------------------------------------------------------------------- 1 | # https://www.hackerrank.com/challenges/text-processing-in-linux-the-grep-command-5/problem 2 | 3 | grep "\([0-9]\) *\1" 4 | # [1-9]: Find a number and remember it. 5 | # *: Zero or more space in can happened. 6 | # \1: Look for recurrence of the same number. 7 | 8 | -------------------------------------------------------------------------------- /advent-2021/7.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | inp = [int(el) for el in open("7.in").read().strip().split(",")] 4 | 5 | mx = max(inp) 6 | 7 | min_res = math.inf 8 | for p in range(mx + 1): 9 | total = 0 10 | for c in inp: 11 | total += abs(c - p) 12 | 13 | min_res = min(min_res, total) 14 | 15 | print(min_res) 16 | 17 | -------------------------------------------------------------------------------- /advent-2021/1e.py: -------------------------------------------------------------------------------- 1 | inp = [ int(i) for i in open("1e.in").read().strip().split("\n") ] 2 | 3 | win_size = 3 4 | 5 | pws = 0 6 | res = 0 7 | for i in range(len(inp) - win_size + 1): 8 | w = inp[i:i+win_size] 9 | cws = sum(w) 10 | if i > 0 and cws > pws: 11 | res += 1 12 | 13 | pws = cws 14 | 15 | print(res) 16 | 17 | -------------------------------------------------------------------------------- /advent-2021/README.md: -------------------------------------------------------------------------------- 1 | # Advent of code 2021 2 | 3 | Checkout the event at and the problem headlines at https://adventofcode.com/ 4 | 5 | - Filenames represent the day e.g. `1.py`: solution for day one problem, `1e.py`: solution for the **second** part of the day one problem. 6 | - `*.in` are the problems inputs e.g `1.in` day on problem input. 7 | 8 | -------------------------------------------------------------------------------- /advent-2021/1.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/python3 2 | 3 | import sys 4 | 5 | infile = sys.argv[1] if len(sys.argv) > 1 else "1.in" 6 | 7 | inp = [int(i) for i in open(infile).read().strip().split("\n")] 8 | 9 | p = 0 10 | inc = 0 11 | for i, el in enumerate(inp): 12 | if i > 0 and el > p: 13 | inc += 1 14 | 15 | p = el 16 | 17 | print(inc) 18 | 19 | -------------------------------------------------------------------------------- /advent-2021/6.py: -------------------------------------------------------------------------------- 1 | inp = [int(el) for el in open("6.in").read().strip().split(",")] 2 | 3 | for d in range(1, 267): 4 | for i in range(len(inp)): 5 | inp[i] -= 1 6 | 7 | if inp[i] == -1: 8 | inp.append(8) 9 | inp[i] += 7 10 | continue 11 | 12 | 13 | print(f"day {d}: ", inp) 14 | 15 | print(len(inp)) 16 | 17 | -------------------------------------------------------------------------------- /advent-2022/4.py: -------------------------------------------------------------------------------- 1 | fn = __file__.split(".")[0] + ".in" 2 | txt = open(fn).read() 3 | 4 | ts = 0 5 | for ro in txt.strip().split("\n"): 6 | fc, sc = ro.split(",") 7 | 8 | fa, fb = [int(n) for n in fc.split("-")] 9 | sa, sb = [int(n) for n in sc.split("-")] 10 | 11 | if (fa <= sa and fb >= sb) or (sa <= fa and sb >= fb): 12 | ts += 1 13 | 14 | print(ts) 15 | -------------------------------------------------------------------------------- /advent-2021/2.py: -------------------------------------------------------------------------------- 1 | inp = [ [ l.split(" ")[0], int(l.split(" ")[1]) ] for l in open("./2.in").read().strip().split("\n") ] 2 | 3 | 4 | pos = {"h": 0, "d": 0} 5 | 6 | for c, u in inp: 7 | if c == "forward": 8 | pos["h"] += u 9 | elif c == "down": 10 | pos["d"] += u 11 | elif c == "up": 12 | pos["d"] -= u 13 | 14 | print(pos["h"]*pos["d"]) 15 | 16 | -------------------------------------------------------------------------------- /advent-2021/7e.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | inp = [int(el) for el in open("7e.in").read().strip().split(",")] 4 | 5 | mx = max(inp) 6 | 7 | def su(x): 8 | return x * (x - 1) // 2 9 | 10 | min_res = math.inf 11 | for p in range(mx + 1): 12 | total = 0 13 | for c in inp: 14 | total += su(abs(c - p) + 1) 15 | 16 | min_res = min(min_res, total) 17 | 18 | print(min_res) 19 | 20 | -------------------------------------------------------------------------------- /advent-2022/6.py: -------------------------------------------------------------------------------- 1 | fn = __file__.split(".")[0] + ".in" 2 | txt = open(fn).read().strip() 3 | 4 | s = [] 5 | for i in range(4): 6 | s.append(txt[i]) 7 | 8 | if list(set(s)) == s: 9 | print(4) 10 | else: 11 | for i, el in enumerate(txt[4:]): 12 | s.pop(0) 13 | s.append(el) 14 | 15 | if len(set(s)) == 4: 16 | print(i+1+4) 17 | break 18 | -------------------------------------------------------------------------------- /advent-2022/6e.py: -------------------------------------------------------------------------------- 1 | fn = __file__.split(".")[0] + ".in" 2 | txt = open(fn).read().strip() 3 | 4 | s = [] 5 | for i in range(14): 6 | s.append(txt[i]) 7 | 8 | if list(set(s)) == s: 9 | print(14) 10 | else: 11 | for i, el in enumerate(txt[14:]): 12 | s.pop(0) 13 | s.append(el) 14 | 15 | if len(set(s)) == 14: 16 | print(i+1+14) 17 | break 18 | -------------------------------------------------------------------------------- /advent-2021/2e.py: -------------------------------------------------------------------------------- 1 | inp = [[l.split(" ")[0], int(l.split(" ")[1])] for l in open("./2e.in").read().strip().split("\n")] 2 | 3 | sm = {"p": 0, "a": 0, "h": 0} 4 | 5 | for c, v in inp: 6 | if c == "down": 7 | sm["a"] += v 8 | if c == "up": 9 | sm["a"] -= v 10 | if c == "forward": 11 | sm["p"] += v 12 | sm["h"] += sm["a"] * v 13 | 14 | print(sm, sm["p"] * sm["h"]) 15 | 16 | -------------------------------------------------------------------------------- /advent-2021/3.py: -------------------------------------------------------------------------------- 1 | inp = [l for l in open("3.in").read().strip().split("\n")] 2 | 3 | g = "" 4 | e = "" 5 | for i in range(len(inp[0])): 6 | zc = 0 7 | oc = 0 8 | for l in inp: 9 | tar = l[i] 10 | if tar == "0": 11 | zc += 1 12 | else: 13 | oc += 1 14 | 15 | g += "0" if zc > oc else "1" 16 | e += "1" if zc > oc else "0" 17 | 18 | print(int(g, 2)* int(e, 2)) 19 | 20 | -------------------------------------------------------------------------------- /advent-2022/4e.py: -------------------------------------------------------------------------------- 1 | fn = __file__.split(".")[0] + ".in" 2 | txt = open(fn).read() 3 | 4 | ts = 0 5 | for ro in txt.strip().split("\n"): 6 | fc, sc = ro.split(",") 7 | 8 | fa, fb = [int(n) for n in fc.split("-")] 9 | sa, sb = [int(n) for n in sc.split("-")] 10 | 11 | sr = list(range(sa, sb+1)) 12 | for a in range(fa, fb+1): 13 | if a in sr: 14 | ts += 1 15 | break 16 | 17 | 18 | print(ts) 19 | -------------------------------------------------------------------------------- /python3/quick-sort.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | def quick_sort(arr): 4 | if len(arr) <= 1: 5 | return arr 6 | 7 | pivot = arr.pop() 8 | 9 | less_arr = [] 10 | greater_arr = [] 11 | 12 | for i in arr: 13 | if i <= pivot: 14 | less_arr.append(i) 15 | else: 16 | greater_arr.append(i) 17 | 18 | return quick_sort(less_arr) + [pivot] + quick_sort(greater_arr) 19 | 20 | 21 | sorted_arr = quick_sort([31, 12, 31, 1, 2, 6, 3, 723, 2, 12, 3, 3, 3]) 22 | print(sorted_arr) 23 | 24 | -------------------------------------------------------------------------------- /python3/linked-list-traversal.py: -------------------------------------------------------------------------------- 1 | class Node: 2 | nxt = None 3 | def __init__(self, data): 4 | self.data = data 5 | 6 | 7 | def traverse(h): 8 | c = h 9 | while c: 10 | print(c.data) 11 | c = c.nxt 12 | 13 | def traverse_recursion(c): 14 | if not c: return 15 | print(c.data) 16 | traverse_recursion(c.nxt) 17 | 18 | 19 | a = Node('a') 20 | b = Node('b') 21 | c = Node('c') 22 | d = Node('d') 23 | e = Node('e') 24 | 25 | a.nxt = b 26 | b.nxt = c 27 | c.nxt = d 28 | d.nxt = e 29 | 30 | traverse(a) 31 | print('---') 32 | traverse_recursion(a) 33 | 34 | -------------------------------------------------------------------------------- /python3/binary-search-it.py: -------------------------------------------------------------------------------- 1 | from random import randint 2 | 3 | li = [randint(0, 100) for i in range(0, 100)] 4 | li = sorted(li) 5 | 6 | tari = randint(0, len(li)) 7 | tar = li[tari] 8 | 9 | print(f"Q: What is the index of {tar}?") 10 | 11 | def binary_search(arr, t): 12 | l, r = 0, len(arr) - 1 13 | 14 | while l < r: 15 | mi = (r + l) // 2 16 | mid = arr[mi] 17 | if mid == t: return mi 18 | if t > mid: l = mi + 1 19 | else: r = mi + -1 20 | 21 | return -1 22 | 23 | print(binary_search(li, tar)) 24 | 25 | print(f"Correct answer: {tari}") 26 | 27 | -------------------------------------------------------------------------------- /advent-2021/6.in: -------------------------------------------------------------------------------- 1 | 4,1,1,1,5,1,3,1,5,3,4,3,3,1,3,3,1,5,3,2,4,4,3,4,1,4,2,2,1,3,5,1,1,3,2,5,1,1,4,2,5,4,3,2,5,3,3,4,5,4,3,5,4,2,5,5,2,2,2,3,5,5,4,2,1,1,5,1,4,3,2,2,1,2,1,5,3,3,3,5,1,5,4,2,2,2,1,4,2,5,2,3,3,2,3,4,4,1,4,4,3,1,1,1,1,1,4,4,5,4,2,5,1,5,4,4,5,2,3,5,4,1,4,5,2,1,1,2,5,4,5,5,1,1,1,1,1,4,5,3,1,3,4,3,3,1,5,4,2,1,4,4,4,1,1,3,1,3,5,3,1,4,5,3,5,1,1,2,2,4,4,1,4,1,3,1,1,3,1,3,3,5,4,2,1,1,2,1,2,3,3,5,4,1,1,2,1,2,5,3,1,5,4,3,1,5,2,3,4,4,3,1,1,1,2,1,1,2,1,5,4,2,2,1,4,3,1,1,1,1,3,1,5,2,4,1,3,2,3,4,3,4,2,1,2,1,2,4,2,1,5,2,2,5,5,1,1,2,3,1,1,1,3,5,1,3,5,1,3,3,2,4,5,5,3,1,4,1,5,2,4,5,5,5,2,4,2,2,5,2,4,1,3,2,1,1,4,4,1,5 2 | -------------------------------------------------------------------------------- /advent-2021/6e.in: -------------------------------------------------------------------------------- 1 | 4,1,1,1,5,1,3,1,5,3,4,3,3,1,3,3,1,5,3,2,4,4,3,4,1,4,2,2,1,3,5,1,1,3,2,5,1,1,4,2,5,4,3,2,5,3,3,4,5,4,3,5,4,2,5,5,2,2,2,3,5,5,4,2,1,1,5,1,4,3,2,2,1,2,1,5,3,3,3,5,1,5,4,2,2,2,1,4,2,5,2,3,3,2,3,4,4,1,4,4,3,1,1,1,1,1,4,4,5,4,2,5,1,5,4,4,5,2,3,5,4,1,4,5,2,1,1,2,5,4,5,5,1,1,1,1,1,4,5,3,1,3,4,3,3,1,5,4,2,1,4,4,4,1,1,3,1,3,5,3,1,4,5,3,5,1,1,2,2,4,4,1,4,1,3,1,1,3,1,3,3,5,4,2,1,1,2,1,2,3,3,5,4,1,1,2,1,2,5,3,1,5,4,3,1,5,2,3,4,4,3,1,1,1,2,1,1,2,1,5,4,2,2,1,4,3,1,1,1,1,3,1,5,2,4,1,3,2,3,4,3,4,2,1,2,1,2,4,2,1,5,2,2,5,5,1,1,2,3,1,1,1,3,5,1,3,5,1,3,3,2,4,5,5,3,1,4,1,5,2,4,5,5,5,2,4,2,2,5,2,4,1,3,2,1,1,4,4,1,5 2 | -------------------------------------------------------------------------------- /advent-2022/3.py: -------------------------------------------------------------------------------- 1 | import string 2 | 3 | fn = __file__.split(".")[0] + ".in" 4 | txt = open(fn).read() 5 | 6 | lc = {} 7 | for i, a in enumerate(list(string.ascii_lowercase)): 8 | lc[a] = i + 1 9 | 10 | uc = {} 11 | for i, a in enumerate(list(string.ascii_uppercase)): 12 | uc[a] = i + 1 + 26 13 | 14 | ts = 0 15 | 16 | for rc in txt.strip().split("\n"): 17 | fh, sh = rc[:len(rc)//2], rc[len(rc)//2:] 18 | 19 | cel = "" 20 | for el in fh: 21 | if sh.find(el) > -1: 22 | cel = el 23 | break 24 | 25 | 26 | ts += lc[cel] if cel.islower() else uc[cel] 27 | 28 | print(ts) 29 | 30 | -------------------------------------------------------------------------------- /advent-2021/6e.py: -------------------------------------------------------------------------------- 1 | from collections import defaultdict 2 | 3 | inp = defaultdict(int) 4 | for el in [int(el) for el in open("6e.in").read().strip().split(",")]: 5 | if el not in inp: 6 | for i in range(el + 1): 7 | if i not in inp: 8 | inp[i] = 0 9 | inp[el] += 1 10 | 11 | for el in range(9): 12 | if el not in inp: 13 | inp[el] = 0 14 | 15 | for d in range(256): 16 | z = inp[0] 17 | inp[0] = 0 18 | for i in range(1, len(inp)): 19 | inp[i - 1] += inp[i] 20 | inp[i] = 0 21 | inp[6] += z 22 | inp[8] += z 23 | 24 | print(sum(inp.values())) 25 | 26 | -------------------------------------------------------------------------------- /python3/linked-list-sum-list.py: -------------------------------------------------------------------------------- 1 | class Node: 2 | next = None 3 | def __init__(self, data): 4 | self.data = data 5 | 6 | def sum_list(c): 7 | if not c: return 0 8 | return c.data + sum_list(c.next) 9 | 10 | a = Node(2) 11 | b = Node(8) 12 | c = Node(3) 13 | d = Node(-1) 14 | e = Node(7) 15 | 16 | a.next = b 17 | b.next = c 18 | c.next = d 19 | d.next = e 20 | 21 | # 2 -> 8 -> 3 -> -1 -> 7 22 | 23 | print(sum_list(a)) # 19 24 | 25 | x = Node(38) 26 | y = Node(4) 27 | 28 | x.next = y 29 | 30 | # 38 -> 4 31 | 32 | print(sum_list(x)) # 42 33 | 34 | z = Node(100) 35 | 36 | # 100 37 | 38 | print(sum_list(z)) # 100 39 | 40 | print(sum_list(None)) # 0 41 | 42 | -------------------------------------------------------------------------------- /advent-2022/3e.py: -------------------------------------------------------------------------------- 1 | import string 2 | 3 | fn = __file__.split(".")[0] + ".in" 4 | txt = open(fn).read() 5 | 6 | lc = {} 7 | for i, a in enumerate(list(string.ascii_lowercase)): 8 | lc[a] = i + 1 9 | 10 | uc = {} 11 | for i, a in enumerate(list(string.ascii_uppercase)): 12 | uc[a] = i + 1 + 26 13 | 14 | gs = [] 15 | 16 | inp = txt.strip().split("\n") 17 | gs.append(zip(*list([iter(inp)]*3))) 18 | 19 | ts = 0 20 | for g in gs: 21 | for rs in g: 22 | fh, sh, th = rs 23 | 24 | cel = "" 25 | for el in fh: 26 | if sh.find(el) > -1 and th.find(el) > -1: 27 | cel = el 28 | 29 | ts += lc[cel] if cel.islower() else uc[cel] 30 | 31 | print(ts) 32 | 33 | -------------------------------------------------------------------------------- /python3/binary-search.py: -------------------------------------------------------------------------------- 1 | from random import randint 2 | 3 | arr = [randint(1, 100) for i in range(100)] 4 | sarr = sorted(arr) 5 | 6 | rand_idx = randint(1, 100) 7 | tar = sarr[rand_idx] 8 | 9 | print(f"Question What is that index of the {tar}? Answer: {rand_idx}") 10 | 11 | def binary_search(ar, tar): 12 | def _binary_search(ar, t, x, y): 13 | if x >= y: return -1 14 | mi = (x + y)//2 15 | mid = ar[mi] 16 | if mid == t: return mi 17 | if t > mid : 18 | return _binary_search(ar, t, mi+1, y) 19 | return _binary_search(ar, t, x, mi-1) 20 | 21 | return _binary_search(ar, tar, 0, len(ar)) 22 | 23 | # print(binary_search(sarr, tar)) 24 | print(binary_search(sarr, -1)) 25 | 26 | 27 | -------------------------------------------------------------------------------- /python3/graph-connected-components-count.py: -------------------------------------------------------------------------------- 1 | # https://structy.net/problems/connected-components-count 2 | from collections import deque 3 | 4 | def connected_components_count(g): 5 | vi = {} 6 | res = 0 7 | for n in g.keys(): 8 | if vi.get(n): continue 9 | res += 1 10 | s = deque([n]) 11 | while(len(s)): 12 | c = s.pop() 13 | vi[c] = True 14 | for ne in g.get(c): 15 | if not vi.get(ne): s.append(ne) 16 | 17 | return res 18 | 19 | 20 | print( 21 | connected_components_count({ 22 | 0: [8, 1, 5], 23 | 1: [0], 24 | 5: [0, 8], 25 | 8: [0, 5], 26 | 2: [3, 4], 27 | 3: [2, 4], 28 | 4: [3, 2] 29 | }) # -> 2 30 | ) 31 | -------------------------------------------------------------------------------- /python3/graph-undirected_path.py: -------------------------------------------------------------------------------- 1 | # https://structy.net/problems/undirected-path 2 | 3 | from collections import defaultdict, deque 4 | 5 | def undirectedPath(edges, src, n): 6 | g = defaultdict(list) 7 | for n1, n2 in edges: 8 | g[n1].append(n2) 9 | g[n2].append(n1) 10 | 11 | vi = {} 12 | s = deque([src]) 13 | while(len(s)): 14 | c = s.pop() 15 | if c == n: 16 | return True 17 | vi[c] = True 18 | for ne in g.get(c): 19 | if not vi.get(ne): s.append(ne) 20 | 21 | return False 22 | 23 | edges = [ 24 | ['i', 'j'], 25 | ['k', 'i'], 26 | ['m', 'k'], 27 | ['k', 'l'], 28 | ['o', 'n'] 29 | ] 30 | 31 | print(undirectedPath(edges, 'j', 'm')); # -> true 32 | 33 | -------------------------------------------------------------------------------- /python3/linked-list-values.py: -------------------------------------------------------------------------------- 1 | class Node: 2 | next = None 3 | 4 | def __init__(self, data): 5 | self.data = data 6 | 7 | def linked_list_values(c): 8 | if not c: return [] 9 | return [c.data] + linked_list_values(c.next) 10 | 11 | 12 | a = Node("a") 13 | b = Node("b") 14 | c = Node("c") 15 | d = Node("d") 16 | 17 | a.next = b 18 | b.next = c 19 | c.next = d 20 | 21 | # a -> b -> c -> d 22 | 23 | print(linked_list_values(a)) # -> [ 'a', 'b', 'c', 'd' ] 24 | 25 | x = Node("x") 26 | y = Node("y") 27 | 28 | x.next = y 29 | 30 | # x -> y 31 | 32 | print(linked_list_values(x)) # -> [ 'x', 'y' ] 33 | 34 | q = Node("q") 35 | 36 | # q 37 | 38 | print(linked_list_values(q)) # -> [ 'q' ] 39 | 40 | print(linked_list_values(None)) # -> [ ] 41 | 42 | -------------------------------------------------------------------------------- /python3/graph-largest-component.py: -------------------------------------------------------------------------------- 1 | from collections import deque 2 | 3 | def largest_component(g): 4 | vi = {} 5 | res = 0 6 | for n in g: 7 | if vi.get(n): continue 8 | q = deque([n]) 9 | cres = 0 10 | while(len(q)): 11 | c = q.popleft() 12 | vi[c] = True 13 | for ne in g.get(c): 14 | if not vi.get(ne): 15 | q.append(ne) 16 | cres += 1 17 | 18 | res = max(res, cres) 19 | 20 | return res 21 | 22 | print( 23 | largest_component({ 24 | 0: [8, 1, 5], 25 | 1: [0], 26 | 5: [0, 8], 27 | 8: [0, 5], 28 | 2: [3, 4], 29 | 3: [2, 4], 30 | 4: [3, 2] 31 | }) 32 | ) # -> 4 33 | -------------------------------------------------------------------------------- /python3/graph-has_path.py: -------------------------------------------------------------------------------- 1 | # https://structy.net/problems/has-path 2 | 3 | from collections import deque 4 | 5 | def has_path(g, src, n): 6 | s = deque([src]) 7 | while len(s): 8 | c = s.pop() 9 | if c == n: 10 | return True 11 | for el in g.get(c): 12 | s.append(el) 13 | 14 | return False 15 | 16 | def has_path_bfs(g, src, n): 17 | q = deque([src]) 18 | while len(q): 19 | c = q.popleft() 20 | if c == n: 21 | return True 22 | for el in g.get(c): 23 | q.append(el) 24 | 25 | return False 26 | 27 | g = { 28 | "f": ["g", "i"], 29 | "g": ["h"], 30 | "h": [], 31 | "i": ["g", "k"], 32 | "j": ["i"], 33 | "k": [], 34 | } 35 | 36 | print(has_path(g, "f", "k")) # True 37 | print(has_path_bfs(g, "f", "k")) # True 38 | 39 | -------------------------------------------------------------------------------- /advent-2021/4.py: -------------------------------------------------------------------------------- 1 | txt = open("4.in").read().split("\n") 2 | 3 | mrks = [int(n) for n in txt[0].split(",")] 4 | 5 | brds = [] 6 | 7 | rc = [] 8 | for l in txt[2:]: 9 | if l == "": 10 | brds.append(rc) 11 | rc = [] 12 | continue 13 | 14 | r = [int(n) for n in l.strip().split()] 15 | rc.append(r) 16 | 17 | 18 | wb = [] 19 | wel = 0 20 | for el in mrks: 21 | for bi, b in enumerate(brds): 22 | for bli, bl in enumerate(b): 23 | if el in bl: 24 | bl.remove(el) 25 | 26 | if len(bl) == 0: 27 | wb = b 28 | wel = el 29 | break 30 | else: 31 | continue 32 | break 33 | else: 34 | continue 35 | break 36 | 37 | s=0 38 | for bl in wb: 39 | s += sum(bl) 40 | 41 | print(s*wel) 42 | 43 | -------------------------------------------------------------------------------- /python3/graph-traversal.py: -------------------------------------------------------------------------------- 1 | from collections import deque 2 | 3 | def depth_first_search(g, src): 4 | s = deque([src]) 5 | 6 | while len(s): 7 | c = s.pop() 8 | print(c, end="") 9 | for el in g.get(c): 10 | s.append(el) 11 | 12 | def depth_first_search_recursion(g, src): 13 | print(src, end="") 14 | for n in g.get(src): 15 | depth_first_search_recursion(g, n) 16 | 17 | def breadth_first_search(g, src): 18 | q = deque([src]) 19 | while len(q): 20 | c = q.popleft() 21 | print(c, end="") 22 | for el in g.get(c): 23 | q.append(el) 24 | 25 | g = { 26 | 'a': ['b', 'c'], 27 | 'b': ['d'], 28 | 'c': ['e'], 29 | 'd': ['f'], 30 | 'e': [], 31 | 'f': [] 32 | } 33 | 34 | depth_first_search(g, 'a') 35 | print("") 36 | depth_first_search_recursion(g, 'a') 37 | print("") 38 | breadth_first_search(g, 'a') 39 | 40 | -------------------------------------------------------------------------------- /advent-2022/5.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | fn = __file__.split(".")[0] + ".in" 4 | txt = open(fn).read() 5 | 6 | st, ins = txt.split("\n\n") 7 | 8 | cbi = st.find("1") 9 | cei = len(st) - 1 10 | 11 | xis = [] 12 | for i, el in enumerate(txt[cbi-1:cei+1]): 13 | if el != " ": 14 | xis.append(i) 15 | 16 | di = {} 17 | for x in xis: 18 | di[x] = [] 19 | 20 | for l in txt[:cbi-2].split("\n"): 21 | for i, el in enumerate(l): 22 | if el not in [" ", "[", "]", "\n"]: 23 | di[i].append(el) 24 | 25 | mtx = list(di.values()) 26 | 27 | for l in ins.strip().split("\n"): 28 | c, si, di = [int(e) for e in re.sub(r"(move )|(from )|( to)", "", l).split(" ")] 29 | 30 | for _ in range(c): 31 | el = mtx[si-1].pop(0) 32 | mtx[di-1].insert(0, el) 33 | 34 | res = "" 35 | for s in mtx: 36 | res += s[0] 37 | 38 | print(res) 39 | 40 | -------------------------------------------------------------------------------- /advent-2022/5e.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | fn = __file__.split(".")[0] + ".in" 4 | txt = open(fn).read() 5 | 6 | st, ins = txt.split("\n\n") 7 | 8 | cbi = st.find("1") 9 | cei = len(st) - 1 10 | 11 | xis = [] 12 | for i, el in enumerate(txt[cbi-1:cei+1]): 13 | if el != " ": 14 | xis.append(i) 15 | 16 | di = {} 17 | for x in xis: 18 | di[x] = [] 19 | 20 | for l in txt[:cbi-2].split("\n"): 21 | for i, el in enumerate(l): 22 | if el not in [" ", "[", "]", "\n"]: 23 | di[i].append(el) 24 | 25 | mtx = list(di.values()) 26 | 27 | for l in ins.strip().split("\n"): 28 | c, si, di = [int(e) for e in re.sub(r"(move )|(from )|( to)", "", l).split(" ")] 29 | 30 | por = mtx[si-1][0:c] 31 | por.reverse() 32 | for el in por: 33 | mtx[di-1].insert(0, el) 34 | del mtx[si-1][0:c] 35 | 36 | res = "" 37 | for s in mtx: 38 | res += s[0] 39 | 40 | print(res) 41 | 42 | -------------------------------------------------------------------------------- /advent-2022/2.py: -------------------------------------------------------------------------------- 1 | inf = __file__.split(".")[0] + ".in" 2 | txt = open(inf).read().strip() 3 | 4 | scores = {"X": 1, "Y": 2, "Z": 3} 5 | 6 | sc = 0 7 | 8 | for h in txt.split("\n"): 9 | m, u = h.split() 10 | 11 | if m == "A": # Rock 12 | if u == "X": # Rock 13 | sc += scores[u] + 3 14 | elif u == "Y": # Paper 15 | sc += scores[u] + 6 16 | elif u == "Z": # Scissors 17 | sc += scores[u] + 0 18 | elif m == "B": # Paper 19 | if u == "X": # Rock 20 | sc += scores[u] + 0 21 | elif u == "Y": # Paper 22 | sc += scores[u] + 3 23 | elif u == "Z": # Scissors 24 | sc += scores[u] + 6 25 | elif m == "C": # Scissors 26 | if u == "X": # Rock 27 | sc += scores[u] + 6 28 | elif u == "Y": # Paper 29 | sc += scores[u] + 0 30 | elif u == "Z": # Scissors 31 | sc += scores[u] + 3 32 | print(sc) 33 | -------------------------------------------------------------------------------- /advent-2021/5.py: -------------------------------------------------------------------------------- 1 | inp = [] 2 | mx = 0 3 | my = 0 4 | for l in open("5.in").read().strip().split("\n"): 5 | prs = [p.strip() for p in l.split("->")] 6 | nps = [] 7 | for p in prs: 8 | np = [int(po) for po in p.split(",")] 9 | nps.append(np) 10 | 11 | p1, p2 = nps 12 | x1, y1 = p1 13 | x2, y2 = p2 14 | if x1 != x2 and y1 != y2: 15 | continue 16 | 17 | mx = max(x1, x2, mx) 18 | my = max(y1, y2, my) 19 | 20 | inp.append(sorted(nps, key=lambda p: (p[0], p[1]))) 21 | 22 | mtx = [[0 for x in range(mx + 1)] for _ in range(my + 1)] 23 | 24 | for prs in inp: 25 | print(prs) 26 | p1, p2 = prs 27 | x1, y1 = p1 28 | x2, y2 = p2 29 | 30 | if x1 == x2: 31 | for y in range(y2 - y1 + 1): 32 | mtx[y1 + y][x1] += 1 33 | else: 34 | for x in range(x2 - x1 + 1): 35 | mtx[y1][x1 + x] += 1 36 | 37 | res = 0 38 | for l in mtx: 39 | print(l) 40 | for p in l: 41 | if p >= 2: 42 | res += 1 43 | 44 | print(res) 45 | 46 | -------------------------------------------------------------------------------- /hacker-rank-interview-preparation-kit/one-week-preparation-kit-new-year-chaos.py: -------------------------------------------------------------------------------- 1 | #!/bin/python3 2 | 3 | from distutils.log import debug 4 | import math 5 | import os 6 | import random 7 | import re 8 | import sys 9 | 10 | # 11 | # Complete the 'minimumBribes' function below. 12 | # 13 | # The function accepts INTEGER_ARRAY q as parameter. 14 | # 15 | 16 | def minimumBribes(q): 17 | q = [e-1 for e in q] # adjust to 0-index for simplicity 18 | bribes = 0 19 | for i in range(len(q)-1): 20 | if q[i] - i > 2: 21 | print("Too chaotic") 22 | return 23 | j = i 24 | while j >= 0 and q[j+1] < q[j]: 25 | q[j+1], q[j] = q[j], q[j+1] 26 | bribes += 1 27 | j -= 1 28 | print(bribes) 29 | 30 | if __name__ == '__main__': 31 | t = int(input().strip()) 32 | 33 | for t_itr in range(t): 34 | n = int(input().strip()) 35 | 36 | q = list(map(int, input().rstrip().split())) 37 | 38 | minimumBribes(q) 39 | -------------------------------------------------------------------------------- /hacker-rank-interview-preparation-kit/no-prefix-set.py: -------------------------------------------------------------------------------- 1 | #!/bin/python3 2 | 3 | import math 4 | import os 5 | import random 6 | import re 7 | import sys 8 | 9 | # 10 | # Complete the 'noPrefix' function below. 11 | # 12 | # The function accepts STRING_ARRAY words as parameter. 13 | # 14 | 15 | 16 | def noPrefix(words): 17 | ht_prefix = {} 18 | ht_word = {} 19 | for w in words: 20 | check = "" 21 | if w in ht_prefix: 22 | print("BAD SET") 23 | print(w) 24 | return 25 | for l in w: 26 | check += l 27 | ht_prefix[check] = 1 28 | if check in ht_word: 29 | print("BAD SET") 30 | print(w) 31 | return 32 | ht_word[w] = 1 33 | print("GOOD SET") 34 | 35 | 36 | if __name__ == "__main__": 37 | n = int(input().strip()) 38 | 39 | words = [] 40 | 41 | for _ in range(n): 42 | words_item = input() 43 | words.append(words_item) 44 | 45 | noPrefix(words) 46 | -------------------------------------------------------------------------------- /python3/linked-list-reverse.py: -------------------------------------------------------------------------------- 1 | class Node: 2 | next = None 3 | def __init__(self, data): 4 | self.data = data 5 | 6 | def reverse_list(r): 7 | c, p = r, None 8 | while c: 9 | n = c.next 10 | c.next = p 11 | p = c 12 | c = n 13 | 14 | def print_list(r, pa=False): 15 | if not r: 16 | print("") 17 | return 18 | if pa: print(" -> ", end="") 19 | print(r.data, end="") 20 | print_list(r.next, pa=True) 21 | 22 | 23 | a = Node("a") 24 | b = Node("b") 25 | c = Node("c") 26 | d = Node("d") 27 | e = Node("e") 28 | f = Node("f") 29 | 30 | a.next = b 31 | b.next = c 32 | c.next = d 33 | d.next = e 34 | e.next = f 35 | 36 | # a -> b -> c -> d -> e -> f 37 | 38 | reverse_list(a) # f -> e -> d -> c -> b -> a 39 | print_list(f) 40 | 41 | 42 | x = Node("x") 43 | y = Node("y") 44 | 45 | x.next = y 46 | 47 | # x -> y 48 | 49 | reverse_list(x) # y -> x 50 | print_list(y) 51 | 52 | p = Node("p") 53 | 54 | # p 55 | 56 | reverse_list(p) # p 57 | print_list(p) 58 | -------------------------------------------------------------------------------- /advent-2022/2e.py: -------------------------------------------------------------------------------- 1 | inf = __file__.split(".")[0] + ".in" 2 | txt = open(inf).read().strip() 3 | 4 | scores = {"X": 1, "Y": 2, "Z": 3} 5 | l = {"A": "Z", "B": "X", "C": "Y"} 6 | d = {"A": "X", "B": "Y", "C": "Z"} 7 | w = {"A": "Y", "B": "Z", "C": "X"} 8 | 9 | sc = 0 10 | 11 | for h in txt.split("\n"): 12 | m, u = h.split() 13 | 14 | if m == "A": # Rock 15 | if u == "X": # Lose 16 | sc += scores[l[m]] + 0 17 | elif u == "Y": # Draw 18 | sc += scores[d[m]] + 3 19 | elif u == "Z": # Win 20 | sc += scores[w[m]] + 6 21 | elif m == "B": # Paper 22 | if u == "X": # Lose 23 | sc += scores[l[m]] + 0 24 | elif u == "Y": # Draw 25 | sc += scores[d[m]] + 3 26 | elif u == "Z": # Win 27 | sc += scores[w[m]] + 6 28 | elif m == "C": # Scissors 29 | if u == "X": # Lose 30 | sc += scores[l[m]] + 0 31 | elif u == "Y": # Draw 32 | sc += scores[d[m]] + 3 33 | elif u == "Z": # Win 34 | sc += scores[w[m]] + 6 35 | print(sc) 36 | -------------------------------------------------------------------------------- /python3/graph-shortest-path.py: -------------------------------------------------------------------------------- 1 | from collections import defaultdict, deque 2 | 3 | def shortest_path(e, src, dest): 4 | g = defaultdict(list) 5 | for n1, n2 in e: 6 | g[n1].append(n2) 7 | g[n2].append(n1) 8 | 9 | q = deque([(src, 0)]) 10 | vi = {} 11 | while(len(q)): 12 | (c, dist) = q.popleft() 13 | if c == dest: return dist 14 | vi[c] = True 15 | for ne in g.get(c): 16 | if not vi.get(ne): q.append((ne, dist + 1)) 17 | 18 | return -1 19 | 20 | edges = [ 21 | ['w', 'x'], 22 | ['x', 'y'], 23 | ['z', 'y'], 24 | ['z', 'v'], 25 | ['w', 'v'] 26 | ] 27 | 28 | print(shortest_path(edges, 'w', 'z')) # -> 2 29 | 30 | edges = [ 31 | ['m', 'n'], 32 | ['n', 'o'], 33 | ['o', 'p'], 34 | ['p', 'q'], 35 | ['t', 'o'], 36 | ['r', 'q'], 37 | ['r', 's'] 38 | ] 39 | 40 | print(shortest_path(edges, 'm', 's')) # -> 41 | 42 | edges = [ 43 | ['a', 'c'], 44 | ['a', 'b'], 45 | ['c', 'b'], 46 | ['c', 'd'], 47 | ['b', 'd'], 48 | ['e', 'd'], 49 | ['g', 'f'] 50 | ] 51 | 52 | print(shortest_path(edges, 'b', 'g')) # -> -1 53 | 54 | -------------------------------------------------------------------------------- /advent-2021/5e.py: -------------------------------------------------------------------------------- 1 | inp = [] 2 | mx = 0 3 | my = 0 4 | for l in open("5e.in").read().strip().split("\n"): 5 | prs = [p.strip() for p in l.split("->")] 6 | nps = [] 7 | for p in prs: 8 | np = [int(po) for po in p.split(",")] 9 | nps.append(np) 10 | 11 | p1, p2 = nps 12 | x1, y1 = p1 13 | x2, y2 = p2 14 | 15 | mx = max(x1, x2, mx) 16 | my = max(y1, y2, my) 17 | 18 | inp.append(sorted(nps, key=lambda p: (p[0], p[1]))) 19 | 20 | mtx = [[0 for x in range(mx + 1)] for _ in range(my + 1)] 21 | 22 | for prs in inp: 23 | print(prs) 24 | p1, p2 = prs 25 | x1, y1 = p1 26 | x2, y2 = p2 27 | 28 | if x1 == x2: 29 | for y in range(y2 - y1 + 1): 30 | mtx[y1 + y][x1] += 1 31 | elif y1 == y2: 32 | for x in range(x2 - x1 + 1): 33 | mtx[y1][x1 + x] += 1 34 | elif x2 > x1 and y2 > y1: 35 | for i in range(x2 - x1 + 1): 36 | mtx[y1 + i][x1 + i] += 1 37 | elif x2 > x1 and y2 < y1: 38 | for i in range(x2 - x1 + 1): 39 | mtx[y1 - i][x1 + i] += 1 40 | 41 | res = 0 42 | for l in mtx: 43 | print(l) 44 | for p in l: 45 | if p >= 2: 46 | res += 1 47 | 48 | print(res) 49 | 50 | -------------------------------------------------------------------------------- /python3/tree-tree-sum.py: -------------------------------------------------------------------------------- 1 | class Node(): 2 | left = None 3 | right = None 4 | 5 | def __init__(self, data): 6 | self.data = data 7 | 8 | def tree_sum(c): 9 | if not c: return 0 10 | 11 | acc = c.data 12 | if c.left: acc += tree_sum(c.left) 13 | if c.right: acc += tree_sum(c.right) 14 | 15 | return acc 16 | 17 | 18 | 19 | a = Node(3) 20 | b = Node(11) 21 | c = Node(4) 22 | d = Node(4) 23 | e = Node(-2) 24 | f = Node(1) 25 | 26 | a.left = b 27 | a.right = c 28 | b.left = d 29 | b.right = e 30 | c.right = f 31 | 32 | # 3 33 | # / \ 34 | # 11 4 35 | # / \ \ 36 | # 4 -2 1 37 | 38 | print(tree_sum(a)) # -> 21 39 | 40 | a = Node(1) 41 | b = Node(6) 42 | c = Node(0) 43 | d = Node(3) 44 | e = Node(-6) 45 | f = Node(2) 46 | g = Node(2) 47 | h = Node(2) 48 | 49 | a.left = b 50 | a.right = c 51 | b.left = d 52 | b.right = e 53 | c.right = f 54 | e.left = g 55 | f.right = h 56 | 57 | # 1 58 | # / \ 59 | # 6 0 60 | # / \ \ 61 | # 3 -6 2 62 | # / \ 63 | # 2 2 64 | 65 | print(tree_sum(a)) # -> 10 66 | 67 | print(tree_sum(None)) # -> 0 68 | 69 | -------------------------------------------------------------------------------- /python3/doubly-linked-list.py: -------------------------------------------------------------------------------- 1 | class Node: 2 | def __init__(self, data, prv=None, nxt=None): 3 | self.data = data 4 | self.prv = prv 5 | self.nxt = nxt 6 | 7 | def __str__(self): 8 | return str(self.data) 9 | 10 | 11 | class DoublyLinkedlist: 12 | def __init__(self, init_data): 13 | n = Node(init_data) 14 | self.head = n 15 | self.tail = n 16 | 17 | def __str__(self): 18 | cur = self.head 19 | els = [str(cur)] 20 | while cur.nxt != None: 21 | cur = cur.nxt 22 | els.append(str(cur)) 23 | 24 | return '<->'.join(els) 25 | 26 | @property 27 | def length(self): 28 | cur = self.tail 29 | l = 1 30 | while cur.prv != None: 31 | cur = cur.prv 32 | l += 1 33 | 34 | return l 35 | 36 | def push(self, data): 37 | n = Node(data, prv=self.tail) 38 | self.tail.nxt = n 39 | self.tail = n 40 | 41 | def unshift(self, data): 42 | n = Node(data, nxt=self.head) 43 | self.head.prv = n 44 | self.head = n 45 | 46 | 47 | dll = DoublyLinkedlist(1) 48 | dll.push(2) 49 | dll.push(3) 50 | dll.push(4) 51 | dll.unshift(0) 52 | print(dll.length) 53 | print(dll) 54 | 55 | -------------------------------------------------------------------------------- /advent-2021/3e.py: -------------------------------------------------------------------------------- 1 | inp = [l for l in open("3e.in").read().strip().split("\n")] 2 | 3 | 4 | ox = inp.copy() 5 | 6 | for i in range(len(inp[0])): 7 | zc = 0 8 | oc = 0 9 | for l in ox: 10 | tar = l[i] 11 | if tar == "0": 12 | zc += 1 13 | else: 14 | oc += 1 15 | 16 | nox = [] 17 | for l in ox: 18 | tar = l[i] 19 | 20 | if zc > oc: 21 | if tar == "0": 22 | nox.append(l) 23 | else: 24 | if tar == "1": 25 | nox.append(l) 26 | ox = nox 27 | 28 | 29 | 30 | cx = inp.copy() 31 | 32 | for i in range(len(inp[0])): 33 | zc = 0 34 | oc = 0 35 | for l in cx: 36 | tar = l[i] 37 | if tar == "0": 38 | zc += 1 39 | else: 40 | oc += 1 41 | 42 | ncx = [] 43 | for l in cx: 44 | tar = l[i] 45 | 46 | if oc < zc: 47 | if tar == "1": 48 | ncx.append(l) 49 | else: 50 | if tar == "0": 51 | ncx.append(l) 52 | cx = ncx 53 | 54 | if len(cx) == 1: 55 | break 56 | 57 | 58 | print(int(ox[0], 2) * int(cx[0], 2)) 59 | 60 | -------------------------------------------------------------------------------- /python3/kmp.py: -------------------------------------------------------------------------------- 1 | def find_pattern(l: str, p: str) -> int: 2 | c = 0 3 | for li, _ in enumerate(l[:len(l) - len(p) + 1]): 4 | for pi, _ in enumerate(p): 5 | if l[li + pi] != p[pi]: 6 | break 7 | if pi == len(p) - 1: 8 | c += 1 9 | 10 | return c 11 | 12 | 13 | # https://www.youtube.com/watch?v=JoF0Z7nVSrA 14 | def kmp(l: str, p: str) -> int: 15 | lps = [0] * len(p) # Longest prefix-suffix 16 | pvlps, i = 0, 1 17 | while i < len(p): 18 | if p[i] == p[pvlps]: 19 | lps[i] = pvlps + 1 20 | pvlps += 1 21 | i += 1 22 | elif pvlps == 0: 23 | lps[i] = 0 24 | i += 1 25 | else: 26 | pvlps = lps[pvlps - 1] 27 | 28 | c = 0 29 | li, pi = 0, 0 30 | while li < len(l): 31 | if l[li] == l[pi]: 32 | li, pi = li + 1, pi + 1 33 | elif pi == 0: 34 | li += 1 35 | else: 36 | pi = lps[pi - 1] 37 | 38 | if pi == len(p) - 1: 39 | c += 1 40 | 41 | return c 42 | 43 | 44 | l, p = "AAAXAAAAX", "AAAA" 45 | l, p = "HelloHelloHello", "Hello" 46 | print(find_pattern(l, p)) 47 | print(kmp(l, p)) 48 | 49 | -------------------------------------------------------------------------------- /python3/linked-list-get-node-value.py: -------------------------------------------------------------------------------- 1 | class Node: 2 | next = None 3 | def __init__(self, data): 4 | self.data = data 5 | 6 | 7 | def get_node_value(c, i): 8 | j = 0 9 | cn = c 10 | while j < i: 11 | if not cn: return None 12 | cn = cn.next 13 | j += 1 14 | 15 | return cn.data if cn else None 16 | 17 | a = Node("a") 18 | b = Node("b") 19 | c = Node("c") 20 | d = Node("d") 21 | 22 | a.next = b 23 | b.next = c 24 | c.next = d 25 | 26 | # a -> b -> c -> d 27 | 28 | print(get_node_value(a, 2)) # 'c' 29 | 30 | 31 | a = Node("a") 32 | b = Node("b") 33 | c = Node("c") 34 | d = Node("d") 35 | 36 | a.next = b 37 | b.next = c 38 | c.next = d 39 | 40 | # a -> b -> c -> d 41 | 42 | print(get_node_value(a, 3)) # 'd' 43 | 44 | a = Node("a") 45 | b = Node("b") 46 | c = Node("c") 47 | d = Node("d") 48 | 49 | a.next = b 50 | b.next = c 51 | c.next = d 52 | 53 | # a -> b -> c -> d 54 | 55 | print(get_node_value(a, 7)) # None 56 | 57 | node1 = Node("banana") 58 | node2 = Node("mango") 59 | 60 | node1.next = node2 61 | 62 | # banana -> mango 63 | 64 | print(get_node_value(node1, 0)) # 'banana' 65 | 66 | node1 = Node("banana") 67 | node2 = Node("mango") 68 | 69 | node1.next = node2 70 | 71 | # banana -> mango 72 | 73 | print(get_node_value(node1, 1)) # 'mango' 74 | -------------------------------------------------------------------------------- /hacker-rank-interview-preparation-kit/track-tour.py: -------------------------------------------------------------------------------- 1 | #!/bin/python3 2 | 3 | import math 4 | import os 5 | import random 6 | import re 7 | import sys 8 | 9 | # 10 | # Complete the 'truckTour' function below. 11 | # 12 | # The function is expected to return an INTEGER. 13 | # The function accepts 2D_INTEGER_ARRAY petrolpumps as parameter. 14 | # 15 | 16 | def truckTour(petrolpumps): 17 | # petrolpumps = [[1, 5], [10, 3], [3, 4]] 18 | # i = 1, j = 2 19 | for i in range(len(petrolpumps)): 20 | b = 0 21 | started = True 22 | for j in range(len(petrolpumps)+1): 23 | aj = i+j if i+j < len(petrolpumps) else abs(len(petrolpumps) - (i+j)) 24 | if aj == i and started is not True: 25 | return i 26 | p, d = petrolpumps[aj] 27 | b += p-d 28 | if b < 0: 29 | break 30 | started = False 31 | 32 | return -1 33 | 34 | if __name__ == '__main__': 35 | fptr = open(os.getenv('OUTPUT_PATH', 'test.out'), 'w') 36 | 37 | n = int(input().strip()) 38 | 39 | petrolpumps = [] 40 | 41 | for _ in range(n): 42 | petrolpumps.append(list(map(int, input().rstrip().split()))) 43 | 44 | result = truckTour(petrolpumps) 45 | 46 | fptr.write(str(result) + '\n') 47 | 48 | fptr.close() 49 | -------------------------------------------------------------------------------- /python3/linked-list-find.py: -------------------------------------------------------------------------------- 1 | class Node: 2 | next = None 3 | def __init__(self, data): 4 | self.data = data 5 | 6 | def linked_list_find(c, t): 7 | if not c: return False 8 | return c.data == t or linked_list_find(c.next, t) 9 | 10 | a = Node("a") 11 | b = Node("b") 12 | c = Node("c") 13 | d = Node("d") 14 | 15 | a.next = b 16 | b.next = c 17 | c.next = d 18 | 19 | # a -> b -> c -> d 20 | 21 | print(linked_list_find(a, "c")) # True 22 | 23 | a = Node("a") 24 | b = Node("b") 25 | c = Node("c") 26 | d = Node("d") 27 | 28 | a.next = b 29 | b.next = c 30 | c.next = d 31 | 32 | # a -> b -> c -> d 33 | 34 | print(linked_list_find(a, "d")) # True 35 | 36 | a = Node("a") 37 | b = Node("b") 38 | c = Node("c") 39 | d = Node("d") 40 | 41 | a.next = b 42 | b.next = c 43 | c.next = d 44 | 45 | # a -> b -> c -> d 46 | 47 | print(linked_list_find(a, "q")) # False 48 | 49 | node1 = Node("jason") 50 | node2 = Node("leneli") 51 | 52 | node1.next = node2 53 | 54 | # jason -> leneli 55 | 56 | print(linked_list_find(node1, "jason")) # True 57 | 58 | node1 = Node("jason") 59 | node2 = Node("leneli") 60 | 61 | node1.next = node2 62 | 63 | # jason -> leneli 64 | 65 | linked_list_find(node1, "jason") # True 66 | 67 | node1 = Node(42) 68 | 69 | # 42 70 | 71 | print(linked_list_find(node1, 100)) # False 72 | 73 | -------------------------------------------------------------------------------- /advent-2022/7.py: -------------------------------------------------------------------------------- 1 | txt = open(__file__.split(".")[0] + ".in").read() 2 | 3 | # txt = """$ cd / 4 | # $ ls 5 | # dir a 6 | # 14848514 b.txt 7 | # 8504156 c.dat 8 | # dir d 9 | # $ cd a 10 | # $ ls 11 | # dir e 12 | # 29116 f 13 | # 2557 g 14 | # 62596 h.lst 15 | # $ cd e 16 | # $ ls 17 | # 584 i 18 | # $ cd .. 19 | # $ cd .. 20 | # $ cd d 21 | # $ ls 22 | # 4060174 j 23 | # 8033020 d.log 24 | # 5626152 d.ext 25 | # 7214296 k""" 26 | 27 | t = {} 28 | c = [] 29 | for ln in txt.strip().split("\n")[1:]: 30 | if ln == "$ ls": 31 | continue 32 | 33 | if ln.startswith("$"): 34 | _, cmd, arg = ln.split(" ") 35 | if cmd == "cd": 36 | if arg == "..": 37 | c.pop() 38 | else: 39 | c.append(arg) 40 | else: 41 | ld = t 42 | for d in c: 43 | ld = ld[d] 44 | 45 | if ln.startswith("dir"): 46 | _, dn = ln.split(" ") 47 | ld[dn] = {} 48 | else: 49 | fs, fn = ln.split(" ") 50 | ld[fn] = int(fs) 51 | 52 | 53 | print(t) 54 | 55 | 56 | def ds(t=t, rt={}, ck="/"): 57 | s, sds = 0, 0 58 | for itk, it in t.items(): 59 | if isinstance(it, dict): 60 | sep = "/" if ck != "/" else "" 61 | sds, _ = ds(it, rt, ck + sep + itk) 62 | else: 63 | s += it 64 | rt[ck] = s + sds 65 | return rt[ck], rt 66 | 67 | 68 | _, rt = ds() 69 | 70 | print((sum(filter(lambda d: d <= 100000, rt.values())))) 71 | -------------------------------------------------------------------------------- /python3/lowerbound-upperbound.py: -------------------------------------------------------------------------------- 1 | 2 | def binary_search(arr, t): 3 | low, up = 0, len(arr) 4 | while low < up: 5 | mid = (low + up) // 2 6 | if arr[mid] == t: 7 | return mid 8 | elif arr[mid] > t: 9 | up = mid 10 | else: 11 | low = mid + 1 12 | 13 | return -1 14 | 15 | 16 | def lowerbound(arr, t): 17 | low, up = 0, len(arr) 18 | while low < up: 19 | mid = (low + up) // 2 20 | if arr[mid] >= t: 21 | up = mid 22 | else: 23 | low = mid + 1 24 | 25 | return low 26 | 27 | 28 | def upperbound(arr, t): 29 | low, up = 0, len(arr) 30 | while low < up: 31 | mid = (low + up) // 2 32 | if arr[mid] > t: 33 | up = mid 34 | else: 35 | low = mid + 1 36 | 37 | return low 38 | 39 | 40 | def bound_search(arr, t, compare): 41 | low, up = 0, len(arr) 42 | while low < up: 43 | mid = (low + up) // 2 44 | if compare(arr[mid], t): 45 | up = mid 46 | else: 47 | low = mid + 1 48 | 49 | return low 50 | 51 | lower = lambda el, t: el >= t 52 | upper = lambda el, t: el > t 53 | 54 | 55 | arr = [1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4] 56 | 57 | print(binary_search(arr, 2)) # 5 58 | print(lowerbound(arr, 2)) # 4 59 | print(upperbound(arr, 2)) # 7 One index after the last element 60 | print(bound_search(arr, 2, lower)) # 4 61 | print(bound_search(arr, 2, upper)) # 7 62 | 63 | -------------------------------------------------------------------------------- /advent-2022/8.py: -------------------------------------------------------------------------------- 1 | # read the input from a file called 8.in 2 | txt = open(__file__.split(".")[0] + ".in").read() 3 | 4 | # txt = """30373 5 | # 25512 6 | # 65332 7 | # 33549 8 | # 35390""" 9 | 10 | # Turn txt into a grid of integers 11 | g = [[int(c) for c in ln] for ln in txt.strip().split("\n")] 12 | 13 | # A visible item in a grid is a item 14 | # if all the items between it and the edge of the grid 15 | # are smaller than it 16 | def vis(g, x, y): 17 | # return True if the item is on the edge of the grid 18 | if x == 0 or y == 0 or x == len(g[y]) - 1 or y == len(g) - 1: 19 | return True 20 | 21 | # Check up 22 | for y2 in range(y): 23 | if g[y2][x] >= g[y][x]: 24 | break 25 | else: 26 | return True 27 | 28 | # Check down 29 | for y2 in range(y + 1, len(g)): 30 | if g[y2][x] >= g[y][x]: 31 | break 32 | else: 33 | return True 34 | 35 | # Check left 36 | for x2 in range(x): 37 | if g[y][x2] >= g[y][x]: 38 | break 39 | else: 40 | return True 41 | 42 | # Check right 43 | for x2 in range(x + 1, len(g[y])): 44 | if g[y][x2] >= g[y][x]: 45 | break 46 | else: 47 | return True 48 | 49 | return False 50 | 51 | 52 | # Count the number of visible items in a grid 53 | def count_vis(g): 54 | c = 0 55 | for y in range(len(g)): 56 | for x in range(len(g[y])): 57 | if vis(g, x, y): 58 | print(f"Visiable: {g[y][x]} ({x}, {y})") 59 | c += 1 60 | return c 61 | 62 | 63 | print(count_vis(g)) 64 | -------------------------------------------------------------------------------- /python3/tree-max-root-to-leaf-path-sum.py: -------------------------------------------------------------------------------- 1 | from math import inf 2 | 3 | 4 | class Node: 5 | left = None 6 | right = None 7 | def __init__(self, data): 8 | self.data = data 9 | 10 | 11 | def max_path_sum(c): 12 | ch = [] 13 | if c.left: ch.append(max_path_sum(c.left)) 14 | if c.right: ch.append(max_path_sum(c.right)) 15 | return c.data + max(ch or [0]) 16 | 17 | a = Node(3) 18 | b = Node(11) 19 | c = Node(4) 20 | d = Node(4) 21 | e = Node(-2) 22 | f = Node(1) 23 | 24 | a.left = b 25 | a.right = c 26 | b.left = d 27 | b.right = e 28 | c.right = f 29 | 30 | # 3 31 | # / \ 32 | # 11 4 33 | # / \ \ 34 | # 4 -2 1 35 | 36 | print(max_path_sum(a)) # -> 18 37 | 38 | a = Node(5) 39 | b = Node(11) 40 | c = Node(54) 41 | d = Node(20) 42 | e = Node(15) 43 | f = Node(1) 44 | g = Node(3) 45 | 46 | a.left = b 47 | a.right = c 48 | b.left = d 49 | b.right = e 50 | e.left = f 51 | e.right = g 52 | 53 | # 5 54 | # / \ 55 | # 11 54 56 | # / \ 57 | # 20 15 58 | # / \ 59 | # 1 3 60 | 61 | print(max_path_sum(a)) # -> 59 62 | 63 | a = Node(-1) 64 | b = Node(-6) 65 | c = Node(-5) 66 | d = Node(-3) 67 | e = Node(0) 68 | f = Node(-13) 69 | g = Node(-1) 70 | h = Node(-2) 71 | 72 | a.left = b 73 | a.right = c 74 | b.left = d 75 | b.right = e 76 | c.right = f 77 | e.left = g 78 | f.right = h 79 | 80 | # -1 81 | # / \ 82 | # -6 -5 83 | # / \ \ 84 | # -3 0 -13 85 | # / \ 86 | # -1 -2 87 | 88 | print(max_path_sum(a)) # -> -8 89 | 90 | a = Node(42) 91 | 92 | # 42 93 | 94 | print(max_path_sum(a)) # -> 42 95 | 96 | -------------------------------------------------------------------------------- /python3/singly-linked-list.py: -------------------------------------------------------------------------------- 1 | class Node: 2 | def __init__(self, data, next=None): 3 | self.data = data 4 | self.next = next 5 | 6 | def __str__(self): 7 | return str(self.data) 8 | 9 | class LinkedList: 10 | def __init__(self, head_data): 11 | head = Node(head_data, None) 12 | self.head = head 13 | 14 | @property 15 | def length(self): 16 | nxt = self.head.next 17 | le=1 18 | while nxt != None: 19 | le += 1 20 | nxt = nxt.next 21 | 22 | return le 23 | 24 | def append(self, data): 25 | cur = self.head 26 | while cur.next != None: 27 | cur = cur.next 28 | 29 | cur.next = Node(data) 30 | 31 | def display(self): 32 | els = [] 33 | cur = self.head 34 | while cur.next != None: 35 | els.append(str(cur)) 36 | cur = cur.next 37 | 38 | print('->'.join(els)) 39 | 40 | def get(self, idx): 41 | l = self.length 42 | if idx > l - 1: 43 | raise Exception(f"Out of the range index: {idx}") 44 | cur = self.head 45 | for i in range(idx): 46 | cur = cur.next 47 | 48 | return cur 49 | 50 | def erase(self, idx): 51 | l = self.length 52 | if idx > l - 1: 53 | raise Exception("Out of the range index: {idx}") 54 | 55 | cur = self.head 56 | for i in range(+ 1, idx): 57 | cur = cur.next 58 | 59 | cur.next = cur.next.next 60 | 61 | ll = LinkedList(2) 62 | ll.append(3) 63 | ll.append(4) 64 | ll.append(3) 65 | ll.append(1) 66 | ll.display() 67 | print(f"The element on the 2nd index is {ll.get(2)}") 68 | ll.erase(2) 69 | ll.display() 70 | print(f"The element on the 2nd index is {ll.get(2)}") 71 | 72 | -------------------------------------------------------------------------------- /python3/graph-island-count.py: -------------------------------------------------------------------------------- 1 | # https://structy.net/problems/island-count 2 | 3 | def explore(g, ri, ci, vi): 4 | if not 0 <= ri < len(g): return False 5 | if not 0 <= ci < len(g[ri]): return False 6 | 7 | if g[ri][ci] == 'W': return False 8 | 9 | l = f"{ri},{ci}" 10 | if vi.get(l): return False 11 | vi[l] = 1 12 | 13 | explore(g, ri + 1, ci, vi) 14 | explore(g, ri - 1, ci, vi) 15 | explore(g, ri, ci + 1, vi) 16 | explore(g, ri, ci - 1, vi) 17 | 18 | return True 19 | 20 | 21 | def island_count(g): 22 | res = 0 23 | vi = {} 24 | for ri in range(len(g)): 25 | for ci in range(len(g[ri])): 26 | # ri, ci 27 | # ri + 1, ci 28 | # ri - 1, ci 29 | # ri, ci + 1 30 | # ri, ci - 1 31 | if explore(g, ri, ci, vi): res += 1 32 | 33 | return res 34 | 35 | 36 | grid = [ 37 | ['W', 'L', 'W', 'W', 'W'], 38 | ['W', 'L', 'W', 'W', 'W'], 39 | ['W', 'W', 'W', 'L', 'W'], 40 | ['W', 'W', 'L', 'L', 'W'], 41 | ['L', 'W', 'W', 'L', 'L'], 42 | ['L', 'L', 'W', 'W', 'W'], 43 | ] 44 | 45 | print(island_count(grid)) # -> 3 46 | 47 | grid = [ 48 | ['L', 'W', 'W', 'L', 'W'], 49 | ['L', 'W', 'W', 'L', 'L'], 50 | ['W', 'L', 'W', 'L', 'W'], 51 | ['W', 'W', 'W', 'W', 'W'], 52 | ['W', 'W', 'L', 'L', 'L'], 53 | ] 54 | 55 | print(island_count(grid)) # -> 4 56 | 57 | grid = [ 58 | ['L', 'L', 'L'], 59 | ['L', 'L', 'L'], 60 | ['L', 'L', 'L'], 61 | ] 62 | 63 | print(island_count(grid)) # -> 1 64 | 65 | grid = [ 66 | ['L', 'L', 'L'], 67 | ['L', 'L', 'L'], 68 | ['L', 'L', 'L'], 69 | ] 70 | 71 | print(island_count(grid)) # -> 1 72 | 73 | -------------------------------------------------------------------------------- /python3/tree-pre-in-post-order-treversal.py: -------------------------------------------------------------------------------- 1 | class Node: 2 | left = None 3 | right = None 4 | def __init__(self, data): 5 | self.data = data 6 | 7 | 8 | def pre_order_traversal(c): 9 | tr = [c.data] 10 | if c.left: tr += pre_order_traversal(c.left) 11 | if c.right: tr += pre_order_traversal(c.right) 12 | return tr 13 | 14 | def in_order_traversal(c): 15 | tr = [c.data] 16 | if c.left: tr = in_order_traversal(c.left) + tr 17 | if c.right: tr += in_order_traversal(c.right) 18 | return tr 19 | 20 | def post_order_traversal(c): 21 | tr = [] 22 | if c.left: tr += post_order_traversal(c.left) 23 | if c.right: tr += post_order_traversal(c.right) 24 | tr += [c.data] 25 | return tr 26 | 27 | a = Node(-1) 28 | b = Node(-6) 29 | c = Node(-5) 30 | d = Node(-3) 31 | e = Node(0) 32 | f = Node(-13) 33 | g = Node(-1) 34 | h = Node(-2) 35 | 36 | a.left = b 37 | a.right = c 38 | b.left = d 39 | b.right = e 40 | c.right = f 41 | e.left = g 42 | f.right = h 43 | 44 | # -1 45 | # / \ 46 | # -6 -5 47 | # / \ \ 48 | # -3 0 -13 49 | # / \ 50 | # -1 -2 51 | 52 | # Depth first traversal: 53 | # pre order: root, left, right 54 | # in order: left, root, right 55 | # post order: left, right, root 56 | # 57 | # Breadth first traversal 58 | # Level 59 | 60 | print(f"pre-order: {pre_order_traversal(a)}") # [-1, -6, -3, 0, -1, -5, -13, -2] # [-1, -6, -3, 0, -1, -5, -13, -2] 61 | print(f"in-order: {in_order_traversal(a)}") # [-3, -6, -1, 0, -1, -5, -13, -2] # [-3, -6, -1, 0, -1, -5, -13, -2] 62 | print(f"post-order: {post_order_traversal(a)}") # [-3, -1, 0, -6, -2, -13, -5, -1] # [-3, -1, 0, -6, -2, -13, -5, -1] 63 | -------------------------------------------------------------------------------- /python3/graph-minimum-island.py: -------------------------------------------------------------------------------- 1 | # https://structy.net/problems/minimum-island 2 | 3 | def explore(g, ri, ci, vi): 4 | if not 0 <= ri < len(g): return 0 5 | if not 0 <= ci < len(g[ri]): return 0 6 | 7 | if g[ri][ci] == 'W': return 0 8 | 9 | l = f"{ri},{ci}" 10 | if vi.get(l): return 0 11 | vi[l] = 1 12 | 13 | s = sum( 14 | [ 15 | 1, 16 | explore(g, ri + 1, ci, vi), 17 | explore(g, ri - 1, ci, vi), 18 | explore(g, ri, ci + 1, vi), 19 | explore(g, ri, ci - 1, vi), 20 | ] 21 | ) 22 | 23 | return s 24 | 25 | 26 | def minimum_island(g): 27 | res = 0 28 | vi = {} 29 | 30 | for ri in range(len(g)): 31 | for ci in range(len(g)): 32 | s = explore(g, ri, ci, vi) 33 | if res == 0: res = s 34 | if s > 0: 35 | res = min(res, s) 36 | 37 | return res 38 | 39 | 40 | grid = [ 41 | ['W', 'L', 'W', 'W', 'W'], 42 | ['W', 'L', 'W', 'W', 'W'], 43 | ['W', 'W', 'W', 'L', 'W'], 44 | ['W', 'W', 'L', 'L', 'W'], 45 | ['L', 'W', 'W', 'L', 'L'], 46 | ['L', 'L', 'W', 'W', 'W'], 47 | ] 48 | 49 | print(minimum_island(grid)) # -> 2 50 | 51 | grid = [ 52 | ['L', 'W', 'W', 'L', 'W'], 53 | ['L', 'W', 'W', 'L', 'L'], 54 | ['W', 'L', 'W', 'L', 'W'], 55 | ['W', 'W', 'W', 'W', 'W'], 56 | ['W', 'W', 'L', 'L', 'L'], 57 | ] 58 | 59 | print(minimum_island(grid)) # -> 1 60 | 61 | grid = [ 62 | ['L', 'L', 'L'], 63 | ['L', 'L', 'L'], 64 | ['L', 'L', 'L'], 65 | ] 66 | 67 | print(minimum_island(grid))# -> 9 68 | 69 | grid = [ 70 | ['W', 'W'], 71 | ['L', 'L'], 72 | ['W', 'W'], 73 | ['W', 'L'] 74 | ] 75 | 76 | print(minimum_island(grid)) # -> 1 77 | 78 | -------------------------------------------------------------------------------- /advent-2021/4e.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | infile = sys.argv[1] if len(sys.argv) > 1 else "4e.in" 4 | 5 | # parse input 6 | numbers = None 7 | B = [] 8 | F = [] 9 | board = [] 10 | for line in open(infile): 11 | line = line.strip() 12 | if numbers is None: 13 | numbers = [int(x) for x in line.split(",")] 14 | else: 15 | if line: 16 | board.append([int(x) for x in line.split()]) 17 | else: 18 | if board: 19 | B.append(board) 20 | board = [] 21 | B.append(board) 22 | 23 | for b in B: 24 | assert len(b) == 5 and len(b[0]) == 5 25 | F.append([[False for _ in range(5)] for _ in range(5)]) 26 | 27 | WON = [False for _ in range(len(B))] 28 | for num in numbers: 29 | for i in range(len(B)): 30 | for r in range(5): 31 | for c in range(5): 32 | if B[i][r][c] == num: 33 | F[i][r][c] = True 34 | 35 | won = False 36 | for r in range(5): 37 | ok = True 38 | for c in range(5): 39 | if not F[i][r][c]: 40 | ok = False 41 | if ok: 42 | won = True 43 | for c in range(5): 44 | ok = True 45 | for r in range(5): 46 | if not F[i][r][c]: 47 | ok = False 48 | if ok: 49 | won = True 50 | if won and not WON[i]: 51 | WON[i] = True 52 | nwin = len([j for j in range(len(B)) if WON[j]]) 53 | if nwin == 1 or nwin == len(B): 54 | unmarked = 0 55 | for r in range(5): 56 | for c in range(5): 57 | if not F[i][r][c]: 58 | unmarked += B[i][r][c] 59 | print(unmarked * num) 60 | -------------------------------------------------------------------------------- /python3/tree-breadth-first-values.py: -------------------------------------------------------------------------------- 1 | from collections import deque 2 | 3 | class Node: 4 | left = None 5 | right = None 6 | 7 | def __init__(self, data): 8 | self.data = data 9 | 10 | def breadth_first_values(r): 11 | q = deque([r]) 12 | res = [] 13 | while(len(q)): 14 | c = q.popleft() 15 | if not c: break 16 | res.append(c.data) 17 | if c.left: q.append(c.left) 18 | if c.right: q.append(c.right) 19 | 20 | return res 21 | 22 | 23 | a = Node('a') 24 | b = Node('b') 25 | c = Node('c') 26 | d = Node('d') 27 | e = Node('e') 28 | f = Node('f') 29 | 30 | a.left = b 31 | a.right = c 32 | b.left = d 33 | b.right = e 34 | c.right = f 35 | 36 | # a 37 | # / # b c 38 | # / \ # d e f 39 | 40 | print(breadth_first_values(a)) 41 | # -> ['a', 'b', 'c', 'd', 'e', 'f'] 42 | 43 | a = Node('a') 44 | b = Node('b') 45 | c = Node('c') 46 | d = Node('d') 47 | e = Node('e') 48 | f = Node('f') 49 | g = Node('g') 50 | h = Node('h') 51 | 52 | a.left = b 53 | a.right = c 54 | b.left = d 55 | b.right = e 56 | c.right = f 57 | e.left = g 58 | f.right = h 59 | 60 | # a 61 | # / # b c 62 | # / \ # d e f 63 | # / # g h 64 | 65 | print(breadth_first_values(a)) 66 | # -> ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] 67 | 68 | a = Node('a') 69 | 70 | # a 71 | 72 | print(breadth_first_values(a)) 73 | # -> ['a'] 74 | 75 | a = Node('a') 76 | b = Node('b') 77 | c = Node('c') 78 | d = Node('d') 79 | e = Node('e') 80 | x = Node('x') 81 | 82 | a.right = b 83 | b.left = c 84 | c.left = x 85 | c.right = d 86 | d.right = e 87 | 88 | # a 89 | # # b 90 | # / 91 | # c 92 | # / # x d 93 | # # e 94 | 95 | print(breadth_first_values(a)) 96 | # -> ['a', 'b', 'c', 'x', 'd', 'e'] 97 | 98 | print(breadth_first_values(None)) 99 | # -> [] 100 | -------------------------------------------------------------------------------- /python3/tree-tree-min-value.py: -------------------------------------------------------------------------------- 1 | from collections import deque 2 | from math import inf 3 | 4 | class Node: 5 | left = None 6 | right = None 7 | 8 | def __init__(self, data): 9 | self.data = data 10 | 11 | 12 | def tree_min_value(r): 13 | m = inf 14 | q = deque([r]) 15 | while(len(q)): 16 | c = q.popleft() 17 | m = min(c.data, m) 18 | if c.left: q.append(c.left) 19 | if c.right: q.append(c.right) 20 | 21 | return m 22 | 23 | def dft(c): 24 | m = c.data 25 | if c.left: m = min(m, dft(c.left)) 26 | if c.right: m = min(m, dft(c.right)) 27 | return m 28 | 29 | 30 | a = Node(3) 31 | b = Node(11) 32 | c = Node(4) 33 | d = Node(4) 34 | e = Node(-2) 35 | f = Node(1) 36 | 37 | a.left = b 38 | a.right = c 39 | b.left = d 40 | b.right = e 41 | c.right = f 42 | 43 | # 3 44 | # / \ 45 | # 11 4 46 | # / \ \ 47 | # 4 -2 1 48 | print(tree_min_value(a)) # -> -2 49 | print(dft(a)) # -> -2 50 | 51 | a = Node(5) 52 | b = Node(11) 53 | c = Node(3) 54 | d = Node(4) 55 | e = Node(14) 56 | f = Node(12) 57 | 58 | a.left = b 59 | a.right = c 60 | b.left = d 61 | b.right = e 62 | c.right = f 63 | 64 | # 5 65 | # / \ 66 | # 11 3 67 | # / \ \ 68 | # 4 14 12 69 | 70 | print(tree_min_value(a)) # ->3 71 | 72 | a = Node(-1) 73 | b = Node(-6) 74 | c = Node(-5) 75 | d = Node(-3) 76 | e = Node(-4) 77 | f = Node(-13) 78 | g = Node(-2) 79 | h = Node(-2) 80 | 81 | a.left = b 82 | a.right = c 83 | b.left = d 84 | b.right = e 85 | c.right = f 86 | e.left = g 87 | f.right = h 88 | 89 | # -1 90 | # / \ 91 | # -6 -5 92 | # / \ \ 93 | # -3 -4 -13 94 | # / \ 95 | # -2 -2 96 | 97 | print(tree_min_value(a)) # -> -13 98 | print(dft(a)) # -> -13 99 | 100 | a = Node(42) 101 | 102 | # 42 103 | 104 | print(tree_min_value(a)) # -> 42 105 | -------------------------------------------------------------------------------- /python3/graph-rmove-non-edge-islands.py: -------------------------------------------------------------------------------- 1 | # https://www.youtube.com/watch?v=4tYoVx0QoN0 2 | 3 | def explore(g, ri, ci, vi): 4 | if not 0 <= ri < len(g): return [] 5 | if not 0 <= ci < len(g[ri]): return [] 6 | 7 | if g[ri][ci] != 1: return [] 8 | 9 | p= f"{ri},{ci}" 10 | if vi.get(p): return [] 11 | vi[p] = 1 12 | 13 | prc = [ri, ci] 14 | 15 | prc += explore(g, ri + 1, ci, vi) 16 | prc += explore(g, ri - 1, ci, vi) 17 | prc += explore(g, ri, ci + 1, vi) 18 | prc += explore(g, ri, ci - 1, vi) 19 | 20 | return prc 21 | 22 | 23 | def remove_islands(g): 24 | vi = {} 25 | iss = [] 26 | for ri in range(len(g)): 27 | for ci in range(len(g[ri])): 28 | res = explore(g, ri, ci, vi) 29 | if res: iss.append(res) 30 | 31 | # [[0, 0], [1, 1], [1, 3, 1, 4, 2, 4, 3, 4, 1, 5], [2, 2], [3, 0, 4, 0, 5, 0, 3, 1], [4, 2, 4, 3], [5, 5]] 32 | tbr = [] 33 | for i in iss: 34 | ind = True 35 | for j in range(len(i)): 36 | if (j % 2) == 0: 37 | if i[j] == 0 or i[j] == (len(g) - 1): 38 | ind = False 39 | break 40 | else: 41 | if i[j] == 0 or i[j] == (len(g[0]) - 1): 42 | ind = False 43 | break 44 | if ind: tbr.append(i) 45 | 46 | # [[1, 1], [2, 2], [4, 2, 4, 3]] for i in tbr: 47 | for i in tbr: 48 | for j in range(len(i)): 49 | if (j % 2) == 0: 50 | ri = i[j] 51 | ci = i[j+1] 52 | g[ri][ci] = 0 53 | 54 | 55 | matrix = [ 56 | [1, 0, 0, 0, 0, 0], 57 | [0, 1, 0, 1, 1, 1], 58 | [0, 0, 1, 0, 1, 0], 59 | [1, 1, 0, 0, 1, 0], 60 | [1, 0, 1, 1, 0, 0], 61 | [1, 0, 0, 0, 0, 1], 62 | ] 63 | 64 | remove_islands(matrix) 65 | print(matrix) 66 | 67 | # [ 68 | # [1, 0, 0, 0, 0, 0], 69 | # [0, 0, 0, 1, 1, 1], 70 | # [0, 0, 0, 0, 1, 0], 71 | # [1, 1, 0, 0, 1, 0], 72 | # [1, 0, 0, 0, 0, 0], 73 | # [1, 0, 0, 0, 0, 1], 74 | # ] 75 | 76 | -------------------------------------------------------------------------------- /python3/linked-list-zipper-lists.py: -------------------------------------------------------------------------------- 1 | class Node: 2 | next = None 3 | def __init__(self, data): 4 | self.data = data 5 | 6 | def zipper_lists(h1, h2): 7 | while h1 and h2: 8 | h1n = h1.next 9 | h2n = h2.next 10 | h1.next = h2 11 | if h1n: h2.next = h1n 12 | h1 = h1n 13 | h2 = h2n 14 | 15 | def print_list(h): 16 | while h: 17 | print(h.data) 18 | h = h.next 19 | 20 | 21 | a = Node("a") 22 | b = Node("b") 23 | c = Node("c") 24 | a.next = b 25 | b.next = c 26 | # a -> b -> c 27 | 28 | x = Node("x") 29 | y = Node("y") 30 | z = Node("z") 31 | x.next = y 32 | y.next = z 33 | # x -> y -> z 34 | 35 | zipper_lists(a, x) 36 | print_list(a) 37 | print('---') 38 | # a -> x -> b -> y -> c -> z 39 | 40 | a = Node("a") 41 | b = Node("b") 42 | c = Node("c") 43 | d = Node("d") 44 | e = Node("e") 45 | f = Node("f") 46 | a.next = b 47 | b.next = c 48 | c.next = d 49 | d.next = e 50 | e.next = f 51 | # a -> b -> c -> d -> e -> f 52 | 53 | x = Node("x") 54 | y = Node("y") 55 | z = Node("z") 56 | x.next = y 57 | y.next = z 58 | # x -> y -> z 59 | 60 | zipper_lists(a, x) 61 | print_list(a) 62 | print('---') 63 | # a -> x -> b -> y -> c -> z -> d -> e -> f 64 | 65 | s = Node("s") 66 | t = Node("t") 67 | s.next = t 68 | # s -> t 69 | 70 | one = Node(1) 71 | two = Node(2) 72 | three = Node(3) 73 | four = Node(4) 74 | one.next = two 75 | two.next = three 76 | three.next = four 77 | # 1 -> 2 -> 3 -> 4 78 | 79 | zipper_lists(s, one) 80 | print_list(s) 81 | print('---') 82 | # s -> 1 -> t -> 2 -> 3 -> 4 83 | 84 | w = Node("w") 85 | # w 86 | 87 | one = Node(1) 88 | two = Node(2) 89 | three = Node(3) 90 | one.next = two 91 | two.next = three 92 | # 1 -> 2 -> 3 93 | 94 | zipper_lists(w, one) 95 | print_list(w) 96 | print('---') 97 | # w -> 1 -> 2 -> 3 98 | 99 | one = Node(1) 100 | two = Node(2) 101 | three = Node(3) 102 | one.next = two 103 | two.next = three 104 | # 1 -> 2 -> 3 105 | 106 | w = Node("w") 107 | # w 108 | 109 | zipper_lists(one, w) 110 | print_list(one) 111 | print('---') 112 | # 1 -> w -> 2 -> 3 113 | 114 | -------------------------------------------------------------------------------- /python3/tree-depth-first-values.py: -------------------------------------------------------------------------------- 1 | from collections import deque 2 | 3 | class Node: 4 | left = None 5 | right = None 6 | 7 | def __str__(self): 8 | return str(self.data) 9 | 10 | def __init__(self, data): 11 | self.data = data 12 | 13 | def depth_first_values(r): 14 | s = deque([r]) 15 | res = [] 16 | while len(s): 17 | c = s.pop() 18 | if not c: continue 19 | if type(c.data) is str: res.append(c.data) 20 | if c.right: s.append(c.right) 21 | if c.left: s.append(c.left) 22 | 23 | return res 24 | 25 | def depth_first_values_recursion(c): 26 | if not c: return [] 27 | res = [c.data] 28 | if c.left: res += depth_first_values(c.left) 29 | if c.right: res += depth_first_values(c.right) 30 | 31 | return res 32 | 33 | a = Node('a') 34 | b = Node('b') 35 | c = Node('c') 36 | d = Node('d') 37 | e = Node('e') 38 | f = Node('f') 39 | a.left = b 40 | a.right = c 41 | b.left = d 42 | b.right = e 43 | c.right = f 44 | 45 | # a 46 | # / # b c 47 | # / \ # d e f 48 | 49 | print(depth_first_values(a)) 50 | print("Recursion", depth_first_values_recursion(a)) 51 | # -> ['a', 'b', 'd', 'e', 'c', 'f'] 52 | 53 | a = Node('a') 54 | b = Node('b') 55 | c = Node('c') 56 | d = Node('d') 57 | e = Node('e') 58 | f = Node('f') 59 | g = Node('g') 60 | a.left = b 61 | a.right = c 62 | b.left = d 63 | b.right = e 64 | c.right = f 65 | e.left = g 66 | 67 | # a 68 | # / # b c 69 | # / \ # d e f 70 | # / 71 | # g 72 | 73 | print(depth_first_values(a)) 74 | # -> ['a', 'b', 'd', 'e', 'g', 'c', 'f'] 75 | 76 | a = Node('a') 77 | # a 78 | print(depth_first_values(a)) 79 | # -> ['a'] 80 | 81 | a = Node('a') 82 | b = Node('b') 83 | c = Node('c') 84 | d = Node('d') 85 | e = Node('e') 86 | a.right = b; 87 | b.left = c; 88 | c.right = d; 89 | d.right = e; 90 | 91 | # a 92 | # # b 93 | # / 94 | # c 95 | # # d 96 | # # e 97 | 98 | print(depth_first_values(a)) 99 | # -> ['a', 'b', 'c', 'd', 'e'] 100 | 101 | print(depth_first_values(None)) 102 | # -> [] 103 | -------------------------------------------------------------------------------- /hacker-rank-interview-preparation-kit/README.md: -------------------------------------------------------------------------------- 1 | ## [The HackerRank Interview Preparation Kit](https://www.hackerrank.com/interview/interview-preparation-kit) 2 | 3 | ### [Arrays: Left Rotation](https://www.hackerrank.com/challenges/ctci-array-left-rotation/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=arrays) 4 | 5 | - In order to do the array **right** rotation: 6 | 7 | example: Rotate [1, 2, 3, 4, 5, 6], 4 element to the right _(result: [3, 4, 5, 6, 1, 2])_: 8 | 9 | 1. Reverse whole array: [`6, 5, 4, 3, 2, 1`] 10 | 11 | 2. Reverse first `k` element _(k=4)_: [`3, 4, 5, 6,` 2, 1] 12 | 13 | 3. Reverse `k` to end: [3, 4, 5, 6, `1, 2`] 14 | 15 | In order to do the array **left** rotation: 16 | 17 | example: Rotate [1, 2, 3, 4, 5], 4 element to the left _(result: [5, 1, 2, 3, 4])_: 18 | 19 | 1. Reverse whole array: [`5, 4, 3, 2, 1`] 20 | 21 | 2. Reverse last `k` element _(k=4)_: [5, `1, 2, 3, 4`] 22 | 23 | 3. Reverse from start to last `k` to end: [`4, 3`, 4, 3, 2, 1] 24 | 25 | - Reverse elements between to indexes: 26 | 27 | ```js 28 | function reverse(arr, start, end) { 29 | while (star < end) { 30 | const tmp = arr[start]; 31 | arr[start] = arr[end]; 32 | arr[end] = emp; 33 | 34 | start++; 35 | end++; 36 | } 37 | 38 | return arr; 39 | } 40 | ``` 41 | 42 | ### [Minimum Swaps 2](https://www.hackerrank.com/challenges/minimum-swaps-2/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=arrays&h_r=next-challenge&h_v=zen) 43 | 44 | - In order to find minimum number of swap needed to make an array sorted [Video](https://www.youtube.com/watch?v=f7IIW0HVUcQ)): 45 | 46 | ```js 47 | function minimumSwap(arr) { 48 | const dic = [], 49 | visited = []; 50 | 51 | for (let i = 0; i < arr.length; i++) { 52 | dic[i] = { key: i, val: arr[i] }; 53 | visited[i] = false; 54 | } 55 | dic.sort((a, b) => a.val - b.val); 56 | 57 | /* 58 | dic: [ 59 | {key: 0, val: 1} 60 | {key: 2, val: 2} 61 | {key: 1, val: 3} 62 | {key: 3, val: 4} 63 | ] 64 | */ 65 | 66 | let swp = 0; 67 | for (let i = 0; i < arr.length; i++) { 68 | if (dic[i].key === i || visited[i]) continue; 69 | 70 | let cycle = 0, 71 | k = i; 72 | while (!visited[i]) { 73 | visited[i] = true; 74 | k = dic[i].key; 75 | cycle++; 76 | } 77 | 78 | if (cycle > 0) { 79 | swp += cycle > 1 ? cycle - 1 : cycle; 80 | } 81 | } 82 | 83 | return swp; 84 | } 85 | 86 | minimumSwap([1, 3, 2, 4]); 87 | ``` 88 | -------------------------------------------------------------------------------- /python3/tree-tree-includes.py: -------------------------------------------------------------------------------- 1 | from collections import deque 2 | 3 | 4 | class Node: 5 | left = None 6 | right = None 7 | def __init__(self, data): 8 | self.data = data 9 | 10 | def dfs(a, t): 11 | if a.data == t: return True 12 | 13 | lr, rr = False, False 14 | if(a.left): lr = dfs(a.left, t) 15 | if(a.right): rr = dfs(a.right, t) 16 | 17 | return lr or rr 18 | 19 | def bfs(a, t): 20 | q = deque([a]) 21 | while(len(q)): 22 | c = q.popleft() 23 | if c.data == t: return True 24 | if(c.left): q.append(c.left) 25 | if(c.right): q.append(c.right) 26 | 27 | return False 28 | 29 | 30 | def tree_includes(a, t, use_recursion=True): 31 | if not use_recursion: 32 | return bfs(a, t) 33 | 34 | return dfs(a, t) 35 | 36 | a = Node("a") 37 | b = Node("b") 38 | c = Node("c") 39 | d = Node("d") 40 | e = Node("e") 41 | f = Node("f") 42 | 43 | a.left = b 44 | a.right = c 45 | b.left = d 46 | b.right = e 47 | c.right = f 48 | 49 | # a 50 | # / # b c 51 | # / \ # d e f 52 | 53 | print(tree_includes(a, "e", use_recursion=False)) # -> True 54 | 55 | a = Node("a") 56 | b = Node("b") 57 | c = Node("c") 58 | d = Node("d") 59 | e = Node("e") 60 | f = Node("f") 61 | 62 | a.left = b 63 | a.right = c 64 | b.left = d 65 | b.right = e 66 | c.right = f 67 | 68 | # a 69 | # / # b c 70 | # / \ # d e f 71 | tree_includes(a, "a") # -> True 72 | 73 | a = Node("a") 74 | b = Node("b") 75 | c = Node("c") 76 | d = Node("d") 77 | e = Node("e") 78 | f = Node("f") 79 | 80 | a.left = b 81 | a.right = c 82 | b.left = d 83 | b.right = e 84 | c.right = f 85 | 86 | # a 87 | # / # b c 88 | # / \ # d e f 89 | 90 | print(tree_includes(a, "n")) # -> False 91 | 92 | a = Node("a") 93 | b = Node("b") 94 | c = Node("c") 95 | d = Node("d") 96 | e = Node("e") 97 | f = Node("f") 98 | g = Node("g") 99 | h = Node("h") 100 | 101 | a.left = b 102 | a.right = c 103 | b.left = d 104 | b.right = e 105 | c.right = f 106 | e.left = g 107 | f.right = h 108 | 109 | # a 110 | # / # b c 111 | # / \ # d e f 112 | # / # g h 113 | 114 | print(tree_includes(a, "f")) # -> True 115 | 116 | a = Node("a") 117 | b = Node("b") 118 | c = Node("c") 119 | d = Node("d") 120 | e = Node("e") 121 | f = Node("f") 122 | g = Node("g") 123 | h = Node("h") 124 | 125 | a.left = b 126 | a.right = c 127 | b.left = d 128 | b.right = e 129 | c.right = f 130 | e.left = g 131 | f.right = h 132 | 133 | # a 134 | # / # b c 135 | # / \ # d e f 136 | # / # g h 137 | 138 | print(tree_includes(a, "p")) # -> False 139 | -------------------------------------------------------------------------------- /advent-2022/8e.py: -------------------------------------------------------------------------------- 1 | # read the input from a file called 8.in 2 | txt = open(__file__.split(".")[0] + ".in").read() 3 | 4 | # txt = """30373 5 | # 25512 6 | # 65332 7 | # 33549 8 | # 35390""" 9 | 10 | # Turn txt into a grid of integers 11 | g = [[int(c) for c in ln] for ln in txt.strip().split("\n")] 12 | 13 | # A visible item in a grid is a item 14 | # if all the items between it and the edge of the grid 15 | # are smaller than it 16 | def vis(g, x, y): 17 | # return True if the item is on the edge of the grid 18 | if x == 0 or y == 0 or x == len(g[y]) - 1 or y == len(g) - 1: 19 | return True 20 | 21 | # Check up 22 | for y2 in range(y): 23 | if g[y2][x] >= g[y][x]: 24 | break 25 | else: 26 | return True 27 | 28 | # Check down 29 | for y2 in range(y + 1, len(g)): 30 | if g[y2][x] >= g[y][x]: 31 | break 32 | else: 33 | return True 34 | 35 | # Check left 36 | for x2 in range(x): 37 | if g[y][x2] >= g[y][x]: 38 | break 39 | else: 40 | return True 41 | 42 | # Check right 43 | for x2 in range(x + 1, len(g[y])): 44 | if g[y][x2] >= g[y][x]: 45 | break 46 | else: 47 | return True 48 | 49 | return False 50 | 51 | 52 | # A visible item from a point in the grid 53 | # is an item that is smaller than the point 54 | # and is on the same row, column 55 | # count the number of visible items in each direction from a point 56 | def vis2(g, x, y): 57 | uc = 0 58 | for y2 in range(y - 1, -1, -1): 59 | if g[y2][x] >= g[y][x]: 60 | uc += 1 61 | break 62 | uc += 1 63 | 64 | dc = 0 65 | # Check down 66 | for y2 in range(y + 1, len(g)): 67 | if g[y2][x] >= g[y][x]: 68 | dc += 1 69 | break 70 | dc += 1 71 | 72 | lc = 0 73 | # Check left 74 | for x2 in range(x - 1, -1, -1): 75 | if g[y][x2] >= g[y][x]: 76 | lc += 1 77 | break 78 | lc += 1 79 | 80 | rc = 0 81 | # Check right 82 | for x2 in range(x + 1, len(g[y])): 83 | if g[y][x2] >= g[y][x]: 84 | rc += 1 85 | break 86 | rc += 1 87 | 88 | print( 89 | f"({x}, {y} => {g[y][x]}) -> u:{uc} d:{dc} l:{lc} r:{rc} = {uc * dc * lc * rc}" 90 | ) 91 | 92 | return uc * dc * lc * rc 93 | 94 | 95 | # Count the number of visible items in a grid 96 | def count_vis(g): 97 | c = 0 98 | for y in range(len(g)): 99 | for x in range(len(g[y])): 100 | if vis(g, x, y): 101 | print(f"Visiable: {g[y][x]} ({x}, {y})") 102 | c += 1 103 | return c 104 | 105 | 106 | # Count the number of visible items from a point in a grid 107 | # Return the result as dictionary 108 | # with the point x, y as the key 109 | # and the number of visible items as the value 110 | def count_vis2(g): 111 | d = {} 112 | for y in range(len(g)): 113 | for x in range(len(g[y])): 114 | d[(g[y][x], y, x)] = vis2(g, x, y) 115 | return d 116 | 117 | 118 | print(max(count_vis2(g).values())) 119 | -------------------------------------------------------------------------------- /python3/min_heap.py: -------------------------------------------------------------------------------- 1 | class MinHeap(): 2 | def __init__(self, cap): 3 | self.cap = cap 4 | self.st = [None] * cap 5 | self.size = 0 6 | 7 | def __str__(self): 8 | return str(self.st) 9 | 10 | def get_parent_idx(self, i): 11 | return (i-1)//2 12 | 13 | def get_left_idx(self, i): 14 | return 2*i+1 15 | 16 | def get_right_idx(self, i): 17 | return 2*i+2 18 | 19 | def has_parent(self, i): 20 | return self.get_parent_idx(i) >= 0 21 | 22 | def has_left(self, i): 23 | return self.get_left_idx(i) < self.size 24 | 25 | def has_right(self, i): 26 | return self.get_right_idx(i) < self.size 27 | 28 | def parent(self, i): 29 | return self.st[self.get_parent_idx(i)] 30 | 31 | def left(self, i): 32 | return self.st[self.get_left_idx(i)] 33 | 34 | def right(self, i): 35 | return self.st[self.get_right_idx(i)] 36 | 37 | @property 38 | def is_full(self): 39 | return self.size == self.cap 40 | 41 | def swap(self, i, j): 42 | st = self.st 43 | st[i], st[j] = st[j], st[i] 44 | 45 | def insert(self, data, use_recursion=False): 46 | if type(data) != int: 47 | raise Exception("The data must be an integer") 48 | if self.is_full: 49 | raise Exception("The heap is full") 50 | 51 | i = self.size 52 | self.st[i] = data 53 | self.size += 1 54 | self.heapify_up_loop() if not use_recursion else self.heapify_up_recursion(i) 55 | 56 | def heapify_up_loop(self): 57 | i = self.size - 1 58 | while self.has_parent(i) and self.parent(i) > self.st[i]: 59 | j = self.get_parent_idx(i) 60 | self.swap(i, j) 61 | i = j 62 | 63 | def heapify_up_recursion(self, i): 64 | if self.has_parent(i) and self.parent(i) > self.st[i]: 65 | j = self.get_parent_idx(i) 66 | self.swap(i, j) 67 | self.heapify_up_recursion(j) 68 | 69 | def remove_min(self, use_recursion=False): 70 | if self.size == 0: 71 | raise Exception("The heap is empty") 72 | 73 | data = self.st[0] 74 | self.swap(0, self.size - 1) 75 | self.st[self.size - 1] = None 76 | self.size -= 1 77 | self.heapify_down_loop() if use_recursion == False else self.heapify_down_recursion(0) 78 | return data 79 | 80 | def heapify_down_loop(self): 81 | i = 0 82 | while self.has_left(i): 83 | mci = self.get_left_idx(i) 84 | if self.has_right(i) and self.right(i) < self.left(i): 85 | mci = self.get_right_idx(i) 86 | if self.st[i] < self.st[mci]: 87 | break 88 | self.swap(i, mci) 89 | i = mci 90 | 91 | def heapify_down_recursion(self, i): 92 | mci = i 93 | if self.has_left(mci) and self.st[mci] > self.left(i): 94 | mci = self.get_left_idx(i) 95 | if self.has_right(i) and self.st[mci] > self.right(i): 96 | mci = self.get_right_idx(i) 97 | if mci != i: 98 | self.swap(i, mci) 99 | self.heapify_down_recursion(mci) 100 | 101 | mh = MinHeap(7) 102 | for el in [10, 20, 5, 8, 0, 15, 30]: 103 | mh.insert(el, use_recursion=True) 104 | print(mh) 105 | 106 | print("## Removing min") 107 | 108 | for i in range(2): 109 | m = mh.remove_min(use_recursion=True) 110 | print(m, mh) 111 | -------------------------------------------------------------------------------- /advent-2021/7e.in: -------------------------------------------------------------------------------- 1 | 1101,1,29,67,1102,0,1,65,1008,65,35,66,1005,66,28,1,67,65,20,4,0,1001,65,1,65,1106,0,8,99,35,67,101,99,105,32,110,39,101,115,116,32,112,97,115,32,117,110,101,32,105,110,116,99,111,100,101,32,112,114,111,103,114,97,109,10,48,221,311,159,144,1257,1247,28,567,700,110,711,602,1033,1260,1403,573,14,214,305,229,541,165,314,1924,465,806,649,1,1220,342,80,168,288,222,92,4,1239,1319,1145,233,557,1285,963,291,1283,55,1617,17,379,1373,320,300,632,1457,166,282,8,36,66,32,376,156,482,291,512,62,172,92,1389,4,286,168,619,1781,785,468,300,820,1070,213,304,66,106,89,156,653,459,34,425,935,295,1771,81,213,22,105,315,1225,229,591,428,694,305,225,982,1014,117,346,1234,1679,272,869,185,512,831,787,705,50,538,490,809,206,1247,261,463,1255,590,427,54,153,219,826,1036,228,36,8,214,483,36,352,118,179,1377,565,81,1122,80,43,359,571,293,234,906,1091,270,464,246,47,42,131,148,7,214,182,635,712,1644,1565,138,567,152,515,134,161,1760,396,4,281,1174,172,699,538,1422,2,1664,1552,1736,329,195,317,539,1231,133,95,297,244,308,980,641,706,323,25,520,1655,1307,1367,182,586,35,341,421,543,804,65,54,242,542,595,1172,734,653,181,474,815,546,17,40,385,169,29,38,216,193,164,466,121,35,532,693,628,1213,107,61,534,470,1066,135,372,87,433,111,1276,1547,275,455,131,527,791,1246,851,110,377,391,879,858,680,32,161,498,1634,354,535,251,47,257,270,281,1297,620,164,1110,33,457,616,85,915,79,1453,80,391,631,866,6,764,1021,16,822,137,1119,101,1158,226,1537,382,538,1026,131,533,300,273,967,76,683,776,1854,221,72,850,68,112,1482,564,75,218,70,271,63,999,680,217,211,1550,445,916,8,5,181,1048,107,248,375,513,626,683,33,513,225,497,1118,549,460,249,682,1216,95,41,481,1342,718,1470,457,8,334,187,7,837,519,595,126,577,858,140,333,83,682,1470,39,131,516,611,287,30,44,144,24,1058,139,469,702,258,104,746,645,311,29,647,438,108,225,866,1468,543,717,210,1300,1063,448,44,1257,149,349,537,148,472,770,51,1638,629,373,530,607,80,392,465,98,1113,499,237,649,44,365,121,65,77,557,845,619,625,38,650,949,589,113,379,151,36,30,65,192,1421,883,23,412,245,550,936,128,408,84,164,1318,568,420,1098,580,621,482,5,375,104,32,32,90,264,599,163,70,1379,521,535,489,714,26,178,571,860,713,1560,1017,172,19,535,170,526,125,37,151,1006,25,79,1,53,69,881,411,516,32,249,45,10,258,98,310,158,219,191,123,1835,651,8,129,769,52,168,588,414,226,1569,480,129,305,559,23,317,106,576,63,966,72,467,7,265,7,1046,863,449,467,826,788,773,627,249,201,489,981,434,543,907,1158,111,80,153,30,36,937,1593,961,463,62,498,315,84,306,283,677,1140,52,438,600,489,224,1593,147,138,82,391,250,435,584,181,1303,91,1426,373,219,196,221,155,1505,820,631,558,685,572,117,1253,305,1558,822,273,1,127,130,1292,50,380,100,3,492,199,206,20,752,159,288,682,286,1232,553,778,75,543,417,1517,850,3,852,257,544,84,126,371,546,180,43,317,577,680,178,103,254,1496,275,1107,1424,379,33,81,43,191,178,185,209,360,9,313,528,812,112,146,52,541,339,271,255,631,22,351,104,1186,330,1128,345,373,254,570,155,761,1732,416,975,318,835,44,82,1464,28,691,224,853,813,68,1180,595,42,5,1521,289,694,506,98,6,439,618,50,603,137,533,859,1054,71,103,292,235,17,301,220,48,738,354,283,200,665,1645,14,1050,895,670,100,1160,890,678,242,111,602,1294,177,1005,0,379,859,784,306,78,300,1003,48,421,493,64,1322,916,403,456,700,351,642,122,720,455,100,255,357,141,315,225,445,94,1343,112,512,40,677,322,597,471,761,598,30,382,619,999,951,389,417,85,87,242,1351,1319,70,119,420,528,40,278,911,102,788,76,724,522,31,109,1298,270,262,685,1095,637,1459,93,532,156,222,843,689,141,37,232,456,63,866,760,109,3,436,972,0,1737,2,1836,362,711,340,415,387,1,362,43,164,188,634,9,35,212,21,139,158,53,14,234,276,107,775,192,2,407,628,222,4,186,172,454,929,373,265,271,3,487,1784,544,449,393,799,666,730,899,938,16,441,634,365,45,284,5,499,864,106,109,651,1480,183,158,115,412,80,1516,235,253,125,123,495,809,499,261,73,127,3,39,377,268,501,912,1025,462,163,71,528,424,99,1732,1214,327 2 | -------------------------------------------------------------------------------- /advent-2022/6.in: -------------------------------------------------------------------------------- 1 | wzsspbssbhshchmmrmprmrfrsfrrjhjphjjtppbfflqfqppdhdbhdhbbjgghgzgsgfsfhfhvvwcwhwwnppsbsggqnnvvtffpssjfjnnltntdtdddptprppjmmqssrlrplllfrrzggbmmlmnmtnnzddfdgfdfsstbstbbzcbbcjcvvfwwwzlzssglsgllnbnmbnmbbgmmppmwwsrrzqqvgqgnqnmmswwrnnbsnnbdbwwqnwqnwwzzqwzqzjqqwbqbccjcwwjlwjwppqfqjffwddrzrjzrjzzzhchjjlqqrggzvvnlvnvjvhvnvjvbbvdvldldbbwddtsscbbhccmbmbppbmmgjggcjjlrrwjwtjwwmffgddwvdvbdbvvhchmhmdmwwbjbjcbbcmbmmslmlslsjjrnrjrjpjcjgcjcjbbwsbsbfssjzsjsggcmcsswgssbbqpbqqdsdqqztzmzpmpbmbvbjjtrjtthwhbhnbhnbnssvpvsppgrrcwrrmqqhpphrpphchvhphqhbqbtttllsrlsrshrrmhmvvrmrnngbgnbnpbprrrftfjtjwwmrmvmcmvmrmwmssrccfbbhppjbpbwbqwbqbzzfmzmtttjbbvcvppmwwrbbzsbzbfzfdzzhrhzhvvsqvsqsnslljwllqlwllvccnttzhtzzpspqspqsqgsssvnsvshvsvqvnvlldbbfdfmmpbpgphhpqhpppchhbfbrfrllntnznrrhdrdhhdhjjgwwqhhfssjbjwjqqbffvvcrchccwmcwcllljtjrrqgrrdcrddvfvwvzzjqqcffgjgzzdhdwdssffjjhccggmtmltlhtthzhvhlvlddsfsbbtjbjcbjcjzcjjpfjfzzpnnbtbqtbqtqptpnplllbzbllhbllnqnttpddqvdqvqmmjnjggnnnhqqfcqcffqppdgpddvqddmhmrhrtrmrzmzhzpzlzqlqpqhphrpppjqqppzbzmmjgggqtggtjthhlclnclcnccmcppdcpddqrrfgrgbbhwhdhrrqtqpqjpqjpqjqqmcqmccnngqqqmtqtssnvnzvvpcpwcwwqcqqqfcqffsvsmvmttttmrrzssghgssjmsmbmvvwggggzhhfvdpgjmmvzbfjghqhrfbpmbvjzwvfmcthrqwdhghpwsspmhpqnmwhjzpnlzfnvhdnnrqwnvctbmjqzhqrpjlwrssdlwqzmsfrfzmgjhnwwnwczswnhsdbvqbmdlvntsdrhrjjcjjhpbblgwhjwdcdjtpvtmslwvncwdjbwzvbpzbvddvssnrhtshrcvnhqnpmjzfswqbbrztnwjcpflfbhnphfwmjvnvtswgfttgjcqcngmmwjlfsprwfcfwcmgrgbnqmzbtzbtbztngvrzpsnrzvhbsdjnzpwwzllgnfdrlwpmnrznqsqcmvnfbnhqjddvcjmtgbpbmsgqdqzflmlmqncmhwltrmdmgnwpfwddrdpfhsgsnggchzjhgpwrsmdzgjtrgmnprhbwbcbpzbdvvstfqcnqzbdjqpmrdbtgcthtclftghhmnrzrjqqsbndhpvmdpfpwdlhvmczvdfgvpqclssvlhqnhlcfnfbvtspdzmgzdctvpdcwchtqhpsgmmblspjdlvgblbpgrfrgnqqsphcsrgfsdmpqscbjmnqrfbcwfthdtswbzthpnvsfbntnbmmgpfzlqwhppvvdrmwbqzbgppbgsqmjfqtmntgwpnccthftwdmvwmnchlbjhsnmbhndczbrhhjpbvnjdzrcndbbmfwfwsjwfgbqhwhrsvlngsbhhlrdjzzbmjpsqhlpzwcsntjhlmngblspmsjrjwsjsrqwnrcwsmcsbmpjwrthbqhrschrmrppnnbmjbvjzlmzsrfdwqlfnfjljftjvzsqdwlhbblqcdlqjbprpcllhlhmwrbrlgfrcqshrtjpnmhljttdvpfnhdjqvjhhfczwvbzqgnzgljcfrbpgwnfhfchwzqmqqzpbcdpqmnbrppzblnnzqrfnmgtljwnfgzwvnjppdbdhbznvpgwhbdjjvlspgwgjsmfsvllpgwlfnnptmwnfsshjjvqzjwrqpvmsphpmftqdllqqdzcjwfvpftgvspprdwvvcnglmbpntghntdwpjvvsppgjvnbjgvtzchtqtwbddncsbrfcvrnvlggvwgmmnfzrswnzjrwthzmdsmzqmzsnrqsnslnhmfqljnnnzshqfqshrhhjmnhdgphctswdbhnrcgnzmmzqpjqbtdfhhltsmvvtntbgsznshhsghblhlhqpmdcfhmnfzvhgnfsfflcfwbfqzmccrjdpfvphtqbrdnzjfmfhbzqcpdnjdcgwprvchlzrcvrghgjqncjvnndbcshntrfsbsnmjlhclnzpfdgztflcpwqpnvlscfndwqzfvcmpgfncszpmwcsrdbrrhdjvmthslfvmlgpqhlgwhqnjljcvhswbsbqfrfhvzwjvdmhzsgbmbmfnbpclqdwhvrlpppszptjvwtvdmfltfqqgjttdggcvllblnnhjqnjzhvpgpzzpzwbpjqbthnjjlmsjgjzqwnjlqrcdmmvsldtcrzqdrcmwqhnhfghdlmzwcspgmlpzhbdsmlwlqnhhvcvdfzmvfwpbfmjtdllprfqzzjpbrshdzgspsrlrwrhdpmznzzqngwrzqpmtwgbsswrnnnfctjhbcftnslsqwjvmfwfdvfqcnsvfsvgstgbzpmljjtlvtnfsdzpvcgbjqwgbgzqbjfgltqvnhffflsbjzfqfrfbssrvvwqvqptmhrbgllqjwptrzgvqgccsrvbgtvmzfzlmtqrgfwhzddsptclbhjlwqfntvjqdvcddnffmbtqrnsvtmlvljcqdsrpggcmqvmmlzwwbgznhblwzjdppvtqzjvcmtfzhdzjplrdbrfrgzpldvnsgqlbwbmfvrbgwzmjmmqdfgwtbgtzmdqnvqbwvcfjhddqvnjtjlhhjnltbtqqvblwlmglrqcrcfjvdntrnqzzbmrjqglmrdcjgnshcghtprjqqsdrmgdnzmzcfqqdtjtrqgtqtgrpmmgzjtcrznmqccjbdpbvrnnbmbzvgdcnrczbctbrsrrqrjnfcdpzlnngwvcdtbbgssvhpptntqdzhcqtlpvzjbfgzggrgrcgtdfjbwdcrpztnfcdbscnlmqmwcbmtnddgbmhwsgvcfdcmhlsvtnqtmrnsjzhppgwvzlmhwwmpfjzrfbhsgntzrdhwswrnfmmmczqrvdrqnhgrvqbdddhglwsftsljvgbnjqfwfzsspdqvgsnlgfsfpvdrjhzcldtrmjjrmdhvvfrjldhhtqnvsvlldjpjbpwstfsmrpmbqbnnpvqtbgjvblthbmwqtfcfgnjscvtbvlqcmlhffpzgjzfscsqwnhrjhvbrrzwqvbjwtwhtqsdbssfgncppnsfgfltdcbjqjzqqtprsbvjzhmchnltvmbsvpvhgzhfhbrnttsqbcmwpdnwqqgdrjrdwdhtzwsmcdffqgsddvbzfjhtfhtnfdbfrwmdtcqshfjrcpswzcptgwgmctpmzjdbqlmqwthmnfplmctpsslcsdtqpqhjtmjdnmnqnjgchwstsmtpvsmgpsbfgwqnzhrdgdvcdlcldfcmjvsdldgbmhltjhczffwmzqssnhfnwftfgpshntjbpjdffjpcmcpwhclrrwqcqzmntjglzgcfrplfpvprtpvpjdlcrfwrtrzdzmhsrsmdcpqqrqgvfpdbmzbzqdfhpplmgfrdghclbclgswvwhhdvcpmpzflpffmptcrwglftztccrpbrvmpnqmqdgjgrrlbtqtvgcjpljttwtdslqjqlsdpblgrqbrtbmtblfbqtbvsqhpqzpqfhjqpmjrmcvqmsbbpjpdncgnjftclbltwszrrfzqbjcdtphcvpmbhppvwjwlprgmghrjzzgnvzlvghnjbzqjpdgzfsnjchpbzqdzpsjmsrvvqwjcpwznlpbjldlrdfqtrzhqzcnpjqbbbf 2 | -------------------------------------------------------------------------------- /advent-2022/6e.in: -------------------------------------------------------------------------------- 1 | wzsspbssbhshchmmrmprmrfrsfrrjhjphjjtppbfflqfqppdhdbhdhbbjgghgzgsgfsfhfhvvwcwhwwnppsbsggqnnvvtffpssjfjnnltntdtdddptprppjmmqssrlrplllfrrzggbmmlmnmtnnzddfdgfdfsstbstbbzcbbcjcvvfwwwzlzssglsgllnbnmbnmbbgmmppmwwsrrzqqvgqgnqnmmswwrnnbsnnbdbwwqnwqnwwzzqwzqzjqqwbqbccjcwwjlwjwppqfqjffwddrzrjzrjzzzhchjjlqqrggzvvnlvnvjvhvnvjvbbvdvldldbbwddtsscbbhccmbmbppbmmgjggcjjlrrwjwtjwwmffgddwvdvbdbvvhchmhmdmwwbjbjcbbcmbmmslmlslsjjrnrjrjpjcjgcjcjbbwsbsbfssjzsjsggcmcsswgssbbqpbqqdsdqqztzmzpmpbmbvbjjtrjtthwhbhnbhnbnssvpvsppgrrcwrrmqqhpphrpphchvhphqhbqbtttllsrlsrshrrmhmvvrmrnngbgnbnpbprrrftfjtjwwmrmvmcmvmrmwmssrccfbbhppjbpbwbqwbqbzzfmzmtttjbbvcvppmwwrbbzsbzbfzfdzzhrhzhvvsqvsqsnslljwllqlwllvccnttzhtzzpspqspqsqgsssvnsvshvsvqvnvlldbbfdfmmpbpgphhpqhpppchhbfbrfrllntnznrrhdrdhhdhjjgwwqhhfssjbjwjqqbffvvcrchccwmcwcllljtjrrqgrrdcrddvfvwvzzjqqcffgjgzzdhdwdssffjjhccggmtmltlhtthzhvhlvlddsfsbbtjbjcbjcjzcjjpfjfzzpnnbtbqtbqtqptpnplllbzbllhbllnqnttpddqvdqvqmmjnjggnnnhqqfcqcffqppdgpddvqddmhmrhrtrmrzmzhzpzlzqlqpqhphrpppjqqppzbzmmjgggqtggtjthhlclnclcnccmcppdcpddqrrfgrgbbhwhdhrrqtqpqjpqjpqjqqmcqmccnngqqqmtqtssnvnzvvpcpwcwwqcqqqfcqffsvsmvmttttmrrzssghgssjmsmbmvvwggggzhhfvdpgjmmvzbfjghqhrfbpmbvjzwvfmcthrqwdhghpwsspmhpqnmwhjzpnlzfnvhdnnrqwnvctbmjqzhqrpjlwrssdlwqzmsfrfzmgjhnwwnwczswnhsdbvqbmdlvntsdrhrjjcjjhpbblgwhjwdcdjtpvtmslwvncwdjbwzvbpzbvddvssnrhtshrcvnhqnpmjzfswqbbrztnwjcpflfbhnphfwmjvnvtswgfttgjcqcngmmwjlfsprwfcfwcmgrgbnqmzbtzbtbztngvrzpsnrzvhbsdjnzpwwzllgnfdrlwpmnrznqsqcmvnfbnhqjddvcjmtgbpbmsgqdqzflmlmqncmhwltrmdmgnwpfwddrdpfhsgsnggchzjhgpwrsmdzgjtrgmnprhbwbcbpzbdvvstfqcnqzbdjqpmrdbtgcthtclftghhmnrzrjqqsbndhpvmdpfpwdlhvmczvdfgvpqclssvlhqnhlcfnfbvtspdzmgzdctvpdcwchtqhpsgmmblspjdlvgblbpgrfrgnqqsphcsrgfsdmpqscbjmnqrfbcwfthdtswbzthpnvsfbntnbmmgpfzlqwhppvvdrmwbqzbgppbgsqmjfqtmntgwpnccthftwdmvwmnchlbjhsnmbhndczbrhhjpbvnjdzrcndbbmfwfwsjwfgbqhwhrsvlngsbhhlrdjzzbmjpsqhlpzwcsntjhlmngblspmsjrjwsjsrqwnrcwsmcsbmpjwrthbqhrschrmrppnnbmjbvjzlmzsrfdwqlfnfjljftjvzsqdwlhbblqcdlqjbprpcllhlhmwrbrlgfrcqshrtjpnmhljttdvpfnhdjqvjhhfczwvbzqgnzgljcfrbpgwnfhfchwzqmqqzpbcdpqmnbrppzblnnzqrfnmgtljwnfgzwvnjppdbdhbznvpgwhbdjjvlspgwgjsmfsvllpgwlfnnptmwnfsshjjvqzjwrqpvmsphpmftqdllqqdzcjwfvpftgvspprdwvvcnglmbpntghntdwpjvvsppgjvnbjgvtzchtqtwbddncsbrfcvrnvlggvwgmmnfzrswnzjrwthzmdsmzqmzsnrqsnslnhmfqljnnnzshqfqshrhhjmnhdgphctswdbhnrcgnzmmzqpjqbtdfhhltsmvvtntbgsznshhsghblhlhqpmdcfhmnfzvhgnfsfflcfwbfqzmccrjdpfvphtqbrdnzjfmfhbzqcpdnjdcgwprvchlzrcvrghgjqncjvnndbcshntrfsbsnmjlhclnzpfdgztflcpwqpnvlscfndwqzfvcmpgfncszpmwcsrdbrrhdjvmthslfvmlgpqhlgwhqnjljcvhswbsbqfrfhvzwjvdmhzsgbmbmfnbpclqdwhvrlpppszptjvwtvdmfltfqqgjttdggcvllblnnhjqnjzhvpgpzzpzwbpjqbthnjjlmsjgjzqwnjlqrcdmmvsldtcrzqdrcmwqhnhfghdlmzwcspgmlpzhbdsmlwlqnhhvcvdfzmvfwpbfmjtdllprfqzzjpbrshdzgspsrlrwrhdpmznzzqngwrzqpmtwgbsswrnnnfctjhbcftnslsqwjvmfwfdvfqcnsvfsvgstgbzpmljjtlvtnfsdzpvcgbjqwgbgzqbjfgltqvnhffflsbjzfqfrfbssrvvwqvqptmhrbgllqjwptrzgvqgccsrvbgtvmzfzlmtqrgfwhzddsptclbhjlwqfntvjqdvcddnffmbtqrnsvtmlvljcqdsrpggcmqvmmlzwwbgznhblwzjdppvtqzjvcmtfzhdzjplrdbrfrgzpldvnsgqlbwbmfvrbgwzmjmmqdfgwtbgtzmdqnvqbwvcfjhddqvnjtjlhhjnltbtqqvblwlmglrqcrcfjvdntrnqzzbmrjqglmrdcjgnshcghtprjqqsdrmgdnzmzcfqqdtjtrqgtqtgrpmmgzjtcrznmqccjbdpbvrnnbmbzvgdcnrczbctbrsrrqrjnfcdpzlnngwvcdtbbgssvhpptntqdzhcqtlpvzjbfgzggrgrcgtdfjbwdcrpztnfcdbscnlmqmwcbmtnddgbmhwsgvcfdcmhlsvtnqtmrnsjzhppgwvzlmhwwmpfjzrfbhsgntzrdhwswrnfmmmczqrvdrqnhgrvqbdddhglwsftsljvgbnjqfwfzsspdqvgsnlgfsfpvdrjhzcldtrmjjrmdhvvfrjldhhtqnvsvlldjpjbpwstfsmrpmbqbnnpvqtbgjvblthbmwqtfcfgnjscvtbvlqcmlhffpzgjzfscsqwnhrjhvbrrzwqvbjwtwhtqsdbssfgncppnsfgfltdcbjqjzqqtprsbvjzhmchnltvmbsvpvhgzhfhbrnttsqbcmwpdnwqqgdrjrdwdhtzwsmcdffqgsddvbzfjhtfhtnfdbfrwmdtcqshfjrcpswzcptgwgmctpmzjdbqlmqwthmnfplmctpsslcsdtqpqhjtmjdnmnqnjgchwstsmtpvsmgpsbfgwqnzhrdgdvcdlcldfcmjvsdldgbmhltjhczffwmzqssnhfnwftfgpshntjbpjdffjpcmcpwhclrrwqcqzmntjglzgcfrplfpvprtpvpjdlcrfwrtrzdzmhsrsmdcpqqrqgvfpdbmzbzqdfhpplmgfrdghclbclgswvwhhdvcpmpzflpffmptcrwglftztccrpbrvmpnqmqdgjgrrlbtqtvgcjpljttwtdslqjqlsdpblgrqbrtbmtblfbqtbvsqhpqzpqfhjqpmjrmcvqmsbbpjpdncgnjftclbltwszrrfzqbjcdtphcvpmbhppvwjwlprgmghrjzzgnvzlvghnjbzqjpdgzfsnjchpbzqdzpsjmsrvvqwjcpwznlpbjldlrdfqtrzhqzcnpjqbbbf 2 | -------------------------------------------------------------------------------- /advent-2022/8.in: -------------------------------------------------------------------------------- 1 | 002100030222341303232115221524311502200403234452204125251345024423544443305142410110142101223120110 2 | 102030322341143330244233013052025453422005415304655426206452251310214055314024034341233110302320003 3 | 003012203404011430120134554314552441635001641050211406204621114102021543144514102510421243314102033 4 | 330313423002034140035001210441156554545625042262651356556544202500446121455112434243313013430141203 5 | 331203121131230002055113430244610062654034520106363462155201210355601153542301323442223310134324300 6 | 232201231021003254355411402310326206625011564114125202263504451451212600155351424154310240411213431 7 | 033033333301011523544023206136145505304224325606020360006206455564513553512054354124523232201230441 8 | 132201032234334044251334220345360402456541662253556375754662323265201641514121105025300453041111234 9 | 314322341322104402235020206565044225363527617767574524475421763504341061551154250344125514014234344 10 | 101323043023430543342440532324326413655657527215661116623455613664321005134300223542510253102211310 11 | 320404242514122111525043444530625417656773117247512712444315767422412130351505513231104322032421303 12 | 221204123205133142044056245654205231734371546616753217321556472223654044043612554152141554333102034 13 | 340310155225452152216635634352712541366312326272262143522347111166646736001360102010220214000133002 14 | 012404003515002416422500163244271366252711531615333437352461454777311142132000140205630042305222013 15 | 332434552302203445503543424523327464362526657251687634745536521746523154717531643250132300541053000 16 | 020130312425316362611130462217125425435545265467725256332777233137141524314631100051153314314343032 17 | 112115124512002346011342433146124542356845483862756322785545283652723747276776403131622540014001524 18 | 332354013101003031053022245431274627654677343638672643442563448782737464337546541546630431125021330 19 | 220315320142064161406534365262377268373743527784575246325564676238816733767331345114363612344051535 20 | 102041153526000601402325625766534543527882476653366727573448727775677146365732431425225562043130034 21 | 350054114310533002426654125166575285757827422257872378766383267543484865317252532765440216543555512 22 | 222440404353016144747347457368562668586285847553578732435887584463446862116134751240360645225435344 23 | 554234546163262630313431762248876668663352436888374587856263343842526635237314231451062036605442520 24 | 525531324662660356256614344438373575732699988366775989976447384338336827686445577222030363631240512 25 | 055541261042533424177375756738443482846986979788978997559377679255463858237757327464422026230510130 26 | 514123221240250442457744728347386637684953574546455344754548333793233865436751231314653541223102202 27 | 355454250661114645144551785724753237378345375493453967559796675839837444334776625552412552302431302 28 | 202445234333206767744653874724276586973668878949653473947686567565487325864733735677672241416513452 29 | 445415223211061633767433865252483574744685974593334963668983745643354885658423263536531213102544202 30 | 201405464251164654177385783224666473975674643767946648464678958969336335638578275154116223152222102 31 | 401423140356441654745572266848965593553995667644648964747884544439493545472454437715336645303346422 32 | 154440323240741427732867467564957336394985859766644495658985963583496399736552632162756445212536404 33 | 441663663062661372122867364584655388977474857585778686889578799644949733463423826715534215154065204 34 | 422036122016243651174663588693898583374968974778579585977478599643389537573534354622377452555411315 35 | 430412403362272513348763673566578945645997454758694486758844958569786758359475575577532661126532300 36 | 503653020441267422765353469867998339764449596776968996449777464644846938866332635583727771665263026 37 | 006252631541331635768754753357384754988659585857956567666645975599653466655333342485345762600032403 38 | 215205542775713732868842389885585646884858449858579777975997584997463698339932263363162431251615251 39 | 342224450731115175762626546538955447796468885776778879697695699945446388444478355347827635732006646 40 | 045011110226211633623658548365544498466468766878699597655897586488555435934935526883851537736604133 41 | 440352212243431376382869634434568447654566895897796875679759667598898849334873844583742271767024403 42 | 566632367121414762272448784755746799985759966559657989697977677955455754549393784586875275341562621 43 | 004131167135757426882464486773699786789959957795985595559587775554479945637849747667752242212324244 44 | 022411031432724262533554794664597446479869568767598899669969588984864457535986725263473577457413134 45 | 036415005331162527346577487593798458668976888776888766856699598847776567686579476836656723623111342 46 | 504001302331545267684439554776894957999788577876688969865558955547965687556849786463457244355044511 47 | 464266074264126575276833864784546697885788878967966988678696686685576789843676844576623242451411411 48 | 660130573642326366362654785549676574587876888769689696798799988678648554635745724364273772474666502 49 | 413511521313437652422664948645649566979966676679778669968777776786958464356797545247763267365643645 50 | 455033174473274564484285387995879595555686569997977698868769855686564847593489668858847744131410225 51 | 560316675532344635443349663994499869866598568889798868967976679655597494679336978524332246567265361 52 | 121053163342234352453837754569968465557968697766766888969966667796479457384444468264837376474515455 53 | 604062313527642634768255846899648545559665886668966887999959659769978495794795825775373713613231451 54 | 041031112622754332842439776736966994677888699898679988967779696758849589365579766676242256227420364 55 | 630161363126476778455475799658545955598576568877768698668579988799596866465635488284555252726211044 56 | 455563641427127283364758796475975894658677688789777769876667978747955677573575525588444241765111511 57 | 256420063532645225542863884958844496596759999769769687678888788875449888945958948378756476127155054 58 | 523256165217547362636325547686549767698957967985968987897777685866576744344388256886854362647342110 59 | 205224606764556763544234874676659474468968576879668558856675855668779847849738247387744421321145610 60 | 022651355615653552468486676459694744747575877656886776677858584988944678787576556747724125467333305 61 | 526313424324717126486746644643397589664468865599858886996669788566489473798387676766873216657521426 62 | 426530404522411762572567697375959747975669667958685679878659587764977658398697353283563215312244014 63 | 023510245741131775436864579684699874979976567776557765866775469587757498544476554753722641656303654 64 | 211341433442225414565332887899363678699495567888998675657659688744458493387343842346747477252626250 65 | 406543152154335614758277748595836896786654948759999978569588555764838686653647362854723163226456101 66 | 333640633617315535456525364849458558744656899855554897897568844446533866457545654847562377442214226 67 | 040003053246534354438748723933365934878485997458955574785966996653353969666867276761661111124104550 68 | 405602516206264365157378627495546935658594587869579958969686766986836687348285865231616336232000100 69 | 304131030254233641578272475868953446545577766644956989679964489688554398956223433417637732661500540 70 | 131164662225325441733366324345477954639475997658684766465487974699579665344326248136151472051130445 71 | 452312154206174654138684277376889449945746954689646875777596486949365968888456226732332263263420000 72 | 003010154551246223274282454345355673349967689986885795449989359633496728553885221437611730454554455 73 | 131435126460017635544785754344874379695379366384573934357795398633967475353836864461424146264354142 74 | 350154544045013352533173566257757787385448697484997454578735937499665628425542376452563635450224022 75 | 302420224365163651765264446875287359533637498445639443969586466433384346337722662774436566624454214 76 | 415242456321105173655733744886343826548944666338683876383973497998744488687446541256724244661531431 77 | 155303206134314124372553618623857237346567857564464797593393675563536467777317174625640132203003240 78 | 335521544652523624641575451785635352333587957647598535633948867838652636686573137515062356442045153 79 | 235314500244636615342325346277256685653838226755493858683465683736283367654226655456541546644313125 80 | 252520511531061305614364671212856473625642477732845278766573642425286572562373137446456005011330433 81 | 241525455120116046543737642325543677623243884242534423327827446383376441727657314343125403632434002 82 | 301045223551220356167117621755325772252845222546246588464784874685774676163655131632622146412415515 83 | 011150133311336614251435416453632383454327534367288242328746537673543714263674263262001132354544412 84 | 314104033000306256531666256433553535833538337463847277453476563227672715617272601302551120422305504 85 | 104211442013141664402363645617163435245556228235337864656673626354151416721375243323635625100210424 86 | 413422313502535362615054171511431775335574748526574728747453724472157632635263350024552502052340024 87 | 131225301023304456424150404525765416565572272321835377167235317312551645334432406536160545434122120 88 | 342131052232413325301451041516716541737346252413667115612642227312572433104525003114240240141232002 89 | 244421101354005430232434420344323273421374225635551363463245561271743411452116466311034334101231020 90 | 232404402304311415164151401553463731147111147752141732625152553615361046133341313265525232544143442 91 | 201321033520133414312301326330253041267251614477322566645472656414545035321106361434351501123314104 92 | 211232034442524242313453325046331353174352335422752364775746537513333534355120322320404054014303124 93 | 224032233240430510135541652065052415154147565656231651653327511443424113100543020223335130010141400 94 | 004110101133543440511523265424013341433043655022512172622140322434116104552043413352211021312421433 95 | 000304433232402410151205333526613043463556021413402141634154404530112303306244402221312522221004042 96 | 200204441020135232033032541516232550445221141520665016336536052063115335040344025054213324400312303 97 | 300211022440310123055510053251505226452265556365100101014044645236505213550201425252404100302413231 98 | 310312413210032422053242024243343060135340422313312403505631104430120233112324204414021331012401232 99 | 132020341330304022053503522313342026211133610000020554213662244142551253124302245242110111033101203 100 | -------------------------------------------------------------------------------- /advent-2022/8e.in: -------------------------------------------------------------------------------- 1 | 002100030222341303232115221524311502200403234452204125251345024423544443305142410110142101223120110 2 | 102030322341143330244233013052025453422005415304655426206452251310214055314024034341233110302320003 3 | 003012203404011430120134554314552441635001641050211406204621114102021543144514102510421243314102033 4 | 330313423002034140035001210441156554545625042262651356556544202500446121455112434243313013430141203 5 | 331203121131230002055113430244610062654034520106363462155201210355601153542301323442223310134324300 6 | 232201231021003254355411402310326206625011564114125202263504451451212600155351424154310240411213431 7 | 033033333301011523544023206136145505304224325606020360006206455564513553512054354124523232201230441 8 | 132201032234334044251334220345360402456541662253556375754662323265201641514121105025300453041111234 9 | 314322341322104402235020206565044225363527617767574524475421763504341061551154250344125514014234344 10 | 101323043023430543342440532324326413655657527215661116623455613664321005134300223542510253102211310 11 | 320404242514122111525043444530625417656773117247512712444315767422412130351505513231104322032421303 12 | 221204123205133142044056245654205231734371546616753217321556472223654044043612554152141554333102034 13 | 340310155225452152216635634352712541366312326272262143522347111166646736001360102010220214000133002 14 | 012404003515002416422500163244271366252711531615333437352461454777311142132000140205630042305222013 15 | 332434552302203445503543424523327464362526657251687634745536521746523154717531643250132300541053000 16 | 020130312425316362611130462217125425435545265467725256332777233137141524314631100051153314314343032 17 | 112115124512002346011342433146124542356845483862756322785545283652723747276776403131622540014001524 18 | 332354013101003031053022245431274627654677343638672643442563448782737464337546541546630431125021330 19 | 220315320142064161406534365262377268373743527784575246325564676238816733767331345114363612344051535 20 | 102041153526000601402325625766534543527882476653366727573448727775677146365732431425225562043130034 21 | 350054114310533002426654125166575285757827422257872378766383267543484865317252532765440216543555512 22 | 222440404353016144747347457368562668586285847553578732435887584463446862116134751240360645225435344 23 | 554234546163262630313431762248876668663352436888374587856263343842526635237314231451062036605442520 24 | 525531324662660356256614344438373575732699988366775989976447384338336827686445577222030363631240512 25 | 055541261042533424177375756738443482846986979788978997559377679255463858237757327464422026230510130 26 | 514123221240250442457744728347386637684953574546455344754548333793233865436751231314653541223102202 27 | 355454250661114645144551785724753237378345375493453967559796675839837444334776625552412552302431302 28 | 202445234333206767744653874724276586973668878949653473947686567565487325864733735677672241416513452 29 | 445415223211061633767433865252483574744685974593334963668983745643354885658423263536531213102544202 30 | 201405464251164654177385783224666473975674643767946648464678958969336335638578275154116223152222102 31 | 401423140356441654745572266848965593553995667644648964747884544439493545472454437715336645303346422 32 | 154440323240741427732867467564957336394985859766644495658985963583496399736552632162756445212536404 33 | 441663663062661372122867364584655388977474857585778686889578799644949733463423826715534215154065204 34 | 422036122016243651174663588693898583374968974778579585977478599643389537573534354622377452555411315 35 | 430412403362272513348763673566578945645997454758694486758844958569786758359475575577532661126532300 36 | 503653020441267422765353469867998339764449596776968996449777464644846938866332635583727771665263026 37 | 006252631541331635768754753357384754988659585857956567666645975599653466655333342485345762600032403 38 | 215205542775713732868842389885585646884858449858579777975997584997463698339932263363162431251615251 39 | 342224450731115175762626546538955447796468885776778879697695699945446388444478355347827635732006646 40 | 045011110226211633623658548365544498466468766878699597655897586488555435934935526883851537736604133 41 | 440352212243431376382869634434568447654566895897796875679759667598898849334873844583742271767024403 42 | 566632367121414762272448784755746799985759966559657989697977677955455754549393784586875275341562621 43 | 004131167135757426882464486773699786789959957795985595559587775554479945637849747667752242212324244 44 | 022411031432724262533554794664597446479869568767598899669969588984864457535986725263473577457413134 45 | 036415005331162527346577487593798458668976888776888766856699598847776567686579476836656723623111342 46 | 504001302331545267684439554776894957999788577876688969865558955547965687556849786463457244355044511 47 | 464266074264126575276833864784546697885788878967966988678696686685576789843676844576623242451411411 48 | 660130573642326366362654785549676574587876888769689696798799988678648554635745724364273772474666502 49 | 413511521313437652422664948645649566979966676679778669968777776786958464356797545247763267365643645 50 | 455033174473274564484285387995879595555686569997977698868769855686564847593489668858847744131410225 51 | 560316675532344635443349663994499869866598568889798868967976679655597494679336978524332246567265361 52 | 121053163342234352453837754569968465557968697766766888969966667796479457384444468264837376474515455 53 | 604062313527642634768255846899648545559665886668966887999959659769978495794795825775373713613231451 54 | 041031112622754332842439776736966994677888699898679988967779696758849589365579766676242256227420364 55 | 630161363126476778455475799658545955598576568877768698668579988799596866465635488284555252726211044 56 | 455563641427127283364758796475975894658677688789777769876667978747955677573575525588444241765111511 57 | 256420063532645225542863884958844496596759999769769687678888788875449888945958948378756476127155054 58 | 523256165217547362636325547686549767698957967985968987897777685866576744344388256886854362647342110 59 | 205224606764556763544234874676659474468968576879668558856675855668779847849738247387744421321145610 60 | 022651355615653552468486676459694744747575877656886776677858584988944678787576556747724125467333305 61 | 526313424324717126486746644643397589664468865599858886996669788566489473798387676766873216657521426 62 | 426530404522411762572567697375959747975669667958685679878659587764977658398697353283563215312244014 63 | 023510245741131775436864579684699874979976567776557765866775469587757498544476554753722641656303654 64 | 211341433442225414565332887899363678699495567888998675657659688744458493387343842346747477252626250 65 | 406543152154335614758277748595836896786654948759999978569588555764838686653647362854723163226456101 66 | 333640633617315535456525364849458558744656899855554897897568844446533866457545654847562377442214226 67 | 040003053246534354438748723933365934878485997458955574785966996653353969666867276761661111124104550 68 | 405602516206264365157378627495546935658594587869579958969686766986836687348285865231616336232000100 69 | 304131030254233641578272475868953446545577766644956989679964489688554398956223433417637732661500540 70 | 131164662225325441733366324345477954639475997658684766465487974699579665344326248136151472051130445 71 | 452312154206174654138684277376889449945746954689646875777596486949365968888456226732332263263420000 72 | 003010154551246223274282454345355673349967689986885795449989359633496728553885221437611730454554455 73 | 131435126460017635544785754344874379695379366384573934357795398633967475353836864461424146264354142 74 | 350154544045013352533173566257757787385448697484997454578735937499665628425542376452563635450224022 75 | 302420224365163651765264446875287359533637498445639443969586466433384346337722662774436566624454214 76 | 415242456321105173655733744886343826548944666338683876383973497998744488687446541256724244661531431 77 | 155303206134314124372553618623857237346567857564464797593393675563536467777317174625640132203003240 78 | 335521544652523624641575451785635352333587957647598535633948867838652636686573137515062356442045153 79 | 235314500244636615342325346277256685653838226755493858683465683736283367654226655456541546644313125 80 | 252520511531061305614364671212856473625642477732845278766573642425286572562373137446456005011330433 81 | 241525455120116046543737642325543677623243884242534423327827446383376441727657314343125403632434002 82 | 301045223551220356167117621755325772252845222546246588464784874685774676163655131632622146412415515 83 | 011150133311336614251435416453632383454327534367288242328746537673543714263674263262001132354544412 84 | 314104033000306256531666256433553535833538337463847277453476563227672715617272601302551120422305504 85 | 104211442013141664402363645617163435245556228235337864656673626354151416721375243323635625100210424 86 | 413422313502535362615054171511431775335574748526574728747453724472157632635263350024552502052340024 87 | 131225301023304456424150404525765416565572272321835377167235317312551645334432406536160545434122120 88 | 342131052232413325301451041516716541737346252413667115612642227312572433104525003114240240141232002 89 | 244421101354005430232434420344323273421374225635551363463245561271743411452116466311034334101231020 90 | 232404402304311415164151401553463731147111147752141732625152553615361046133341313265525232544143442 91 | 201321033520133414312301326330253041267251614477322566645472656414545035321106361434351501123314104 92 | 211232034442524242313453325046331353174352335422752364775746537513333534355120322320404054014303124 93 | 224032233240430510135541652065052415154147565656231651653327511443424113100543020223335130010141400 94 | 004110101133543440511523265424013341433043655022512172622140322434116104552043413352211021312421433 95 | 000304433232402410151205333526613043463556021413402141634154404530112303306244402221312522221004042 96 | 200204441020135232033032541516232550445221141520665016336536052063115335040344025054213324400312303 97 | 300211022440310123055510053251505226452265556365100101014044645236505213550201425252404100302413231 98 | 310312413210032422053242024243343060135340422313312403505631104430120233112324204414021331012401232 99 | 132020341330304022053503522313342026211133610000020554213662244142551253124302245242110111033101203 100 | -------------------------------------------------------------------------------- /advent-2021/4e.in: -------------------------------------------------------------------------------- 1 | 76,69,38,62,33,48,81,2,64,21,80,90,29,99,37,15,93,46,75,0,89,56,58,40,92,47,8,6,54,96,12,66,83,4,70,19,17,5,50,52,45,51,18,27,49,71,28,86,74,77,11,20,84,72,23,31,16,78,91,65,87,79,73,94,24,68,63,9,88,82,30,42,60,13,67,85,44,59,7,53,22,1,26,41,61,55,43,39,3,35,25,34,57,10,14,32,97,95,36,98 2 | 3 | 17 45 62 28 73 4 | 39 12 0 52 5 5 | 87 48 50 85 44 6 | 66 57 78 94 3 7 | 91 37 69 16 1 8 | 9 | 1 67 4 58 13 10 | 25 54 34 63 87 11 | 59 70 66 72 71 12 | 33 17 8 20 85 13 | 69 46 50 41 88 14 | 15 | 47 63 80 15 90 16 | 24 1 40 94 13 17 | 56 62 74 81 95 18 | 43 88 37 99 22 19 | 57 52 33 84 49 20 | 21 | 33 58 54 28 10 22 | 7 82 97 66 92 23 | 95 77 5 86 84 24 | 85 91 94 21 69 25 | 23 12 13 98 46 26 | 27 | 1 63 58 23 0 28 | 67 14 45 42 32 29 | 48 64 83 10 13 30 | 74 16 3 79 46 31 | 44 52 95 25 6 32 | 33 | 93 47 5 96 28 34 | 88 76 70 0 72 35 | 77 1 36 54 9 36 | 14 17 75 64 15 37 | 79 66 61 78 26 38 | 39 | 23 75 96 71 76 40 | 63 59 39 65 36 41 | 95 21 67 41 74 42 | 9 97 4 2 49 43 | 32 17 81 0 56 44 | 45 | 77 53 30 94 5 46 | 4 42 87 25 24 47 | 52 15 68 9 45 48 | 56 89 98 47 34 49 | 99 32 27 78 46 50 | 51 | 75 70 99 65 41 52 | 87 6 11 88 1 53 | 4 42 64 98 78 54 | 63 50 69 79 39 55 | 67 46 17 97 26 56 | 57 | 26 73 6 79 47 58 | 67 51 64 16 60 59 | 8 1 61 76 39 60 | 13 57 48 65 46 61 | 63 83 4 92 71 62 | 63 | 97 93 21 88 80 64 | 58 42 53 95 90 65 | 49 29 30 26 22 66 | 66 51 75 8 13 67 | 5 39 19 4 96 68 | 69 | 77 16 33 1 6 70 | 54 91 60 56 88 71 | 4 59 24 79 22 72 | 36 49 17 97 27 73 | 67 99 92 62 86 74 | 75 | 78 18 59 74 54 76 | 79 68 23 51 85 77 | 47 42 92 58 12 78 | 30 97 19 26 15 79 | 1 62 94 65 70 80 | 81 | 6 91 56 55 11 82 | 58 96 21 50 53 83 | 51 60 67 64 71 84 | 12 25 44 47 39 85 | 15 92 81 9 38 86 | 87 | 98 16 31 21 30 88 | 58 10 3 89 7 89 | 79 20 60 74 26 90 | 86 4 83 96 15 91 | 94 29 44 41 34 92 | 93 | 50 75 83 20 52 94 | 65 85 41 78 38 95 | 31 64 86 32 10 96 | 25 82 13 61 22 97 | 11 73 4 77 24 98 | 99 | 56 74 26 20 62 100 | 83 46 41 24 52 101 | 34 28 76 80 36 102 | 75 48 63 17 55 103 | 69 47 22 45 60 104 | 105 | 17 15 71 28 68 106 | 12 76 27 25 14 107 | 34 39 31 58 13 108 | 75 67 2 26 42 109 | 72 43 0 23 54 110 | 111 | 37 43 18 76 47 112 | 96 1 80 77 27 113 | 13 89 16 4 6 114 | 74 92 55 99 38 115 | 19 75 52 85 81 116 | 117 | 69 51 39 95 98 118 | 90 61 91 6 21 119 | 25 57 81 10 49 120 | 67 55 43 96 17 121 | 78 11 3 64 77 122 | 123 | 51 66 8 62 60 124 | 82 94 24 54 26 125 | 59 91 97 37 77 126 | 20 25 69 98 84 127 | 38 12 65 35 61 128 | 129 | 7 26 91 84 17 130 | 23 52 86 19 24 131 | 58 44 5 32 40 132 | 6 27 89 76 92 133 | 33 10 90 83 82 134 | 135 | 44 61 68 70 87 136 | 23 17 90 93 21 137 | 92 54 95 46 14 138 | 47 24 89 33 31 139 | 26 80 35 42 78 140 | 141 | 88 80 50 46 26 142 | 1 97 92 51 74 143 | 16 24 40 31 95 144 | 47 85 61 99 12 145 | 27 8 25 42 13 146 | 147 | 8 59 37 87 44 148 | 62 0 67 39 92 149 | 79 81 54 24 93 150 | 56 84 23 18 34 151 | 72 68 29 11 91 152 | 153 | 64 51 81 44 12 154 | 49 20 23 36 53 155 | 59 73 37 60 57 156 | 96 65 5 43 14 157 | 46 31 47 87 1 158 | 159 | 11 13 72 30 3 160 | 67 20 84 59 77 161 | 52 87 97 51 16 162 | 43 36 21 33 82 163 | 41 96 91 93 29 164 | 165 | 7 31 19 87 94 166 | 92 68 18 57 23 167 | 5 88 81 86 10 168 | 99 50 37 33 25 169 | 97 22 0 53 91 170 | 171 | 78 39 41 44 89 172 | 91 82 71 42 37 173 | 25 93 67 53 9 174 | 84 23 33 92 14 175 | 74 45 57 86 50 176 | 177 | 79 83 10 85 48 178 | 51 29 93 87 21 179 | 58 5 52 37 99 180 | 80 1 18 46 42 181 | 60 92 0 44 59 182 | 183 | 79 76 54 14 42 184 | 57 11 39 66 33 185 | 86 62 27 61 26 186 | 48 68 47 99 46 187 | 78 90 9 36 98 188 | 189 | 76 79 66 38 65 190 | 67 91 90 41 93 191 | 2 1 33 56 50 192 | 46 9 0 61 62 193 | 26 58 16 24 10 194 | 195 | 20 22 86 58 14 196 | 53 74 54 85 6 197 | 2 96 40 72 78 198 | 99 81 16 31 55 199 | 11 57 62 51 32 200 | 201 | 8 51 73 40 88 202 | 83 35 37 98 27 203 | 3 42 15 14 33 204 | 2 38 52 82 71 205 | 67 55 9 66 53 206 | 207 | 94 99 54 18 14 208 | 40 56 57 66 68 209 | 28 74 48 30 0 210 | 59 1 22 50 23 211 | 13 71 6 26 15 212 | 213 | 28 60 66 25 56 214 | 49 68 84 10 38 215 | 73 50 87 16 14 216 | 79 26 29 18 2 217 | 57 22 5 48 91 218 | 219 | 61 78 3 95 87 220 | 6 62 25 74 84 221 | 22 71 93 57 20 222 | 81 33 15 45 96 223 | 38 14 19 72 26 224 | 225 | 51 19 62 72 39 226 | 36 83 6 33 9 227 | 95 43 42 2 22 228 | 94 99 23 97 11 229 | 66 61 16 30 35 230 | 231 | 51 38 7 24 82 232 | 23 12 46 55 85 233 | 43 97 45 61 67 234 | 53 2 77 99 34 235 | 17 93 25 9 72 236 | 237 | 37 32 35 63 93 238 | 40 16 51 99 88 239 | 73 69 49 80 33 240 | 56 54 18 87 71 241 | 29 98 85 58 17 242 | 243 | 38 4 55 72 33 244 | 29 63 86 52 75 245 | 7 47 34 53 14 246 | 89 39 83 36 78 247 | 6 21 15 18 96 248 | 249 | 56 19 40 0 7 250 | 61 33 50 66 54 251 | 93 91 64 6 45 252 | 51 90 94 18 37 253 | 15 28 13 2 44 254 | 255 | 18 79 4 56 15 256 | 38 80 8 42 5 257 | 60 11 53 23 27 258 | 9 71 19 83 72 259 | 39 97 98 99 7 260 | 261 | 90 22 41 95 15 262 | 20 18 7 70 49 263 | 97 51 79 94 77 264 | 31 89 50 40 9 265 | 37 84 6 98 35 266 | 267 | 38 56 94 55 0 268 | 92 84 8 85 73 269 | 86 81 76 35 1 270 | 62 5 59 77 72 271 | 79 97 60 11 70 272 | 273 | 43 98 87 97 70 274 | 53 55 35 8 64 275 | 80 59 75 11 2 276 | 17 95 13 38 90 277 | 31 20 60 84 4 278 | 279 | 38 19 10 73 86 280 | 37 72 66 22 53 281 | 6 41 20 21 92 282 | 0 13 9 89 17 283 | 43 61 80 60 65 284 | 285 | 61 50 42 99 26 286 | 11 51 52 83 64 287 | 92 60 2 91 20 288 | 95 10 14 94 98 289 | 5 37 90 17 69 290 | 291 | 82 48 51 32 78 292 | 30 39 10 84 69 293 | 94 5 60 92 89 294 | 95 31 64 67 23 295 | 96 20 33 66 61 296 | 297 | 33 92 78 24 74 298 | 45 34 73 5 57 299 | 18 37 69 44 38 300 | 25 30 53 87 64 301 | 28 23 14 10 81 302 | 303 | 39 82 40 64 86 304 | 26 81 3 85 50 305 | 71 75 91 65 96 306 | 17 55 8 56 59 307 | 22 36 73 90 0 308 | 309 | 18 67 50 70 71 310 | 83 8 75 55 29 311 | 66 33 39 88 16 312 | 32 84 78 59 0 313 | 11 3 61 65 36 314 | 315 | 1 12 66 59 9 316 | 24 97 75 83 11 317 | 45 16 14 31 71 318 | 85 43 99 18 15 319 | 61 56 80 69 29 320 | 321 | 18 50 86 53 71 322 | 67 36 14 24 55 323 | 52 30 33 54 81 324 | 72 51 39 28 42 325 | 45 98 78 35 73 326 | 327 | 60 86 68 58 37 328 | 17 78 43 31 96 329 | 33 61 34 45 36 330 | 10 29 83 98 2 331 | 88 73 7 84 50 332 | 333 | 30 21 94 31 4 334 | 20 68 91 55 51 335 | 10 98 2 25 84 336 | 64 97 29 28 58 337 | 75 17 76 54 65 338 | 339 | 17 11 88 9 66 340 | 1 59 60 79 55 341 | 30 46 83 67 91 342 | 23 45 99 90 6 343 | 81 33 8 13 76 344 | 345 | 25 68 43 59 51 346 | 56 14 41 52 16 347 | 62 36 12 37 71 348 | 83 90 81 91 0 349 | 95 92 29 54 26 350 | 351 | 53 84 85 18 10 352 | 51 44 87 86 67 353 | 4 81 82 77 30 354 | 26 68 80 57 71 355 | 22 83 47 61 14 356 | 357 | 41 89 38 14 66 358 | 70 92 26 97 53 359 | 78 25 5 4 48 360 | 54 86 31 23 0 361 | 99 73 6 20 98 362 | 363 | 18 81 96 60 47 364 | 59 87 95 15 57 365 | 34 17 26 7 42 366 | 25 90 45 94 5 367 | 10 41 32 20 98 368 | 369 | 37 9 20 82 83 370 | 84 14 62 3 76 371 | 86 67 95 40 65 372 | 57 26 1 19 69 373 | 49 41 29 35 13 374 | 375 | 29 74 69 92 48 376 | 80 47 59 18 13 377 | 98 5 64 89 83 378 | 37 97 90 32 49 379 | 25 87 39 21 63 380 | 381 | 1 61 5 82 66 382 | 87 75 18 23 63 383 | 38 51 33 59 4 384 | 21 14 17 97 92 385 | 94 45 84 22 10 386 | 387 | 86 93 8 99 54 388 | 1 4 37 30 34 389 | 80 17 50 74 97 390 | 28 11 6 85 78 391 | 94 76 92 63 79 392 | 393 | 63 87 89 19 81 394 | 72 90 71 96 16 395 | 85 92 78 11 37 396 | 50 17 68 82 66 397 | 21 9 39 69 73 398 | 399 | 30 63 90 5 45 400 | 26 15 28 84 65 401 | 1 23 0 12 17 402 | 61 98 21 39 56 403 | 67 51 3 8 42 404 | 405 | 54 91 9 70 93 406 | 75 58 89 53 19 407 | 77 64 45 78 14 408 | 7 31 99 42 51 409 | 87 95 60 10 84 410 | 411 | 98 35 66 42 85 412 | 75 27 97 54 9 413 | 16 15 60 44 49 414 | 28 19 51 24 50 415 | 59 18 37 88 39 416 | 417 | 69 29 49 9 76 418 | 4 83 64 33 2 419 | 67 81 88 70 39 420 | 85 73 97 15 8 421 | 7 13 26 12 1 422 | 423 | 57 3 65 28 87 424 | 36 31 51 19 0 425 | 56 77 41 20 76 426 | 79 29 80 60 66 427 | 55 61 8 30 15 428 | 429 | 2 42 3 17 40 430 | 10 56 91 52 23 431 | 76 39 75 82 49 432 | 50 36 99 9 53 433 | 92 66 48 31 41 434 | 435 | 16 51 80 95 23 436 | 36 84 33 56 11 437 | 49 46 32 78 85 438 | 67 29 94 26 22 439 | 76 6 30 37 0 440 | 441 | 27 94 79 48 4 442 | 55 81 22 18 88 443 | 93 15 59 41 11 444 | 67 43 24 92 65 445 | 5 1 60 99 62 446 | 447 | 2 51 42 84 82 448 | 80 28 43 93 72 449 | 81 57 13 45 66 450 | 34 22 53 37 3 451 | 31 46 70 77 79 452 | 453 | 17 12 22 53 74 454 | 23 49 52 60 40 455 | 64 98 97 75 57 456 | 58 81 85 89 92 457 | 42 34 65 87 18 458 | 459 | 13 8 54 25 11 460 | 84 72 66 78 1 461 | 22 82 48 85 62 462 | 68 99 18 3 57 463 | 64 41 80 94 71 464 | 465 | 45 5 56 30 62 466 | 10 50 78 13 34 467 | 90 97 85 36 0 468 | 86 35 80 55 74 469 | 47 99 59 61 18 470 | 471 | 79 87 81 45 95 472 | 24 91 27 18 16 473 | 51 35 34 46 48 474 | 39 40 6 70 99 475 | 1 82 63 32 50 476 | 477 | 78 68 27 17 65 478 | 74 15 21 38 24 479 | 82 97 49 7 58 480 | 19 23 87 79 22 481 | 57 93 30 1 69 482 | 483 | 64 13 40 21 89 484 | 3 95 20 79 59 485 | 80 46 91 54 1 486 | 62 66 30 60 47 487 | 26 99 55 25 2 488 | 489 | 47 83 7 71 81 490 | 9 72 12 20 96 491 | 28 57 82 98 42 492 | 34 59 18 69 1 493 | 68 38 46 19 80 494 | 495 | 43 39 48 84 87 496 | 32 78 5 65 50 497 | 86 13 20 22 70 498 | 31 6 52 53 18 499 | 73 25 4 60 99 500 | 501 | 48 15 59 50 33 502 | 93 99 46 70 21 503 | 91 26 76 65 87 504 | 10 27 78 5 96 505 | 4 63 22 82 20 506 | 507 | 88 63 66 48 37 508 | 39 47 56 52 27 509 | 81 18 33 12 59 510 | 3 96 55 26 43 511 | 42 4 7 28 22 512 | 513 | 95 12 98 84 23 514 | 37 35 78 9 61 515 | 52 47 24 90 17 516 | 55 87 18 80 41 517 | 38 0 14 36 48 518 | 519 | 62 72 56 78 8 520 | 75 26 11 58 91 521 | 38 74 52 65 45 522 | 43 41 15 82 35 523 | 89 27 21 54 0 524 | 525 | 43 36 85 68 60 526 | 26 89 84 10 80 527 | 87 50 75 81 35 528 | 12 46 6 70 59 529 | 93 51 66 33 49 530 | 531 | 68 32 0 63 54 532 | 20 92 39 89 17 533 | 48 60 87 36 14 534 | 93 76 83 10 55 535 | 64 74 80 11 41 536 | 537 | 9 32 11 41 87 538 | 78 22 8 72 75 539 | 6 51 29 90 50 540 | 21 68 47 2 7 541 | 52 19 36 57 58 542 | 543 | 83 36 25 31 99 544 | 86 29 47 77 38 545 | 13 51 20 59 27 546 | 74 50 9 11 44 547 | 52 95 81 2 70 548 | 549 | 96 47 14 73 59 550 | 84 87 7 4 46 551 | 60 27 79 53 30 552 | 58 28 55 5 43 553 | 91 75 63 35 52 554 | 555 | 41 66 27 50 56 556 | 76 60 80 85 23 557 | 3 21 37 74 95 558 | 9 92 43 5 98 559 | 79 49 88 24 70 560 | 561 | 59 18 57 90 13 562 | 79 29 12 2 0 563 | 84 58 38 77 96 564 | 33 89 43 11 44 565 | 93 23 98 60 51 566 | 567 | 58 86 28 17 1 568 | 6 4 81 55 53 569 | 84 27 38 12 83 570 | 50 43 40 85 88 571 | 26 72 25 41 44 572 | 573 | 14 92 7 98 12 574 | 44 11 71 64 26 575 | 88 8 2 56 6 576 | 59 0 15 33 51 577 | 10 52 89 53 34 578 | 579 | 52 4 5 63 50 580 | 15 8 60 70 13 581 | 33 79 21 39 34 582 | 84 91 30 12 71 583 | 61 31 41 9 66 584 | 585 | 43 67 52 92 54 586 | 17 21 71 78 60 587 | 19 0 88 61 2 588 | 14 66 87 12 37 589 | 89 23 25 4 24 590 | 591 | 41 62 7 66 33 592 | 59 87 84 80 71 593 | 73 97 25 85 60 594 | 86 64 61 54 83 595 | 22 18 63 81 27 596 | 597 | 92 89 50 11 73 598 | 41 48 62 80 78 599 | 46 55 81 16 94 600 | 97 45 5 13 40 601 | 14 75 22 42 2 -------------------------------------------------------------------------------- /advent-2021/4.in: -------------------------------------------------------------------------------- 1 | 76,69,38,62,33,48,81,2,64,21,80,90,29,99,37,15,93,46,75,0,89,56,58,40,92,47,8,6,54,96,12,66,83,4,70,19,17,5,50,52,45,51,18,27,49,71,28,86,74,77,11,20,84,72,23,31,16,78,91,65,87,79,73,94,24,68,63,9,88,82,30,42,60,13,67,85,44,59,7,53,22,1,26,41,61,55,43,39,3,35,25,34,57,10,14,32,97,95,36,98 2 | 3 | 17 45 62 28 73 4 | 39 12 0 52 5 5 | 87 48 50 85 44 6 | 66 57 78 94 3 7 | 91 37 69 16 1 8 | 9 | 1 67 4 58 13 10 | 25 54 34 63 87 11 | 59 70 66 72 71 12 | 33 17 8 20 85 13 | 69 46 50 41 88 14 | 15 | 47 63 80 15 90 16 | 24 1 40 94 13 17 | 56 62 74 81 95 18 | 43 88 37 99 22 19 | 57 52 33 84 49 20 | 21 | 33 58 54 28 10 22 | 7 82 97 66 92 23 | 95 77 5 86 84 24 | 85 91 94 21 69 25 | 23 12 13 98 46 26 | 27 | 1 63 58 23 0 28 | 67 14 45 42 32 29 | 48 64 83 10 13 30 | 74 16 3 79 46 31 | 44 52 95 25 6 32 | 33 | 93 47 5 96 28 34 | 88 76 70 0 72 35 | 77 1 36 54 9 36 | 14 17 75 64 15 37 | 79 66 61 78 26 38 | 39 | 23 75 96 71 76 40 | 63 59 39 65 36 41 | 95 21 67 41 74 42 | 9 97 4 2 49 43 | 32 17 81 0 56 44 | 45 | 77 53 30 94 5 46 | 4 42 87 25 24 47 | 52 15 68 9 45 48 | 56 89 98 47 34 49 | 99 32 27 78 46 50 | 51 | 75 70 99 65 41 52 | 87 6 11 88 1 53 | 4 42 64 98 78 54 | 63 50 69 79 39 55 | 67 46 17 97 26 56 | 57 | 26 73 6 79 47 58 | 67 51 64 16 60 59 | 8 1 61 76 39 60 | 13 57 48 65 46 61 | 63 83 4 92 71 62 | 63 | 97 93 21 88 80 64 | 58 42 53 95 90 65 | 49 29 30 26 22 66 | 66 51 75 8 13 67 | 5 39 19 4 96 68 | 69 | 77 16 33 1 6 70 | 54 91 60 56 88 71 | 4 59 24 79 22 72 | 36 49 17 97 27 73 | 67 99 92 62 86 74 | 75 | 78 18 59 74 54 76 | 79 68 23 51 85 77 | 47 42 92 58 12 78 | 30 97 19 26 15 79 | 1 62 94 65 70 80 | 81 | 6 91 56 55 11 82 | 58 96 21 50 53 83 | 51 60 67 64 71 84 | 12 25 44 47 39 85 | 15 92 81 9 38 86 | 87 | 98 16 31 21 30 88 | 58 10 3 89 7 89 | 79 20 60 74 26 90 | 86 4 83 96 15 91 | 94 29 44 41 34 92 | 93 | 50 75 83 20 52 94 | 65 85 41 78 38 95 | 31 64 86 32 10 96 | 25 82 13 61 22 97 | 11 73 4 77 24 98 | 99 | 56 74 26 20 62 100 | 83 46 41 24 52 101 | 34 28 76 80 36 102 | 75 48 63 17 55 103 | 69 47 22 45 60 104 | 105 | 17 15 71 28 68 106 | 12 76 27 25 14 107 | 34 39 31 58 13 108 | 75 67 2 26 42 109 | 72 43 0 23 54 110 | 111 | 37 43 18 76 47 112 | 96 1 80 77 27 113 | 13 89 16 4 6 114 | 74 92 55 99 38 115 | 19 75 52 85 81 116 | 117 | 69 51 39 95 98 118 | 90 61 91 6 21 119 | 25 57 81 10 49 120 | 67 55 43 96 17 121 | 78 11 3 64 77 122 | 123 | 51 66 8 62 60 124 | 82 94 24 54 26 125 | 59 91 97 37 77 126 | 20 25 69 98 84 127 | 38 12 65 35 61 128 | 129 | 7 26 91 84 17 130 | 23 52 86 19 24 131 | 58 44 5 32 40 132 | 6 27 89 76 92 133 | 33 10 90 83 82 134 | 135 | 44 61 68 70 87 136 | 23 17 90 93 21 137 | 92 54 95 46 14 138 | 47 24 89 33 31 139 | 26 80 35 42 78 140 | 141 | 88 80 50 46 26 142 | 1 97 92 51 74 143 | 16 24 40 31 95 144 | 47 85 61 99 12 145 | 27 8 25 42 13 146 | 147 | 8 59 37 87 44 148 | 62 0 67 39 92 149 | 79 81 54 24 93 150 | 56 84 23 18 34 151 | 72 68 29 11 91 152 | 153 | 64 51 81 44 12 154 | 49 20 23 36 53 155 | 59 73 37 60 57 156 | 96 65 5 43 14 157 | 46 31 47 87 1 158 | 159 | 11 13 72 30 3 160 | 67 20 84 59 77 161 | 52 87 97 51 16 162 | 43 36 21 33 82 163 | 41 96 91 93 29 164 | 165 | 7 31 19 87 94 166 | 92 68 18 57 23 167 | 5 88 81 86 10 168 | 99 50 37 33 25 169 | 97 22 0 53 91 170 | 171 | 78 39 41 44 89 172 | 91 82 71 42 37 173 | 25 93 67 53 9 174 | 84 23 33 92 14 175 | 74 45 57 86 50 176 | 177 | 79 83 10 85 48 178 | 51 29 93 87 21 179 | 58 5 52 37 99 180 | 80 1 18 46 42 181 | 60 92 0 44 59 182 | 183 | 79 76 54 14 42 184 | 57 11 39 66 33 185 | 86 62 27 61 26 186 | 48 68 47 99 46 187 | 78 90 9 36 98 188 | 189 | 76 79 66 38 65 190 | 67 91 90 41 93 191 | 2 1 33 56 50 192 | 46 9 0 61 62 193 | 26 58 16 24 10 194 | 195 | 20 22 86 58 14 196 | 53 74 54 85 6 197 | 2 96 40 72 78 198 | 99 81 16 31 55 199 | 11 57 62 51 32 200 | 201 | 8 51 73 40 88 202 | 83 35 37 98 27 203 | 3 42 15 14 33 204 | 2 38 52 82 71 205 | 67 55 9 66 53 206 | 207 | 94 99 54 18 14 208 | 40 56 57 66 68 209 | 28 74 48 30 0 210 | 59 1 22 50 23 211 | 13 71 6 26 15 212 | 213 | 28 60 66 25 56 214 | 49 68 84 10 38 215 | 73 50 87 16 14 216 | 79 26 29 18 2 217 | 57 22 5 48 91 218 | 219 | 61 78 3 95 87 220 | 6 62 25 74 84 221 | 22 71 93 57 20 222 | 81 33 15 45 96 223 | 38 14 19 72 26 224 | 225 | 51 19 62 72 39 226 | 36 83 6 33 9 227 | 95 43 42 2 22 228 | 94 99 23 97 11 229 | 66 61 16 30 35 230 | 231 | 51 38 7 24 82 232 | 23 12 46 55 85 233 | 43 97 45 61 67 234 | 53 2 77 99 34 235 | 17 93 25 9 72 236 | 237 | 37 32 35 63 93 238 | 40 16 51 99 88 239 | 73 69 49 80 33 240 | 56 54 18 87 71 241 | 29 98 85 58 17 242 | 243 | 38 4 55 72 33 244 | 29 63 86 52 75 245 | 7 47 34 53 14 246 | 89 39 83 36 78 247 | 6 21 15 18 96 248 | 249 | 56 19 40 0 7 250 | 61 33 50 66 54 251 | 93 91 64 6 45 252 | 51 90 94 18 37 253 | 15 28 13 2 44 254 | 255 | 18 79 4 56 15 256 | 38 80 8 42 5 257 | 60 11 53 23 27 258 | 9 71 19 83 72 259 | 39 97 98 99 7 260 | 261 | 90 22 41 95 15 262 | 20 18 7 70 49 263 | 97 51 79 94 77 264 | 31 89 50 40 9 265 | 37 84 6 98 35 266 | 267 | 38 56 94 55 0 268 | 92 84 8 85 73 269 | 86 81 76 35 1 270 | 62 5 59 77 72 271 | 79 97 60 11 70 272 | 273 | 43 98 87 97 70 274 | 53 55 35 8 64 275 | 80 59 75 11 2 276 | 17 95 13 38 90 277 | 31 20 60 84 4 278 | 279 | 38 19 10 73 86 280 | 37 72 66 22 53 281 | 6 41 20 21 92 282 | 0 13 9 89 17 283 | 43 61 80 60 65 284 | 285 | 61 50 42 99 26 286 | 11 51 52 83 64 287 | 92 60 2 91 20 288 | 95 10 14 94 98 289 | 5 37 90 17 69 290 | 291 | 82 48 51 32 78 292 | 30 39 10 84 69 293 | 94 5 60 92 89 294 | 95 31 64 67 23 295 | 96 20 33 66 61 296 | 297 | 33 92 78 24 74 298 | 45 34 73 5 57 299 | 18 37 69 44 38 300 | 25 30 53 87 64 301 | 28 23 14 10 81 302 | 303 | 39 82 40 64 86 304 | 26 81 3 85 50 305 | 71 75 91 65 96 306 | 17 55 8 56 59 307 | 22 36 73 90 0 308 | 309 | 18 67 50 70 71 310 | 83 8 75 55 29 311 | 66 33 39 88 16 312 | 32 84 78 59 0 313 | 11 3 61 65 36 314 | 315 | 1 12 66 59 9 316 | 24 97 75 83 11 317 | 45 16 14 31 71 318 | 85 43 99 18 15 319 | 61 56 80 69 29 320 | 321 | 18 50 86 53 71 322 | 67 36 14 24 55 323 | 52 30 33 54 81 324 | 72 51 39 28 42 325 | 45 98 78 35 73 326 | 327 | 60 86 68 58 37 328 | 17 78 43 31 96 329 | 33 61 34 45 36 330 | 10 29 83 98 2 331 | 88 73 7 84 50 332 | 333 | 30 21 94 31 4 334 | 20 68 91 55 51 335 | 10 98 2 25 84 336 | 64 97 29 28 58 337 | 75 17 76 54 65 338 | 339 | 17 11 88 9 66 340 | 1 59 60 79 55 341 | 30 46 83 67 91 342 | 23 45 99 90 6 343 | 81 33 8 13 76 344 | 345 | 25 68 43 59 51 346 | 56 14 41 52 16 347 | 62 36 12 37 71 348 | 83 90 81 91 0 349 | 95 92 29 54 26 350 | 351 | 53 84 85 18 10 352 | 51 44 87 86 67 353 | 4 81 82 77 30 354 | 26 68 80 57 71 355 | 22 83 47 61 14 356 | 357 | 41 89 38 14 66 358 | 70 92 26 97 53 359 | 78 25 5 4 48 360 | 54 86 31 23 0 361 | 99 73 6 20 98 362 | 363 | 18 81 96 60 47 364 | 59 87 95 15 57 365 | 34 17 26 7 42 366 | 25 90 45 94 5 367 | 10 41 32 20 98 368 | 369 | 37 9 20 82 83 370 | 84 14 62 3 76 371 | 86 67 95 40 65 372 | 57 26 1 19 69 373 | 49 41 29 35 13 374 | 375 | 29 74 69 92 48 376 | 80 47 59 18 13 377 | 98 5 64 89 83 378 | 37 97 90 32 49 379 | 25 87 39 21 63 380 | 381 | 1 61 5 82 66 382 | 87 75 18 23 63 383 | 38 51 33 59 4 384 | 21 14 17 97 92 385 | 94 45 84 22 10 386 | 387 | 86 93 8 99 54 388 | 1 4 37 30 34 389 | 80 17 50 74 97 390 | 28 11 6 85 78 391 | 94 76 92 63 79 392 | 393 | 63 87 89 19 81 394 | 72 90 71 96 16 395 | 85 92 78 11 37 396 | 50 17 68 82 66 397 | 21 9 39 69 73 398 | 399 | 30 63 90 5 45 400 | 26 15 28 84 65 401 | 1 23 0 12 17 402 | 61 98 21 39 56 403 | 67 51 3 8 42 404 | 405 | 54 91 9 70 93 406 | 75 58 89 53 19 407 | 77 64 45 78 14 408 | 7 31 99 42 51 409 | 87 95 60 10 84 410 | 411 | 98 35 66 42 85 412 | 75 27 97 54 9 413 | 16 15 60 44 49 414 | 28 19 51 24 50 415 | 59 18 37 88 39 416 | 417 | 69 29 49 9 76 418 | 4 83 64 33 2 419 | 67 81 88 70 39 420 | 85 73 97 15 8 421 | 7 13 26 12 1 422 | 423 | 57 3 65 28 87 424 | 36 31 51 19 0 425 | 56 77 41 20 76 426 | 79 29 80 60 66 427 | 55 61 8 30 15 428 | 429 | 2 42 3 17 40 430 | 10 56 91 52 23 431 | 76 39 75 82 49 432 | 50 36 99 9 53 433 | 92 66 48 31 41 434 | 435 | 16 51 80 95 23 436 | 36 84 33 56 11 437 | 49 46 32 78 85 438 | 67 29 94 26 22 439 | 76 6 30 37 0 440 | 441 | 27 94 79 48 4 442 | 55 81 22 18 88 443 | 93 15 59 41 11 444 | 67 43 24 92 65 445 | 5 1 60 99 62 446 | 447 | 2 51 42 84 82 448 | 80 28 43 93 72 449 | 81 57 13 45 66 450 | 34 22 53 37 3 451 | 31 46 70 77 79 452 | 453 | 17 12 22 53 74 454 | 23 49 52 60 40 455 | 64 98 97 75 57 456 | 58 81 85 89 92 457 | 42 34 65 87 18 458 | 459 | 13 8 54 25 11 460 | 84 72 66 78 1 461 | 22 82 48 85 62 462 | 68 99 18 3 57 463 | 64 41 80 94 71 464 | 465 | 45 5 56 30 62 466 | 10 50 78 13 34 467 | 90 97 85 36 0 468 | 86 35 80 55 74 469 | 47 99 59 61 18 470 | 471 | 79 87 81 45 95 472 | 24 91 27 18 16 473 | 51 35 34 46 48 474 | 39 40 6 70 99 475 | 1 82 63 32 50 476 | 477 | 78 68 27 17 65 478 | 74 15 21 38 24 479 | 82 97 49 7 58 480 | 19 23 87 79 22 481 | 57 93 30 1 69 482 | 483 | 64 13 40 21 89 484 | 3 95 20 79 59 485 | 80 46 91 54 1 486 | 62 66 30 60 47 487 | 26 99 55 25 2 488 | 489 | 47 83 7 71 81 490 | 9 72 12 20 96 491 | 28 57 82 98 42 492 | 34 59 18 69 1 493 | 68 38 46 19 80 494 | 495 | 43 39 48 84 87 496 | 32 78 5 65 50 497 | 86 13 20 22 70 498 | 31 6 52 53 18 499 | 73 25 4 60 99 500 | 501 | 48 15 59 50 33 502 | 93 99 46 70 21 503 | 91 26 76 65 87 504 | 10 27 78 5 96 505 | 4 63 22 82 20 506 | 507 | 88 63 66 48 37 508 | 39 47 56 52 27 509 | 81 18 33 12 59 510 | 3 96 55 26 43 511 | 42 4 7 28 22 512 | 513 | 95 12 98 84 23 514 | 37 35 78 9 61 515 | 52 47 24 90 17 516 | 55 87 18 80 41 517 | 38 0 14 36 48 518 | 519 | 62 72 56 78 8 520 | 75 26 11 58 91 521 | 38 74 52 65 45 522 | 43 41 15 82 35 523 | 89 27 21 54 0 524 | 525 | 43 36 85 68 60 526 | 26 89 84 10 80 527 | 87 50 75 81 35 528 | 12 46 6 70 59 529 | 93 51 66 33 49 530 | 531 | 68 32 0 63 54 532 | 20 92 39 89 17 533 | 48 60 87 36 14 534 | 93 76 83 10 55 535 | 64 74 80 11 41 536 | 537 | 9 32 11 41 87 538 | 78 22 8 72 75 539 | 6 51 29 90 50 540 | 21 68 47 2 7 541 | 52 19 36 57 58 542 | 543 | 83 36 25 31 99 544 | 86 29 47 77 38 545 | 13 51 20 59 27 546 | 74 50 9 11 44 547 | 52 95 81 2 70 548 | 549 | 96 47 14 73 59 550 | 84 87 7 4 46 551 | 60 27 79 53 30 552 | 58 28 55 5 43 553 | 91 75 63 35 52 554 | 555 | 41 66 27 50 56 556 | 76 60 80 85 23 557 | 3 21 37 74 95 558 | 9 92 43 5 98 559 | 79 49 88 24 70 560 | 561 | 59 18 57 90 13 562 | 79 29 12 2 0 563 | 84 58 38 77 96 564 | 33 89 43 11 44 565 | 93 23 98 60 51 566 | 567 | 58 86 28 17 1 568 | 6 4 81 55 53 569 | 84 27 38 12 83 570 | 50 43 40 85 88 571 | 26 72 25 41 44 572 | 573 | 14 92 7 98 12 574 | 44 11 71 64 26 575 | 88 8 2 56 6 576 | 59 0 15 33 51 577 | 10 52 89 53 34 578 | 579 | 52 4 5 63 50 580 | 15 8 60 70 13 581 | 33 79 21 39 34 582 | 84 91 30 12 71 583 | 61 31 41 9 66 584 | 585 | 43 67 52 92 54 586 | 17 21 71 78 60 587 | 19 0 88 61 2 588 | 14 66 87 12 37 589 | 89 23 25 4 24 590 | 591 | 41 62 7 66 33 592 | 59 87 84 80 71 593 | 73 97 25 85 60 594 | 86 64 61 54 83 595 | 22 18 63 81 27 596 | 597 | 92 89 50 11 73 598 | 41 48 62 80 78 599 | 46 55 81 16 94 600 | 97 45 5 13 40 601 | 14 75 22 42 2 602 | -------------------------------------------------------------------------------- /advent-2022/3.in: -------------------------------------------------------------------------------- 1 | BdbzzddChsWrRFbzBrszbhWMLNJHLLLLHZtSLglFNZHLJH 2 | nnfMwqpQTMffHlNNLllHnZSS 3 | cGpcMwfppfqcjcTCBBzWDsDbDrjzWz 4 | LhfjhcdjcGdhFfdGfdjdvwCCZMvvLvWwMLCLSwZC 5 | rDnsbmptPmlbQMCrQWQQBZQW 6 | gltgVPngDPbptPsbPzVgmDldfTdfczThjJJjfMcJdFHjjH 7 | dGlgDflTLLLrRLTLVdQLcQMnbvHbbFzNNvMbnHHn 8 | sZjWJJCSjWqfCqSjSmJSbFvCzBMBBzHncHNvMBHN 9 | twqqwpZwfrlwRwDGDR 10 | zCGGFTQMQrsNRNGZdR 11 | cLLQgPDpgcgmvPRHrwBdvrNZ 12 | glWpmJWQDcJpQnpjSmbhFtMnqFfCVTCFCFFM 13 | zNZWFNZBFrGTdBcZZBdJTrGrmgvppgDHwHmgVHCHCvCPDjzC 14 | qtqqPnLSfLwvjvvgvvqH 15 | MtbLLLQbRfPRfnbnnLMtnsbdBNsrGWNWcNcTBWZrrcrWcJ 16 | sZwstbbDVlHtbhcrhhZLrRpNQN 17 | jqGjjFjWnzWGgqWjJJNphnLMRhLhcrhcrSLN 18 | qCJzFJdvmHvbtpbb 19 | ZSRsvvQvZpsRQGJghClPCwGPChCP 20 | FVdMLDdtDRdDcBtmcVFntwgJJTlnNPwJnlTlwlTPgN 21 | VqttMWFmDbjbzrSWRQ 22 | TsDSBcwshdwSCrgRWZBvgGRG 23 | LPVJLqqJbbzpFqwpbvgGRmZPrmZgCvCCfr 24 | tzJlJzQllFLqtwHhjNSdtthjDhTN 25 | fsDLDDnwvnSdqLSsFSDfsLpbgVttPMpPNjMWVMNfpjgW 26 | jhHmBmlrTBBHRPVtMZbppNPPZB 27 | JmTTrTmjRTJqSQQSFqQw 28 | HPzZFgPFMCHJCcZMcDQGwpLqPLqppwhGvv 29 | BrWRqbqRsTSTqNddrVrthLQVwnpwphnvnDnGvGDn 30 | tSbBfsRbTfqjJqjCqm 31 | pCqrqzmqZzrmCCvCJwJPBRwJBWBmwWBJ 32 | VqbqbjFLFfSHnfctBwDdDFTwtRRTDF 33 | LVcnbjHLSqHnhbSGGppCMMZMphpNrQ 34 | PhTcTPsSPCMvvhhMRPttbNWfNsWFNfWWtpNw 35 | rdQrDbJBVVjrBVdLjHHHWNWwfHtzzNtFpZZptppg 36 | JJVGGdddjDjDJmdjGqqRSbPMTvcRlqnnMlvT 37 | SqGfTrBlSrrrfGGQvCnqZhZmPPhvJh 38 | LdVNwgsjdjHmjWwDsDpwsHWtnCnQQQQNnvCnbJZQbNbtZZ 39 | DjssDHLLVppDssdLspswFLVjzfFMTfSBcTRcrFSBzBTzmGzr 40 | JSJJqlldpJlcdVWMlgMJrcCjrhzHCwTjHrQzwTzZ 41 | bBvsGBGNFDNRFNFBRDPsDDHCChhhrZRQQzhjhCjTzWCr 42 | FvbLFGDDtWDFBnPGFDWGqJMgJpSdVStllttlppVS 43 | clpBdBQBsqGpQbVdqTTWRTSFgLLggffg 44 | NzvwmHvZtZZgbDSCLDmfmm 45 | jPJjthHzNwPvvjwjNzPzztZBlrccpbVGBQhlGBVlrpnpBs 46 | NmFFGlGmzCrNWHvFmFWCFvQPTdDDlbbdgJPtgbbdPDcc 47 | RwfBqLwZqffqnPbdDgVQDdtRbT 48 | hnptqLMMLwqjMMjzSzHmhvNNrvvhhz 49 | hqVrDdPdVDqjsDrjjqsfrrWlctvHJNLfvNcLHNNZRNZHvfZL 50 | CSnWQSGBBSnmBnTmSbQbNZZMJNJMccGNHLZNNvNv 51 | gFnmBmBnTCpwmBbgWVqjPsrsjplVrjlqPr 52 | vgVgJJCphzFjzbwljwww 53 | PWmfDgrPrPWlSWqSWlSZ 54 | rrTHQTGTPHDDHgPrcrcPmDPhdtGvnvNnttJCdJhtGVnpdM 55 | DDDhNgWNLWgDqDgtgtwSngjVSQdf 56 | cvFrcGmBrrrCdSfSJQ 57 | mBHzFFvFzmsBspsFsZqhqbWlWdPDlLHbqZ 58 | TLNpGpRzwGQLLQRTwdvWdWbdbgdBlblb 59 | FJDVzZzHfZHVzcHgnvHnvngvvc 60 | MzDVSmZPPrqhGmCqQqLR 61 | mqHWcBHVcgsbhhnTrrTg 62 | fWftGtfJpwJMSdFDLFSGDGFnnNrbrhTNsZnrhTswZZnnsb 63 | dSftppdSFStLDpQfLjWHQvWBmmqVjCqcVv 64 | frfNzgvzzzJwJqpRcP 65 | VdVSnGnHqhDDTdqhdLWmjMTmjMPjPmTsmsmjmR 66 | BdGLSWtBSWDtVqdSDVGqtSSHFZFZtQbZlZfNgFffrgNrvgrl 67 | jBVSjsJcLcqqjtgcmRFRNFFzFm 68 | CnHnWQQGGWnnCnfvCTmZRZgNtfZtNDZPtNDtzl 69 | mWWGGdmQQWwrHHMBBBhrBVqshBLBSL 70 | cLtFcllvrslGLcLHVzDZQzzpznWzQtQZ 71 | TmShfSSPJRRBBfSgmdfBJhDNVpGzVZpzQgZgbWzpnDGp 72 | BhJPfSqdhqJRdBdPqTJBChvrFlHvvCGCccHsMscvrHvv 73 | zfddZTpZLzLDfLtDCttdTfZPnlcPcnhjPDnlcjMchDPjnP 74 | MQsFvFHJsQvmNvvswljgbPbwlwjnmcch 75 | VFVqvqFQHqVJRVCBLpqTGMzCqtMZ 76 | PZdVgNdQQcdcZQtGhnHtBlvlvWTnbBHWWH 77 | CDJmzqFmMmLfqmzFwqfzfwMRvpRbTWBBWDnlnbnWnTNTnB 78 | zFfffjCqwLJCfrCFjCLCzCMsjSZjQNPhQGVSQQZhsGjGgd 79 | nbHntnqPQwTHwQVC 80 | BzfSZSpcBZpzpPhSBjRTCBWTTRWTTTWR 81 | pvZpzPzNfhddJGmmNnJb 82 | GwTgWlvbgTwMrbwTrlWvwtHBNtNvBhBtdZcShHDtNS 83 | PnndmnCmnJFnsmRdmFnnZDhRRScRQQHDtDNtcDQS 84 | CLffLsmqqpJljVdlpMpWlr 85 | dPCzBLTSLqmqdSCsmrTDVQjZfjfVVZnZhhhLGQ 86 | wwFpgvPJNwgPPwvZGnQhbZQQFfQZbf 87 | WvRwwJpHHgpNMNqdTdCdqrmHBPtm 88 | DbWwjSGFSFfwGfCwDSSPPjLhgrrLWRJRgggJphLzpJLq 89 | lQTnMHdcQBvlHMMZBcHHTrbzpdzgqrpLdqzzVRVRVV 90 | vlvlNlBQvBZTQBnHnQTTBBPwPNCCsfSFmbSFfmGPwFmj 91 | hGGQtbVjhRqlmqqrmDlpmw 92 | gPMZsMgdssCPPsvrgZcTZTPSnnLLnBWDwLmwWwBnmWSnWNWB 93 | TsvgMPdcgCfMdcsZJRQhVfVRVQFFQGtr 94 | NfpFTTpFNbpZMRFrJMMMCv 95 | dWJPngDWBtPVBdPVGHZzCGHZrrvZRSMSzv 96 | WDDDVDPlWnLBVgnsgJmQJNqThNmbjlqbbh 97 | vnznqvfrzzVzrvvnfVqztBtGbMCdGmCcdccJccCLCcpSSgcL 98 | RQsDsljDlhssWshHhlhsHTlLbgJLpmgbbcMSpSSbcSJgjd 99 | WswhhHWlRTsQDwWHTRhsvNVvwqzfVmNBtZNmnzzq 100 | cjcPfLlQtPsZQlfHZJqVSFdVwmSRRqSSddwDvF 101 | MgNbBgzgnwdPRFmSPn 102 | CMGbNNMhCMzzPzBpTNPGBclLcLfsptHQfQlZssLcLf 103 | slsdfpSlllpTVJJGgGDgHMdV 104 | wrBQrbQrhQcpbQrhLwRBrjVVgGGPgZMtZMVhgMPMGHPg 105 | QQwRnrwRbbRcmQmrjRnjpvNsNTNSlTmsTqCSvsNSWz 106 | GWNwppdHdpmzgPFPCRmlCBPB 107 | bSrJhJSsMhrJMDPRCPBlwVCtVSLV 108 | QbsbwqQZvrJhhQrhZZrhchTfnTWGNvWpNnjHGvGjNdGT 109 | NMZGmnMBWmwmNnGwHrHvHzfrvrVVVj 110 | pSbDRLgbpJDPpRZRQjjFqVhhDFjDVqfrzv 111 | sQQscLTZcsTpRsBnmlBcdCMBMtlc 112 | hwWslbGWbRvLZvcscZ 113 | gQnmmrNTmSnTfgwDwVwpJvJPJzLqLJTLLvRcZz 114 | mrmnSrDNNQSmmwdggrrDbHMGhtdtGhGlhtClMGhM 115 | qQdlGcvDQDQvDdmtPmmmlStbjSrm 116 | CpNhzWTCTRznBMvwtTjMrHtSvj 117 | nWzsfZCsBhNpZLgGdQDddvqd 118 | ggjTjJWDVVVRTwQcZWvchshWhs 119 | LmFfLfSmBtCttNLfCFBPFNBvvvhrcQdvsrsdSwdqcwrwSw 120 | CHttltmlPLMHRTgJQDgRDTMb 121 | RPJgCdhgPPSzvWDcCfGHDcvf 122 | HbrrwBspTwWDDnqbZjjD 123 | rQrFsrsstQMQHJdHQm 124 | GVwQVGBZBNQwsjdNcMMlgJNPgj 125 | SWFfSzTCSWFCSpgnJLSjpMdc 126 | FhTbvrzrMrDCVHsVsHGBtHwv 127 | FsqjjVzFVWFqRRWBssdpNSBHwJpHHJJdddSN 128 | lQgmhvbTcgTgfhTQhSCFCGJHSlwNtJdGHG 129 | vgZPbbfMhbTmchhjRFRnsDRPWVqzWz 130 | cvwfjjcJjqhctvSpCgCFVhrFCrpC 131 | mRsQmsMlNNzznWQlRnsMRQlSCpLNbpwSSSrwFLDFLLLgFp 132 | zznlnGlmRmMlPZnGQzMszMRfccTjcBJjtJtJjqTZtfwBTt 133 | PtCwCCVqbjNNqqvGssPmHGsHMfPH 134 | dcddcWFDJJJcLczhWQdcDScZvHZgpGfsvMfSmsggSvvnvM 135 | TTQmTDhdQQzdRwjBVrRwCwBbBr 136 | BnBsFHCrcnBrMBPSmMSCmrcFqnZLddLhdhdGLvqLqgqnLJJp 137 | WfjTlNVDTtjzNWTlVMWNlTwTJphdgpvJLGLdgghZvGLpwddq 138 | zVjbVblVDlNTlbzTzDjllDTzHmHCsmcMHcSBrCBbrHBcBPSC 139 | ddlcGQlCjQNGQmPLslZTlmTtfT 140 | MDzMwSwqpzpDRpWRJwgZhttrZmTPfZmrmtrMZZ 141 | JSqRBpJzwgDDpqDqvpBRdCjbCjQCFCbHvdGPjdHQ 142 | bwzPwGLZMsbJMPPLGLMQzbhhQRvWWtVqVhgCVtWWQDqt 143 | HddrHFnFNpVnVLhnvLRV 144 | NLdrFjHTBrrdjFSpFmNBmSfZMwZMJJfSffbwzwPbczbJ 145 | QTWSzTTLwTfwflSNJRdvGlRGcNgJBl 146 | FnmmqrqbBBgRbHGc 147 | MFZqrCVCqmZCprspFZmnnMsDfzWzDwSfjSwPQPTLhffwBLwj 148 | npfgFRTZRRnDZLdgRfRrrjcWzGpWGGGQrjjWpP 149 | vblVbvSShhVzHWjzzlrPWG 150 | bVwqvCBtShqBhCCtqhNqCJRTTBDFJJLnJgDRWFBnWg 151 | nHDNQvgvnNZHDnsGcjfNTrTfVrfL 152 | SRWFSBRLtSFqjTrVVcsVjTSG 153 | BdBbRttWBdbdWdbppmZlLmgwHvgQvgLZ 154 | PQRZlpDDptQSclBMGVBdhVFGBMpf 155 | nnrsTCWjLJsnsSMShhGJfwffwV 156 | vjzqsjqgSHbbtvHZ 157 | DgFmbdSDZbPgLbDDmFwZwgLSfccGcGvnvvngsGGnsGMNWsWs 158 | HqztHHhHVhHjhRRhJtCVBCfNprMWpcMMJfsvvMsGscpG 159 | tjVtBVTBtHHqCRqtzQwTPSNdSwPTTbPFDdml 160 | sbmBmHZbRRRmwBmsSjHzRjmSCNFLNLLQNQhFgtQLzNztlrff 161 | MpqPPDPVnGqrJpcqqJpMVlgtlLFLChCgChCCQgCtCD 162 | VdcVVJvdrVWHbwHWBSSBRb 163 | tPDVBzzNSNdDSQpMQMTQJMMQMN 164 | LqSWSmbsmfQTTGZMWGCW 165 | cLjLcbrjqmvfqLbfmqLwDBBzSHPzlwzcdBlnnP 166 | SbnHrGHSrrhHJBrrScDfcPDMfpPGcGcpDL 167 | QTpmpmmQWlZsTvVQDMgggFLgFcPf 168 | zsCNlltCslzlTNsNlShwdJCpSqdHrBhpwr 169 | JZmFrmLGjFZdDGrrVTvzmPVvRRVzwzzl 170 | WBnfMDBqMsgDBqpBvzwVlCwRTRRPpvlw 171 | WfghfttggfSnnqbDftfqSBBDQdHhZFFJrrHFjGJdGjFrjQLj 172 | rNLRjrlVlrFRJzlsjrVlRFGCmnMtftgCNDDgDmCfqNgPNM 173 | SpdBpdHbpHWhZqnCdtCGggqCPn 174 | QHHvvWwWhwVVQRscVzGl 175 | QffLtMQGMQfDMMwMTJwqWHvH 176 | nSSFznjFcfjTgVJTJjvT 177 | RrBpcfSNpRBcFshrCtQrDGLPQb 178 | GctcMldStGwPPbcLsQTV 179 | jhnzDgnHnnfPVwHQTTLTds 180 | gBgzDDhzvqdGGvrtdvtm 181 | PPwRWVTvRvPVLwRpMlzmbmsbHWjbbs 182 | dFTFCNfdjzjFjsMF 183 | SgdffSTrnnqCgdqgcNrfSZqVvVLRDPJZQwJBLPQPtLZwJJ 184 | HSzDQftHphTBHFhr 185 | WMmJsMJNLWNPmmsncjMJcjtvwggVvhFFFhjrVwrjrjppvT 186 | WWPsJJCWCtZZZRGC 187 | SfFZQDRLgpLlRgQRRRFWTsbhBhgTjbWBjhshgw 188 | tHVNGjtzzHvMMJJhrWJNrTrPbP 189 | jvVVvGCGtCmjHtdHzQQfDpSSlDRnFfQFmR 190 | ZBBPfVVPPrVmrWZJzNdPznbnbSzznP 191 | gvgpGqFFMgMcGgwLwGpcJNZSTZbdbdzNNSlqbTnn 192 | ssZLgsMLQvcFpVrhCsmtWHjrrW 193 | nFvhRnWWzBRPHQqcqqCqmFbd 194 | SJDJgVprLfDfbJmHmWWHQtJW 195 | wVsgWVSTgLjfSsVjVBRvRNwwGGRhNZhRMZ 196 | wTRrRBCTPTBPlgMqgHCqggHLgg 197 | dmDzpQpBdmWmWzzzDFzjGNMSWLSgLVGGLVNSLgSg 198 | JbFdmQQJpjpptQbdJJmDmdtnZhZRflTlnTrTlrhBwPPc 199 | jwSwssQbwbStlhRgtsVstn 200 | zPzFdFFZccPDgntzVHHgghRz 201 | vVVdfFmZPDMWZZBmGQbwJJGCLwwMwJCS 202 | PLLffLFqqNLwSffbnVzzRf 203 | lsmgTggChrgDtZsZVblMVJMznVnwMBnb 204 | hDZZTmZvhTgstvwNFdqpWQcqvP 205 | mmWwpwqtmmHTqHpprRZQPPZLZWSFRFRB 206 | gzcgscgbfvhRRNZQRRQPvr 207 | JsjhcshCfJgrrpttTCTplH 208 | TvNrvNrJfWWvtJLTHhvZZhQQwVGZZhbV 209 | mFCPmBMPlPsPPBsMFPszbHQJwwHHhbZVQVzjhGHZ 210 | qmlBsdCSmJBmsBBMnMMTDWDNcLrDprSNcWDNrW 211 | HSnHCVqTddFHSVqFqdStSQGQwRzQCzCRzGRRGNPQwz 212 | jhlBpgNvlfZjlfvmpgfgfBrMRRwMMPPLQMZRPMWMMZPQ 213 | hflfpgjfBfDcpchlpvndbHFDdHqSqNVqNVdn 214 | QBfhlVNfHSZHfVCVHSQfZfTCctdvdDTRtjDCtTRsjsvj 215 | brrWWqzFWzwWbswDchhTRtDhjT 216 | gbrFLnpzqrWPgqpLWrhnHGZlSfLfHfQBGVfHHNVG 217 | hcFmVScmQBVhtcvfHLfvHSnbHRLn 218 | lzQqlDqgpWPvJfRnlNJvww 219 | PjCCCPgDgqGzmMtCQstZmBFs 220 | GrnrHrmVVFMFhSSbSfhR 221 | zjTqLtBjjdWdWTLshMZMDbPNRMSSqSPNfD 222 | dTWjdtwWhjWTBzcnrpcwmQpCwcpw 223 | BgtVBsgVVJhgGsSGJbghJqbsjLfZmLjmmtfZndNNZFFZNLdm 224 | MHTlzlwHSvPvzMSPCTMQCNZdjjmnfQjdZfNLjF 225 | HMDTwPDpzrTzpScBghDbVqRBgRBJsR 226 | qjCsTmrrnnCmhcFrCjqmThRlbHGvJGvvvbRbbJRcQJRG 227 | fVBBTfMdSZLNZgPdgglGRdbtbtJRllJWJtWb 228 | TSZZSpNMPBLgpZLVgppBDFhzDmjrnzhjssFqDhzFnn 229 | MDtDMWmMQmdzmMMqvlGfRcjzgpcPPjczPl 230 | sZsHJWNJFJNbWFBhFBnnbVclbVVPglfcRggffGGpjl 231 | srHWLNZZJdSLSdvDMw 232 | BFqsPnsZcgnncggccqsqqpDPtDWPpPNTNSNThrWtSj 233 | dQbfQQJJdwdmFRbJLRJdMrfDWrjpDrrprhDDDDNWWD 234 | QGwdJmCFJZvGsvvncB 235 | GRRNSjrffGTSPrNTffSgcJTwWJZbbZvwvwtVwWVJZv 236 | CMcFsqmBQzMzshsBQBQvLWmJVwZtpJLJwJLvwt 237 | qBzChnQlzMcRSnnRRjHGGg 238 | dPPbPWNdTBbDpHPHpNsgzvFlglvHzvSFzCFF 239 | fntqhGhRMhnnnGGCVMRhCVlSjswFvvjzjSzvQVSgsl 240 | MMqqJJRCnMhZLCRhtPNrpZPDDWTDTrNBmD 241 | VjVGNTNlNchVjNGRWrSWWtZtRrzncR 242 | BTbbbwDmCDLTbDwfHmzZMmRrWtzPrZSZtrrz 243 | qDLLqvwLBsfBbBdQFQTJhqThVTQJ 244 | qBqPBGZflhrWznzZZdsnzv 245 | FmHRcCCsCDwDbjtzdjWbdz 246 | cTRwCCNHFNmwRgmFTNCFTJqqfqPJsPhPBlsrsfGf 247 | JTNhhNrCTcWpJJcpWw 248 | LLdLsfMsdStbtggLbnTpwfWDzpjvnnjzcz 249 | MqSZsgbMbGFbZtgTSZSFSLhhmHlBQlmrmrPHHCPPZPBr 250 | GgjjgpGvpJJtjgvPrJttsLjVwCsQsQNLsfLfMVCl 251 | RddqZqzcZdSWcHdcqQfQLMwVflfNQNMQ 252 | FncWTRcFlHWFmcFTgPJhGvDgpnnhhGtG 253 | ZGPFJsPQCbZCCbgz 254 | nrvrnGWTwwqTBRcpCRRg 255 | DnGWDldNmSLSMdMQ 256 | ScDmPPPmjmjjWgtdSmdmCnNqVQVVrNRTZTQTQDHHZGNH 257 | wbbMhLvMJpRwJQrJGHqQGrQHqr 258 | wzhspwpppswsMFLmtnzjdcmdPRWPtS 259 | fPlLTtBlTjDbWcTMJcncWqss 260 | LdvLrLpCRRQQmvhhVNpwRMWJZcFMZWJwJFFFwZsGcs 261 | prrRVpvvRVNmRvvzHjHPlzPLSffbbPHS 262 | bbCbzsQbBzbBFbFzFfJHfVJPfVPtzZttpm 263 | hwvrjDDwjcDcvdnNvwdnwwDPpNtNMVtPpJpRmVMPfmtVZR 264 | mmqDWjhcqhwvDDdTsSGGCbQGSBBLTGGl 265 | wthtwrBQhhSrqJJVLMRPPtJLPF 266 | vbmbZqfqgsfHmcllmLLJNLJMNFJNNvPGJn 267 | jHlDscllClCCgbZzhWqBzBQzprWCqS 268 | DwpDlwDwllhJwbDFNDwFPhDnQnZZzVVnnBrtNznzSSzZrr 269 | MHPfWRTgWzTQmSTTZt 270 | GdPjHLRMCfcGvwqDGbFq 271 | NGdNpDPdNGLppLpwSNFFFDLwnnZbMnrHlHZQcHbcnHQcPcQM 272 | jBgBsjssgjWJVGhBfhvJVnMlbnZQVrrrlHCcCZrl 273 | sRBgvRffhhtvtBgvjgttWBJTLmFLLwdwzFdqLDDDqFGdLFTd 274 | RBzRGRGBgnrPJrRGGWWbDggZTSTVZVFFSVZZdw 275 | tfmLhjfshNNsqpppfjHdwVdQZbVbQFVVTmSVDV 276 | jvqtwHqCNLNsNhNfjssLCzGJWcBRJRBCBBBrrWnGrG 277 | cGDBdNFdNdDStNtGdGQGscDMvZjjZWMvMLjsjjLZjLsJLv 278 | fbRnRzHVPClfRlbbmfHRlPvZvMLpqjvZJqZMpzMpZjBZ 279 | gfbfBgCHCPVNhNGgTtFDcF 280 | ljjvLZvvllFnlLJLJjLWFQrVssFpsGMFpNMGsr 281 | qbHSqHTcHChqCmTSRqqBVpVdBQsVQQGHdMprWV 282 | DbtcCqRhhTRmDnPMlLgfgztlZZ 283 | QtMQzPZcbtGgTtLvtf 284 | HwcDsdVVDnNSGLhwvffJvfTT 285 | CSsdSHNmSDHcCqqcrrzQcC 286 | nDNDfmMnmDJRNfJJdMDRBdwjcTtsSHvBTswTjwLtsCts 287 | QcbQrZZggGWVVWbZZjStswCSCCttGCwLvC 288 | ZgZgbzVglVbchVVrVhFWWpnnpNJmJMqDfMJnMRqNDDMD 289 | WMfNvsjWGjsqFjqTRRQVJztDzVmJHbft 290 | ZPhplcrLrmzQGzmz 291 | ZPddLPlcSclhZChndMvgTjjWNGWMGWBj 292 | nDLjMchghDcljfjffpfsqTmGCTGszGZVVzHV 293 | wdFJPFrQRwSNbjVQCTGsHZHmHCHs 294 | BRJJSddvdBrJwrBRNRFRSPRjvclLpWhpglgWpLplltnMgh 295 | BbVRzMcpbMNMHMTJmWdljdlJjT 296 | GtsqFnfvGSFqGfQvgnWWZlLlLjZWtWldPmlT 297 | sSsFqsqsGghwQQmfGRHbbVczbwwBpBpHcw 298 | BBFCBJCsGJBBgvgsvTlVhgNg 299 | ZnLdjRQddLRnZrlScHRVTTSHhRvg 300 | fnnjZLWdrnqdWrrPLddqVqBzGDJJFGCBDfJmbDzFMbmB 301 | -------------------------------------------------------------------------------- /advent-2022/3e.in: -------------------------------------------------------------------------------- 1 | BdbzzddChsWrRFbzBrszbhWMLNJHLLLLHZtSLglFNZHLJH 2 | nnfMwqpQTMffHlNNLllHnZSS 3 | cGpcMwfppfqcjcTCBBzWDsDbDrjzWz 4 | LhfjhcdjcGdhFfdGfdjdvwCCZMvvLvWwMLCLSwZC 5 | rDnsbmptPmlbQMCrQWQQBZQW 6 | gltgVPngDPbptPsbPzVgmDldfTdfczThjJJjfMcJdFHjjH 7 | dGlgDflTLLLrRLTLVdQLcQMnbvHbbFzNNvMbnHHn 8 | sZjWJJCSjWqfCqSjSmJSbFvCzBMBBzHncHNvMBHN 9 | twqqwpZwfrlwRwDGDR 10 | zCGGFTQMQrsNRNGZdR 11 | cLLQgPDpgcgmvPRHrwBdvrNZ 12 | glWpmJWQDcJpQnpjSmbhFtMnqFfCVTCFCFFM 13 | zNZWFNZBFrGTdBcZZBdJTrGrmgvppgDHwHmgVHCHCvCPDjzC 14 | qtqqPnLSfLwvjvvgvvqH 15 | MtbLLLQbRfPRfnbnnLMtnsbdBNsrGWNWcNcTBWZrrcrWcJ 16 | sZwstbbDVlHtbhcrhhZLrRpNQN 17 | jqGjjFjWnzWGgqWjJJNphnLMRhLhcrhcrSLN 18 | qCJzFJdvmHvbtpbb 19 | ZSRsvvQvZpsRQGJghClPCwGPChCP 20 | FVdMLDdtDRdDcBtmcVFntwgJJTlnNPwJnlTlwlTPgN 21 | VqttMWFmDbjbzrSWRQ 22 | TsDSBcwshdwSCrgRWZBvgGRG 23 | LPVJLqqJbbzpFqwpbvgGRmZPrmZgCvCCfr 24 | tzJlJzQllFLqtwHhjNSdtthjDhTN 25 | fsDLDDnwvnSdqLSsFSDfsLpbgVttPMpPNjMWVMNfpjgW 26 | jhHmBmlrTBBHRPVtMZbppNPPZB 27 | JmTTrTmjRTJqSQQSFqQw 28 | HPzZFgPFMCHJCcZMcDQGwpLqPLqppwhGvv 29 | BrWRqbqRsTSTqNddrVrthLQVwnpwphnvnDnGvGDn 30 | tSbBfsRbTfqjJqjCqm 31 | pCqrqzmqZzrmCCvCJwJPBRwJBWBmwWBJ 32 | VqbqbjFLFfSHnfctBwDdDFTwtRRTDF 33 | LVcnbjHLSqHnhbSGGppCMMZMphpNrQ 34 | PhTcTPsSPCMvvhhMRPttbNWfNsWFNfWWtpNw 35 | rdQrDbJBVVjrBVdLjHHHWNWwfHtzzNtFpZZptppg 36 | JJVGGdddjDjDJmdjGqqRSbPMTvcRlqnnMlvT 37 | SqGfTrBlSrrrfGGQvCnqZhZmPPhvJh 38 | LdVNwgsjdjHmjWwDsDpwsHWtnCnQQQQNnvCnbJZQbNbtZZ 39 | DjssDHLLVppDssdLspswFLVjzfFMTfSBcTRcrFSBzBTzmGzr 40 | JSJJqlldpJlcdVWMlgMJrcCjrhzHCwTjHrQzwTzZ 41 | bBvsGBGNFDNRFNFBRDPsDDHCChhhrZRQQzhjhCjTzWCr 42 | FvbLFGDDtWDFBnPGFDWGqJMgJpSdVStllttlppVS 43 | clpBdBQBsqGpQbVdqTTWRTSFgLLggffg 44 | NzvwmHvZtZZgbDSCLDmfmm 45 | jPJjthHzNwPvvjwjNzPzztZBlrccpbVGBQhlGBVlrpnpBs 46 | NmFFGlGmzCrNWHvFmFWCFvQPTdDDlbbdgJPtgbbdPDcc 47 | RwfBqLwZqffqnPbdDgVQDdtRbT 48 | hnptqLMMLwqjMMjzSzHmhvNNrvvhhz 49 | hqVrDdPdVDqjsDrjjqsfrrWlctvHJNLfvNcLHNNZRNZHvfZL 50 | CSnWQSGBBSnmBnTmSbQbNZZMJNJMccGNHLZNNvNv 51 | gFnmBmBnTCpwmBbgWVqjPsrsjplVrjlqPr 52 | vgVgJJCphzFjzbwljwww 53 | PWmfDgrPrPWlSWqSWlSZ 54 | rrTHQTGTPHDDHgPrcrcPmDPhdtGvnvNnttJCdJhtGVnpdM 55 | DDDhNgWNLWgDqDgtgtwSngjVSQdf 56 | cvFrcGmBrrrCdSfSJQ 57 | mBHzFFvFzmsBspsFsZqhqbWlWdPDlLHbqZ 58 | TLNpGpRzwGQLLQRTwdvWdWbdbgdBlblb 59 | FJDVzZzHfZHVzcHgnvHnvngvvc 60 | MzDVSmZPPrqhGmCqQqLR 61 | mqHWcBHVcgsbhhnTrrTg 62 | fWftGtfJpwJMSdFDLFSGDGFnnNrbrhTNsZnrhTswZZnnsb 63 | dSftppdSFStLDpQfLjWHQvWBmmqVjCqcVv 64 | frfNzgvzzzJwJqpRcP 65 | VdVSnGnHqhDDTdqhdLWmjMTmjMPjPmTsmsmjmR 66 | BdGLSWtBSWDtVqdSDVGqtSSHFZFZtQbZlZfNgFffrgNrvgrl 67 | jBVSjsJcLcqqjtgcmRFRNFFzFm 68 | CnHnWQQGGWnnCnfvCTmZRZgNtfZtNDZPtNDtzl 69 | mWWGGdmQQWwrHHMBBBhrBVqshBLBSL 70 | cLtFcllvrslGLcLHVzDZQzzpznWzQtQZ 71 | TmShfSSPJRRBBfSgmdfBJhDNVpGzVZpzQgZgbWzpnDGp 72 | BhJPfSqdhqJRdBdPqTJBChvrFlHvvCGCccHsMscvrHvv 73 | zfddZTpZLzLDfLtDCttdTfZPnlcPcnhjPDnlcjMchDPjnP 74 | MQsFvFHJsQvmNvvswljgbPbwlwjnmcch 75 | VFVqvqFQHqVJRVCBLpqTGMzCqtMZ 76 | PZdVgNdQQcdcZQtGhnHtBlvlvWTnbBHWWH 77 | CDJmzqFmMmLfqmzFwqfzfwMRvpRbTWBBWDnlnbnWnTNTnB 78 | zFfffjCqwLJCfrCFjCLCzCMsjSZjQNPhQGVSQQZhsGjGgd 79 | nbHntnqPQwTHwQVC 80 | BzfSZSpcBZpzpPhSBjRTCBWTTRWTTTWR 81 | pvZpzPzNfhddJGmmNnJb 82 | GwTgWlvbgTwMrbwTrlWvwtHBNtNvBhBtdZcShHDtNS 83 | PnndmnCmnJFnsmRdmFnnZDhRRScRQQHDtDNtcDQS 84 | CLffLsmqqpJljVdlpMpWlr 85 | dPCzBLTSLqmqdSCsmrTDVQjZfjfVVZnZhhhLGQ 86 | wwFpgvPJNwgPPwvZGnQhbZQQFfQZbf 87 | WvRwwJpHHgpNMNqdTdCdqrmHBPtm 88 | DbWwjSGFSFfwGfCwDSSPPjLhgrrLWRJRgggJphLzpJLq 89 | lQTnMHdcQBvlHMMZBcHHTrbzpdzgqrpLdqzzVRVRVV 90 | vlvlNlBQvBZTQBnHnQTTBBPwPNCCsfSFmbSFfmGPwFmj 91 | hGGQtbVjhRqlmqqrmDlpmw 92 | gPMZsMgdssCPPsvrgZcTZTPSnnLLnBWDwLmwWwBnmWSnWNWB 93 | TsvgMPdcgCfMdcsZJRQhVfVRVQFFQGtr 94 | NfpFTTpFNbpZMRFrJMMMCv 95 | dWJPngDWBtPVBdPVGHZzCGHZrrvZRSMSzv 96 | WDDDVDPlWnLBVgnsgJmQJNqThNmbjlqbbh 97 | vnznqvfrzzVzrvvnfVqztBtGbMCdGmCcdccJccCLCcpSSgcL 98 | RQsDsljDlhssWshHhlhsHTlLbgJLpmgbbcMSpSSbcSJgjd 99 | WswhhHWlRTsQDwWHTRhsvNVvwqzfVmNBtZNmnzzq 100 | cjcPfLlQtPsZQlfHZJqVSFdVwmSRRqSSddwDvF 101 | MgNbBgzgnwdPRFmSPn 102 | CMGbNNMhCMzzPzBpTNPGBclLcLfsptHQfQlZssLcLf 103 | slsdfpSlllpTVJJGgGDgHMdV 104 | wrBQrbQrhQcpbQrhLwRBrjVVgGGPgZMtZMVhgMPMGHPg 105 | QQwRnrwRbbRcmQmrjRnjpvNsNTNSlTmsTqCSvsNSWz 106 | GWNwppdHdpmzgPFPCRmlCBPB 107 | bSrJhJSsMhrJMDPRCPBlwVCtVSLV 108 | QbsbwqQZvrJhhQrhZZrhchTfnTWGNvWpNnjHGvGjNdGT 109 | NMZGmnMBWmwmNnGwHrHvHzfrvrVVVj 110 | pSbDRLgbpJDPpRZRQjjFqVhhDFjDVqfrzv 111 | sQQscLTZcsTpRsBnmlBcdCMBMtlc 112 | hwWslbGWbRvLZvcscZ 113 | gQnmmrNTmSnTfgwDwVwpJvJPJzLqLJTLLvRcZz 114 | mrmnSrDNNQSmmwdggrrDbHMGhtdtGhGlhtClMGhM 115 | qQdlGcvDQDQvDdmtPmmmlStbjSrm 116 | CpNhzWTCTRznBMvwtTjMrHtSvj 117 | nWzsfZCsBhNpZLgGdQDddvqd 118 | ggjTjJWDVVVRTwQcZWvchshWhs 119 | LmFfLfSmBtCttNLfCFBPFNBvvvhrcQdvsrsdSwdqcwrwSw 120 | CHttltmlPLMHRTgJQDgRDTMb 121 | RPJgCdhgPPSzvWDcCfGHDcvf 122 | HbrrwBspTwWDDnqbZjjD 123 | rQrFsrsstQMQHJdHQm 124 | GVwQVGBZBNQwsjdNcMMlgJNPgj 125 | SWFfSzTCSWFCSpgnJLSjpMdc 126 | FhTbvrzrMrDCVHsVsHGBtHwv 127 | FsqjjVzFVWFqRRWBssdpNSBHwJpHHJJdddSN 128 | lQgmhvbTcgTgfhTQhSCFCGJHSlwNtJdGHG 129 | vgZPbbfMhbTmchhjRFRnsDRPWVqzWz 130 | cvwfjjcJjqhctvSpCgCFVhrFCrpC 131 | mRsQmsMlNNzznWQlRnsMRQlSCpLNbpwSSSrwFLDFLLLgFp 132 | zznlnGlmRmMlPZnGQzMszMRfccTjcBJjtJtJjqTZtfwBTt 133 | PtCwCCVqbjNNqqvGssPmHGsHMfPH 134 | dcddcWFDJJJcLczhWQdcDScZvHZgpGfsvMfSmsggSvvnvM 135 | TTQmTDhdQQzdRwjBVrRwCwBbBr 136 | BnBsFHCrcnBrMBPSmMSCmrcFqnZLddLhdhdGLvqLqgqnLJJp 137 | WfjTlNVDTtjzNWTlVMWNlTwTJphdgpvJLGLdgghZvGLpwddq 138 | zVjbVblVDlNTlbzTzDjllDTzHmHCsmcMHcSBrCBbrHBcBPSC 139 | ddlcGQlCjQNGQmPLslZTlmTtfT 140 | MDzMwSwqpzpDRpWRJwgZhttrZmTPfZmrmtrMZZ 141 | JSqRBpJzwgDDpqDqvpBRdCjbCjQCFCbHvdGPjdHQ 142 | bwzPwGLZMsbJMPPLGLMQzbhhQRvWWtVqVhgCVtWWQDqt 143 | HddrHFnFNpVnVLhnvLRV 144 | NLdrFjHTBrrdjFSpFmNBmSfZMwZMJJfSffbwzwPbczbJ 145 | QTWSzTTLwTfwflSNJRdvGlRGcNgJBl 146 | FnmmqrqbBBgRbHGc 147 | MFZqrCVCqmZCprspFZmnnMsDfzWzDwSfjSwPQPTLhffwBLwj 148 | npfgFRTZRRnDZLdgRfRrrjcWzGpWGGGQrjjWpP 149 | vblVbvSShhVzHWjzzlrPWG 150 | bVwqvCBtShqBhCCtqhNqCJRTTBDFJJLnJgDRWFBnWg 151 | nHDNQvgvnNZHDnsGcjfNTrTfVrfL 152 | SRWFSBRLtSFqjTrVVcsVjTSG 153 | BdBbRttWBdbdWdbppmZlLmgwHvgQvgLZ 154 | PQRZlpDDptQSclBMGVBdhVFGBMpf 155 | nnrsTCWjLJsnsSMShhGJfwffwV 156 | vjzqsjqgSHbbtvHZ 157 | DgFmbdSDZbPgLbDDmFwZwgLSfccGcGvnvvngsGGnsGMNWsWs 158 | HqztHHhHVhHjhRRhJtCVBCfNprMWpcMMJfsvvMsGscpG 159 | tjVtBVTBtHHqCRqtzQwTPSNdSwPTTbPFDdml 160 | sbmBmHZbRRRmwBmsSjHzRjmSCNFLNLLQNQhFgtQLzNztlrff 161 | MpqPPDPVnGqrJpcqqJpMVlgtlLFLChCgChCCQgCtCD 162 | VdcVVJvdrVWHbwHWBSSBRb 163 | tPDVBzzNSNdDSQpMQMTQJMMQMN 164 | LqSWSmbsmfQTTGZMWGCW 165 | cLjLcbrjqmvfqLbfmqLwDBBzSHPzlwzcdBlnnP 166 | SbnHrGHSrrhHJBrrScDfcPDMfpPGcGcpDL 167 | QTpmpmmQWlZsTvVQDMgggFLgFcPf 168 | zsCNlltCslzlTNsNlShwdJCpSqdHrBhpwr 169 | JZmFrmLGjFZdDGrrVTvzmPVvRRVzwzzl 170 | WBnfMDBqMsgDBqpBvzwVlCwRTRRPpvlw 171 | WfghfttggfSnnqbDftfqSBBDQdHhZFFJrrHFjGJdGjFrjQLj 172 | rNLRjrlVlrFRJzlsjrVlRFGCmnMtftgCNDDgDmCfqNgPNM 173 | SpdBpdHbpHWhZqnCdtCGggqCPn 174 | QHHvvWwWhwVVQRscVzGl 175 | QffLtMQGMQfDMMwMTJwqWHvH 176 | nSSFznjFcfjTgVJTJjvT 177 | RrBpcfSNpRBcFshrCtQrDGLPQb 178 | GctcMldStGwPPbcLsQTV 179 | jhnzDgnHnnfPVwHQTTLTds 180 | gBgzDDhzvqdGGvrtdvtm 181 | PPwRWVTvRvPVLwRpMlzmbmsbHWjbbs 182 | dFTFCNfdjzjFjsMF 183 | SgdffSTrnnqCgdqgcNrfSZqVvVLRDPJZQwJBLPQPtLZwJJ 184 | HSzDQftHphTBHFhr 185 | WMmJsMJNLWNPmmsncjMJcjtvwggVvhFFFhjrVwrjrjppvT 186 | WWPsJJCWCtZZZRGC 187 | SfFZQDRLgpLlRgQRRRFWTsbhBhgTjbWBjhshgw 188 | tHVNGjtzzHvMMJJhrWJNrTrPbP 189 | jvVVvGCGtCmjHtdHzQQfDpSSlDRnFfQFmR 190 | ZBBPfVVPPrVmrWZJzNdPznbnbSzznP 191 | gvgpGqFFMgMcGgwLwGpcJNZSTZbdbdzNNSlqbTnn 192 | ssZLgsMLQvcFpVrhCsmtWHjrrW 193 | nFvhRnWWzBRPHQqcqqCqmFbd 194 | SJDJgVprLfDfbJmHmWWHQtJW 195 | wVsgWVSTgLjfSsVjVBRvRNwwGGRhNZhRMZ 196 | wTRrRBCTPTBPlgMqgHCqggHLgg 197 | dmDzpQpBdmWmWzzzDFzjGNMSWLSgLVGGLVNSLgSg 198 | JbFdmQQJpjpptQbdJJmDmdtnZhZRflTlnTrTlrhBwPPc 199 | jwSwssQbwbStlhRgtsVstn 200 | zPzFdFFZccPDgntzVHHgghRz 201 | vVVdfFmZPDMWZZBmGQbwJJGCLwwMwJCS 202 | PLLffLFqqNLwSffbnVzzRf 203 | lsmgTggChrgDtZsZVblMVJMznVnwMBnb 204 | hDZZTmZvhTgstvwNFdqpWQcqvP 205 | mmWwpwqtmmHTqHpprRZQPPZLZWSFRFRB 206 | gzcgscgbfvhRRNZQRRQPvr 207 | JsjhcshCfJgrrpttTCTplH 208 | TvNrvNrJfWWvtJLTHhvZZhQQwVGZZhbV 209 | mFCPmBMPlPsPPBsMFPszbHQJwwHHhbZVQVzjhGHZ 210 | qmlBsdCSmJBmsBBMnMMTDWDNcLrDprSNcWDNrW 211 | HSnHCVqTddFHSVqFqdStSQGQwRzQCzCRzGRRGNPQwz 212 | jhlBpgNvlfZjlfvmpgfgfBrMRRwMMPPLQMZRPMWMMZPQ 213 | hflfpgjfBfDcpchlpvndbHFDdHqSqNVqNVdn 214 | QBfhlVNfHSZHfVCVHSQfZfTCctdvdDTRtjDCtTRsjsvj 215 | brrWWqzFWzwWbswDchhTRtDhjT 216 | gbrFLnpzqrWPgqpLWrhnHGZlSfLfHfQBGVfHHNVG 217 | hcFmVScmQBVhtcvfHLfvHSnbHRLn 218 | lzQqlDqgpWPvJfRnlNJvww 219 | PjCCCPgDgqGzmMtCQstZmBFs 220 | GrnrHrmVVFMFhSSbSfhR 221 | zjTqLtBjjdWdWTLshMZMDbPNRMSSqSPNfD 222 | dTWjdtwWhjWTBzcnrpcwmQpCwcpw 223 | BgtVBsgVVJhgGsSGJbghJqbsjLfZmLjmmtfZndNNZFFZNLdm 224 | MHTlzlwHSvPvzMSPCTMQCNZdjjmnfQjdZfNLjF 225 | HMDTwPDpzrTzpScBghDbVqRBgRBJsR 226 | qjCsTmrrnnCmhcFrCjqmThRlbHGvJGvvvbRbbJRcQJRG 227 | fVBBTfMdSZLNZgPdgglGRdbtbtJRllJWJtWb 228 | TSZZSpNMPBLgpZLVgppBDFhzDmjrnzhjssFqDhzFnn 229 | MDtDMWmMQmdzmMMqvlGfRcjzgpcPPjczPl 230 | sZsHJWNJFJNbWFBhFBnnbVclbVVPglfcRggffGGpjl 231 | srHWLNZZJdSLSdvDMw 232 | BFqsPnsZcgnncggccqsqqpDPtDWPpPNTNSNThrWtSj 233 | dQbfQQJJdwdmFRbJLRJdMrfDWrjpDrrprhDDDDNWWD 234 | QGwdJmCFJZvGsvvncB 235 | GRRNSjrffGTSPrNTffSgcJTwWJZbbZvwvwtVwWVJZv 236 | CMcFsqmBQzMzshsBQBQvLWmJVwZtpJLJwJLvwt 237 | qBzChnQlzMcRSnnRRjHGGg 238 | dPPbPWNdTBbDpHPHpNsgzvFlglvHzvSFzCFF 239 | fntqhGhRMhnnnGGCVMRhCVlSjswFvvjzjSzvQVSgsl 240 | MMqqJJRCnMhZLCRhtPNrpZPDDWTDTrNBmD 241 | VjVGNTNlNchVjNGRWrSWWtZtRrzncR 242 | BTbbbwDmCDLTbDwfHmzZMmRrWtzPrZSZtrrz 243 | qDLLqvwLBsfBbBdQFQTJhqThVTQJ 244 | qBqPBGZflhrWznzZZdsnzv 245 | FmHRcCCsCDwDbjtzdjWbdz 246 | cTRwCCNHFNmwRgmFTNCFTJqqfqPJsPhPBlsrsfGf 247 | JTNhhNrCTcWpJJcpWw 248 | LLdLsfMsdStbtggLbnTpwfWDzpjvnnjzcz 249 | MqSZsgbMbGFbZtgTSZSFSLhhmHlBQlmrmrPHHCPPZPBr 250 | GgjjgpGvpJJtjgvPrJttsLjVwCsQsQNLsfLfMVCl 251 | RddqZqzcZdSWcHdcqQfQLMwVflfNQNMQ 252 | FncWTRcFlHWFmcFTgPJhGvDgpnnhhGtG 253 | ZGPFJsPQCbZCCbgz 254 | nrvrnGWTwwqTBRcpCRRg 255 | DnGWDldNmSLSMdMQ 256 | ScDmPPPmjmjjWgtdSmdmCnNqVQVVrNRTZTQTQDHHZGNH 257 | wbbMhLvMJpRwJQrJGHqQGrQHqr 258 | wzhspwpppswsMFLmtnzjdcmdPRWPtS 259 | fPlLTtBlTjDbWcTMJcncWqss 260 | LdvLrLpCRRQQmvhhVNpwRMWJZcFMZWJwJFFFwZsGcs 261 | prrRVpvvRVNmRvvzHjHPlzPLSffbbPHS 262 | bbCbzsQbBzbBFbFzFfJHfVJPfVPtzZttpm 263 | hwvrjDDwjcDcvdnNvwdnwwDPpNtNMVtPpJpRmVMPfmtVZR 264 | mmqDWjhcqhwvDDdTsSGGCbQGSBBLTGGl 265 | wthtwrBQhhSrqJJVLMRPPtJLPF 266 | vbmbZqfqgsfHmcllmLLJNLJMNFJNNvPGJn 267 | jHlDscllClCCgbZzhWqBzBQzprWCqS 268 | DwpDlwDwllhJwbDFNDwFPhDnQnZZzVVnnBrtNznzSSzZrr 269 | MHPfWRTgWzTQmSTTZt 270 | GdPjHLRMCfcGvwqDGbFq 271 | NGdNpDPdNGLppLpwSNFFFDLwnnZbMnrHlHZQcHbcnHQcPcQM 272 | jBgBsjssgjWJVGhBfhvJVnMlbnZQVrrrlHCcCZrl 273 | sRBgvRffhhtvtBgvjgttWBJTLmFLLwdwzFdqLDDDqFGdLFTd 274 | RBzRGRGBgnrPJrRGGWWbDggZTSTVZVFFSVZZdw 275 | tfmLhjfshNNsqpppfjHdwVdQZbVbQFVVTmSVDV 276 | jvqtwHqCNLNsNhNfjssLCzGJWcBRJRBCBBBrrWnGrG 277 | cGDBdNFdNdDStNtGdGQGscDMvZjjZWMvMLjsjjLZjLsJLv 278 | fbRnRzHVPClfRlbbmfHRlPvZvMLpqjvZJqZMpzMpZjBZ 279 | gfbfBgCHCPVNhNGgTtFDcF 280 | ljjvLZvvllFnlLJLJjLWFQrVssFpsGMFpNMGsr 281 | qbHSqHTcHChqCmTSRqqBVpVdBQsVQQGHdMprWV 282 | DbtcCqRhhTRmDnPMlLgfgztlZZ 283 | QtMQzPZcbtGgTtLvtf 284 | HwcDsdVVDnNSGLhwvffJvfTT 285 | CSsdSHNmSDHcCqqcrrzQcC 286 | nDNDfmMnmDJRNfJJdMDRBdwjcTtsSHvBTswTjwLtsCts 287 | QcbQrZZggGWVVWbZZjStswCSCCttGCwLvC 288 | ZgZgbzVglVbchVVrVhFWWpnnpNJmJMqDfMJnMRqNDDMD 289 | WMfNvsjWGjsqFjqTRRQVJztDzVmJHbft 290 | ZPhplcrLrmzQGzmz 291 | ZPddLPlcSclhZChndMvgTjjWNGWMGWBj 292 | nDLjMchghDcljfjffpfsqTmGCTGszGZVVzHV 293 | wdFJPFrQRwSNbjVQCTGsHZHmHCHs 294 | BRJJSddvdBrJwrBRNRFRSPRjvclLpWhpglgWpLplltnMgh 295 | BbVRzMcpbMNMHMTJmWdljdlJjT 296 | GtsqFnfvGSFqGfQvgnWWZlLlLjZWtWldPmlT 297 | sSsFqsqsGghwQQmfGRHbbVczbwwBpBpHcw 298 | BBFCBJCsGJBBgvgsvTlVhgNg 299 | ZnLdjRQddLRnZrlScHRVTTSHhRvg 300 | fnnjZLWdrnqdWrrPLddqVqBzGDJJFGCBDfJmbDzFMbmB 301 | -------------------------------------------------------------------------------- /advent-2021/5.in: -------------------------------------------------------------------------------- 1 | 781,721 -> 781,611 2 | 334,551 -> 119,551 3 | 25,153 -> 765,893 4 | 588,619 -> 588,683 5 | 167,63 -> 439,335 6 | 340,129 -> 35,129 7 | 578,712 -> 509,712 8 | 855,426 -> 855,649 9 | 778,71 -> 778,411 10 | 21,314 -> 631,924 11 | 552,148 -> 148,552 12 | 531,889 -> 789,889 13 | 85,963 -> 986,62 14 | 914,140 -> 257,797 15 | 520,721 -> 794,721 16 | 49,936 -> 960,25 17 | 458,941 -> 839,560 18 | 113,797 -> 113,604 19 | 554,136 -> 554,655 20 | 112,208 -> 112,504 21 | 78,410 -> 169,319 22 | 176,148 -> 906,878 23 | 56,98 -> 835,877 24 | 538,981 -> 178,621 25 | 553,102 -> 553,688 26 | 452,761 -> 452,70 27 | 487,574 -> 487,589 28 | 356,406 -> 154,406 29 | 11,646 -> 11,416 30 | 543,19 -> 924,400 31 | 862,773 -> 929,773 32 | 292,901 -> 292,97 33 | 985,236 -> 667,236 34 | 745,572 -> 667,572 35 | 752,794 -> 775,817 36 | 269,649 -> 269,198 37 | 928,327 -> 469,786 38 | 284,937 -> 755,466 39 | 308,876 -> 308,790 40 | 201,94 -> 988,881 41 | 233,958 -> 903,288 42 | 210,879 -> 91,879 43 | 760,48 -> 133,675 44 | 55,79 -> 956,980 45 | 988,15 -> 15,988 46 | 25,974 -> 966,33 47 | 903,671 -> 292,60 48 | 587,770 -> 403,954 49 | 83,379 -> 432,728 50 | 30,121 -> 334,425 51 | 375,516 -> 375,409 52 | 72,370 -> 72,152 53 | 575,595 -> 575,363 54 | 248,64 -> 896,712 55 | 703,421 -> 395,421 56 | 66,978 -> 977,67 57 | 450,961 -> 450,773 58 | 830,895 -> 830,661 59 | 373,58 -> 442,58 60 | 739,383 -> 739,712 61 | 510,188 -> 510,99 62 | 350,880 -> 248,880 63 | 771,278 -> 549,278 64 | 266,434 -> 266,838 65 | 315,490 -> 884,490 66 | 360,651 -> 428,583 67 | 333,452 -> 333,109 68 | 313,414 -> 713,14 69 | 23,982 -> 989,16 70 | 196,201 -> 889,894 71 | 485,761 -> 99,375 72 | 288,918 -> 50,680 73 | 912,206 -> 142,976 74 | 242,10 -> 841,609 75 | 972,11 -> 16,967 76 | 859,142 -> 390,611 77 | 48,348 -> 212,348 78 | 246,514 -> 726,34 79 | 29,754 -> 29,706 80 | 617,296 -> 224,689 81 | 671,487 -> 397,213 82 | 913,898 -> 155,140 83 | 437,688 -> 18,269 84 | 150,150 -> 869,869 85 | 386,873 -> 940,319 86 | 57,326 -> 148,417 87 | 847,12 -> 319,540 88 | 741,640 -> 520,640 89 | 111,458 -> 111,754 90 | 595,615 -> 861,881 91 | 244,722 -> 905,722 92 | 323,394 -> 323,304 93 | 560,562 -> 560,678 94 | 48,750 -> 48,228 95 | 80,40 -> 80,723 96 | 730,839 -> 191,300 97 | 300,773 -> 977,96 98 | 619,892 -> 827,892 99 | 22,226 -> 656,226 100 | 125,968 -> 125,637 101 | 116,923 -> 512,923 102 | 59,741 -> 59,499 103 | 484,930 -> 487,930 104 | 362,175 -> 362,778 105 | 960,986 -> 53,79 106 | 170,748 -> 576,748 107 | 810,291 -> 743,291 108 | 761,924 -> 339,502 109 | 730,850 -> 920,850 110 | 778,949 -> 778,766 111 | 254,724 -> 254,394 112 | 685,177 -> 685,441 113 | 442,290 -> 833,290 114 | 181,209 -> 72,100 115 | 91,924 -> 953,62 116 | 318,880 -> 318,659 117 | 570,632 -> 570,966 118 | 955,227 -> 667,227 119 | 439,666 -> 439,224 120 | 276,385 -> 276,56 121 | 544,521 -> 544,867 122 | 187,626 -> 187,13 123 | 307,235 -> 859,235 124 | 759,416 -> 668,416 125 | 357,882 -> 981,882 126 | 651,71 -> 651,457 127 | 615,711 -> 615,502 128 | 474,162 -> 305,162 129 | 320,33 -> 320,48 130 | 799,420 -> 799,389 131 | 448,46 -> 313,46 132 | 925,141 -> 925,928 133 | 332,101 -> 332,373 134 | 41,948 -> 749,948 135 | 276,672 -> 207,672 136 | 315,736 -> 86,736 137 | 844,688 -> 466,688 138 | 357,199 -> 107,199 139 | 902,950 -> 14,62 140 | 277,251 -> 923,251 141 | 963,38 -> 34,967 142 | 71,389 -> 577,389 143 | 712,911 -> 712,573 144 | 186,976 -> 148,938 145 | 407,389 -> 637,619 146 | 917,118 -> 917,960 147 | 988,571 -> 362,571 148 | 845,941 -> 189,285 149 | 686,537 -> 306,537 150 | 915,929 -> 946,960 151 | 447,30 -> 447,364 152 | 832,833 -> 832,888 153 | 957,953 -> 203,199 154 | 982,73 -> 400,655 155 | 159,704 -> 159,844 156 | 284,347 -> 159,347 157 | 903,280 -> 93,280 158 | 769,961 -> 140,332 159 | 899,145 -> 293,751 160 | 850,643 -> 148,643 161 | 580,870 -> 739,870 162 | 686,250 -> 686,237 163 | 142,528 -> 142,936 164 | 827,224 -> 827,287 165 | 972,946 -> 155,946 166 | 706,851 -> 862,851 167 | 564,231 -> 564,428 168 | 511,662 -> 511,752 169 | 838,842 -> 585,842 170 | 60,871 -> 870,61 171 | 719,824 -> 719,648 172 | 183,232 -> 936,985 173 | 131,56 -> 953,878 174 | 406,952 -> 80,952 175 | 884,518 -> 945,518 176 | 427,439 -> 662,439 177 | 829,920 -> 829,634 178 | 966,262 -> 966,933 179 | 813,27 -> 813,934 180 | 784,101 -> 784,160 181 | 744,313 -> 744,850 182 | 969,213 -> 206,976 183 | 957,56 -> 28,985 184 | 312,620 -> 312,680 185 | 454,131 -> 454,776 186 | 360,174 -> 175,359 187 | 711,114 -> 692,95 188 | 452,839 -> 938,839 189 | 641,56 -> 641,334 190 | 566,890 -> 51,890 191 | 869,109 -> 869,102 192 | 119,36 -> 119,796 193 | 301,583 -> 301,451 194 | 733,603 -> 733,714 195 | 718,703 -> 581,566 196 | 709,513 -> 915,513 197 | 405,13 -> 572,13 198 | 782,26 -> 391,26 199 | 15,74 -> 858,917 200 | 975,978 -> 38,41 201 | 11,316 -> 982,316 202 | 303,367 -> 303,129 203 | 847,143 -> 847,158 204 | 856,687 -> 856,870 205 | 715,524 -> 715,812 206 | 451,288 -> 272,467 207 | 576,179 -> 119,179 208 | 10,623 -> 10,44 209 | 652,631 -> 796,775 210 | 930,613 -> 913,613 211 | 803,746 -> 803,566 212 | 306,602 -> 306,137 213 | 582,491 -> 582,296 214 | 181,116 -> 231,116 215 | 802,646 -> 802,884 216 | 75,623 -> 75,424 217 | 370,680 -> 370,923 218 | 806,497 -> 939,497 219 | 301,331 -> 818,331 220 | 912,916 -> 27,31 221 | 24,82 -> 683,741 222 | 862,205 -> 316,751 223 | 245,842 -> 383,842 224 | 544,946 -> 518,920 225 | 129,192 -> 18,303 226 | 831,915 -> 31,115 227 | 306,824 -> 454,676 228 | 851,341 -> 125,341 229 | 790,154 -> 790,988 230 | 407,586 -> 477,656 231 | 144,988 -> 925,207 232 | 264,391 -> 264,466 233 | 901,651 -> 646,651 234 | 865,936 -> 390,461 235 | 631,737 -> 631,166 236 | 103,939 -> 937,105 237 | 505,813 -> 505,218 238 | 260,457 -> 141,457 239 | 52,762 -> 54,762 240 | 26,95 -> 889,958 241 | 638,41 -> 330,41 242 | 612,775 -> 191,354 243 | 863,224 -> 863,287 244 | 674,87 -> 674,110 245 | 189,76 -> 954,841 246 | 372,483 -> 503,483 247 | 166,75 -> 619,75 248 | 938,983 -> 18,63 249 | 442,573 -> 858,157 250 | 681,590 -> 878,590 251 | 276,465 -> 500,241 252 | 644,703 -> 651,710 253 | 848,363 -> 254,363 254 | 204,109 -> 216,97 255 | 81,529 -> 81,674 256 | 74,44 -> 978,948 257 | 929,237 -> 598,237 258 | 298,644 -> 298,712 259 | 678,367 -> 360,685 260 | 413,27 -> 413,799 261 | 684,403 -> 684,500 262 | 188,601 -> 972,601 263 | 33,257 -> 33,897 264 | 278,299 -> 278,635 265 | 261,983 -> 804,440 266 | 216,324 -> 216,526 267 | 399,332 -> 399,613 268 | 826,702 -> 826,332 269 | 137,203 -> 624,203 270 | 326,552 -> 36,262 271 | 142,927 -> 343,927 272 | 21,330 -> 410,719 273 | 721,768 -> 289,336 274 | 807,715 -> 807,287 275 | 775,678 -> 62,678 276 | 771,10 -> 491,10 277 | 287,829 -> 287,599 278 | 589,947 -> 767,947 279 | 160,348 -> 798,986 280 | 699,264 -> 108,855 281 | 605,145 -> 568,145 282 | 264,615 -> 545,615 283 | 633,111 -> 11,733 284 | 589,886 -> 589,897 285 | 728,839 -> 78,189 286 | 739,924 -> 948,924 287 | 140,354 -> 830,354 288 | 619,662 -> 332,662 289 | 592,960 -> 592,290 290 | 510,908 -> 510,828 291 | 792,518 -> 792,749 292 | 148,20 -> 832,704 293 | 529,837 -> 863,503 294 | 802,371 -> 301,371 295 | 682,429 -> 682,537 296 | 885,918 -> 38,71 297 | 590,229 -> 795,24 298 | 782,704 -> 244,704 299 | 936,71 -> 981,71 300 | 27,272 -> 27,253 301 | 558,48 -> 558,69 302 | 661,422 -> 661,145 303 | 152,335 -> 152,362 304 | 516,407 -> 26,407 305 | 449,731 -> 592,731 306 | 187,456 -> 594,863 307 | 145,290 -> 15,290 308 | 667,213 -> 214,666 309 | 660,872 -> 660,605 310 | 649,617 -> 986,954 311 | 86,914 -> 959,41 312 | 895,967 -> 24,96 313 | 40,154 -> 762,154 314 | 27,106 -> 855,934 315 | 929,913 -> 319,303 316 | 749,314 -> 387,676 317 | 76,380 -> 824,380 318 | 632,329 -> 632,436 319 | 154,496 -> 154,528 320 | 127,958 -> 127,613 321 | 592,606 -> 363,606 322 | 929,228 -> 929,890 323 | 832,596 -> 801,565 324 | 824,978 -> 134,978 325 | 638,485 -> 638,291 326 | 783,848 -> 783,77 327 | 646,877 -> 646,117 328 | 461,279 -> 850,668 329 | 300,450 -> 115,265 330 | 916,205 -> 145,976 331 | 510,760 -> 124,760 332 | 884,668 -> 884,153 333 | 285,370 -> 705,790 334 | 845,42 -> 17,870 335 | 784,59 -> 71,772 336 | 627,268 -> 333,562 337 | 731,403 -> 22,403 338 | 980,43 -> 43,980 339 | 16,988 -> 973,31 340 | 720,881 -> 300,881 341 | 23,182 -> 723,882 342 | 129,887 -> 51,887 343 | 186,934 -> 186,452 344 | 114,815 -> 39,815 345 | 868,777 -> 868,222 346 | 554,218 -> 911,218 347 | 247,408 -> 777,938 348 | 391,69 -> 285,69 349 | 239,472 -> 614,847 350 | 422,918 -> 422,245 351 | 852,905 -> 852,634 352 | 631,164 -> 17,778 353 | 987,988 -> 11,12 354 | 435,891 -> 435,136 355 | 564,409 -> 767,612 356 | 611,508 -> 611,535 357 | 744,965 -> 631,965 358 | 308,604 -> 509,604 359 | 77,250 -> 589,762 360 | 505,950 -> 685,950 361 | 907,222 -> 850,222 362 | 700,674 -> 754,620 363 | 238,294 -> 53,479 364 | 875,130 -> 875,544 365 | 368,547 -> 368,965 366 | 618,206 -> 311,206 367 | 127,972 -> 852,247 368 | 561,192 -> 982,613 369 | 573,399 -> 573,464 370 | 311,109 -> 764,562 371 | 69,813 -> 809,813 372 | 195,594 -> 317,594 373 | 900,467 -> 638,467 374 | 806,810 -> 806,918 375 | 451,17 -> 128,17 376 | 93,837 -> 878,52 377 | 299,726 -> 531,958 378 | 968,984 -> 18,34 379 | 957,38 -> 14,38 380 | 283,583 -> 32,332 381 | 922,822 -> 953,853 382 | 589,466 -> 753,466 383 | 203,791 -> 933,791 384 | 122,739 -> 778,83 385 | 294,658 -> 289,658 386 | 365,200 -> 365,513 387 | 611,941 -> 701,941 388 | 927,111 -> 107,931 389 | 754,529 -> 181,529 390 | 364,933 -> 567,933 391 | 717,960 -> 717,11 392 | 612,472 -> 612,807 393 | 971,252 -> 531,252 394 | 88,911 -> 387,911 395 | 885,837 -> 75,27 396 | 222,289 -> 714,781 397 | 754,40 -> 293,501 398 | 866,517 -> 949,517 399 | 858,586 -> 331,586 400 | 157,21 -> 731,595 401 | 173,216 -> 822,865 402 | 353,206 -> 353,318 403 | 68,88 -> 957,88 404 | 370,645 -> 200,815 405 | 981,83 -> 89,975 406 | 259,112 -> 259,435 407 | 184,920 -> 825,279 408 | 252,357 -> 252,56 409 | 722,349 -> 368,703 410 | 928,973 -> 597,973 411 | 677,656 -> 788,545 412 | 222,766 -> 527,461 413 | 870,787 -> 972,889 414 | 11,986 -> 986,11 415 | 163,918 -> 748,333 416 | 111,75 -> 823,75 417 | 603,250 -> 375,478 418 | 338,582 -> 338,454 419 | 372,179 -> 452,179 420 | 571,96 -> 571,723 421 | 243,460 -> 267,460 422 | 850,63 -> 43,870 423 | 837,863 -> 113,139 424 | 21,886 -> 709,198 425 | 154,650 -> 181,650 426 | 320,506 -> 320,706 427 | 983,722 -> 983,657 428 | 830,225 -> 190,865 429 | 924,12 -> 11,925 430 | 838,827 -> 258,247 431 | 690,792 -> 690,582 432 | 465,658 -> 146,977 433 | 790,935 -> 39,184 434 | 318,627 -> 318,125 435 | 245,939 -> 291,939 436 | 803,219 -> 254,768 437 | 262,476 -> 441,476 438 | 790,225 -> 790,372 439 | 250,722 -> 613,722 440 | 368,326 -> 368,474 441 | 148,666 -> 394,912 442 | 813,588 -> 238,13 443 | 84,323 -> 84,957 444 | 566,716 -> 822,716 445 | 794,633 -> 459,633 446 | 355,634 -> 237,634 447 | 950,755 -> 950,867 448 | 292,696 -> 340,696 449 | 121,391 -> 361,631 450 | 58,516 -> 624,516 451 | 859,37 -> 184,712 452 | 686,819 -> 428,819 453 | 11,12 -> 988,989 454 | 718,679 -> 280,679 455 | 515,524 -> 515,664 456 | 136,459 -> 136,56 457 | 703,763 -> 703,858 458 | 290,733 -> 290,33 459 | 910,928 -> 910,21 460 | 570,937 -> 570,808 461 | 462,215 -> 462,747 462 | 388,181 -> 712,505 463 | 933,705 -> 933,601 464 | 605,492 -> 188,492 465 | 737,818 -> 564,818 466 | 214,629 -> 735,108 467 | 139,942 -> 598,942 468 | 708,187 -> 541,187 469 | 646,611 -> 325,611 470 | 788,356 -> 718,426 471 | 267,250 -> 267,930 472 | 94,819 -> 94,191 473 | 661,537 -> 661,363 474 | 464,290 -> 471,297 475 | 656,68 -> 337,68 476 | 31,515 -> 797,515 477 | 876,21 -> 81,21 478 | 630,932 -> 21,323 479 | 259,58 -> 542,58 480 | 703,523 -> 703,949 481 | 470,310 -> 470,20 482 | 69,983 -> 977,75 483 | 569,908 -> 569,931 484 | 645,718 -> 645,665 485 | 819,371 -> 819,705 486 | 772,709 -> 772,736 487 | 330,870 -> 382,818 488 | 982,317 -> 982,778 489 | 626,411 -> 626,887 490 | 466,33 -> 466,635 491 | 519,939 -> 519,131 492 | 402,253 -> 402,300 493 | 180,712 -> 826,66 494 | 55,764 -> 941,764 495 | 659,859 -> 659,944 496 | 346,374 -> 346,500 497 | 880,333 -> 880,767 498 | 42,969 -> 983,28 499 | 363,688 -> 363,148 500 | 645,880 -> 265,500 501 | -------------------------------------------------------------------------------- /advent-2021/5e.in: -------------------------------------------------------------------------------- 1 | 781,721 -> 781,611 2 | 334,551 -> 119,551 3 | 25,153 -> 765,893 4 | 588,619 -> 588,683 5 | 167,63 -> 439,335 6 | 340,129 -> 35,129 7 | 578,712 -> 509,712 8 | 855,426 -> 855,649 9 | 778,71 -> 778,411 10 | 21,314 -> 631,924 11 | 552,148 -> 148,552 12 | 531,889 -> 789,889 13 | 85,963 -> 986,62 14 | 914,140 -> 257,797 15 | 520,721 -> 794,721 16 | 49,936 -> 960,25 17 | 458,941 -> 839,560 18 | 113,797 -> 113,604 19 | 554,136 -> 554,655 20 | 112,208 -> 112,504 21 | 78,410 -> 169,319 22 | 176,148 -> 906,878 23 | 56,98 -> 835,877 24 | 538,981 -> 178,621 25 | 553,102 -> 553,688 26 | 452,761 -> 452,70 27 | 487,574 -> 487,589 28 | 356,406 -> 154,406 29 | 11,646 -> 11,416 30 | 543,19 -> 924,400 31 | 862,773 -> 929,773 32 | 292,901 -> 292,97 33 | 985,236 -> 667,236 34 | 745,572 -> 667,572 35 | 752,794 -> 775,817 36 | 269,649 -> 269,198 37 | 928,327 -> 469,786 38 | 284,937 -> 755,466 39 | 308,876 -> 308,790 40 | 201,94 -> 988,881 41 | 233,958 -> 903,288 42 | 210,879 -> 91,879 43 | 760,48 -> 133,675 44 | 55,79 -> 956,980 45 | 988,15 -> 15,988 46 | 25,974 -> 966,33 47 | 903,671 -> 292,60 48 | 587,770 -> 403,954 49 | 83,379 -> 432,728 50 | 30,121 -> 334,425 51 | 375,516 -> 375,409 52 | 72,370 -> 72,152 53 | 575,595 -> 575,363 54 | 248,64 -> 896,712 55 | 703,421 -> 395,421 56 | 66,978 -> 977,67 57 | 450,961 -> 450,773 58 | 830,895 -> 830,661 59 | 373,58 -> 442,58 60 | 739,383 -> 739,712 61 | 510,188 -> 510,99 62 | 350,880 -> 248,880 63 | 771,278 -> 549,278 64 | 266,434 -> 266,838 65 | 315,490 -> 884,490 66 | 360,651 -> 428,583 67 | 333,452 -> 333,109 68 | 313,414 -> 713,14 69 | 23,982 -> 989,16 70 | 196,201 -> 889,894 71 | 485,761 -> 99,375 72 | 288,918 -> 50,680 73 | 912,206 -> 142,976 74 | 242,10 -> 841,609 75 | 972,11 -> 16,967 76 | 859,142 -> 390,611 77 | 48,348 -> 212,348 78 | 246,514 -> 726,34 79 | 29,754 -> 29,706 80 | 617,296 -> 224,689 81 | 671,487 -> 397,213 82 | 913,898 -> 155,140 83 | 437,688 -> 18,269 84 | 150,150 -> 869,869 85 | 386,873 -> 940,319 86 | 57,326 -> 148,417 87 | 847,12 -> 319,540 88 | 741,640 -> 520,640 89 | 111,458 -> 111,754 90 | 595,615 -> 861,881 91 | 244,722 -> 905,722 92 | 323,394 -> 323,304 93 | 560,562 -> 560,678 94 | 48,750 -> 48,228 95 | 80,40 -> 80,723 96 | 730,839 -> 191,300 97 | 300,773 -> 977,96 98 | 619,892 -> 827,892 99 | 22,226 -> 656,226 100 | 125,968 -> 125,637 101 | 116,923 -> 512,923 102 | 59,741 -> 59,499 103 | 484,930 -> 487,930 104 | 362,175 -> 362,778 105 | 960,986 -> 53,79 106 | 170,748 -> 576,748 107 | 810,291 -> 743,291 108 | 761,924 -> 339,502 109 | 730,850 -> 920,850 110 | 778,949 -> 778,766 111 | 254,724 -> 254,394 112 | 685,177 -> 685,441 113 | 442,290 -> 833,290 114 | 181,209 -> 72,100 115 | 91,924 -> 953,62 116 | 318,880 -> 318,659 117 | 570,632 -> 570,966 118 | 955,227 -> 667,227 119 | 439,666 -> 439,224 120 | 276,385 -> 276,56 121 | 544,521 -> 544,867 122 | 187,626 -> 187,13 123 | 307,235 -> 859,235 124 | 759,416 -> 668,416 125 | 357,882 -> 981,882 126 | 651,71 -> 651,457 127 | 615,711 -> 615,502 128 | 474,162 -> 305,162 129 | 320,33 -> 320,48 130 | 799,420 -> 799,389 131 | 448,46 -> 313,46 132 | 925,141 -> 925,928 133 | 332,101 -> 332,373 134 | 41,948 -> 749,948 135 | 276,672 -> 207,672 136 | 315,736 -> 86,736 137 | 844,688 -> 466,688 138 | 357,199 -> 107,199 139 | 902,950 -> 14,62 140 | 277,251 -> 923,251 141 | 963,38 -> 34,967 142 | 71,389 -> 577,389 143 | 712,911 -> 712,573 144 | 186,976 -> 148,938 145 | 407,389 -> 637,619 146 | 917,118 -> 917,960 147 | 988,571 -> 362,571 148 | 845,941 -> 189,285 149 | 686,537 -> 306,537 150 | 915,929 -> 946,960 151 | 447,30 -> 447,364 152 | 832,833 -> 832,888 153 | 957,953 -> 203,199 154 | 982,73 -> 400,655 155 | 159,704 -> 159,844 156 | 284,347 -> 159,347 157 | 903,280 -> 93,280 158 | 769,961 -> 140,332 159 | 899,145 -> 293,751 160 | 850,643 -> 148,643 161 | 580,870 -> 739,870 162 | 686,250 -> 686,237 163 | 142,528 -> 142,936 164 | 827,224 -> 827,287 165 | 972,946 -> 155,946 166 | 706,851 -> 862,851 167 | 564,231 -> 564,428 168 | 511,662 -> 511,752 169 | 838,842 -> 585,842 170 | 60,871 -> 870,61 171 | 719,824 -> 719,648 172 | 183,232 -> 936,985 173 | 131,56 -> 953,878 174 | 406,952 -> 80,952 175 | 884,518 -> 945,518 176 | 427,439 -> 662,439 177 | 829,920 -> 829,634 178 | 966,262 -> 966,933 179 | 813,27 -> 813,934 180 | 784,101 -> 784,160 181 | 744,313 -> 744,850 182 | 969,213 -> 206,976 183 | 957,56 -> 28,985 184 | 312,620 -> 312,680 185 | 454,131 -> 454,776 186 | 360,174 -> 175,359 187 | 711,114 -> 692,95 188 | 452,839 -> 938,839 189 | 641,56 -> 641,334 190 | 566,890 -> 51,890 191 | 869,109 -> 869,102 192 | 119,36 -> 119,796 193 | 301,583 -> 301,451 194 | 733,603 -> 733,714 195 | 718,703 -> 581,566 196 | 709,513 -> 915,513 197 | 405,13 -> 572,13 198 | 782,26 -> 391,26 199 | 15,74 -> 858,917 200 | 975,978 -> 38,41 201 | 11,316 -> 982,316 202 | 303,367 -> 303,129 203 | 847,143 -> 847,158 204 | 856,687 -> 856,870 205 | 715,524 -> 715,812 206 | 451,288 -> 272,467 207 | 576,179 -> 119,179 208 | 10,623 -> 10,44 209 | 652,631 -> 796,775 210 | 930,613 -> 913,613 211 | 803,746 -> 803,566 212 | 306,602 -> 306,137 213 | 582,491 -> 582,296 214 | 181,116 -> 231,116 215 | 802,646 -> 802,884 216 | 75,623 -> 75,424 217 | 370,680 -> 370,923 218 | 806,497 -> 939,497 219 | 301,331 -> 818,331 220 | 912,916 -> 27,31 221 | 24,82 -> 683,741 222 | 862,205 -> 316,751 223 | 245,842 -> 383,842 224 | 544,946 -> 518,920 225 | 129,192 -> 18,303 226 | 831,915 -> 31,115 227 | 306,824 -> 454,676 228 | 851,341 -> 125,341 229 | 790,154 -> 790,988 230 | 407,586 -> 477,656 231 | 144,988 -> 925,207 232 | 264,391 -> 264,466 233 | 901,651 -> 646,651 234 | 865,936 -> 390,461 235 | 631,737 -> 631,166 236 | 103,939 -> 937,105 237 | 505,813 -> 505,218 238 | 260,457 -> 141,457 239 | 52,762 -> 54,762 240 | 26,95 -> 889,958 241 | 638,41 -> 330,41 242 | 612,775 -> 191,354 243 | 863,224 -> 863,287 244 | 674,87 -> 674,110 245 | 189,76 -> 954,841 246 | 372,483 -> 503,483 247 | 166,75 -> 619,75 248 | 938,983 -> 18,63 249 | 442,573 -> 858,157 250 | 681,590 -> 878,590 251 | 276,465 -> 500,241 252 | 644,703 -> 651,710 253 | 848,363 -> 254,363 254 | 204,109 -> 216,97 255 | 81,529 -> 81,674 256 | 74,44 -> 978,948 257 | 929,237 -> 598,237 258 | 298,644 -> 298,712 259 | 678,367 -> 360,685 260 | 413,27 -> 413,799 261 | 684,403 -> 684,500 262 | 188,601 -> 972,601 263 | 33,257 -> 33,897 264 | 278,299 -> 278,635 265 | 261,983 -> 804,440 266 | 216,324 -> 216,526 267 | 399,332 -> 399,613 268 | 826,702 -> 826,332 269 | 137,203 -> 624,203 270 | 326,552 -> 36,262 271 | 142,927 -> 343,927 272 | 21,330 -> 410,719 273 | 721,768 -> 289,336 274 | 807,715 -> 807,287 275 | 775,678 -> 62,678 276 | 771,10 -> 491,10 277 | 287,829 -> 287,599 278 | 589,947 -> 767,947 279 | 160,348 -> 798,986 280 | 699,264 -> 108,855 281 | 605,145 -> 568,145 282 | 264,615 -> 545,615 283 | 633,111 -> 11,733 284 | 589,886 -> 589,897 285 | 728,839 -> 78,189 286 | 739,924 -> 948,924 287 | 140,354 -> 830,354 288 | 619,662 -> 332,662 289 | 592,960 -> 592,290 290 | 510,908 -> 510,828 291 | 792,518 -> 792,749 292 | 148,20 -> 832,704 293 | 529,837 -> 863,503 294 | 802,371 -> 301,371 295 | 682,429 -> 682,537 296 | 885,918 -> 38,71 297 | 590,229 -> 795,24 298 | 782,704 -> 244,704 299 | 936,71 -> 981,71 300 | 27,272 -> 27,253 301 | 558,48 -> 558,69 302 | 661,422 -> 661,145 303 | 152,335 -> 152,362 304 | 516,407 -> 26,407 305 | 449,731 -> 592,731 306 | 187,456 -> 594,863 307 | 145,290 -> 15,290 308 | 667,213 -> 214,666 309 | 660,872 -> 660,605 310 | 649,617 -> 986,954 311 | 86,914 -> 959,41 312 | 895,967 -> 24,96 313 | 40,154 -> 762,154 314 | 27,106 -> 855,934 315 | 929,913 -> 319,303 316 | 749,314 -> 387,676 317 | 76,380 -> 824,380 318 | 632,329 -> 632,436 319 | 154,496 -> 154,528 320 | 127,958 -> 127,613 321 | 592,606 -> 363,606 322 | 929,228 -> 929,890 323 | 832,596 -> 801,565 324 | 824,978 -> 134,978 325 | 638,485 -> 638,291 326 | 783,848 -> 783,77 327 | 646,877 -> 646,117 328 | 461,279 -> 850,668 329 | 300,450 -> 115,265 330 | 916,205 -> 145,976 331 | 510,760 -> 124,760 332 | 884,668 -> 884,153 333 | 285,370 -> 705,790 334 | 845,42 -> 17,870 335 | 784,59 -> 71,772 336 | 627,268 -> 333,562 337 | 731,403 -> 22,403 338 | 980,43 -> 43,980 339 | 16,988 -> 973,31 340 | 720,881 -> 300,881 341 | 23,182 -> 723,882 342 | 129,887 -> 51,887 343 | 186,934 -> 186,452 344 | 114,815 -> 39,815 345 | 868,777 -> 868,222 346 | 554,218 -> 911,218 347 | 247,408 -> 777,938 348 | 391,69 -> 285,69 349 | 239,472 -> 614,847 350 | 422,918 -> 422,245 351 | 852,905 -> 852,634 352 | 631,164 -> 17,778 353 | 987,988 -> 11,12 354 | 435,891 -> 435,136 355 | 564,409 -> 767,612 356 | 611,508 -> 611,535 357 | 744,965 -> 631,965 358 | 308,604 -> 509,604 359 | 77,250 -> 589,762 360 | 505,950 -> 685,950 361 | 907,222 -> 850,222 362 | 700,674 -> 754,620 363 | 238,294 -> 53,479 364 | 875,130 -> 875,544 365 | 368,547 -> 368,965 366 | 618,206 -> 311,206 367 | 127,972 -> 852,247 368 | 561,192 -> 982,613 369 | 573,399 -> 573,464 370 | 311,109 -> 764,562 371 | 69,813 -> 809,813 372 | 195,594 -> 317,594 373 | 900,467 -> 638,467 374 | 806,810 -> 806,918 375 | 451,17 -> 128,17 376 | 93,837 -> 878,52 377 | 299,726 -> 531,958 378 | 968,984 -> 18,34 379 | 957,38 -> 14,38 380 | 283,583 -> 32,332 381 | 922,822 -> 953,853 382 | 589,466 -> 753,466 383 | 203,791 -> 933,791 384 | 122,739 -> 778,83 385 | 294,658 -> 289,658 386 | 365,200 -> 365,513 387 | 611,941 -> 701,941 388 | 927,111 -> 107,931 389 | 754,529 -> 181,529 390 | 364,933 -> 567,933 391 | 717,960 -> 717,11 392 | 612,472 -> 612,807 393 | 971,252 -> 531,252 394 | 88,911 -> 387,911 395 | 885,837 -> 75,27 396 | 222,289 -> 714,781 397 | 754,40 -> 293,501 398 | 866,517 -> 949,517 399 | 858,586 -> 331,586 400 | 157,21 -> 731,595 401 | 173,216 -> 822,865 402 | 353,206 -> 353,318 403 | 68,88 -> 957,88 404 | 370,645 -> 200,815 405 | 981,83 -> 89,975 406 | 259,112 -> 259,435 407 | 184,920 -> 825,279 408 | 252,357 -> 252,56 409 | 722,349 -> 368,703 410 | 928,973 -> 597,973 411 | 677,656 -> 788,545 412 | 222,766 -> 527,461 413 | 870,787 -> 972,889 414 | 11,986 -> 986,11 415 | 163,918 -> 748,333 416 | 111,75 -> 823,75 417 | 603,250 -> 375,478 418 | 338,582 -> 338,454 419 | 372,179 -> 452,179 420 | 571,96 -> 571,723 421 | 243,460 -> 267,460 422 | 850,63 -> 43,870 423 | 837,863 -> 113,139 424 | 21,886 -> 709,198 425 | 154,650 -> 181,650 426 | 320,506 -> 320,706 427 | 983,722 -> 983,657 428 | 830,225 -> 190,865 429 | 924,12 -> 11,925 430 | 838,827 -> 258,247 431 | 690,792 -> 690,582 432 | 465,658 -> 146,977 433 | 790,935 -> 39,184 434 | 318,627 -> 318,125 435 | 245,939 -> 291,939 436 | 803,219 -> 254,768 437 | 262,476 -> 441,476 438 | 790,225 -> 790,372 439 | 250,722 -> 613,722 440 | 368,326 -> 368,474 441 | 148,666 -> 394,912 442 | 813,588 -> 238,13 443 | 84,323 -> 84,957 444 | 566,716 -> 822,716 445 | 794,633 -> 459,633 446 | 355,634 -> 237,634 447 | 950,755 -> 950,867 448 | 292,696 -> 340,696 449 | 121,391 -> 361,631 450 | 58,516 -> 624,516 451 | 859,37 -> 184,712 452 | 686,819 -> 428,819 453 | 11,12 -> 988,989 454 | 718,679 -> 280,679 455 | 515,524 -> 515,664 456 | 136,459 -> 136,56 457 | 703,763 -> 703,858 458 | 290,733 -> 290,33 459 | 910,928 -> 910,21 460 | 570,937 -> 570,808 461 | 462,215 -> 462,747 462 | 388,181 -> 712,505 463 | 933,705 -> 933,601 464 | 605,492 -> 188,492 465 | 737,818 -> 564,818 466 | 214,629 -> 735,108 467 | 139,942 -> 598,942 468 | 708,187 -> 541,187 469 | 646,611 -> 325,611 470 | 788,356 -> 718,426 471 | 267,250 -> 267,930 472 | 94,819 -> 94,191 473 | 661,537 -> 661,363 474 | 464,290 -> 471,297 475 | 656,68 -> 337,68 476 | 31,515 -> 797,515 477 | 876,21 -> 81,21 478 | 630,932 -> 21,323 479 | 259,58 -> 542,58 480 | 703,523 -> 703,949 481 | 470,310 -> 470,20 482 | 69,983 -> 977,75 483 | 569,908 -> 569,931 484 | 645,718 -> 645,665 485 | 819,371 -> 819,705 486 | 772,709 -> 772,736 487 | 330,870 -> 382,818 488 | 982,317 -> 982,778 489 | 626,411 -> 626,887 490 | 466,33 -> 466,635 491 | 519,939 -> 519,131 492 | 402,253 -> 402,300 493 | 180,712 -> 826,66 494 | 55,764 -> 941,764 495 | 659,859 -> 659,944 496 | 346,374 -> 346,500 497 | 880,333 -> 880,767 498 | 42,969 -> 983,28 499 | 363,688 -> 363,148 500 | 645,880 -> 265,500 501 | -------------------------------------------------------------------------------- /advent-2022/5.in: -------------------------------------------------------------------------------- 1 | [Q] [P] [P] 2 | [G] [V] [S] [Z] [F] 3 | [W] [V] [F] [Z] [W] [Q] 4 | [V] [T] [N] [J] [W] [B] [W] 5 | [Z] [L] [V] [B] [C] [R] [N] [M] 6 | [C] [W] [R] [H] [H] [P] [T] [M] [B] 7 | [Q] [Q] [M] [Z] [Z] [N] [G] [G] [J] 8 | [B] [R] [B] [C] [D] [H] [D] [C] [N] 9 | 1 2 3 4 5 6 7 8 9 10 | 11 | move 3 from 6 to 2 12 | move 5 from 6 to 7 13 | move 6 from 2 to 5 14 | move 1 from 9 to 7 15 | move 1 from 1 to 9 16 | move 1 from 5 to 3 17 | move 1 from 2 to 5 18 | move 3 from 4 to 5 19 | move 10 from 7 to 3 20 | move 1 from 4 to 9 21 | move 6 from 8 to 7 22 | move 4 from 7 to 8 23 | move 1 from 7 to 3 24 | move 1 from 1 to 2 25 | move 1 from 2 to 8 26 | move 1 from 9 to 1 27 | move 3 from 9 to 4 28 | move 4 from 8 to 3 29 | move 4 from 7 to 1 30 | move 4 from 4 to 6 31 | move 2 from 8 to 7 32 | move 9 from 3 to 8 33 | move 2 from 7 to 4 34 | move 3 from 4 to 9 35 | move 4 from 1 to 9 36 | move 4 from 3 to 9 37 | move 2 from 1 to 4 38 | move 1 from 4 to 6 39 | move 3 from 3 to 2 40 | move 1 from 2 to 8 41 | move 1 from 2 to 7 42 | move 3 from 6 to 2 43 | move 2 from 6 to 7 44 | move 4 from 2 to 3 45 | move 3 from 7 to 9 46 | move 2 from 5 to 6 47 | move 15 from 9 to 4 48 | move 4 from 9 to 2 49 | move 12 from 5 to 4 50 | move 9 from 8 to 5 51 | move 25 from 4 to 7 52 | move 1 from 4 to 7 53 | move 1 from 4 to 8 54 | move 2 from 2 to 5 55 | move 1 from 4 to 2 56 | move 23 from 7 to 6 57 | move 2 from 5 to 2 58 | move 22 from 6 to 8 59 | move 4 from 5 to 9 60 | move 1 from 7 to 9 61 | move 2 from 6 to 4 62 | move 2 from 4 to 7 63 | move 25 from 8 to 3 64 | move 1 from 2 to 1 65 | move 3 from 2 to 3 66 | move 1 from 6 to 8 67 | move 1 from 1 to 8 68 | move 1 from 2 to 8 69 | move 1 from 8 to 1 70 | move 4 from 5 to 7 71 | move 1 from 8 to 4 72 | move 5 from 9 to 8 73 | move 5 from 8 to 9 74 | move 1 from 8 to 5 75 | move 3 from 5 to 4 76 | move 3 from 9 to 1 77 | move 30 from 3 to 4 78 | move 3 from 1 to 4 79 | move 2 from 9 to 5 80 | move 4 from 7 to 9 81 | move 16 from 4 to 8 82 | move 6 from 3 to 9 83 | move 3 from 7 to 3 84 | move 19 from 4 to 7 85 | move 8 from 9 to 4 86 | move 1 from 1 to 9 87 | move 13 from 7 to 9 88 | move 3 from 7 to 8 89 | move 3 from 5 to 9 90 | move 4 from 8 to 3 91 | move 2 from 7 to 3 92 | move 14 from 9 to 4 93 | move 10 from 3 to 1 94 | move 12 from 4 to 8 95 | move 6 from 1 to 9 96 | move 1 from 1 to 2 97 | move 1 from 7 to 1 98 | move 6 from 9 to 3 99 | move 17 from 8 to 6 100 | move 10 from 8 to 5 101 | move 1 from 7 to 8 102 | move 1 from 9 to 5 103 | move 2 from 3 to 1 104 | move 4 from 5 to 9 105 | move 1 from 8 to 7 106 | move 6 from 9 to 7 107 | move 4 from 4 to 2 108 | move 3 from 4 to 6 109 | move 4 from 5 to 9 110 | move 4 from 9 to 3 111 | move 1 from 2 to 4 112 | move 4 from 4 to 7 113 | move 3 from 5 to 3 114 | move 1 from 4 to 5 115 | move 5 from 1 to 2 116 | move 1 from 1 to 9 117 | move 7 from 2 to 7 118 | move 1 from 5 to 7 119 | move 8 from 3 to 5 120 | move 20 from 6 to 7 121 | move 9 from 7 to 9 122 | move 2 from 2 to 9 123 | move 2 from 3 to 1 124 | move 2 from 1 to 3 125 | move 2 from 3 to 4 126 | move 2 from 4 to 6 127 | move 1 from 3 to 9 128 | move 1 from 4 to 9 129 | move 1 from 6 to 9 130 | move 2 from 5 to 8 131 | move 2 from 8 to 5 132 | move 1 from 6 to 7 133 | move 2 from 5 to 8 134 | move 6 from 9 to 5 135 | move 2 from 8 to 6 136 | move 11 from 9 to 2 137 | move 1 from 6 to 5 138 | move 11 from 2 to 5 139 | move 1 from 6 to 4 140 | move 7 from 5 to 9 141 | move 7 from 9 to 1 142 | move 1 from 4 to 9 143 | move 28 from 7 to 5 144 | move 1 from 7 to 5 145 | move 5 from 5 to 9 146 | move 5 from 9 to 3 147 | move 6 from 1 to 8 148 | move 1 from 1 to 7 149 | move 5 from 3 to 2 150 | move 1 from 7 to 8 151 | move 7 from 8 to 1 152 | move 1 from 9 to 4 153 | move 2 from 2 to 5 154 | move 22 from 5 to 3 155 | move 1 from 7 to 8 156 | move 1 from 4 to 7 157 | move 1 from 8 to 9 158 | move 1 from 9 to 4 159 | move 14 from 5 to 7 160 | move 5 from 5 to 9 161 | move 19 from 3 to 4 162 | move 1 from 2 to 9 163 | move 2 from 2 to 5 164 | move 1 from 5 to 1 165 | move 6 from 1 to 7 166 | move 2 from 7 to 6 167 | move 1 from 1 to 9 168 | move 2 from 5 to 8 169 | move 8 from 4 to 5 170 | move 3 from 4 to 7 171 | move 3 from 3 to 5 172 | move 2 from 8 to 9 173 | move 16 from 7 to 5 174 | move 9 from 4 to 6 175 | move 22 from 5 to 3 176 | move 1 from 5 to 8 177 | move 1 from 8 to 7 178 | move 10 from 3 to 4 179 | move 1 from 5 to 4 180 | move 10 from 4 to 5 181 | move 8 from 5 to 2 182 | move 5 from 2 to 7 183 | move 5 from 7 to 1 184 | move 4 from 7 to 6 185 | move 3 from 9 to 7 186 | move 2 from 2 to 3 187 | move 3 from 5 to 1 188 | move 6 from 9 to 7 189 | move 5 from 7 to 8 190 | move 6 from 1 to 5 191 | move 6 from 3 to 4 192 | move 4 from 4 to 2 193 | move 1 from 4 to 6 194 | move 5 from 8 to 7 195 | move 3 from 2 to 3 196 | move 1 from 1 to 4 197 | move 1 from 1 to 9 198 | move 2 from 2 to 1 199 | move 2 from 4 to 3 200 | move 4 from 3 to 7 201 | move 3 from 7 to 3 202 | move 13 from 6 to 1 203 | move 1 from 9 to 2 204 | move 6 from 3 to 5 205 | move 8 from 1 to 4 206 | move 1 from 2 to 7 207 | move 9 from 4 to 9 208 | move 7 from 5 to 1 209 | move 2 from 5 to 6 210 | move 1 from 1 to 4 211 | move 1 from 4 to 3 212 | move 2 from 1 to 2 213 | move 5 from 3 to 6 214 | move 2 from 6 to 1 215 | move 13 from 7 to 6 216 | move 2 from 3 to 4 217 | move 2 from 2 to 9 218 | move 2 from 7 to 8 219 | move 6 from 9 to 2 220 | move 1 from 9 to 3 221 | move 1 from 5 to 2 222 | move 7 from 1 to 2 223 | move 1 from 6 to 7 224 | move 1 from 4 to 8 225 | move 1 from 3 to 1 226 | move 1 from 7 to 8 227 | move 7 from 1 to 9 228 | move 4 from 8 to 6 229 | move 1 from 5 to 3 230 | move 9 from 9 to 5 231 | move 1 from 1 to 2 232 | move 14 from 2 to 7 233 | move 2 from 9 to 3 234 | move 13 from 5 to 3 235 | move 24 from 6 to 9 236 | move 6 from 3 to 5 237 | move 14 from 7 to 9 238 | move 1 from 4 to 1 239 | move 20 from 9 to 7 240 | move 9 from 3 to 8 241 | move 15 from 9 to 6 242 | move 1 from 5 to 8 243 | move 1 from 2 to 3 244 | move 14 from 6 to 3 245 | move 2 from 3 to 4 246 | move 2 from 3 to 6 247 | move 13 from 7 to 1 248 | move 8 from 3 to 5 249 | move 1 from 3 to 9 250 | move 8 from 5 to 4 251 | move 4 from 5 to 2 252 | move 10 from 1 to 3 253 | move 6 from 4 to 5 254 | move 4 from 5 to 1 255 | move 3 from 1 to 6 256 | move 7 from 8 to 2 257 | move 4 from 4 to 3 258 | move 13 from 3 to 6 259 | move 3 from 8 to 1 260 | move 3 from 7 to 8 261 | move 3 from 8 to 4 262 | move 1 from 4 to 2 263 | move 2 from 3 to 4 264 | move 1 from 5 to 7 265 | move 4 from 7 to 1 266 | move 2 from 3 to 5 267 | move 3 from 2 to 1 268 | move 1 from 4 to 7 269 | move 7 from 2 to 4 270 | move 2 from 4 to 3 271 | move 1 from 7 to 5 272 | move 4 from 9 to 5 273 | move 1 from 4 to 2 274 | move 3 from 2 to 9 275 | move 8 from 1 to 7 276 | move 1 from 3 to 5 277 | move 7 from 5 to 7 278 | move 10 from 6 to 4 279 | move 1 from 5 to 1 280 | move 4 from 1 to 3 281 | move 9 from 7 to 6 282 | move 3 from 1 to 8 283 | move 12 from 4 to 6 284 | move 5 from 4 to 6 285 | move 2 from 9 to 3 286 | move 3 from 8 to 7 287 | move 1 from 1 to 3 288 | move 3 from 7 to 8 289 | move 5 from 7 to 5 290 | move 1 from 7 to 5 291 | move 2 from 3 to 1 292 | move 2 from 8 to 7 293 | move 3 from 5 to 1 294 | move 1 from 9 to 7 295 | move 1 from 8 to 3 296 | move 4 from 7 to 8 297 | move 4 from 5 to 9 298 | move 4 from 1 to 7 299 | move 3 from 8 to 6 300 | move 1 from 8 to 1 301 | move 1 from 7 to 1 302 | move 1 from 5 to 8 303 | move 1 from 8 to 7 304 | move 7 from 3 to 1 305 | move 3 from 9 to 1 306 | move 1 from 9 to 3 307 | move 28 from 6 to 3 308 | move 3 from 7 to 8 309 | move 2 from 8 to 2 310 | move 1 from 2 to 7 311 | move 2 from 6 to 1 312 | move 18 from 3 to 9 313 | move 5 from 3 to 4 314 | move 2 from 7 to 4 315 | move 2 from 1 to 8 316 | move 1 from 2 to 6 317 | move 7 from 6 to 4 318 | move 4 from 4 to 3 319 | move 3 from 8 to 1 320 | move 4 from 9 to 8 321 | move 1 from 4 to 8 322 | move 9 from 1 to 6 323 | move 5 from 1 to 3 324 | move 4 from 6 to 7 325 | move 7 from 6 to 3 326 | move 5 from 8 to 1 327 | move 12 from 3 to 6 328 | move 7 from 6 to 4 329 | move 4 from 3 to 5 330 | move 5 from 6 to 7 331 | move 12 from 4 to 3 332 | move 6 from 1 to 4 333 | move 4 from 4 to 2 334 | move 14 from 9 to 8 335 | move 17 from 3 to 2 336 | move 5 from 4 to 9 337 | move 1 from 9 to 6 338 | move 5 from 2 to 1 339 | move 1 from 9 to 8 340 | move 5 from 1 to 6 341 | move 2 from 2 to 6 342 | move 12 from 2 to 4 343 | move 6 from 7 to 2 344 | move 3 from 7 to 6 345 | move 3 from 9 to 8 346 | move 5 from 4 to 7 347 | move 4 from 2 to 6 348 | move 3 from 6 to 8 349 | move 5 from 8 to 2 350 | move 7 from 6 to 8 351 | move 1 from 7 to 3 352 | move 6 from 4 to 3 353 | move 1 from 8 to 1 354 | move 1 from 5 to 7 355 | move 2 from 6 to 8 356 | move 13 from 8 to 2 357 | move 3 from 5 to 4 358 | move 1 from 1 to 2 359 | move 3 from 6 to 2 360 | move 1 from 1 to 4 361 | move 4 from 4 to 8 362 | move 8 from 3 to 1 363 | move 2 from 4 to 8 364 | move 15 from 2 to 4 365 | move 16 from 8 to 3 366 | move 1 from 8 to 6 367 | move 1 from 7 to 2 368 | move 8 from 1 to 2 369 | move 1 from 6 to 8 370 | move 6 from 3 to 1 371 | move 3 from 3 to 8 372 | move 6 from 3 to 1 373 | move 6 from 2 to 9 374 | move 2 from 1 to 4 375 | move 1 from 8 to 5 376 | move 8 from 2 to 9 377 | move 8 from 1 to 4 378 | move 3 from 8 to 6 379 | move 21 from 4 to 7 380 | move 1 from 9 to 7 381 | move 2 from 6 to 8 382 | move 1 from 5 to 1 383 | move 1 from 3 to 9 384 | move 8 from 9 to 4 385 | move 1 from 1 to 7 386 | move 1 from 1 to 4 387 | move 1 from 6 to 8 388 | move 1 from 9 to 3 389 | move 2 from 9 to 5 390 | move 2 from 5 to 3 391 | move 1 from 9 to 4 392 | move 3 from 8 to 2 393 | move 1 from 1 to 4 394 | move 4 from 4 to 9 395 | move 3 from 3 to 2 396 | move 5 from 9 to 1 397 | move 17 from 7 to 1 398 | move 1 from 9 to 1 399 | move 2 from 2 to 4 400 | move 1 from 4 to 2 401 | move 8 from 2 to 9 402 | move 5 from 4 to 5 403 | move 6 from 4 to 8 404 | move 20 from 1 to 6 405 | move 2 from 9 to 8 406 | move 1 from 2 to 9 407 | move 2 from 8 to 7 408 | move 8 from 7 to 8 409 | move 4 from 5 to 9 410 | move 14 from 8 to 7 411 | move 1 from 5 to 7 412 | move 7 from 9 to 1 413 | move 3 from 6 to 4 414 | move 3 from 9 to 7 415 | move 12 from 6 to 7 416 | move 22 from 7 to 9 417 | move 2 from 2 to 5 418 | move 10 from 1 to 7 419 | move 1 from 4 to 1 420 | move 2 from 6 to 1 421 | move 1 from 1 to 3 422 | move 2 from 4 to 8 423 | move 2 from 8 to 6 424 | move 1 from 3 to 8 425 | move 1 from 4 to 1 426 | move 2 from 5 to 3 427 | move 1 from 8 to 4 428 | move 2 from 3 to 7 429 | move 19 from 9 to 7 430 | move 1 from 1 to 4 431 | move 2 from 9 to 1 432 | move 2 from 1 to 6 433 | move 1 from 6 to 5 434 | move 42 from 7 to 8 435 | move 1 from 7 to 6 436 | move 2 from 4 to 8 437 | move 7 from 6 to 8 438 | move 2 from 1 to 5 439 | move 2 from 9 to 5 440 | move 14 from 8 to 3 441 | move 22 from 8 to 2 442 | move 3 from 5 to 6 443 | move 10 from 8 to 6 444 | move 5 from 8 to 9 445 | move 12 from 6 to 7 446 | move 2 from 5 to 1 447 | move 5 from 3 to 2 448 | move 7 from 3 to 5 449 | move 2 from 5 to 1 450 | move 2 from 3 to 7 451 | move 4 from 1 to 2 452 | move 1 from 5 to 7 453 | move 1 from 5 to 4 454 | move 1 from 6 to 2 455 | move 1 from 9 to 2 456 | move 9 from 7 to 3 457 | move 1 from 4 to 1 458 | move 3 from 7 to 5 459 | move 4 from 3 to 2 460 | move 5 from 2 to 3 461 | move 2 from 5 to 2 462 | move 34 from 2 to 9 463 | move 1 from 1 to 5 464 | move 15 from 9 to 3 465 | move 2 from 3 to 2 466 | move 1 from 5 to 4 467 | move 7 from 3 to 8 468 | move 3 from 9 to 2 469 | move 6 from 9 to 4 470 | move 5 from 9 to 3 471 | move 4 from 4 to 6 472 | move 1 from 6 to 8 473 | move 1 from 3 to 5 474 | move 6 from 3 to 2 475 | move 1 from 4 to 9 476 | move 2 from 4 to 2 477 | move 4 from 5 to 8 478 | move 1 from 5 to 6 479 | move 1 from 7 to 6 480 | move 1 from 9 to 6 481 | move 1 from 7 to 2 482 | move 12 from 8 to 7 483 | move 2 from 7 to 3 484 | move 4 from 6 to 9 485 | move 7 from 9 to 4 486 | move 9 from 3 to 9 487 | move 11 from 7 to 4 488 | move 3 from 9 to 6 489 | move 1 from 4 to 1 490 | move 15 from 4 to 3 491 | move 2 from 4 to 1 492 | move 3 from 1 to 4 493 | move 17 from 3 to 7 494 | move 4 from 3 to 7 495 | move 7 from 9 to 2 496 | move 3 from 4 to 1 497 | move 4 from 6 to 9 498 | move 1 from 9 to 6 499 | move 1 from 3 to 1 500 | move 5 from 7 to 9 501 | move 8 from 9 to 4 502 | move 1 from 1 to 6 503 | move 6 from 4 to 9 504 | move 4 from 2 to 3 505 | move 1 from 4 to 3 506 | move 1 from 4 to 9 507 | move 1 from 1 to 7 508 | move 1 from 7 to 9 509 | move 3 from 6 to 2 510 | move 9 from 2 to 3 511 | move 1 from 9 to 4 512 | move 1 from 1 to 5 513 | move 12 from 7 to 6 514 | move 4 from 9 to 8 515 | -------------------------------------------------------------------------------- /advent-2022/5e.in: -------------------------------------------------------------------------------- 1 | [Q] [P] [P] 2 | [G] [V] [S] [Z] [F] 3 | [W] [V] [F] [Z] [W] [Q] 4 | [V] [T] [N] [J] [W] [B] [W] 5 | [Z] [L] [V] [B] [C] [R] [N] [M] 6 | [C] [W] [R] [H] [H] [P] [T] [M] [B] 7 | [Q] [Q] [M] [Z] [Z] [N] [G] [G] [J] 8 | [B] [R] [B] [C] [D] [H] [D] [C] [N] 9 | 1 2 3 4 5 6 7 8 9 10 | 11 | move 3 from 6 to 2 12 | move 5 from 6 to 7 13 | move 6 from 2 to 5 14 | move 1 from 9 to 7 15 | move 1 from 1 to 9 16 | move 1 from 5 to 3 17 | move 1 from 2 to 5 18 | move 3 from 4 to 5 19 | move 10 from 7 to 3 20 | move 1 from 4 to 9 21 | move 6 from 8 to 7 22 | move 4 from 7 to 8 23 | move 1 from 7 to 3 24 | move 1 from 1 to 2 25 | move 1 from 2 to 8 26 | move 1 from 9 to 1 27 | move 3 from 9 to 4 28 | move 4 from 8 to 3 29 | move 4 from 7 to 1 30 | move 4 from 4 to 6 31 | move 2 from 8 to 7 32 | move 9 from 3 to 8 33 | move 2 from 7 to 4 34 | move 3 from 4 to 9 35 | move 4 from 1 to 9 36 | move 4 from 3 to 9 37 | move 2 from 1 to 4 38 | move 1 from 4 to 6 39 | move 3 from 3 to 2 40 | move 1 from 2 to 8 41 | move 1 from 2 to 7 42 | move 3 from 6 to 2 43 | move 2 from 6 to 7 44 | move 4 from 2 to 3 45 | move 3 from 7 to 9 46 | move 2 from 5 to 6 47 | move 15 from 9 to 4 48 | move 4 from 9 to 2 49 | move 12 from 5 to 4 50 | move 9 from 8 to 5 51 | move 25 from 4 to 7 52 | move 1 from 4 to 7 53 | move 1 from 4 to 8 54 | move 2 from 2 to 5 55 | move 1 from 4 to 2 56 | move 23 from 7 to 6 57 | move 2 from 5 to 2 58 | move 22 from 6 to 8 59 | move 4 from 5 to 9 60 | move 1 from 7 to 9 61 | move 2 from 6 to 4 62 | move 2 from 4 to 7 63 | move 25 from 8 to 3 64 | move 1 from 2 to 1 65 | move 3 from 2 to 3 66 | move 1 from 6 to 8 67 | move 1 from 1 to 8 68 | move 1 from 2 to 8 69 | move 1 from 8 to 1 70 | move 4 from 5 to 7 71 | move 1 from 8 to 4 72 | move 5 from 9 to 8 73 | move 5 from 8 to 9 74 | move 1 from 8 to 5 75 | move 3 from 5 to 4 76 | move 3 from 9 to 1 77 | move 30 from 3 to 4 78 | move 3 from 1 to 4 79 | move 2 from 9 to 5 80 | move 4 from 7 to 9 81 | move 16 from 4 to 8 82 | move 6 from 3 to 9 83 | move 3 from 7 to 3 84 | move 19 from 4 to 7 85 | move 8 from 9 to 4 86 | move 1 from 1 to 9 87 | move 13 from 7 to 9 88 | move 3 from 7 to 8 89 | move 3 from 5 to 9 90 | move 4 from 8 to 3 91 | move 2 from 7 to 3 92 | move 14 from 9 to 4 93 | move 10 from 3 to 1 94 | move 12 from 4 to 8 95 | move 6 from 1 to 9 96 | move 1 from 1 to 2 97 | move 1 from 7 to 1 98 | move 6 from 9 to 3 99 | move 17 from 8 to 6 100 | move 10 from 8 to 5 101 | move 1 from 7 to 8 102 | move 1 from 9 to 5 103 | move 2 from 3 to 1 104 | move 4 from 5 to 9 105 | move 1 from 8 to 7 106 | move 6 from 9 to 7 107 | move 4 from 4 to 2 108 | move 3 from 4 to 6 109 | move 4 from 5 to 9 110 | move 4 from 9 to 3 111 | move 1 from 2 to 4 112 | move 4 from 4 to 7 113 | move 3 from 5 to 3 114 | move 1 from 4 to 5 115 | move 5 from 1 to 2 116 | move 1 from 1 to 9 117 | move 7 from 2 to 7 118 | move 1 from 5 to 7 119 | move 8 from 3 to 5 120 | move 20 from 6 to 7 121 | move 9 from 7 to 9 122 | move 2 from 2 to 9 123 | move 2 from 3 to 1 124 | move 2 from 1 to 3 125 | move 2 from 3 to 4 126 | move 2 from 4 to 6 127 | move 1 from 3 to 9 128 | move 1 from 4 to 9 129 | move 1 from 6 to 9 130 | move 2 from 5 to 8 131 | move 2 from 8 to 5 132 | move 1 from 6 to 7 133 | move 2 from 5 to 8 134 | move 6 from 9 to 5 135 | move 2 from 8 to 6 136 | move 11 from 9 to 2 137 | move 1 from 6 to 5 138 | move 11 from 2 to 5 139 | move 1 from 6 to 4 140 | move 7 from 5 to 9 141 | move 7 from 9 to 1 142 | move 1 from 4 to 9 143 | move 28 from 7 to 5 144 | move 1 from 7 to 5 145 | move 5 from 5 to 9 146 | move 5 from 9 to 3 147 | move 6 from 1 to 8 148 | move 1 from 1 to 7 149 | move 5 from 3 to 2 150 | move 1 from 7 to 8 151 | move 7 from 8 to 1 152 | move 1 from 9 to 4 153 | move 2 from 2 to 5 154 | move 22 from 5 to 3 155 | move 1 from 7 to 8 156 | move 1 from 4 to 7 157 | move 1 from 8 to 9 158 | move 1 from 9 to 4 159 | move 14 from 5 to 7 160 | move 5 from 5 to 9 161 | move 19 from 3 to 4 162 | move 1 from 2 to 9 163 | move 2 from 2 to 5 164 | move 1 from 5 to 1 165 | move 6 from 1 to 7 166 | move 2 from 7 to 6 167 | move 1 from 1 to 9 168 | move 2 from 5 to 8 169 | move 8 from 4 to 5 170 | move 3 from 4 to 7 171 | move 3 from 3 to 5 172 | move 2 from 8 to 9 173 | move 16 from 7 to 5 174 | move 9 from 4 to 6 175 | move 22 from 5 to 3 176 | move 1 from 5 to 8 177 | move 1 from 8 to 7 178 | move 10 from 3 to 4 179 | move 1 from 5 to 4 180 | move 10 from 4 to 5 181 | move 8 from 5 to 2 182 | move 5 from 2 to 7 183 | move 5 from 7 to 1 184 | move 4 from 7 to 6 185 | move 3 from 9 to 7 186 | move 2 from 2 to 3 187 | move 3 from 5 to 1 188 | move 6 from 9 to 7 189 | move 5 from 7 to 8 190 | move 6 from 1 to 5 191 | move 6 from 3 to 4 192 | move 4 from 4 to 2 193 | move 1 from 4 to 6 194 | move 5 from 8 to 7 195 | move 3 from 2 to 3 196 | move 1 from 1 to 4 197 | move 1 from 1 to 9 198 | move 2 from 2 to 1 199 | move 2 from 4 to 3 200 | move 4 from 3 to 7 201 | move 3 from 7 to 3 202 | move 13 from 6 to 1 203 | move 1 from 9 to 2 204 | move 6 from 3 to 5 205 | move 8 from 1 to 4 206 | move 1 from 2 to 7 207 | move 9 from 4 to 9 208 | move 7 from 5 to 1 209 | move 2 from 5 to 6 210 | move 1 from 1 to 4 211 | move 1 from 4 to 3 212 | move 2 from 1 to 2 213 | move 5 from 3 to 6 214 | move 2 from 6 to 1 215 | move 13 from 7 to 6 216 | move 2 from 3 to 4 217 | move 2 from 2 to 9 218 | move 2 from 7 to 8 219 | move 6 from 9 to 2 220 | move 1 from 9 to 3 221 | move 1 from 5 to 2 222 | move 7 from 1 to 2 223 | move 1 from 6 to 7 224 | move 1 from 4 to 8 225 | move 1 from 3 to 1 226 | move 1 from 7 to 8 227 | move 7 from 1 to 9 228 | move 4 from 8 to 6 229 | move 1 from 5 to 3 230 | move 9 from 9 to 5 231 | move 1 from 1 to 2 232 | move 14 from 2 to 7 233 | move 2 from 9 to 3 234 | move 13 from 5 to 3 235 | move 24 from 6 to 9 236 | move 6 from 3 to 5 237 | move 14 from 7 to 9 238 | move 1 from 4 to 1 239 | move 20 from 9 to 7 240 | move 9 from 3 to 8 241 | move 15 from 9 to 6 242 | move 1 from 5 to 8 243 | move 1 from 2 to 3 244 | move 14 from 6 to 3 245 | move 2 from 3 to 4 246 | move 2 from 3 to 6 247 | move 13 from 7 to 1 248 | move 8 from 3 to 5 249 | move 1 from 3 to 9 250 | move 8 from 5 to 4 251 | move 4 from 5 to 2 252 | move 10 from 1 to 3 253 | move 6 from 4 to 5 254 | move 4 from 5 to 1 255 | move 3 from 1 to 6 256 | move 7 from 8 to 2 257 | move 4 from 4 to 3 258 | move 13 from 3 to 6 259 | move 3 from 8 to 1 260 | move 3 from 7 to 8 261 | move 3 from 8 to 4 262 | move 1 from 4 to 2 263 | move 2 from 3 to 4 264 | move 1 from 5 to 7 265 | move 4 from 7 to 1 266 | move 2 from 3 to 5 267 | move 3 from 2 to 1 268 | move 1 from 4 to 7 269 | move 7 from 2 to 4 270 | move 2 from 4 to 3 271 | move 1 from 7 to 5 272 | move 4 from 9 to 5 273 | move 1 from 4 to 2 274 | move 3 from 2 to 9 275 | move 8 from 1 to 7 276 | move 1 from 3 to 5 277 | move 7 from 5 to 7 278 | move 10 from 6 to 4 279 | move 1 from 5 to 1 280 | move 4 from 1 to 3 281 | move 9 from 7 to 6 282 | move 3 from 1 to 8 283 | move 12 from 4 to 6 284 | move 5 from 4 to 6 285 | move 2 from 9 to 3 286 | move 3 from 8 to 7 287 | move 1 from 1 to 3 288 | move 3 from 7 to 8 289 | move 5 from 7 to 5 290 | move 1 from 7 to 5 291 | move 2 from 3 to 1 292 | move 2 from 8 to 7 293 | move 3 from 5 to 1 294 | move 1 from 9 to 7 295 | move 1 from 8 to 3 296 | move 4 from 7 to 8 297 | move 4 from 5 to 9 298 | move 4 from 1 to 7 299 | move 3 from 8 to 6 300 | move 1 from 8 to 1 301 | move 1 from 7 to 1 302 | move 1 from 5 to 8 303 | move 1 from 8 to 7 304 | move 7 from 3 to 1 305 | move 3 from 9 to 1 306 | move 1 from 9 to 3 307 | move 28 from 6 to 3 308 | move 3 from 7 to 8 309 | move 2 from 8 to 2 310 | move 1 from 2 to 7 311 | move 2 from 6 to 1 312 | move 18 from 3 to 9 313 | move 5 from 3 to 4 314 | move 2 from 7 to 4 315 | move 2 from 1 to 8 316 | move 1 from 2 to 6 317 | move 7 from 6 to 4 318 | move 4 from 4 to 3 319 | move 3 from 8 to 1 320 | move 4 from 9 to 8 321 | move 1 from 4 to 8 322 | move 9 from 1 to 6 323 | move 5 from 1 to 3 324 | move 4 from 6 to 7 325 | move 7 from 6 to 3 326 | move 5 from 8 to 1 327 | move 12 from 3 to 6 328 | move 7 from 6 to 4 329 | move 4 from 3 to 5 330 | move 5 from 6 to 7 331 | move 12 from 4 to 3 332 | move 6 from 1 to 4 333 | move 4 from 4 to 2 334 | move 14 from 9 to 8 335 | move 17 from 3 to 2 336 | move 5 from 4 to 9 337 | move 1 from 9 to 6 338 | move 5 from 2 to 1 339 | move 1 from 9 to 8 340 | move 5 from 1 to 6 341 | move 2 from 2 to 6 342 | move 12 from 2 to 4 343 | move 6 from 7 to 2 344 | move 3 from 7 to 6 345 | move 3 from 9 to 8 346 | move 5 from 4 to 7 347 | move 4 from 2 to 6 348 | move 3 from 6 to 8 349 | move 5 from 8 to 2 350 | move 7 from 6 to 8 351 | move 1 from 7 to 3 352 | move 6 from 4 to 3 353 | move 1 from 8 to 1 354 | move 1 from 5 to 7 355 | move 2 from 6 to 8 356 | move 13 from 8 to 2 357 | move 3 from 5 to 4 358 | move 1 from 1 to 2 359 | move 3 from 6 to 2 360 | move 1 from 1 to 4 361 | move 4 from 4 to 8 362 | move 8 from 3 to 1 363 | move 2 from 4 to 8 364 | move 15 from 2 to 4 365 | move 16 from 8 to 3 366 | move 1 from 8 to 6 367 | move 1 from 7 to 2 368 | move 8 from 1 to 2 369 | move 1 from 6 to 8 370 | move 6 from 3 to 1 371 | move 3 from 3 to 8 372 | move 6 from 3 to 1 373 | move 6 from 2 to 9 374 | move 2 from 1 to 4 375 | move 1 from 8 to 5 376 | move 8 from 2 to 9 377 | move 8 from 1 to 4 378 | move 3 from 8 to 6 379 | move 21 from 4 to 7 380 | move 1 from 9 to 7 381 | move 2 from 6 to 8 382 | move 1 from 5 to 1 383 | move 1 from 3 to 9 384 | move 8 from 9 to 4 385 | move 1 from 1 to 7 386 | move 1 from 1 to 4 387 | move 1 from 6 to 8 388 | move 1 from 9 to 3 389 | move 2 from 9 to 5 390 | move 2 from 5 to 3 391 | move 1 from 9 to 4 392 | move 3 from 8 to 2 393 | move 1 from 1 to 4 394 | move 4 from 4 to 9 395 | move 3 from 3 to 2 396 | move 5 from 9 to 1 397 | move 17 from 7 to 1 398 | move 1 from 9 to 1 399 | move 2 from 2 to 4 400 | move 1 from 4 to 2 401 | move 8 from 2 to 9 402 | move 5 from 4 to 5 403 | move 6 from 4 to 8 404 | move 20 from 1 to 6 405 | move 2 from 9 to 8 406 | move 1 from 2 to 9 407 | move 2 from 8 to 7 408 | move 8 from 7 to 8 409 | move 4 from 5 to 9 410 | move 14 from 8 to 7 411 | move 1 from 5 to 7 412 | move 7 from 9 to 1 413 | move 3 from 6 to 4 414 | move 3 from 9 to 7 415 | move 12 from 6 to 7 416 | move 22 from 7 to 9 417 | move 2 from 2 to 5 418 | move 10 from 1 to 7 419 | move 1 from 4 to 1 420 | move 2 from 6 to 1 421 | move 1 from 1 to 3 422 | move 2 from 4 to 8 423 | move 2 from 8 to 6 424 | move 1 from 3 to 8 425 | move 1 from 4 to 1 426 | move 2 from 5 to 3 427 | move 1 from 8 to 4 428 | move 2 from 3 to 7 429 | move 19 from 9 to 7 430 | move 1 from 1 to 4 431 | move 2 from 9 to 1 432 | move 2 from 1 to 6 433 | move 1 from 6 to 5 434 | move 42 from 7 to 8 435 | move 1 from 7 to 6 436 | move 2 from 4 to 8 437 | move 7 from 6 to 8 438 | move 2 from 1 to 5 439 | move 2 from 9 to 5 440 | move 14 from 8 to 3 441 | move 22 from 8 to 2 442 | move 3 from 5 to 6 443 | move 10 from 8 to 6 444 | move 5 from 8 to 9 445 | move 12 from 6 to 7 446 | move 2 from 5 to 1 447 | move 5 from 3 to 2 448 | move 7 from 3 to 5 449 | move 2 from 5 to 1 450 | move 2 from 3 to 7 451 | move 4 from 1 to 2 452 | move 1 from 5 to 7 453 | move 1 from 5 to 4 454 | move 1 from 6 to 2 455 | move 1 from 9 to 2 456 | move 9 from 7 to 3 457 | move 1 from 4 to 1 458 | move 3 from 7 to 5 459 | move 4 from 3 to 2 460 | move 5 from 2 to 3 461 | move 2 from 5 to 2 462 | move 34 from 2 to 9 463 | move 1 from 1 to 5 464 | move 15 from 9 to 3 465 | move 2 from 3 to 2 466 | move 1 from 5 to 4 467 | move 7 from 3 to 8 468 | move 3 from 9 to 2 469 | move 6 from 9 to 4 470 | move 5 from 9 to 3 471 | move 4 from 4 to 6 472 | move 1 from 6 to 8 473 | move 1 from 3 to 5 474 | move 6 from 3 to 2 475 | move 1 from 4 to 9 476 | move 2 from 4 to 2 477 | move 4 from 5 to 8 478 | move 1 from 5 to 6 479 | move 1 from 7 to 6 480 | move 1 from 9 to 6 481 | move 1 from 7 to 2 482 | move 12 from 8 to 7 483 | move 2 from 7 to 3 484 | move 4 from 6 to 9 485 | move 7 from 9 to 4 486 | move 9 from 3 to 9 487 | move 11 from 7 to 4 488 | move 3 from 9 to 6 489 | move 1 from 4 to 1 490 | move 15 from 4 to 3 491 | move 2 from 4 to 1 492 | move 3 from 1 to 4 493 | move 17 from 3 to 7 494 | move 4 from 3 to 7 495 | move 7 from 9 to 2 496 | move 3 from 4 to 1 497 | move 4 from 6 to 9 498 | move 1 from 9 to 6 499 | move 1 from 3 to 1 500 | move 5 from 7 to 9 501 | move 8 from 9 to 4 502 | move 1 from 1 to 6 503 | move 6 from 4 to 9 504 | move 4 from 2 to 3 505 | move 1 from 4 to 3 506 | move 1 from 4 to 9 507 | move 1 from 1 to 7 508 | move 1 from 7 to 9 509 | move 3 from 6 to 2 510 | move 9 from 2 to 3 511 | move 1 from 9 to 4 512 | move 1 from 1 to 5 513 | move 12 from 7 to 6 514 | move 4 from 9 to 8 515 | -------------------------------------------------------------------------------- /advent-2021/2.in: -------------------------------------------------------------------------------- 1 | forward 8 2 | forward 9 3 | forward 9 4 | down 3 5 | forward 9 6 | down 1 7 | down 7 8 | down 7 9 | down 4 10 | down 2 11 | down 6 12 | down 6 13 | down 2 14 | forward 6 15 | forward 6 16 | forward 2 17 | forward 2 18 | forward 7 19 | forward 6 20 | up 6 21 | up 8 22 | forward 5 23 | forward 4 24 | down 6 25 | forward 7 26 | down 5 27 | forward 5 28 | down 8 29 | down 8 30 | down 7 31 | forward 4 32 | down 2 33 | forward 7 34 | up 8 35 | forward 3 36 | down 2 37 | forward 1 38 | up 3 39 | forward 3 40 | up 1 41 | down 3 42 | up 7 43 | up 2 44 | down 4 45 | down 2 46 | forward 9 47 | forward 3 48 | down 8 49 | forward 5 50 | up 9 51 | up 4 52 | forward 9 53 | down 1 54 | forward 6 55 | down 3 56 | forward 8 57 | up 2 58 | forward 3 59 | up 7 60 | down 4 61 | forward 2 62 | forward 7 63 | forward 3 64 | down 1 65 | down 3 66 | up 5 67 | forward 6 68 | down 5 69 | down 4 70 | down 8 71 | down 2 72 | up 5 73 | forward 7 74 | up 8 75 | forward 2 76 | down 5 77 | forward 3 78 | up 1 79 | up 5 80 | down 8 81 | down 3 82 | forward 4 83 | forward 4 84 | forward 1 85 | up 8 86 | down 9 87 | forward 7 88 | forward 9 89 | down 5 90 | up 3 91 | down 9 92 | up 6 93 | forward 1 94 | forward 3 95 | forward 5 96 | down 5 97 | forward 6 98 | down 3 99 | down 8 100 | forward 3 101 | forward 5 102 | forward 7 103 | forward 6 104 | down 9 105 | down 5 106 | down 6 107 | down 5 108 | down 1 109 | down 8 110 | forward 3 111 | down 9 112 | down 5 113 | down 5 114 | forward 9 115 | forward 2 116 | down 7 117 | forward 9 118 | forward 9 119 | up 1 120 | forward 3 121 | up 9 122 | forward 5 123 | forward 7 124 | down 7 125 | forward 2 126 | up 8 127 | up 6 128 | down 7 129 | down 3 130 | down 5 131 | down 2 132 | forward 6 133 | forward 6 134 | up 6 135 | up 2 136 | forward 4 137 | forward 7 138 | forward 1 139 | down 4 140 | up 8 141 | down 3 142 | up 1 143 | down 2 144 | forward 4 145 | forward 7 146 | up 1 147 | down 7 148 | forward 8 149 | up 2 150 | down 8 151 | up 4 152 | up 4 153 | up 2 154 | down 8 155 | up 4 156 | down 6 157 | up 8 158 | down 5 159 | up 5 160 | down 8 161 | forward 9 162 | down 1 163 | down 5 164 | forward 3 165 | forward 3 166 | up 9 167 | down 2 168 | forward 3 169 | down 6 170 | forward 1 171 | forward 9 172 | forward 3 173 | down 8 174 | up 4 175 | down 1 176 | down 8 177 | up 1 178 | forward 2 179 | down 7 180 | up 3 181 | up 8 182 | down 2 183 | up 6 184 | forward 6 185 | down 9 186 | forward 4 187 | forward 7 188 | up 9 189 | forward 3 190 | forward 2 191 | down 8 192 | down 2 193 | down 5 194 | down 5 195 | down 1 196 | up 7 197 | down 4 198 | forward 5 199 | down 9 200 | down 5 201 | down 1 202 | down 6 203 | forward 9 204 | down 6 205 | forward 3 206 | down 3 207 | up 6 208 | forward 2 209 | forward 6 210 | down 2 211 | down 9 212 | down 6 213 | down 1 214 | down 7 215 | down 6 216 | down 6 217 | up 1 218 | forward 8 219 | down 9 220 | down 6 221 | down 8 222 | down 8 223 | down 6 224 | down 3 225 | forward 9 226 | forward 6 227 | down 9 228 | forward 5 229 | down 6 230 | down 6 231 | down 9 232 | down 7 233 | down 3 234 | forward 1 235 | up 9 236 | forward 9 237 | down 7 238 | forward 4 239 | down 1 240 | forward 9 241 | up 9 242 | down 7 243 | forward 5 244 | down 3 245 | up 7 246 | forward 9 247 | forward 6 248 | forward 3 249 | forward 8 250 | down 4 251 | down 1 252 | down 7 253 | down 7 254 | up 4 255 | down 9 256 | forward 6 257 | forward 7 258 | down 8 259 | forward 2 260 | forward 2 261 | forward 9 262 | forward 6 263 | forward 9 264 | up 6 265 | up 8 266 | forward 2 267 | up 3 268 | forward 9 269 | forward 1 270 | down 4 271 | forward 8 272 | down 4 273 | forward 5 274 | forward 7 275 | up 2 276 | forward 5 277 | down 4 278 | forward 3 279 | down 5 280 | forward 9 281 | up 3 282 | forward 8 283 | down 7 284 | down 7 285 | down 9 286 | forward 2 287 | down 1 288 | down 6 289 | up 8 290 | down 2 291 | down 1 292 | up 3 293 | down 3 294 | forward 2 295 | forward 6 296 | up 6 297 | down 3 298 | up 9 299 | up 3 300 | down 8 301 | up 6 302 | down 2 303 | forward 4 304 | up 1 305 | down 5 306 | down 4 307 | up 9 308 | up 7 309 | forward 7 310 | down 9 311 | forward 9 312 | forward 5 313 | forward 3 314 | down 4 315 | up 6 316 | up 7 317 | down 7 318 | down 6 319 | up 9 320 | up 4 321 | down 7 322 | forward 7 323 | forward 8 324 | down 9 325 | forward 5 326 | forward 4 327 | down 5 328 | forward 8 329 | forward 5 330 | up 3 331 | down 9 332 | forward 1 333 | forward 2 334 | up 3 335 | down 2 336 | down 1 337 | forward 5 338 | forward 5 339 | forward 6 340 | up 2 341 | forward 3 342 | down 7 343 | down 6 344 | up 3 345 | down 4 346 | down 4 347 | forward 5 348 | down 3 349 | up 6 350 | forward 1 351 | up 8 352 | forward 7 353 | forward 1 354 | forward 9 355 | down 2 356 | up 8 357 | up 1 358 | up 4 359 | forward 9 360 | forward 3 361 | forward 5 362 | down 1 363 | up 9 364 | down 1 365 | forward 3 366 | down 6 367 | down 8 368 | up 4 369 | forward 6 370 | up 7 371 | down 8 372 | forward 9 373 | up 2 374 | down 7 375 | down 1 376 | forward 9 377 | up 7 378 | forward 3 379 | forward 9 380 | forward 1 381 | forward 1 382 | down 9 383 | forward 1 384 | up 4 385 | down 5 386 | forward 4 387 | down 1 388 | forward 4 389 | forward 9 390 | up 4 391 | down 3 392 | down 6 393 | up 2 394 | down 6 395 | down 5 396 | forward 5 397 | up 1 398 | up 9 399 | forward 8 400 | up 3 401 | down 1 402 | forward 3 403 | forward 7 404 | up 6 405 | up 3 406 | down 6 407 | forward 7 408 | up 6 409 | down 7 410 | forward 8 411 | up 4 412 | down 8 413 | up 9 414 | up 3 415 | down 3 416 | forward 8 417 | down 4 418 | down 9 419 | forward 2 420 | down 7 421 | up 1 422 | forward 9 423 | forward 5 424 | up 8 425 | forward 9 426 | forward 4 427 | forward 9 428 | forward 7 429 | down 4 430 | up 4 431 | down 7 432 | down 4 433 | down 4 434 | down 1 435 | forward 5 436 | forward 4 437 | down 1 438 | down 4 439 | down 8 440 | down 3 441 | forward 7 442 | forward 4 443 | down 1 444 | down 9 445 | up 3 446 | forward 2 447 | down 8 448 | down 9 449 | down 2 450 | down 5 451 | up 9 452 | down 9 453 | up 9 454 | forward 5 455 | forward 8 456 | forward 9 457 | down 5 458 | forward 6 459 | down 8 460 | down 9 461 | forward 8 462 | up 5 463 | up 9 464 | up 7 465 | up 8 466 | forward 9 467 | forward 1 468 | up 6 469 | down 8 470 | down 8 471 | forward 1 472 | up 1 473 | forward 8 474 | forward 6 475 | down 4 476 | forward 1 477 | down 7 478 | forward 8 479 | forward 3 480 | up 3 481 | down 4 482 | down 2 483 | forward 2 484 | forward 3 485 | up 4 486 | down 3 487 | forward 2 488 | down 8 489 | forward 7 490 | up 3 491 | down 2 492 | forward 2 493 | down 5 494 | up 6 495 | up 6 496 | forward 4 497 | up 4 498 | down 8 499 | forward 8 500 | down 9 501 | down 9 502 | down 6 503 | down 2 504 | forward 2 505 | up 6 506 | up 5 507 | forward 3 508 | forward 3 509 | up 9 510 | down 3 511 | forward 8 512 | down 5 513 | forward 5 514 | forward 7 515 | down 3 516 | down 4 517 | down 1 518 | down 8 519 | down 1 520 | down 1 521 | forward 9 522 | forward 3 523 | down 8 524 | down 6 525 | up 9 526 | forward 1 527 | forward 5 528 | up 9 529 | up 8 530 | forward 2 531 | up 8 532 | down 9 533 | up 2 534 | forward 5 535 | forward 1 536 | forward 8 537 | down 3 538 | forward 4 539 | down 5 540 | up 6 541 | forward 8 542 | forward 9 543 | forward 3 544 | down 1 545 | down 3 546 | down 3 547 | up 4 548 | forward 9 549 | down 3 550 | down 6 551 | forward 3 552 | forward 2 553 | down 6 554 | down 8 555 | forward 6 556 | up 8 557 | up 3 558 | up 4 559 | forward 2 560 | forward 4 561 | forward 4 562 | forward 7 563 | down 6 564 | up 8 565 | down 3 566 | forward 8 567 | forward 4 568 | down 7 569 | down 5 570 | forward 6 571 | forward 4 572 | forward 6 573 | down 3 574 | forward 3 575 | down 1 576 | down 7 577 | forward 3 578 | forward 2 579 | forward 7 580 | down 5 581 | up 4 582 | down 6 583 | down 9 584 | forward 3 585 | forward 5 586 | forward 3 587 | down 1 588 | forward 2 589 | up 5 590 | up 6 591 | forward 2 592 | down 4 593 | forward 3 594 | down 4 595 | down 1 596 | forward 8 597 | up 2 598 | down 3 599 | down 6 600 | up 5 601 | forward 3 602 | forward 6 603 | down 3 604 | forward 1 605 | down 7 606 | forward 2 607 | forward 1 608 | forward 6 609 | forward 5 610 | forward 3 611 | down 4 612 | down 8 613 | forward 1 614 | up 2 615 | up 8 616 | down 4 617 | forward 9 618 | up 6 619 | forward 5 620 | forward 7 621 | down 5 622 | forward 5 623 | down 1 624 | forward 4 625 | forward 5 626 | up 2 627 | forward 5 628 | up 8 629 | up 1 630 | forward 2 631 | down 4 632 | down 6 633 | forward 4 634 | down 2 635 | down 3 636 | forward 2 637 | up 3 638 | up 4 639 | forward 2 640 | down 6 641 | forward 1 642 | forward 4 643 | down 6 644 | forward 7 645 | up 2 646 | forward 7 647 | forward 6 648 | up 2 649 | forward 8 650 | forward 4 651 | forward 9 652 | down 1 653 | down 8 654 | forward 3 655 | forward 2 656 | down 8 657 | up 1 658 | forward 4 659 | down 8 660 | forward 2 661 | forward 8 662 | up 2 663 | down 1 664 | forward 4 665 | forward 2 666 | up 4 667 | up 2 668 | down 3 669 | up 8 670 | forward 3 671 | up 8 672 | forward 9 673 | up 1 674 | up 5 675 | down 5 676 | down 6 677 | forward 1 678 | up 5 679 | up 8 680 | forward 7 681 | down 5 682 | up 4 683 | forward 2 684 | up 4 685 | up 4 686 | down 2 687 | forward 6 688 | forward 2 689 | down 7 690 | down 5 691 | forward 1 692 | down 2 693 | down 5 694 | down 7 695 | up 8 696 | down 8 697 | up 5 698 | down 1 699 | forward 5 700 | down 2 701 | forward 5 702 | down 1 703 | up 7 704 | up 2 705 | forward 2 706 | forward 3 707 | forward 6 708 | forward 3 709 | down 8 710 | up 8 711 | forward 8 712 | forward 1 713 | forward 7 714 | up 2 715 | forward 9 716 | down 1 717 | forward 5 718 | up 9 719 | forward 3 720 | forward 7 721 | forward 8 722 | up 1 723 | down 3 724 | forward 5 725 | down 2 726 | forward 6 727 | forward 3 728 | down 9 729 | up 5 730 | forward 2 731 | down 4 732 | up 1 733 | forward 4 734 | up 4 735 | down 8 736 | down 8 737 | forward 3 738 | forward 8 739 | down 7 740 | up 3 741 | forward 1 742 | up 3 743 | forward 9 744 | forward 7 745 | forward 1 746 | down 6 747 | forward 3 748 | down 1 749 | down 8 750 | forward 5 751 | forward 3 752 | up 6 753 | forward 5 754 | forward 4 755 | forward 3 756 | forward 9 757 | forward 8 758 | down 6 759 | down 2 760 | forward 7 761 | forward 6 762 | up 6 763 | down 6 764 | down 4 765 | down 3 766 | forward 8 767 | down 9 768 | up 5 769 | forward 3 770 | forward 2 771 | down 5 772 | up 4 773 | down 6 774 | down 3 775 | forward 9 776 | down 2 777 | forward 9 778 | forward 8 779 | up 1 780 | down 2 781 | forward 7 782 | up 5 783 | up 6 784 | down 8 785 | up 9 786 | up 8 787 | forward 1 788 | forward 5 789 | down 9 790 | forward 8 791 | down 8 792 | up 1 793 | down 7 794 | forward 7 795 | up 3 796 | down 3 797 | down 1 798 | forward 2 799 | down 3 800 | forward 9 801 | forward 2 802 | down 8 803 | down 2 804 | forward 5 805 | down 9 806 | down 1 807 | down 5 808 | down 6 809 | up 4 810 | up 3 811 | down 1 812 | up 7 813 | forward 6 814 | down 3 815 | down 6 816 | up 5 817 | forward 8 818 | up 8 819 | down 1 820 | down 2 821 | up 8 822 | down 7 823 | forward 7 824 | forward 4 825 | down 8 826 | down 3 827 | forward 3 828 | down 4 829 | forward 3 830 | down 6 831 | forward 4 832 | forward 7 833 | forward 9 834 | up 7 835 | forward 1 836 | down 7 837 | down 8 838 | down 8 839 | up 6 840 | down 3 841 | forward 5 842 | forward 5 843 | forward 9 844 | forward 4 845 | down 4 846 | down 8 847 | down 7 848 | down 1 849 | forward 2 850 | forward 4 851 | down 3 852 | down 6 853 | down 7 854 | forward 5 855 | down 8 856 | down 1 857 | forward 4 858 | forward 3 859 | forward 1 860 | down 6 861 | down 7 862 | down 1 863 | forward 6 864 | down 4 865 | up 2 866 | forward 4 867 | down 2 868 | up 5 869 | down 2 870 | down 6 871 | up 7 872 | forward 4 873 | forward 7 874 | forward 9 875 | up 5 876 | down 9 877 | up 5 878 | forward 6 879 | down 2 880 | up 8 881 | up 9 882 | up 9 883 | forward 5 884 | down 2 885 | forward 2 886 | down 7 887 | forward 5 888 | forward 9 889 | up 8 890 | down 8 891 | forward 1 892 | down 2 893 | up 3 894 | forward 3 895 | down 5 896 | forward 4 897 | down 3 898 | forward 4 899 | forward 9 900 | forward 3 901 | down 5 902 | forward 4 903 | down 2 904 | forward 5 905 | forward 8 906 | up 6 907 | up 2 908 | down 3 909 | forward 6 910 | down 5 911 | down 4 912 | down 4 913 | down 4 914 | up 2 915 | up 2 916 | forward 6 917 | forward 2 918 | forward 9 919 | down 2 920 | down 9 921 | down 8 922 | forward 2 923 | down 3 924 | up 3 925 | forward 5 926 | down 4 927 | up 3 928 | forward 3 929 | down 1 930 | forward 7 931 | forward 5 932 | forward 6 933 | down 8 934 | down 5 935 | down 5 936 | down 9 937 | up 2 938 | forward 3 939 | down 4 940 | down 9 941 | forward 3 942 | forward 9 943 | forward 2 944 | forward 4 945 | up 6 946 | down 6 947 | up 9 948 | forward 8 949 | down 7 950 | forward 1 951 | forward 4 952 | up 1 953 | up 2 954 | down 9 955 | forward 6 956 | down 6 957 | down 1 958 | down 4 959 | down 7 960 | down 6 961 | forward 5 962 | up 1 963 | up 7 964 | down 2 965 | down 8 966 | down 2 967 | down 7 968 | down 3 969 | up 9 970 | down 7 971 | down 5 972 | down 6 973 | forward 9 974 | up 3 975 | forward 2 976 | down 8 977 | forward 4 978 | down 6 979 | forward 3 980 | up 3 981 | down 5 982 | up 4 983 | forward 6 984 | forward 7 985 | forward 9 986 | down 3 987 | forward 7 988 | forward 3 989 | down 4 990 | up 4 991 | down 8 992 | forward 6 993 | forward 7 994 | forward 9 995 | forward 4 996 | down 3 997 | up 5 998 | down 7 999 | down 7 1000 | forward 9 1001 | --------------------------------------------------------------------------------