From a2353956d83d42a8c88ec5ad84c92409e3c56e06 Mon Sep 17 00:00:00 2001 From: Samuel Enocsson Date: Thu, 11 Dec 2025 08:47:55 +0100 Subject: [PATCH] Add initial input data for Day 11 of 2025 challenge --- 2025/day10.py | 202 +++++++++++++++ 2025/day11.py | 63 +++++ 2025/inputs/day10.txt | 168 +++++++++++++ 2025/inputs/day11.txt | 574 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 1007 insertions(+) create mode 100644 2025/day10.py create mode 100644 2025/day11.py create mode 100644 2025/inputs/day10.txt create mode 100644 2025/inputs/day11.txt diff --git a/2025/day10.py b/2025/day10.py new file mode 100644 index 0000000..b8dbbf0 --- /dev/null +++ b/2025/day10.py @@ -0,0 +1,202 @@ +"""Day 10: Advent of Code 2025.""" + +import time +import re +from aoc import read_lines +from itertools import combinations, product +from scipy.optimize import milp, LinearConstraint, Bounds +import numpy as np + + +def parse_targets(s: str) -> list[int]: + """Parse {28,20,8,20} -> [28, 20, 8, 20] (target values per position).""" + match = re.search(r'\{([^}]+)\}', s) + if not match: + return [] + return [int(x) for x in match.group(1).split(',')] + + +def parse_total(s: str) -> int: + """Parse [.##.] -> 0b0110 (binary representation).""" + match = re.search(r'\[([.#]+)\]', s) + if not match: + return 0 + pattern = match.group(1) + return int(pattern.replace('.', '0').replace('#', '1'), 2) + + +def parse_groups_as_positions(s: str) -> list[list[int]]: + """Parse (3) (1,3) (2) -> [[3], [1,3], [2], ...]. + + Returns list of groups, where each group is a list of positions it affects. + """ + groups = re.findall(r'\(([^)]+)\)', s) + result = [] + for group in groups: + positions = [int(x) for x in group.split(',')] + result.append(positions) + return result + + +def build_matrix(groups: list[list[int]], width: int) -> list[list[int]]: + """Build matrix where matrix[pos][group] = 1 if group affects position pos. + + Rows = positions (0 to width-1) + Columns = groups + """ + matrix = [] + for pos in range(width): + row = [] + for group in groups: + row.append(1 if pos in group else 0) + matrix.append(row) + return matrix + + +def solve_system(matrix: list[list[int]], targets: list[int]) -> int | None: + """Solve the system and find minimum sum of k values. + + Uses Mixed Integer Linear Programming: + - Minimize: sum of all k values + - Subject to: matrix @ k = targets, k >= 0, k are integers + + Returns minimum sum of k values, or None if no solution. + """ + if not matrix or not matrix[0]: + return None + + num_groups = len(matrix[0]) + + # Convert to numpy arrays + A_eq = np.array(matrix, dtype=float) + b_eq = np.array(targets, dtype=float) + + # Objective: minimize sum of k (coefficients all 1) + c = np.ones(num_groups) + + # Bounds: k >= 0 (upper bound = max target value is safe) + max_val = max(targets) + 1 + bounds = Bounds(lb=np.zeros(num_groups), ub=np.full(num_groups, max_val)) + + # Equality constraints: A @ k = b + constraints = LinearConstraint(A_eq, b_eq, b_eq) + + # All variables must be integers + integrality = np.ones(num_groups) # 1 = integer + + # Solve + result = milp(c, constraints=constraints, bounds=bounds, integrality=integrality) + + if not result.success: + return None + + return int(round(result.fun)) + + +def parse_groups(s: str, width: int) -> list[list[int]]: + """Parse (3) (1,3) (2) -> [[bitmask, inverse], ...]. + + (1,3) with width 4 -> positions 1 and 3 from left -> 0101 (decimal 5) + Then also the inverse -> 1010 (decimal 10) + """ + groups = re.findall(r'\(([^)]+)\)', s) + result = [] + mask_all = (1 << width) - 1 # All bits set for inverse calculation + + for group in groups: + nums = [int(x) for x in group.split(',')] + # Combine all positions into one bitmask (from left, so invert position) + bitmask = 0 + for n in nums: + # Position n from left = bit (width - 1 - n) from right + bitmask |= (1 << (width - 1 - n)) + # Duplicate the bitmask (using same value twice XORs to 0) + result.append([bitmask, bitmask]) + + return result + + +def parse_line(line: str) -> tuple[int, list[list[int]]]: + """Parse full line, return (total_bitmask, groups).""" + # Get width from the [...] pattern + match = re.search(r'\[([.#]+)\]', line) + width = len(match.group(1)) if match else 0 + + total = parse_total(line) + groups = parse_groups(line, width) + return total, groups + + +def combine_bitmasks(*bitmasks: int) -> int: + """Combine bitmasks with XOR.""" + result = 0 + for b in bitmasks: + result ^= b + return result + +def find_min_index_sum(total: int, groups: list[list[int]]) -> int: + """Find minimum index sum for combos that XOR to total. + + Tries subsets of groups starting from smallest (r=1, r=2, ...). + Within each r, minimum possible sum is r (all index 0 -> r * 1). + If we find a match with sum S, we can skip any r where r > S. + """ + n = len(groups) + # Max possible sum: n groups * 2 (max index 1 -> +2 each) + best = n * 2 + 1 + + for r in range(1, n + 1): + # Minimum possible sum for r groups is r (all index 0 = 1 each) + if r >= best: + break + + for group_indices in combinations(range(n), r): + selected_groups = [groups[i] for i in group_indices] + + # Try all index combinations within selected groups + for indices in product(*[range(len(g)) for g in selected_groups]): + index_sum = sum(idx + 1 for idx in indices) + + # Skip if can't beat best + if index_sum >= best: + continue + + bitmasks = [selected_groups[i][idx] for i, idx in enumerate(indices)] + if combine_bitmasks(*bitmasks) == total: + best = index_sum + + return best + + +def part1(data): + result = 0 + for line in data: + total, groups = parse_line(line) + result += find_min_index_sum(total, groups) + return result + +def part2(data): + """Solve part 2.""" + result = 0 + for line in data: + groups = parse_groups_as_positions(line) + targets = parse_targets(line) + width = len(targets) + matrix = build_matrix(groups, width) + result += solve_system(matrix, targets) + return result + + +if __name__ == "__main__": + DAY = 10 # <- ändra till rätt dag + data = read_lines(DAY) + + t0 = time.perf_counter() + p1 = part1(data) + t1 = time.perf_counter() + print(f"Part 1: {p1} ({(t1-t0)*1000:.2f} ms)") + + t0 = time.perf_counter() + p2 = part2(data) + t1 = time.perf_counter() + print(f"Part 2: {p2} ({(t1-t0)*1000:.2f} ms)") diff --git a/2025/day11.py b/2025/day11.py new file mode 100644 index 0000000..39dd738 --- /dev/null +++ b/2025/day11.py @@ -0,0 +1,63 @@ +"""Day 11: Advent of Code 2025.""" + +import time +from collections import defaultdict +from aoc import read_lines + + +def build_graph(data: list[str]) -> dict[str, set[str]]: + """Build graph from input: 'fxp: udl vii hgb qmy' -> adjacency dict.""" + graph = defaultdict(set) + for line in data: + node, neighbors = line.split(': ') + for neighbor in neighbors.split(): + graph[node].add(neighbor) + + return graph + +def count_paths(node, target, graph, memo={}): + if node == target: + return 1 + if node in memo: + return memo[node] + + total = 0 + for neighbor in graph[node]: + total += count_paths(neighbor, target, graph, memo) + + memo[node] = total + return total + +def part1(data): + """Solve part 1.""" + graph = build_graph(data) + count = count_paths("you", "out", graph) + return count + + +def part2(data): + """Solve part 2.""" + graph = build_graph(data) + c1 = count_paths("svr", "dac", graph, {}) + c2 = count_paths("dac", "fft", graph, {}) + c3 = count_paths("fft", "out", graph, {}) + c4 = count_paths("svr", "fft", graph, {}) + c5 = count_paths("fft", "dac", graph, {}) + c6 = count_paths("dac", "out", graph, {}) + + return (c1 * c2* c3) + (c4*c5*c6) + + +if __name__ == "__main__": + DAY = 11 + data = read_lines(DAY) + + t0 = time.perf_counter() + p1 = part1(data) + t1 = time.perf_counter() + print(f"Part 1: {p1} ({(t1-t0)*1000:.2f} ms)") + + t0 = time.perf_counter() + p2 = part2(data) + t1 = time.perf_counter() + print(f"Part 2: {p2} ({(t1-t0)*1000:.2f} ms)") diff --git a/2025/inputs/day10.txt b/2025/inputs/day10.txt new file mode 100644 index 0000000..9119e08 --- /dev/null +++ b/2025/inputs/day10.txt @@ -0,0 +1,168 @@ +[#.#.] (0,2) (0,1,3) {28,20,8,20} +[#.####.##.] (2,9) (0,1,3,4,5,6,8,9) (7,9) (0,4,9) (4,5,6) (1,2,4,7,8,9) (2,7,9) (1,2,3,4,5) (0,1,3,4,5,7,9) (0,7) (1,3,4,5,7) (1,3) {27,64,209,46,62,34,10,220,27,233} +[..#...#.] (0,1,4,5,6,7) (0,2,3) (0,1,2,3,5,6,7) (0,1,2,3,6) (1,4) (0,1,2,5,6,7) {215,215,28,19,198,204,204,204} +[......#.] (0,3) (0,1,2,4,5,6) (0,3,4,6) (1,2,4) (0,1,3,4,6) (0,1,2) (1,2,3,5) (2,5,7) (0,2) (0,1,5) {100,82,74,65,58,68,52,13} +[#.##...] (3,6) (2,4,5) (3) (1,2,3) (0,1,2,3) (1,4,5) (0,2,6) {20,30,39,30,20,20,16} +[#....] (0,2,3) (1) (0,4) (2,3,4) (3) (2,4) (0,1,3) {174,168,26,196,33} +[.###] (1,2,3) (0,2) {9,16,25,16} +[.#..#.] (0,2,3) (1,2,4,5) (1) (0,1,2) (1,4) (3,5) (0,3,5) {28,51,40,36,30,44} +[#...#] (0,2,4) (2) (1,2) (1,2,3) (0,2,3,4) (0,2) (2,3) {203,15,240,25,10} +[#...] (0,2,3) (1,3) (2,3) {18,11,33,44} +[.#....####] (0,1,3,4,6,7,8,9) (0,1,2,6,7,8) (0,2,3,5,6,8,9) (4,9) (0,2,3,4,5,9) (1,2,3,4,5,6,7,9) (1,2,3,4,5,7,8,9) (0,1,3,5,6,8,9) (5,6) {46,36,47,60,55,55,50,33,33,68} +[..##] (1,2) (1,3) (0,2) (0,3) {14,17,27,4} +[.###..] (4) (0,1,2,5) (0,1,3) (1,4,5) (0,2) (3,4) {41,34,32,23,45,25} +[#..####] (0,1,3,4,5,6) (4,5) (0,1,2,4,5) (2,5) (2,4) (0,3,6) {25,14,26,13,21,27,13} +[.######] (1,2,3) (2,5) (0,3) (0,2,3,4) (1,2,4,6) (0,1,3,5,6) (1,2,3,4) (1,5) {18,39,38,28,16,42,9} +[...#####.] (2,4,8) (0,1,2,3,4,5,8) (0,1,2,3,5,7) (0,8) (0,4) (0,3,4,5,6,7,8) (1,3,4,7,8) (0,4,5,6,7,8) (2) (1,3,4,6,7) (2,3) {35,39,43,45,27,29,8,44,30} +[..##.#.##.] (1,3,6,8) (6,8) (0,2,3,4,5,8,9) (0,1,4,5,8,9) (4,6,8) (0,2,3,5,6) (0,1,2,4,5,7,8,9) (3,4,5,6) (0,1,2,4,6,7,8,9) (0,1,2,3,4,5,7) {54,39,35,35,79,69,49,19,72,46} +[##.#....#] (1,5) (3,5,6,7,8) (1,2,3,5,6,7,8) (1,7,8) (0,1,3,6,8) (6) (0,2,5,7,8) (0,1,2,3,4,6,7) (0,4,5) (0,1,2,3,6,8) {44,65,26,46,27,74,54,60,64} +[.#.##.##.#] (1,4,6,7) (0,1,3,5,7,9) (3,9) (0,1,2,3,5,8) (2,3,4,6,8,9) (1,3,4,5,6,7,9) (0,1,2,5,6,7) (1,7) (2,3,4,9) (0) (1,2,4,7) (0,2,4,6,7,8) (1,2,3,5,8) {159,212,79,188,77,173,55,192,53,157} +[#.##..] (3,4) (0,2,3) (0,3,5) (2,3,4) (2,5) (0,1) {10,0,37,39,29,10} +[.#..#.] (1,2,3,4) (2,3,5) (0,3,4,5) (0,1,3,5) {26,22,11,37,26,26} +[#####.###.] (4,7,8) (0,1,2,3,5,6,8,9) (0,4,5,7,8,9) (2,3,5) (0,2,3,4,5,6,7,8) (5,6) (0,1,2,3,4,5,9) (0,1,2,5,6,9) (0,3,4,5,6,7,8,9) (3,4,5,6,8) (0,1,2,3,4,5,6,7,9) (0,8) (3,4,8,9) {261,225,243,252,56,278,262,29,257,242} +[..#.] (0,1,3) (2) (1) {5,13,18,5} +[#.##..] (1,4) (2,4) (0,5) (2,3) (2,3,5) {0,120,27,7,140,5} +[.##.#.] (1,2) (0,1,3,5) (0,1,3) (0,1,2) (4,5) {13,13,5,8,11,11} +[#.######] (0,1,2,3,4) (0,4,6,7) (2,4,5) (0,5,7) (0,1,3,4,7) (0,1,3,4,5,6) (1,5) (1,6,7) (3,6) {53,42,19,33,52,45,37,24} +[..#.#.#] (0,1,5) (2,4) (1,2,3,5) (0,1,2,4,5,6) (3,4) (0,2,3,4,5,6) {31,38,35,14,32,39,16} +[######.#.#] (1,5,7,8,9) (0,1,2,3,5,7,8,9) (2) (2,4,5) (0,1,2,3,4,5,7,9) (2,6) (1,6,8) (0,8) (0,3,5,6,7) (3,5,6) (1,2,4,5,7) (0,1,5,7) {63,48,83,48,45,90,31,65,41,35} +[##..#...] (0,5,6,7) (0,3,4) (1,4,7) (0,4,5,6) (2,4,6) (0,2,3,5,7) (0,2,3,4,5,7) {64,0,20,35,49,44,34,30} +[..#..#.#] (3,4,6) (0,3,5,7) (1,2) (0,3,4,7) (1,3,4) (4,6) (2,5,7) (0,1,2,7) (2,4,6) (1,2,3,4,6,7) {27,38,48,50,49,18,25,49} +[.#.#] (1) (0,1,3) (1,3) (0,3) (0,1,2) {8,198,8,8} +[.#..#.] (3,4,5) (0,2,4) (3,5) (1,3,4,5) (1,2,3,5) (0,5) {19,22,24,60,47,64} +[..##.#..##] (2,4,5,8) (0,3,4,5,6,9) (1,4,5,6,7,8,9) (5,9) (3,4,5,7) (1,2,3,4,5,6,7,9) (0,1,2,3,6,8,9) (1,2,3,6,7,8,9) (0,1,2,7,8,9) {19,50,40,52,45,48,50,50,41,55} +[..#######.] (1,2,3,6,7) (0,3,4,6,8) (0,1,2,5,7,9) (0,1,2,4,5,8) (0,1,3,4,5,6,7) (6,7) (0,1,3,4,5,7,8,9) (1,4,6) (2,5,6,8) (0,3,5,7,8) (1,2,5,6,8,9) (1,7,8,9) (0,3,4,5,6,7,8) {73,72,42,73,75,74,100,76,75,20} +[####....] (0,1,3,5,6,7) (0,1,2,3) (2,3,5) (0,4,7) (4,7) (0,1,3,4,6) (3,4,5) {34,24,15,39,35,15,13,11} +[#.##.#.] (1,5) (1,3) (0,3,4,6) (0,4,5) (4,5,6) (1) (2,3,5) (0,1,2,3,4) {34,31,20,36,51,30,25} +[#...##..#.] (0,2,4,6,7) (0,4,5,8,9) (4,5,9) (0,1,3,5,7,8,9) (0,2,3,5,6,9) (1,2,3,4,5,8,9) (2,4,5,7,8) (0,1,2,3,5,8) (0,2,4,5,6,8,9) (0,1,3,5,7,8) (0,2,3,9) (1) (0,1,2,4,5,6,8,9) {96,49,105,64,81,99,52,38,79,92} +[..#..###.] (0,2,3,4,6) (0,2,8) (0,1,2,5,6,7) (0,2,5,6,8) (0,1,2,5,7) (0,2,5) (0,5,7,8) (5,8) (0,2,3,4,5,6,8) {51,15,47,13,13,51,25,19,29} +[##.#] (0,3) (1,3) (2,3) (3) {2,108,16,133} +[#..#] (1,2) (3) (2,3) (0,3) (2) (1,2,3) {13,10,44,38} +[#....] (2,4) (0,2,3,4) (3) (0,1,4) {20,6,24,15,30} +[...##...] (0,2,5,6,7) (1,6,7) (0,1,3,6,7) (2,4,5,6,7) (0,1,2,5,7) (4) (0,2,5,6) {186,168,54,152,31,54,210,201} +[###.####.] (4,5,6) (2,3,5) (3) (2,3,4) (1,2,5) (0,2,4,5,8) (1,3,4,6,7,8) (0,3,4,6,7) (0,1,2,5,6,7) {27,26,33,34,43,32,32,29,30} +[####...#.] (0,1,2,3,4,6,7) (0,1,3,5,7,8) (0,1,8) (0,1,2,3,5,7,8) (0,1,2,3,7) (3,4,5,7,8) (0,1,2,3,6,7,8) (1,2,4,5,6,7,8) {61,72,46,55,36,46,31,66,75} +[.##.#..] (0,1) (0,3,4,6) (0,1,3,4,5) (0,1,2,3,4) (0,2,4,5) (4) (0,3,4,5) (1,3,4,5,6) (0,1,2,4,5) {91,51,51,54,92,59,23} +[#..#.##.#] (2,3,5,8) (0,1,2,5,6,7) (0,2) (1,2,4,5,6,7,8) (3,5,7) (0,7,8) (0,2,3,4,6,7) (0,1,3,6) (1,4,8) (0,3,4,8) (0,1,3,4,6,8) {69,48,39,66,47,35,56,50,62} +[.#.#.....#] (0,2,3,5,6,8,9) (0,1,2,7,8) (0,2,3,5,6,7,8,9) (4,6,7) (1,2,4,5,6,7,8,9) (1,3,9) (0,1,3,4,7) (4,9) {38,45,36,41,50,32,43,64,36,44} +[.###.#...] (0,2,3,4,5,6) (0,6,8) (4,8) (1,2,3,4,6,7,8) (0,5) (0,1,2,3,4,5,6) (1,3,4,7) (0,1,2,3,4,5,6,8) (0,1,2,3) {49,48,56,65,64,34,47,27,35} +[#...#] (0,1,4) (1,2,3) (0,1,2,3) (1,3,4) (1,2,4) {26,57,17,37,40} +[#.#.##] (1,3,5) (1,2,3,4) (0,2,4) (0,2,4,5) {153,9,155,9,155,159} +[#.##.#] (0,2,3,4) (0,2,4) (1,3) (4,5) (0,1,2,5) (0,2,3,5) {143,13,143,123,137,40} +[.##.#..#] (0,2,3,7) (1,2,4,5) (0,3,4) (5,7) (1,2,4,6,7) (4,6,7) (2,4,6) (0,1,2,3,4,6,7) (1,2,3,4,7) {28,52,62,46,72,24,34,70} +[...#..##.] (3,6) (0,8) (0,1,2,3) (5,6,7) (0,3,5,6,7) (0,1,2,3,5,6,7) (3,4,5,6) (0,1,2,3,7,8) (0,1,2,3,4,5,6) {69,48,48,75,4,34,54,43,31} +[.##.#.#..#] (3,5,7) (0,2,3) (2,8) (1,2,3,4,5,6,8,9) (0,2,3,4,5,6,8,9) (0,1,3,4,6,9) (1,3) (2,3,5,6,8,9) (0,1,5,6,8) (0,1,2,3,5,6,7,8,9) (4,8) {37,54,57,84,54,40,56,7,68,56} +[..#...#.#.] (0,2,3,4,5,6,7,8) (0,1,2,4,5) (0,1,2,3,6,7,8) (6,7,8,9) (0,2,3,6,9) (0,1,2,3,4,6,7,8,9) (0,1,4,9) (7) (0,1,2,3,5,6,7,8) (2,4,7) (0,1,2,3,4,5,6,7,9) (0,3,4,6,7,9) {56,34,70,42,60,46,59,79,31,45} +[.#.#] (1,3) (1,2) (0,1,3) {8,35,10,25} +[#.#...] (0,1,2,3) (0,2,4,5) (1,3) (1,2,3,4,5) (0,1,2,4,5) {42,45,52,38,37,37} +[...##..] (0,1,4,6) (0,1,2,3) (0,1,3,4,5,6) (2,3) (3,4) (2,3,5) (0,3,5,6) {33,24,13,51,37,32,33} +[...###.##.] (3,6,9) (0,6,7,9) (0,4,5,6,7,9) (0,1,2,3,4,7,9) (1,5,8) (3,7) (1,2,3,5,7,8) (1,2,4,5,6,7,8,9) (1,4) (0,1,2,3,4,5,7,9) (0,2,4,5,7,8) {25,52,36,158,34,55,139,45,40,150} +[.....#.] (0,3,4) (5) (1,3) (0,2,3,4,5,6) (0,1,2,4,5,6) (0,1,2,4,6) {45,43,36,36,45,30,36} +[...#.#..#] (0,1,2,4,5) (0,1,2,4,5,6,7,8) (0,6) (0,1,2,3,5) (0,1,2,5,6,7,8) (0,1,2,3,4,6,7) (0,2,3,5,6,7,8) (4,6,8) (4,5,6,7,8) (2,3,5) (1,5,7) {73,70,87,62,52,107,73,72,57} +[#####.] (2,3,5) (0,5) (1,5) (0,4) (0,1,2,3,4) {41,29,29,29,24,49} +[###.###.##] (0,1,2,3,4,5,8,9) (0,2,3,5,6,7) (0,2,4,5,6,7,9) (0,3,5,6,9) (0,1,2,3,4,6,7) (1,5,7,8,9) (0,1,2,3,5,6,7,8) (0,1,4,9) {205,58,182,182,45,195,181,191,30,58} +[.#.#] (2,3) (1) (0) (0,2) (0,1,3) {20,18,13,19} +[###.##....] (0,1,2,4,5,6,7,9) (7) (4,6,8,9) (0,1,2,3,4,6,9) (1,3,4,5,6,7,8,9) (0,1,2,5,6,8,9) (0,2,3,6,7,8) (3,4,5,6,7,8) (0,1,2,3,8,9) (0,5,6,9) (1,2,3,4,6,9) (1,3) (1,4,9) {66,70,76,58,54,33,86,32,57,86} +[.####.#.] (3,5) (2,4) (1,2,7) (0,1,2,4,5,6) (0,1,2,3,5,7) (0,1,2,3,5,6) {47,66,86,39,39,58,32,34} +[...#] (0,2) (2) (0,3) (0,1) (3) (1,2) {24,27,21,22} +[####.] (0,3,4) (1,2,4) (1,2,3,4) {12,20,20,17,32} +[##.#.] (1) (1,2,3,4) (1,4) (3,4) (0,3,4) (0,4) (0,1,2,3) {17,28,9,26,48} +[.##..] (0,4) (3,4) (0,1,2,4) (0,2) (1) (0,3,4) {34,3,11,29,41} +[.#.#.#] (3,4) (0,4,5) (0,3,4) (0,2,3) (1,3) (0,3) (2,3) {25,16,13,49,19,6} +[..###..] (1,4) (0,1,2,4,5) (2,3,4) (0,1,3,4,6) (0,2,4,6) {5,8,16,15,24,0,5} +[###.##.#] (0,1,2,3,4,6,7) (0,3,4,5,6,7) (4,6) (0,1,2,5) (0,1,2,5,6,7) (2,3,4,5,6) {41,21,31,31,46,50,47,22} +[##.##.] (0,1,2,3) (1,2,4,5) (1,2,3,4,5) (0,1,4,5) (0,1,2,4,5) (0,2,3,4) (0,3,5) {163,64,51,161,46,175} +[#..#] (0,2) (0,3) (1,3) (0,2,3) {20,19,14,30} +[.####..#] (2,3,4,5,6,7) (3,5,7) (2,7) (0,1,2,5,6) (1,4,6) (3,7) (0,1,4,6,7) (1,2,4,5,6,7) (0,2,3,6) (1,2,3,4,7) {50,73,70,54,61,45,81,78} +[#..##] (1,2,3,4) (3,4) (0,2,4) (0,1,2) (0,1,4) {36,25,24,6,35} +[##.###.#.] (0,2,3,6) (1,3,4,6,7) (0,4,5,7) (3,6) (0,1) (2,3,5) (1,2,5,6,7) (0,1,2,3,4,6,7,8) {35,33,32,48,25,16,38,26,10} +[..###..##.] (1,2,5,7) (2,7,9) (0,1,5) (0,2,3,4,5,6,8,9) (0,2,5,8) (1,3,4,8,9) (0,1,2,4,5,9) (0,2,3,5,6,8) (0,2,6,7) (0,2,3,4,7,8) (0,1,3,4,5,6) {104,66,91,70,67,92,60,40,56,50} +[..#....#] (1,3,5,7) (1,2) (2) (0,2,6) (2,5,7) (0,1,2,3,5,6) (0,4,7) (4,6) {25,30,64,10,9,12,34,3} +[###....] (0,2,5,6) (1,2,4,6) (4,5) (2,3,4,6) (0,1,2,3,6) (3,5) (1,2,3,4) (0,2,3,4,6) {18,26,41,43,50,22,23} +[..#...] (3,4) (1,3,4) (0,2,4,5) (0,1,3,5) (4) (0,3,4) (0,1,2,4) (0,2,3,5) {27,26,11,45,54,14} +[#.###] (0,3,4) (1,3) (0,1,3,4) (0,2,3) (1,2,3) {19,17,7,36,19} +[.#.#] (1,3) (0,2) {8,199,8,199} +[#..#####.] (2,3,4,7) (1,2,5,6,7) (1,2,3,4,5,7,8) (1,8) (1,5) (1,5,8) (2,3,4,5,6,7,8) (0,1,2,3,5,6,8) (0,4,5,6,8) (1,3,5,7,8) (3,4) {32,73,44,64,51,92,40,44,79} +[.#....] (0,3,5) (0,2,3) (0,2,3,4,5) (1,2,4) (0,1,2,4,5) {53,29,51,41,49,51} +[..###.] (1,2,3,4) (0) (1,2,5) (0,4,5) (0,1,2,4) (2,3,4) {38,21,24,4,33,27} +[#.###....] (0,4) (0,1,3,4,5,6,8) (1,2,3,6,8) (0,2,3,5,6,7,8) (2,3) (0,1,3,8) (2,6) {35,41,42,59,20,23,47,3,44} +[...#.##.#.] (0,3,4,5,9) (4,9) (2,3,6) (1,2,3,4,5,7,8,9) (0,1,2,3,4,6,7,8,9) (0,1,2,3,7,8,9) (1,2,7) (0,2,3,4,5,6,7,9) (0,1,3,4,5,6,7,9) (2,3,7) (1,2,5) {44,49,69,86,59,56,39,66,19,59} +[##..#..] (0,5) (3,6) (0,1,2,3,6) (1,2,3,4) (2,4) {18,14,16,31,14,16,19} +[..###.#.] (1,3,4,5,6,7) (0,3,6,7) (0,1,2) (1,2,5,7) (3,5) (3,7) {28,45,35,30,10,35,19,37} +[.#.#.##...] (1,2,3,4,5,6,8,9) (0,1,4,7,8,9) (1,4,5,6,7,8,9) (0,2,4,5,6,8) (0,2,3,7,8,9) (1,2,4,5,7,9) (2,3,7,9) (0,1,3,5,6,7,8) (0,1,4,7) {26,42,48,37,43,29,19,53,38,60} +[##.##...#] (0,2,3,4,5,6,7) (0,2,3,5) (4,5,6) (0,1,3) (1,2,6,8) (1,4,6,8) (0,2,4,6,7) {23,205,219,14,26,19,225,15,202} +[.##.] (0,3) (1,2) (1,2,3) (0,1,2) (1,3) {26,38,33,39} +[#...#...] (0,4) (0,1,2,3,4,6,7) (0,1,2,3) (0,1,4,5,6,7) (0,2,3,4,5,6) (0,2,6) (1,2,3,5,7) {57,39,48,43,43,20,41,30} +[.###..] (0,3) (1) (1,2,3) (1,2,3,4,5) (0,5) (2,5) (0,1,2,4,5) {19,42,38,24,27,38} +[##.#.#.#.#] (0,1,3,6,7,8,9) (0,1,2,3,5,7,9) (0,1,3,4,5,7,8) (4,6) (0,3,9) (0,1,4,5,7,8,9) (0,1,2,4,7,9) (0,1,2,3,4,5,6,7,9) (0,1,2,3,4,5,6,7,8) {94,86,43,74,61,66,52,86,52,78} +[##...##] (0,1,3,4,6) (1,2,3,5,6) (1,4,6) (2,4,5,6) (0,1,2,4,6) (0,1,2,3,5) (1,3,4) (0,3,4,5,6) (1,3,5) {177,210,55,199,208,62,213} +[...#...#.] (3,5,6,8) (0,2,3,4,5,6) (0,1,2,4,5,7,8) (1,3,4,6,7,8) (1,6,8) (0,1,2,3,4,6,8) (0,2,3,4,7,8) {43,42,43,75,58,32,70,29,73} +[..#.] (1,2) (0,2) (0,1,3) (0,1,2) {46,30,29,20} +[#.####] (0,1,2,4,5) (0,2,3,4,5) (0,1,5) (2,3) {43,31,45,31,26,43} +[##.##] (1,2,3,4) (0,2) (0,1,3,4) {9,11,6,11,11} +[#..#...##] (1,2,3,5,6,7,8) (1,4,5,6,7,8) (0,2,4,5,6,7,8) (1,5,7,8) (0,1,2,3,4,5,7,8) (3,5,6,7,8) (0,8) (3,5) (1,3,5,6,7,8) {31,23,15,49,18,68,32,49,65} +[.#..] (1,2) (0,2) (0,3) (0,2,3) (0,1,3) {139,20,28,132} +[..#.#] (1,2,3,4) (1,2,4) (1,2,3) (0,1,2,3) (2) (0,1) {31,57,53,44,15} +[.#.#.#.] (4,5,6) (0,2,3,5) (1,4,5,6) (0,1,2) (3,4,5,6) {7,21,7,18,49,53,49} +[#.#.#] (1,2,3) (0,2,4) (0,1,2) (1,3) {34,32,34,12,14} +[#######...] (0,1,3,4,6,7,8,9) (2,3,8) (1,2,3,4,5,8,9) (0,4,6,7,8) (0,1,4,5,6,8) (0,3,4,5,7,9) (1,2,3,4,6,8,9) (0,1,3,4,5,9) {225,61,40,245,255,229,34,197,63,235} +[...###..] (4,5) (0,1,3,7) (0) (1,3,5,7) (0,4,6) (0,2,3,4,7) (3,6) (0,2,5,6,7) (0,1,4,7) {58,34,17,45,17,25,13,51} +[.#.##..] (2,3) (3,4,5) (0,1,3,4,6) (1,3,4,5,6) (0,2,3,6) (1,4,6) {18,28,28,48,40,20,46} +[###.#] (0,3,4) (0,2,3) (1,4) (0,1,2) (0,2) {40,14,25,35,26} +[##.#] (3) (0,2) (0,1) (0) (2) (0,1,3) {145,126,14,28} +[.######..#] (1,4,5,7) (0,1,4,6,8) (0,5,9) (0,1,4) (0,1,3,4,5,7) (0,2,4,7,8,9) (2,3,6,7) (0,1,3,4,7,8,9) (0,1,2,4,6,7,8,9) {67,56,41,34,63,32,42,68,41,48} +[#.###] (2,3) (0,1,4) (1,3) (0,1) (0) (2,4) {46,41,136,124,33} +[#.#..] (0,3,4) (0,1,4) (1,2) (1,2,4) (1,3,4) (0,2,4) {16,184,172,16,183} +[###.#] (0,1,3) (1,3,4) (2,3,4) (0,1,2,4) (1,2,4) (0,3,4) {149,141,132,31,151} +[#.###.###] (3,5) (0,1,2,4,5,6,8) (0,3,4,5) (3,6,7,8) (0,3,5,7) (1,3,4,5,6) (1,3,4,6,7,8) {39,16,8,64,27,53,30,39,27} +[#.#.##.] (0,1,2,4,5) (2,3,5,6) (2,3,4) (0,1,4,6) (0) (3,4) (0,1,2,3,5,6) (1,2) (0,1) {56,50,43,32,50,34,32} +[.#..] (0,2) (1,2) (1,3) (2) (3) (0,1) {26,21,32,15} +[..###..#.] (1,3,4,6,7,8) (0,1,2,3,5,6) (0,1,2,4,7) (2,3,7) (0,6,8) (4,7,8) (0,1,3,4) (0,1,2,3,5,6,7) (1,2,5,6,7) (0,3,5,8) (2,6,7,8) {67,162,62,169,129,49,156,154,136} +[.#..##...] (1,2,3,4,5,6) (0,2,5,6,7) (1,6) (0,2,3,5,8) (0,1,2,3,4,8) (0,4,8) (4,5) (1,2,3,4,5,6,8) {20,19,33,27,33,47,24,6,21} +[##...#.#] (1,2,3,4,6,7) (0,3,6,7) (0,3,4,5) (3,7) (0,6,7) (1,2) (3,5,7) (0,1,4,6) {65,44,29,89,54,36,66,83} +[#.###] (3) (0,1,4) (0,1,2,3) (1,2) {20,40,38,38,2} +[##....#] (2,3) (3,6) (0,3,4,5,6) (0,4,5,6) (0,1,2,6) {35,18,33,26,17,17,36} +[.......#] (1,3,4,6,7) (4,5,6) (1,2) (0,1,3,4,5,6,7) (0,2,5) (2,3,4,5,7) (1,3,4) (0,1,3,4,5,7) (1,3,4,5,7) {31,63,34,57,70,70,27,54} +[.#..##.] (2) (1,2,5,6) (2,4) (0,2,4) (0,3,5) (1,2,4,5) (0,1,3,4,6) (0,2,3,5,6) (0,2) {58,35,66,37,38,52,27} +[#....] (1,3,4) (0,3) (0,2,3,4) (1,3) (0,1) (0,4) (0,2) {62,27,32,51,22} +[#.....#.##] (0,1,2,5,6,7,8,9) (1,3,9) (1,4,7,8,9) (0,2,4,5,6,8,9) (2,8,9) (1,3,4,5,6,9) (0,2,4,5,6,9) (0,2,3,4,6,8) (1,6,7,8,9) (0,1,2,4,5,6,7,8) {42,44,62,19,44,45,58,30,63,84} +[...#...#.#] (0,2,3,4,6,7,8,9) (0,1,2,5,6,9) (1,5,6,7,8,9) (1,3) (0,1,4,7,8) (0,1,4,8,9) (1,3,5,6,9) (4,8,9) (0,1,3,4,5,7,9) (1,2,4,5,6,7,8) (1,3,9) {55,102,37,50,69,68,72,63,80,106} +[..##.] (1,2) (0,3,4) (0,2,3,4) (2,3) {8,19,34,15,8} +[#..#.##] (0,5) (0,1,2,3,4,5) (0,4,5,6) (1,2,3,4,6) (0,2,3,4,5) (3) (2,3,6) {19,14,35,43,27,19,33} +[##..###.##] (1) (0,1,2,3,5,6,8,9) (1,2,3,4,6,7) (2,3,8) (0,1,2,4,5,7,8) (3,4,7) (0,5) (0,1,2,3,5,6,7,8) (3,8,9) (0,1,2,3,6,7,8,9) (0,2,3,4,5,6,7,8,9) {43,35,52,65,21,43,35,24,69,49} +[.#.#] (2,3) (1,3) (3) (1,2,3) (0,3) (1,2) {3,21,15,19} +[#.####] (1,2) (0,1,4,5) (3) (0,4,5) {26,25,9,2,26,26} +[#..####] (0,3,4,5,6) (1,2,6) (0,2) (1,2,4,6) (2,3,5) {22,21,43,16,27,16,29} +[#####.] (0,1) (2) (2,4,5) (1,3,4,5) (1,3,5) (2,3) (0,5) (0,2,4) {30,49,17,40,20,38} +[#....#.] (1,2,5,6) (0,1,2,3,4) (0,3,4) (6) (0,1,2,5,6) (0,2,5) (0,1,2,4) (2,4) {52,38,59,11,38,29,33} +[....###] (1,6) (0,1,2,3,5) (0,2,4,5) (0,2,3,4) (4) {16,20,16,12,5,15,9} +[.#.#.#] (1,2,3,5) (0,1) (0,1,3,4) (0,3) (3,4) (2,5) (1,2,3) {145,41,35,177,35,22} +[##.#] (0,1,2) (0,1,3) {31,31,18,13} +[...#...#] (1,2,3) (2,6) (0,2,4,6,7) (0,2,4,5) (0,5) (1,2,7) (0,3,5,6) {31,11,40,11,19,19,32,22} +[#..##.#] (5) (1,2,4) (0,2,3,4,6) (0,6) (0,3,4,5,6) (1,2,3,4,6) (0,1,4,6) (1,3,4) (0,1,2,3,6) {192,68,193,194,220,14,197} +[..#.] (2) (3) (1) (0,3) (2,3) (0,1) {16,20,29,39} +[#.#....###] (3,4,7,8) (0,3,4,6,7,8) (0,1,4,5,6,7,8,9) (0,1,4,5,7,8) (1,2,3,5,6,8) (0,1,2,4,5,7) (0,2,3,6,8) (1,2,4,5,6,8,9) (0,1,2,3,5,9) (6,8) {57,61,48,69,64,61,73,58,93,28} +[#..#.#] (0,3) (0,1,2,4) (0,1,2,3,4) (0,1,2,4,5) (0,2,5) (1,3,4) (0,1,3,4) (0,1,4) {241,223,37,224,223,17} +[...#.####] (1,7,8) (0,2,3,5,6,7,8) (1,2,3,4,5,6,8) (0,1,4,5,6,8) (0,3,4,5,6,7,8) (0,7,8) (1) (4,5,7) (2,3) (4,6,7,8) {215,48,205,210,52,223,216,244,253} +[#..#.##..] (1,2,3,4,5,7) (0,3,5,6,8) (1,2,4,6,7,8) (2,3,5,7,8) (0,4,6,7,8) (0,5) (1,2,4) (3,6) (0,3,4,5,8) (0,2,3,5,6,7,8) {62,42,52,65,63,74,44,37,53} +[#.##] (0,2,3) (0,1,3) {154,3,151,154} +[#..#.#] (0,1,2,3) (1) (0,3) (4,5) (0,4,5) (0,4) (1,2) (0,1) {55,45,14,21,36,24} +[..####....] (0,1,3,6) (1,4,7) (0,2,3,8) (2,8) (0,1,2,3,4,6,7,8) (0,2,3,4,5,6,7) (3,8) (2,6,8) (0,1,2,3,4,5,6,9) (0,2,4,5,6,7,9) {59,43,67,65,63,37,55,47,38,18} +[#.###.] (4,5) (3,5) (1,5) (0,2,3,5) (2,3,4) (3,4) {17,16,37,224,196,48} +[...####.#.] (1,4,5,8,9) (0,3,6,7) (1,2,4,5,7,9) (0,4,8) (1,2,6,8,9) (0,1,2,3,5,6,9) (0,2,3) (4,5,6) {39,42,54,38,28,43,31,24,9,42} +[#...] (2) (0,2,3) (0) (0,1,3) (0,1,2) {37,16,27,15} +[..####.#..] (1,4) (2,3,4,5,7) (5,7) (8,9) (0,2,3,4,6,9) (0,5,6) (0,1,2,3,8,9) (0,1,5,6) (0,1,3,4,5,6,7,8,9) (1,2,3,7,9) (0,1,6) (4,6) {250,76,34,45,38,224,231,34,51,61} +[.#.###..] (1,2,3,4,7) (0,1,3,6) (1,3,4,5) (3,5,6,7) (1,5,7) (0,1,7) (0,1,2) (1,2,4,5,7) {39,256,39,37,31,223,21,227} +[.#...###..] (2,6,9) (2,3) (1,5,6,7) (0,2,5,7,8,9) (0,1,2,7,9) (3,4,6,8,9) (1,2,4,6,7,9) (0,1,2,3,4,6,7,9) {29,29,160,28,26,22,166,40,31,178} +[.##....#] (0,1,3,4,5,6,7) (4) (1,2,4,6) (1,2,3,5,6,7) (0,2,3,4,5,6) (0,2,5,6) (3,7) (2,6) (0,1,2,3,4,7) (0,1,2,4,5,7) {54,76,97,53,72,61,79,61} +[###.#] (0,1,2,3,4) (2,3) (0,1,3,4) {17,17,21,24,17} +[.##.#] (0,1,2) (1,2) (0,3,4) (0,3) {32,15,15,32,15} +[.......##] (1,5,6) (0,1,2,4,5,6,8) (5,7) (3,5) (0,1,3,4,6,8) (2,3,5) (3,4,6,7) (0,1,3,4,5) (0,1,2,4,5,6,7,8) (2,8) {26,42,23,48,41,59,41,18,22} +[####] (1,3) (0,1,3) (2) {0,19,1,19} +[..#.#.###] (1,2,3,5,6,7,8) (2,3,5,6,7) (6) (1,2,3,4,5,7,8) (0,1,2,5,8) (0,1,6,8) (2,4) (2,3,6,8) {9,26,40,37,9,22,40,22,41} +[....##..#.] (0,2,5,7,8) (5,8) (0,2,3,4,5,6,8,9) (2,4,5,6) (0,2,6,7) (0,2,3,5,7,8,9) (9) (2,5,7,9) (0,1,3,9) (6,9) (3,6,7) (1,5) {63,34,73,62,22,93,55,66,49,73} +[##..#] (0,2) (3,4) (1,2,3,4) (1,3,4) (1,4) {13,18,14,11,23} +[###..] (0,1,2) (0,2,3,4) (1,3,4) {35,22,35,27,27} +[..##.##.] (0,1) (1,5,6) (1,2,5) (2,3,5,6) (5,6) (0,2,3,4,7) (1,3,5) (2,7) {17,234,36,15,0,247,229,13} +[.####..] (0,1,2,6) (2,5,6) (0,6) (4,5) (1,5) (2,3,4,5,6) (0,1,3,4,5,6) {49,30,38,35,53,66,77} +[####.] (0,3,4) (0) (1,4) (1,2,3) (0,1,2,3) {29,30,17,29,25} \ No newline at end of file diff --git a/2025/inputs/day11.txt b/2025/inputs/day11.txt new file mode 100644 index 0000000..ac8bab8 --- /dev/null +++ b/2025/inputs/day11.txt @@ -0,0 +1,574 @@ +fxp: udl vii hgb qmy +ixc: cje lra jhu +sgn: apv vbc +wua: knq +fnr: csd awl vvj fyx cvi xhb mvn guw wid vbp uvk krt oil izj zlh gwv +krt: grp cml vxt +hwj: laq jlg +rus: out +oag: wrc gpp +uos: zqg aiu gdx +xpu: qpb zqg gdx aiu +mdb: fnr mwu ozd +yrt: jlg ifs laq +eao: txi jmk xee sta knq +qcj: ivn mwb nrx lgx +wks: fyy lyd +xso: rqn flj fak +ucp: wpn mpy +zcf: knq sta xee jmk +sdr: vfy gsc wfb +ggn: brb ylm kdl rnk +tky: wcx ytk hbp xjh dne +kzl: sft sof utn +epc: uhn cqf xwv +srh: shh mei +uqe: sft +htw: hmf aia wsm +wid: qwo +daz: yvs +bdl: ipm kkp +xay: mpi +bsb: epc jpb cqs ixc cur ril ybr +mwb: out +cxr: yvs +ruf: jax uvl ctm +vtp: rbo +tqs: kdl pje ylm brb +thb: out +ljy: ael tqw +tkl: ssx yds +ozd: itv csd vvj fyx awl xhb mvn guw vbp hzn yft mfv izj oil uvk cui krt myo fqn gwv zlh +uhn: lzx dac iqf +zad: wvh tmc ece +qlf: gce sgn fni +kcf: dka pvw uzw +uat: bda mkd +aai: gtk gkf cuk qcj +mfv: cml +qlv: wdr sbi ihm nww jkx bud qxb +paz: kbq osk +rys: iwh +gdx: out +hco: cuk gkf +gte: wks fft +zrw: iur mei shh +izj: elj wrh vnz uss +lur: jpb zib zwl uzn epc nta cur cqs ybr tkl sle +hgu: jmk xee +okf: ypu gye qzd +mli: dir mzw +shh: rjp +nhj: ael tqw +pbm: fxp dfl +vnz: che +vim: bmu +puz: dcl ofd +zrg: ihy +scj: ysr knu +pjc: uvl jax bvs +tbn: uat lkd fdg +rcp: okf +min: out +poc: rta yvs rbo +kde: bcz +wct: bvs jax uvl +wvh: brg +wrh: frd kbe ihy +fak: jwl lzu dni +zaq: jlg ifs laq ppm +yun: kde kob qmz uxn +boa: yql brg fbt sgu +izk: czt +xyj: out +xhk: ril cur yun pmu nta epc uzn zwl rxn sle tkl puz ixc cqs nqo jpb zzk +yql: mjy cfo bpj vqp +dcl: nbq +ogv: utn sof pld +rtp: gpp gmb eka +nki: jmk xee knq +agn: jly alh ola zcf +vrp: hnw +lts: yql fbt sgu +myo: rhq kvi +jpb: dcl xuk +dju: vrt ozd fnr you mwu +hnw: hmf +rhq: ehc +dij: knq sta xee txi +awl: vxt +knu: bsb lur igu +dfo: pab +ewm: sgn fni gce +fed: osk +nwy: ppm laq qgn +wby: you mwu fnr ozd +dir: jmn gpu +mjy: wfb iyi vfy +fcj: zkn hgq szd +mzo: out +lzl: xhk +czt: xcu xvu +tyq: gsc wfb kjq iyi +tda: rbo +ltv: srf vim mli slg +iwh: qpo +hnn: bsb fpb lur +fan: sgu +vqp: zow rqn fak flj wke +ltm: pvm xmq +cyc: dfl fxp +kvi: gwp jnw +srd: ipm jrk +lkv: fnr vrt +shb: hxf thb rus +xuk: zxj +ifs: ryr gep wck lcp fwn gdh foj +ynz: uji +igh: sta jmk +fyx: krd +gkf: ivn mwb axi +bcz: ftm rdm wby lkv +qeg: jlg qgn ifs ppm +goq: icv +qmy: out +wxl: igh heh hvs +kbe: dzp ybw +hxf: out +tqw: rdn nac +bmu: jmn gkl xfg +cqf: lzx +phn: rbi fjm +ykt: sgu fbt brg +zqg: out +ain: mpj +esz: jmk txi +bpj: rqn zow flj wke fak +qaj: gtk gkf cuk qcj +kul: ckh +rss: dka nwy +gaq: ifs laq jlg +ehc: hco qaj qup +saf: mwu you fnr vrt +mub: bee +tns: lyd fyy bqw +ssx: utb nel thp hhu wbs +mwd: qeg gpo +lgx: out +lyr: ozd +knq: qlf tnt bhv aeo ljy dmr +php: sgu +qmz: fer bcz +oab: lup +sof: ikt +lte: ytk hbp xjh dne wcx +hvs: xee txi knq +bnw: yhu qhx +jnw: aai hco qup nxs +uge: bqw fyy +cml: sid txz qgh +sle: uwp jhu lra ltm +uoi: yql sgu +tcu: eao hgu +aaj: laq ppm +bqy: you +gye: qpo +csx: you mwu fnr vrt +uut: dne xjh wcx +tat: kul jxm dxd shb wtu +sbi: yvn mub +uss: suv ihy kbe +def: wrc eka gpp +rso: out +dmr: oab kbr jaa +jhu: xmq +qxb: mub sfu fhq yvn +nww: htw +szd: zfx +gpp: qvv min rso iey +sft: fzl hnn ikt +fwn: mei iur +giz: txi sta jmk +you: hzn izj oil krt wid awl vbp csd +yvs: fpb lur xhk bsb +mci: jrk ipm kkp +nqo: uwp jhu cje +alh: jmk xee sta txi +ejz: fjm rbi fim +jnd: wua esz +igu: nta pmu yun cur ril ybr rxn zwl uzn fnn cqs ixc puz sle zzk jpb nqo zib +yft: tky kcj +vxt: sid +dni: hvs heh mpi +jwy: wtu +ypu: yrt +rqn: lzu dni +yfw: bag puu yba +vgx: amv gte qwd hpw +hgb: out +gwp: nxs qaj +obo: fbt +yhu: xkn jai boa +phi: bqy ftm +cmi: xyj +mvn: ruf btp +utn: ikt +mkd: zcf giz alh +eff: zow rqn wke flj +dml: yql brg sgu fbt +ivn: out +fft: fyy lyd +vbp: vnz +cuk: ivn lgx axi nrx +brb: lts bcq xsx fan +ckh: out +cui: zrg elj wrh vnz uss +ybw: pxr +sfu: bee ynz +aov: gyl xyj +yxq: jsh smb qhx +hgq: xvu +yba: pab xbk bvq +ser: mzo vii hgb qmy +xfg: txi xee +iey: out +vhi: jaa kbr evt ndc +kcj: hbp +qmf: zfx +tum: sgu brg yql +sva: her yfw anr +ctm: cyc +sta: ewm izk bhv tnt vhi hkq ljy waa aeo ofz xhd fcj gwo qlf nhj +jai: fbt sgu +iyj: dka kez nwy +ofd: tlb +qff: rcp osk +wbs: fnr you mwu vrt ozd +ulj: hrd tcu uqb +uvk: vxt grp qgy +txz: irm jwy fmr +yco: out +hlo: fxp ser +gsc: ldf yqe ulj +vpo: zxj tlb +jgf: laq +hns: uoi tmc ece +cvi: gpt otp sva +cur: kob kde qmz +lre: ipm +ryr: wpn fdl +wrc: iey yco +ftq: fvb kbp scb oap cvl +qwd: tns wks uge +laq: ryr nhf srh zrw bvv xje gep phn ejz ucp vgx foj gdh tph +fyy: vin obo dml php tum +iyi: yqe ldf axk +wck: mei iur +lzu: mpi +btp: uvl ctm bvs jax +zib: jhu lra cje ltm uwp +dac: lyr csx saf rmg vns +pje: lts ykt bcq +awp: oap kbp +iqf: lyr vns +fac: qgn +iiu: lre +gmb: min rso +pxk: wsm +icv: jlg ifs laq +tnt: oab ndc kbr evt +guw: otp qwo +rjp: fbt sgu +iqh: srf vim mli slg +xje: mpy +cmt: amv gte +kob: bcz fer +fzl: igu fpb +bud: rss fxl +lup: fvb cvl +bpc: jsh smb yhu +jui: fnr mwu you vrt ozd +wmr: tmc uoi wvh +ulo: yql brg sgu +quz: hns avo euq zad +avo: wvh uoi tmc +wtu: rus thb hxf ckh +jsh: xkn ulo boa ahv +bbz: mwd imq +hpw: fft tns uge +nbq: gcg jui zqy +cel: fxp dfl +jrk: lsu nki wgx +qzd: acm yrt qpo +xcu: ain +qxl: lur igu bsb +pmu: xuk dcl ofd +ahv: fbt brg +gtk: lgx nrx +vrt: yft izj uvk cui mfv oil myo hzn gwv zlh fqn guw vbp wid xhb mvn csd itv cvi fyx awl +gcg: vrt +ppm: bvv zrw vis dcr wck ryr gdh tph ucp ejz uuh gep +nel: ozd fnr +udl: out +gkl: knq txi jmk xee +vvj: btp pjc wct +adp: cxr vtp daz poc +zxj: jui gcg zqy +dka: ifs laq qgn jlg +bhl: xpu uos +mzw: jmn xfg +ycr: qmf hgq szd czt +zfx: dbo ain scj +jax: pbm bxg cel cyc hlo +yqe: jnd uqb hrd +lyd: dml php vin obo +euq: uoi ece +hzn: wct +gwv: uut tky lte +wgx: sta xee knq +xhd: phh ael +axk: tcu uqb +ece: sgu fbt +waa: jaa +jaa: ftq lup awp +cje: xmq pvm +lln: bbz qff dkw paz htf fhv vrp jkx ihm bud jef eej +bvs: pbm cel +zow: xay wxl +pvm: fnr you vrt ozd +dbo: knu +vbc: pld +xpp: iwh qzd gye +gep: fdl +qqj: xhk bsb lur fpb +wpo: fdg +qgy: sid qgh +dne: oag def +oap: igu lur bsb xhk +bee: oxm uji tpb jgf +dxd: rus thb +mjp: jgf mkp +ytc: brg yql sgu fbt +zlh: krd kvi rhq +wcx: def oag rtp +svr: qlv lln qwc +ola: sta xee jmk txi +qwc: jkx ihm nww sbi bud fed jef eej bbz qff nfj paz fhv vrp wdr +gce: kzl ogv +uxn: phi bcz +vnd: fbt brg +xee: uni hkq ljy qlf aeo +zaz: cmi +gpt: yfw +dkm: gaq fac aaj zaq +kjq: sgy +oba: qgn jlg +slg: dir +fvb: xhk bsb igu lur +csd: gpt otp qwo +kkp: dij pbf +osk: xpp rys +hmf: pde luh dkm +uwn: lkd +crd: ikt hnn fzl +acm: jlg qgn laq +utb: fnr mwu you +lcp: rbi +mby: out +fbt: tbn iiu uxu sdr wyl uwn xao ltv wpo mjy xso +fhq: ynz mjp +qhx: ahv boa ulo jai +wpn: bpo +xbk: mby +axi: out +rbi: yxq bnw +dcr: fjm +nxs: gkf cuk qcj +rxn: uwp jhu lra ltm +kez: ifs +ikt: xhk bsb igu fpb +nhf: pje +lsu: xee sta jmk +ejp: oba aaj gaq +tph: rnk brb +bpo: wmr euq +ybr: uhn cqf +pde: gaq +kbp: xhk bsb +fhv: pxk htw +lkd: bda mkd agn bhh +fmr: shb wtu kul +ftm: ozd vrt +aeo: szd qmf hgq +dhu: ogv apv vbc kzl +irh: mpj ysr qxl +thp: you ozd vrt +bda: alh jly ola zcf giz +uzw: laq ifs qgn +scb: bsb +aeb: wbs hhu nel utb +vin: brg +rnk: fan +sid: jwy fmr irm +uxu: slg mli vim srf +anr: yba puu zaz +kbq: rys +jwl: igh +vis: amv hpw gte qwd +fer: lkv wby rdm bqy ftm +kwv: ola jly zcf +nac: lur +xvu: phc irh +luh: aaj zaq oba gaq +bcq: fbt sgu brg yql +puu: bvq xbk +mei: rjp ytc vnd +lyf: igu xhk bsb +tmc: fbt +suv: rzo dzp qig bhl +qwo: anr +uuh: iur +dfl: mzo vii +hrd: esz wua +eka: min rso qvv yco +qpb: out +zqy: you mwu +evt: lup +bxg: dfl fxp +uni: oab kbr evt jaa +uwp: xmq dju +rdm: ozd vrt you fnr +gwo: poc +dto: bsb xhk lur fpb +ofz: dhu fni sgn +fjm: bpc +wsm: pde luh ejp +tmb: amv qwd +kdl: bcq ykt lts +jxm: ckh hxf +dyl: euq avo wmr hns +pxr: zqg +xsx: yql brg +wdr: rss fxl kcf +frd: rzo qig dzp bhl +tlb: zqy mdb +yvn: ynz mjp +bvv: fim +xjh: oag def +jmk: vhi bhv tnt izk ewm adp nhj qlf gwo fcj xhd ofz aeo ycr ljy hkq +smb: ahv xkn ulo +hbp: def rtp +fdl: quz bpo +flj: xay wxl +mkp: qgn jlg +fdg: mkd agn bda kwv bhh +mpy: bpo quz dyl +fim: yxq bnw bpc +mwu: xhb yft myo cui gwv mvn fqn fyx vbp wid +yds: hhu nel +her: dfo yba puu bag +ipm: nki wgx lsu pbf +wfb: ulj axk ldf +bvq: xyj +hhu: ozd you fnr +vfy: ulj yqe ldf axk +pld: qqj fzl +zkn: xvu zfx xcu +rbo: fpb lur +zzk: yds aeb +rdn: bsb igu fpb +ril: qmz uxn kde kob +foj: fdl +xhb: krd kvi +htf: osk rcp +nrx: out +zwl: xwv uhn cqf +gyl: out +dkw: rcp osk +sgu: wyl iiu vqp bpj sdr tyq tbn cfo eff wpo xso xao ltv +pbf: sta +ytk: oag +irm: shb kul +brg: wpo iqh tyq tbn uwn +dzp: xpu uos +ufe: utb nel hhu +gpo: jlg +ihy: bhl rzo dzp qig +jlg: srh tqs bvv tmb dcr +qgh: jwy fmr tat irm +aiu: out +itv: grp qgy +cqs: yds ufe ssx +mpj: igu xhk +pvw: ppm laq +mpi: xee knq +pab: gyl +jef: rss kcf iyj +qig: pxr xpu +lra: pvm +che: rzo qig dzp ybw +xao: rqn fak wke +nta: vpo xuk +rta: lur igu bsb +qvv: out +fpb: puz cqs ixc fnn tkl nqo jpb zzk zib yun cur pmu nta ybr ril uzn zwl +imq: hwj qeg gpo +jkx: fhq mub sfu +ael: lzl dto +wyl: srd bdl mci +hkq: zkn czt +apv: utn crd sof pld +kbr: ftq +xwv: iqf lzx +cfo: lre bdl srd +ysr: fpb xhk bsb +aia: dkm ejp +ndc: awp lup ftq +bhh: ola +bhv: poc daz vtp tda cxr +uqb: hgu +xkn: yql +eej: imq +ihm: htw pxk +phh: rdn lyf nac +cvl: fpb igu lur xhk +rzo: uos +uzn: kde +jly: jmk sta xee knq +otp: her +vii: out +fni: ogv uqe kzl +phc: ysr +srf: bmu mzw +fnn: xwv +rmg: you +heh: knq jmk xee txi +elj: frd kbe che suv +fxl: dka kez pvw uzw +sgy: uqb +vns: vrt fnr +gdh: hpw +bag: pab aov xbk cmi +bqw: dml tum php +txi: aeo dmr adp waa nhj uni +krd: gwp +wke: dni wxl jwl +ldf: uqb tcu hrd +jmn: knq xee jmk +ylm: fan bcq lts +qpo: ppm laq qgn jlg +qgn: ucp ejz phn cmt lcp uuh xje tqs gep foj gdh tph nhf fwn dcr wck ryr bvv tmb zrw srh vis ggn +tpb: ifs laq +uvl: hlo cel bxg pbm +iur: rjp vnd ytc +oil: uut lte +oxm: ppm laq qgn jlg +grp: qgh sid +lzx: vns csx saf +uji: qgn jlg ppm laq +amv: wks uge tns +qup: qcj +xmq: mwu you +fqn: sva +gpu: sta xee jmk txi +nfj: mwd goq \ No newline at end of file