From f9729624f582dd402774076c6fef28d417cc3579 Mon Sep 17 00:00:00 2001 From: Lol3rrr Date: Tue, 13 Jan 2026 22:59:58 +0100 Subject: [PATCH] Implement 2025 - Day 10 - Part 1 --- 2025/10.rs | 133 ++++++++++++++++++++++++ 2025/inputs/10_1.txt | 200 +++++++++++++++++++++++++++++++++++++ 2025/inputs/10_example.txt | 3 + 3 files changed, 336 insertions(+) create mode 100644 2025/10.rs create mode 100644 2025/inputs/10_1.txt create mode 100644 2025/inputs/10_example.txt diff --git a/2025/10.rs b/2025/10.rs new file mode 100644 index 0000000..ca97880 --- /dev/null +++ b/2025/10.rs @@ -0,0 +1,133 @@ +---cargo +[profile.dev] +opt-level = 3 +--- + +use std::collections::{HashMap, hash_map::Entry}; + +static CONTENT: &'static str = include_str!("./inputs/10_1.txt"); + +#[derive(Debug)] +struct Machine { + desired_lights: u64, + buttons: Vec, +} + +fn main() { + let machines: Vec = CONTENT.lines() + .map(|l| l.trim()) + .map(|l| { + let (lights, rest) = l.split_once(' ').unwrap(); + let buttons: Vec<_> = rest.split(' ').take_while(|p| p.contains('(')).collect(); + let joltage = rest.split(' ').skip_while(|p| p.contains('(')).next().unwrap(); + + (lights, buttons, joltage) + }) + .map(|(raw_lights, raw_buttons, raw_joltage)| { + let raw_lights = raw_lights.strip_prefix('[').unwrap().strip_suffix(']').unwrap(); + + let lights = raw_lights.chars().enumerate().map(|(idx, c)| { + let v = match c { + '.' => 0, + '#' => 1, + c => unreachable!("{:?}", c), + }; + (idx, v) + }).fold(0u64, |acc, (idx, v)| { + acc + (v << idx) + }); + + (lights, raw_buttons, raw_joltage) + }) + .map(|(lights, raw_buttons, raw_joltage)| { + let buttons: Vec<_> = raw_buttons.iter().map(|button| { + let button = button.strip_prefix('(').unwrap().strip_suffix(')').unwrap(); + + let switch: u64 = button.split(',').map(|c| { + let v: u64 = c.parse().unwrap(); + 1 << v + }).fold(0u64, |acc, v| { + acc + v + }); + + switch + }).collect(); + + (lights, buttons, raw_joltage) + }) + .map(|(lights, buttons, _)| { + Machine { + desired_lights: lights, + buttons, + } + }) + .collect(); + + println!("{:#?}", machines); + + let machine_states: Vec<_> = machines.iter().map(|machine| { + let mut states: HashMap> = HashMap::new(); + let mut queue = vec![0u64]; + while let Some(state) = queue.pop() { + let new_states: Vec<_> = machine.buttons.iter() + .map(|button| { + state ^ button + }).collect(); + + match states.entry(state) { + Entry::Occupied(_) => {} + Entry::Vacant(ventry) => { + let new_states = ventry.insert(new_states); + queue.extend(new_states.iter().map(|v| *v)); + } + }; + } + + states + }).collect(); + + let distances: Vec<_> = machine_states.iter().map(|states| { + let mut distances: HashMap, usize)> = states.keys().map(|node| { + (*node, (None, usize::MAX)) + }).collect(); + let mut q: Vec = states.keys().copied().collect(); + distances.insert(0, (None, 0)); + + while !q.is_empty() { + q.sort_by_key(|n| core::cmp::Reverse(distances.get(n).map(|(_, d)| d).unwrap())); + let u = q.pop().unwrap(); + + let (_, u_distance) = distances.get(&u).copied().unwrap(); + + for neighbour in states.get(&u).unwrap() { + if !q.contains(neighbour) { + continue; + } + + let new_distance = u_distance.saturating_add(1); + let (neighbour_prev, neighbour_distance) = distances.get_mut(&neighbour).unwrap(); + + if new_distance < *neighbour_distance { + *neighbour_prev = Some(u); + *neighbour_distance = new_distance; + } + } + } + + distances + }).collect(); + + let mut total_steps = 0; + for ((machine, states), distances) in machines.iter().zip(machine_states.iter()).zip(distances.iter()) { + println!("{:#?}", machine); + //println!("States:\n{:#?}", states); + //println!("Distances: {:#?}", distances); + + let (_, steps) = distances.get(&machine.desired_lights).unwrap(); + println!("Required Steps: {}", steps); + + total_steps += steps; + } + + println!("Required Total Steps: {}", total_steps); +} diff --git a/2025/inputs/10_1.txt b/2025/inputs/10_1.txt new file mode 100644 index 0000000..5de5de6 --- /dev/null +++ b/2025/inputs/10_1.txt @@ -0,0 +1,200 @@ +[######] (0,1,3,5) (0,4) (0,1) (1,4) (1,2) (1,3,4,5) {21,37,18,9,8,9} +[..#.##] (0,1,3,4,5) (3) (0,1,3,5) (3,5) (1,5) (0,2,3,5) (0,1,2,3) (0,2,4) {25,12,13,57,14,38} +[....###] (1,2) (4,5,6) (2,3,6) (0,1,2,6) (0,4,5,6) (1,4) (0,1,2,3,4) (2,4,5) {43,172,55,21,159,17,33} +[...#..#] (1,5) (0,1,4,5) (1,2) (2,3,4,6) (1,3,5,6) (0,1,2,3,5) (0,1,3,4,6) {42,85,34,41,27,52,26} +[...##] (0,3) (0,1,2,4) (3,4) (0,1,3) (1,4) (0,1,2,3) (0,1,2) {63,62,36,39,35} +[###..#####] (3,4,5,6) (0,2,3,5,6,8,9) (0,1,2,3,4,5,8,9) (1,6,7,8) (0,1,2,4,5,6,8,9) (0,1,3,5,7,8) (2,5,6,7) (1,2,4,5,7,9) (0,3,7,9) {82,53,68,90,49,107,71,61,69,65} +[#####] (0,1,2,4) (0,2,4) (0,2) (0,1,2) (3,4) {49,16,49,4,32} +[...#] (2,3) (0,1) (0,2) (3) {8,5,22,19} +[.###..#] (0,4,5) (1,4,6) (3,5,6) (1,2,3,5,6) (1,2) (3,6) (0,1,2) (0,1,6) {19,54,20,23,15,6,57} +[..##..##.#] (1,3,4,7) (1,2,3,4,5,6,7,9) (1,3,5,6,8,9) (0,2,4,6,8) (3,4,8) (0,1,2,3,6,8) (0,1,2,3,4,5,7) (1,2,3,4,6,8) (0,3,5,8) (0,5,8) (0,1,3,7) (6,9) {243,261,221,287,46,51,255,36,264,42} +[.##..##..#] (4,5,6,7) (0,1,3,5,6,7,8,9) (1,3,4,9) (2,3,4,6,7,8) (0,1,2,3,5,7,8,9) (0,1,8) (7,8) (2,3,4,5,6) {28,42,26,46,42,39,34,30,36,27} +[##.###] (1,2,4) (0,2,3,4) (0,1,2,3,4) (1,4,5) {27,220,219,27,235,16} +[###..] (0,1,4) (0,3,4) (0,1,2) {212,210,14,2,198} +[#..#...##] (0,2,3,8) (2,3,5,7,8) (1,3,8) (1,3,4,5,6,7) (2,3,5,6,7) (0,1) (0,3,4) (0,5,6,7) (1,3,4,5,6,8) {27,127,53,172,119,155,136,146,46} +[#...##] (0,3,4) (2,3,4) (1,5) (3,4) (0,2,4,5) {3,6,18,29,31,8} +[###.......] (3,4,5,7) (0,3,5,6,9) (2,4,6,8,9) (1,2,6,8,9) (0,3,4,5,6,7,8,9) (0,5,6,9) (3,5,6,9) (0,6,8,9) (4,5,6,7,9) (0,1,2,3,6,9) {43,20,34,54,44,76,94,30,27,94} +[##.#.#.##.] (0,2,4,5,6,7,8,9) (1,2,4,6,7,9) (1,4,5,6,8,9) (3,4,6) (0,2,7) (1,3,4,5,6,7,8,9) (0,5,6,7,8,9) (0,1,2,3,4,7,9) (0,1,4,5,6,7,9) (4,5,6,7,8,9) {54,52,50,18,72,47,71,85,30,71} +[...####.] (2,3) (1,3,4,5,7) (1,3,6) (0,1,3,5,6,7) (1,3,7) (0,1,4,5,6,7) (2,4,6,7) (1,7) (1,2,3,5) (1,2,3,4,6) {31,100,51,87,60,64,64,65} +[###.#..##] (4,5,6,8) (1,2,3,5,6,8) (0,2,3,4,5,8) (0,1,2,4,7,8) (0,4,5,7,8) (0,1,2,3,4,7,8) (6,7) {59,28,42,34,68,44,16,50,70} +[###.#...#.] (1,2,9) (0,1,2,3,4,5,6,8) (1,3,6) (0,1,7) (3,4,5,8) (0,2,3,4,5,6,7,8) (0,1,2,4,7) (0,3,4,7,8,9) (0,1,3,4,5,6,7,8) {263,252,42,250,257,222,220,250,239,20} +[#.#...#] (2,4,6) (2,3) (0,2,6) (3,4) (1,2,3,4,5) (1,5,6) (0,2,4,5,6) {18,8,42,25,20,12,23} +[#.#.] (0,2) (0,1,3) {12,3,9,3} +[.#..#.] (0,1) (0,1,5) (3,5) (1,2,5) (1,4) {14,27,4,4,9,10} +[#####..] (0,4,6) (0,1,2,3,4,6) (0,2,3,4,6) (0,1,5) (2,5) (0,1,2,3,5,6) {30,22,24,13,15,26,18} +[...##] (0,1,2) (2,3) (0,2,4) (0,4) (1,2) {23,199,219,12,12} +[.##..] (0,1,3) (0,3) (1,2) (0,3,4) {37,22,10,37,7} +[.#...#] (0,5) (0,1,2,3) (2,3) (1,3,4,5) (1,2,4,5) {36,212,37,200,195,214} +[.##.##..#.] (3,4,5,6,7,8) (3,7) (1,4,5,6,7,8,9) (1,2,4,9) (0,1,5,7,8,9) (0,1,2,4,6,8,9) (0,1,2,3,4,5,8) (0,3) (0,2,3,4,5,6,7) (0,1,5) (0,5,9) (0,1,2,3,4,5,8,9) (3,6) {183,186,153,191,181,205,55,66,166,69} +[.#...#] (1,5) (0,1,3,4) (0,1,2,3,4,5) (0,2) {45,48,29,36,36,32} +[...#.#] (0,1,2,3,5) (0,2,3,4) (3,5) (1,2,3,5) {21,18,33,37,15,22} +[##.#..###] (0,1,2,3,5,6,8) (1,2,3,4) (0,1,5,6,8) (1,2,4,5,6,8) (0,7,8) (1,2,3,4,6,7) (2,3,4,5,6,7,8) {57,60,145,139,128,148,159,136,168} +[....#.#] (3,4) (0,2,5,6) (1,6) (2,3,4,6) (0,2,4,5) {13,10,18,14,25,13,17} +[#......] (0,1,2,4,5) (0,1,2,3,4) (2,4,5,6) (1,2,3,4,6) (0,1,2,3,6) (0,1) (3,5,6) {43,47,64,39,49,35,41} +[#.....##] (1,6,7) (0,2,4,5,6) (0,3,4) (3,4,6) (0,1,2,4,5,6,7) (0,1,7) (0,6,7) (1,4,7) {42,39,24,16,52,24,36,42} +[##....###] (4,7,8) (0,2,3,4,5,6,8) (0,1,3,5,6,8) (1,2,5,7,8) (0,1,2,4,5,6,8) (4,6) (3,4,5,6,7) (0,1,2,3,5,7,8) {39,45,50,48,50,72,52,52,56} +[..##....] (0,3,7) (0,2,3,4,5,7) (1,4,7) (1,2,3,4,5,6) (2,3,4,7) (0,6) (0,1,2,5,6) {38,184,198,192,190,195,197,19} +[...##] (0,1,2,4) (0,2,4) (1,3,4) (0,1,2) (1,2) (1,2,3,4) (1) {41,69,58,21,50} +[#.#......] (0,1,5,6,7) (0,2,3,4,5,7,8) (0,1,2,3,4,5,8) (0,1,2,4,6) (1,3,4,5) (1,3,4,6,8) (3,5,6,7,8) (1,2,8) (6,8) (6,7,8) {14,29,16,28,20,22,54,26,60} +[.##..#..##] (1,2,4,6,8) (0,1,2,3,4,5,6,8,9) (0,2,3,4,8,9) (4,5) (0,1,2,3,6,8,9) (0,3) (0,2,3,4,6,7,9) (0,3,4,6,7,8) (0,3,4,5,7,8,9) {85,39,42,85,211,192,53,32,70,56} +[#...#] (0,1,2,3) (1,2,3,4) (1,2,3) {19,35,35,35,0} +[#####] (0,1,3,4) (2) (0,2,3) {10,1,12,10,1} +[.##..#..#.] (0,1,2,3,6,7,8,9) (0,1,4,9) (2,3,4,6,9) (0,1,2,3,4) (7,9) (1,2,3,4,5,6,7,9) (8) (1,4,5,6,7,8,9) (1,4,6,8) (0,2,4,6) (0,4,8) (0,1,3,5,6,7,8) (7) {46,60,51,51,69,30,56,48,139,57} +[..##.###.] (1,5,8) (0,5,7,8) (0,1,3,4,6,7,8) (1,2,3,4,5) (6,8) (3,5,7,8) (0,1,2) (4,6,8) (0,1,6,7) (4,5,8) {179,67,33,28,37,198,39,172,202} +[#...##.] (0,1,2,3,5) (0,1,5) (0,5) (0,1,3,4,5,6) (1,2,4,6) (1,6) (1,4) (0,1,2,3,4,6) (4) {50,60,30,33,55,34,29} +[.#.#] (0,1,2) (1,3) {190,210,190,20} +[#.###.#.#] (1,4,8) (0,2,4,5,6,7,8) (0,1,2,3,5,7,8) (0,1,4,6) (3,4,5,6,7) (1,4,6) (0,2,4,5,7,8) (0,1,2,3,5,6,7) (0,1) {52,58,34,25,73,48,63,48,41} +[..#.....#] (0,1,2,3,6,7,8) (0,1,2,3,4,6,7,8) (0,1,2,4,5,8) (0,1,2,4,6,8) (0,1,2,3,4,7,8) (1,2,3,4,6,7,8) (0,1,3,6,7) (2,5,6,8) {185,193,81,158,63,18,178,158,81} +[#####..##] (0,1,4,5,6,7,8) (6,7) (2,3) (0,3,4,5,6,7,8) (1,6) (0,1,2,3,4,7,8) (2,7) (0,3,7,8) (0,2,3,7,8) (2) (1,2,4,5) {86,66,80,88,70,52,65,100,86} +[#####.#.#] (0,1,2,5,6,7,8) (1,3,5,6,8) (2,8) (1,2,8) (2,3,4) (2,3,4,6,7) (0,2,3,4,5,7,8) (1) (5,6) (0,1,2,3,4,5,6) (3,4,6,7,8) {204,227,242,240,231,217,239,37,53} +[#.....##] (2,3) (0,1,2,3) (3,5) (1,4,6) (6) (0,2,5,7) (1,2,3,4) {20,213,35,34,204,21,195,11} +[##.###.#.] (4,6) (5,6) (0,3,7) (0,2,3,4,5,6,7) (1,2,3,7,8) (2,5,6,8) (0,2,8) {32,12,165,38,25,158,166,38,148} +[#######.] (1,3,4,5,7) (2,7) (1,2,3,4,5,7) (0,1,4,5,6,7) (1,2,4,5,7) (0,6) {9,62,40,39,62,62,9,66} +[#..#] (1,3) (2,3) (0,2) (0,3) (0,1,3) (0) {40,22,15,34} +[####.#####] (0,1,5,6,7,8) (0,2,3,4,7,8,9) (0,4,7,8) (1,4,5,7) (2,3,5,7,9) (0,2,3,4,6,7,8) (0,1,2,5,6,8,9) (1,3,4,7,9) (0,1,2,3,5,6,8,9) (0,1,2,3,4,5,9) (5,8,9) (1,4,6,8,9) (0,1,2,3,4,7,8) {233,238,81,87,66,252,209,225,235,106} +[.###.] (3) (1,3) (0,2,3) (1,4) (0,1,2) (0,1,4) {26,31,7,24,30} +[.###..] (0,1,4) (5) (1,2,4) (2,3) (3,4,5) (1,3) {3,20,204,202,14,18} +[...###] (3,5) (3) (0,1,2,5) (0,1,2,3,5) (0,3,4,5) (0,2,3,5) (0,1,3,4) (4,5) {62,27,37,79,44,82} +[###...#] (1,2,4) (0,1,5,6) (0,1,2,3,4,6) (2,4,6) (1,4,6) (0,2,4,5,6) (5,6) {30,44,48,4,59,31,55} +[#.##..#.] (1,3,5,7) (3,7) (1,2,3,5,6,7) (0,2,3,4,5,6) (0,1) (4,6) (1,7) (1,5) (0,4) (0,5) {58,61,34,48,57,82,53,39} +[.#.#....#] (1,3,4,8) (0,1,3,5) (1,2) (0,1,2,3,4,6,7,8) (1,3,8) (0,4,5,7,8) (2,4) {47,55,48,44,64,28,19,38,54} +[##.##...#] (2,3,6,8) (5) (1,3,4,5,6,7,8) (1,3,6) (0,3,4,5,8) (0,1,3,6,8) (0,1,4,7) {39,20,14,47,28,25,27,8,47} +[.#..#] (0,2,4) (0,4) (0,1,2,3) (1,2,4) {8,12,13,4,12} +[.##.#..#.] (0,3,6,7,8) (0,1,2,3,4,6,8) (0,1,3,4,5,7,8) (0,1,2,4,5,6,8) (3,4,8) (4,5) (0,1,2,6,8) {53,45,38,32,56,39,46,15,60} +[##..] (0,3) (0,1,2) (1) (1,3) (0,1) (2,3) {37,48,21,39} +[..##...] (4,5,6) (0,3) (3,5) (1,2,3,4,6) (1,2,3,5,6) (0,3,5) (0,1,4,5,6) {36,46,38,245,37,238,57} +[#####..##] (0,4,6) (0,1,3,5,7,8) (1,4,5,6) (6,7) (1,3,4,5,6,7,8) (0,2,4,5,7,8) (2,5,6) (0,1,3,4,6,7) (1,3,4,5,6) (1,2,3,4,5,8) {32,60,11,45,48,65,63,49,37} +[.#.##.####] (0,1,2,3,4,5,6) (1,2,3,4,6) (0,1,2,3,4,5,6,7,9) (1,4) (0,1,2,3,4,6,7) (0,2,5,8) (1,2,6,7,9) (2,7,8) (0,3,4,5,7,8,9) (0,1,2,7,9) (2,3,4,6,7,8,9) (0,2,3,4,5,6,9) (5,7,8,9) {55,75,82,71,84,39,59,81,40,56} +[#....] (3) (0,3,4) (0,1,2,3) (0,1,3) (1,2,4) (1,2,3) (0,2) {32,26,18,42,25} +[#...#.#.] (0,2,3,4,6) (1,5,7) (0,6) (1,4,5,6,7) (0,1,2,3,4,5,7) (2,3,6) {23,29,29,29,30,29,58,29} +[.##.#..#] (0,1,3,4,5,6) (5,6,7) (0,1,3,4,5,7) (0,4,5) (3,4,5,6) (1,4,6) (2,3,4) (0,1,3,4,7) {30,37,3,36,47,39,27,29} +[#..#..#.] (2,3,4) (0,1,2,7) (1,2,3,4,5,7) (0,1,2,5,6,7) (0,1,3,4,5,6) (0,2,4,6) (0,2,4,6,7) (0,1,2,4,5) (0,1,2,3,5) (1,2,3,4,6,7) {75,100,105,70,66,71,44,62} +[####.] (0,2) (3,4) (1,4) (0,3,4) (0,1,2,4) (0,1,2,3) {42,28,30,31,29} +[##.###] (0,3,4,5) (0,1,3,4) (1,4) (1,2,3,5) (1,4,5) {20,51,13,33,39,33} +[.#.##] (0,3) (0,2,4) (1,3,4) {21,18,1,38,19} +[##..##] (0,1,4) (0,1,3) (1,4) (0,1,2) (2,4,5) (3,5) (0,1,2,3,5) {45,49,27,52,19,43} +[.##.] (0,2,3) (0,1) (0,1,3) {158,17,141,151} +[...#.#.#.#] (0,1,2,3,4,5,7) (0,2,3,4,6,9) (0,1,2,5,7,8) (0,2,3,4,6,7,8) (1,2,3,6) (1,2,6,8,9) (0,7) (0,2,5,6,8) (4,5) (2,5,8) (1,2,3,4,6,7,8,9) (3,6,7,8,9) {80,55,114,64,65,62,81,63,81,48} +[...#..#] (3,6) (2,3,5,6) (1,2,4,5,6) (3,4,6) (0,1,3,4,5,6) (0,1,6) (1,2,3,4,5,6) (0,5,6) {189,197,36,212,204,221,248} +[##..#.] (0,1,2,3) (0,2,3,5) (0,2,4,5) (1,2,3) (0,3,5) {42,19,46,36,10,27} +[#.###.##] (1,3,4,5) (0,1,3,6,7) (0,1,2,4,6) (3,4,6) (0,1,2,3,4,5,7) (0,2,3,4,5,6) {69,50,53,64,61,41,56,36} +[...###] (2,3,4,5) (0,1,3) (0,2,3,4) (2,5) (2,3) (0,1,2,3) (0,3,4,5) {61,30,67,81,36,34} +[###...##] (3,4,5) (3,4,5,6,7) (0,1,3,4,5,6,7) (0,2,3,6) (1,3) (1,2,5,6,7) (6) (0,1,2,6,7) (3,7) {33,48,39,212,12,28,69,222} +[#.#.] (2,3) (1) (0,2) (1,2,3) (0) (0,1,3) {19,30,34,40} +[#.##.] (0,2,3) (2) (1,4) {135,14,140,135,14} +[.##...#..#] (5,8) (0,1,2,3,5,7,8,9) (0,1,2,3,4,7,8,9) (4,5,8) (1,2,3,5,7,8) (1,2,6,9) (0,1,2,4) (1,2,3,4,6) (0,1,2,3,4,5,6,7,8) (3,4,6,7,8) (0,2,4,5,7,9) {53,68,84,53,59,64,36,54,60,62} +[#.###.##..] (1,2,3,7,8,9) (1,3,5,6,7) (1,4,9) (0,1,3,6,8,9) (0,1,2,5,6) (2,5,7) (0,1,3,4,6,7,9) (2,6,9) {38,68,42,39,11,56,63,39,17,33} +[.#.##..] (2,5) (1,3,4,5,6) (0,2,3,4,5) (3,4) (0,1,6) (2,4) (0,3,6) {28,15,42,53,52,50,19} +[##..###] (1,3,4,5,6) (0,1,2,3,4,5) (0,3,4) (2,6) (0,1,4,5,6) {34,39,27,37,51,39,50} +[######] (2,4,5) (1,3,4,5) (0,1,3,4,5) (0,3,4) (2,3,4,5) (0,1) {29,24,32,39,57,44} +[##.##] (1,3) (0,1,2) (0,4) (2,4) (2,3,4) {10,6,24,16,30} +[#....#....] (1,4,5,6,8,9) (0,2,4,5,6,9) (1,2,3,4,5,6,7,8) (2,4,6,9) (3,4,7,8) (0,4,5,7,8,9) (0,1,4,6,7,9) (1,4,5,8,9) (0,1,2,3,4,6,7,9) (1,3,6,7,8,9) (0,4,5,6,7,8,9) (0,1,2,4,5,6,7,8) {68,87,58,60,110,79,107,106,98,85} +[.##.] (0,2,3) (0,1,3) (1,2) {206,30,204,206} +[.###.#] (1,5) (0,2,3,5) (0,1,4,5) (0) (2,4,5) (1,2,3) (1,2,3,4) (1,2,3,5) {20,60,50,49,23,32} +[..####.] (0,3,5) (0,2,6) (2,3,4,5) (0,1,2,5,6) (1,3) (0,1,6) {40,21,22,23,5,27,26} +[#.###.##.] (0,4,6) (0,1,2,7,8) (0,1,3,6,8) (0,2,3,4,6,7,8) (1,4,7) (1,6,7) (0,1,3,5) (0,2,3,5,6,7,8) (1,3) (8) {81,64,31,63,42,30,68,53,211} +[#...##.#.] (0,3) (0,2,3,5,6,7,8) (0,1,2,4,6,8) (1,3,4,5,7,8) (1,2,3,5,6,8) (4,8) (0,1,2,7) (2,4,6) (0,1,2,3,6,7) (0,1,2,5,7,8) (0,3,5,6,8) {77,62,66,65,45,40,59,49,61} +[#....#] (1,2,3,4,5) (1,2,3,4) (0,1,2,3,4) (1,2,4,5) {20,41,41,36,41,13} +[###..] (0,2,4) (1,2,3) (0,2,3) (1,3) {21,10,27,27,4} +[..###] (0,1,2,4) (0,1,3) (2,3) (1,2) {19,19,115,108,13} +[.#....##] (1,4,6) (4,5) (0,1,2,6,7) (0,3) (3,4,5,6) (1,2,7) (0,3,4,7) {30,42,32,16,34,13,34,43} +[........##] (0,3,4,6,7) (0,1,4,5,6,7,8,9) (0,1,2,3,5,7,9) (0,1,2,4,6,7,9) (4,5,7,8) (1,2,3,4,7) (1,2,3,4,5,6,7,8,9) (0,1) (0,7,9) (0,2,3,5,6,8,9) {83,54,53,60,50,61,51,83,46,74} +[....#....] (0,1,2,5,6,7) (5,6) (0,2,5,7,8) (0,1,2,3,5,6,7,8) (1,2,3,4,5,6,8) (3) (1,2,3,4,6,7,8) (1,4,7) {20,27,27,26,16,28,19,29,20} +[#.#...] (0,2,3,4,5) (1,2,3,5) (2,4) (1,3,4) (0,3,4) (1,2,4) (0,1,2,4,5) {38,49,35,44,71,22} +[.####.] (0,1,3) (0,1,5) (0,1,3,4) (0,1,2) (1,2,5) (0,4) {165,164,130,14,16,31} +[.###...] (2,4,6) (1,3) (1,3,4,6) (0,1,3,4) (0,2,5) {17,50,20,50,54,0,37} +[###.#] (2,3,4) (0,3,4) (1,2,3,4) (0,1,2,3) (0,1,3) (1,2,4) {21,214,231,54,220} +[.#.#] (0,2) (0,1,2) (0,1,3) (2,3) (3) {176,158,46,169} +[##....###.] (0,1,4,5,6,7,8,9) (0,2,3,4,6,7,8,9) (0,1,3,4,5,6,8,9) (0,3) (0,1,2,3,5,6,7,9) (0,3,4,5,6) (1,2,3,4,6,7,8) (2,3,5,6) {248,43,55,260,234,235,262,55,46,46} +[#.###...#] (0,1,3,4,5,6,7,8) (1,2,3) (3,6) (1,2,5,7,8) (0,1,2,5) (0,1,2,3,5,7) (0,2,3,8) (0,2) {187,46,178,197,20,39,38,24,176} +[##.....] (6) (0,1,2,4) (1,2,3,5,6) (0,2,4,6) (1,3,4,6) (0,3,4) (0,1,3,4,5) (2,3,5) (0,1,5) {51,54,59,58,45,57,66} +[#.###.#.] (0,1,3) (0,1,2,4,6,7) (1,2,4,5) (0,4) (0,2,4,6) (0,1,2,3,4,5,6) (0,1,2,3,4,6) (0,1,5) (0,2,3,4,5,7) (0,1,2,4,5,6) {105,98,94,39,95,70,73,24} +[###.] (0,1,2) (1,2,3) {10,25,25,15} +[##....##] (0,2,3,4,5,6) (4,6) (3,4) (0,2,7) (1,2,4,5,6) (1,2,3,4,5,7) (1) {33,210,235,34,244,221,229,25} +[.##..#] (1,2,3,4,5) (1,2,3,4) (0,1,3,5) (4,5) (2,4) (2,3) (0,2,3,4,5) (0,3,5) {188,22,36,206,29,191} +[..##.#.#] (3,4,5,6) (0,3,6,7) (1,6) (0,1,3,4,6,7) (2,3,5,7) (0,1,2,5,6,7) (1,2,3,5,6) (0,1,3,5,6,7) {32,45,31,240,182,229,238,52} +[#..#.#.##] (0,2,4,5,6,7,8) (0,7) (0,1,3,5,8) (1,4,7) (1,2,3,4,5,6,8) (1,6) (3,4,5,8) (3,7) {23,32,8,26,16,28,28,17,28} +[..###..] (0,1,2,3,5,6) (2,3,6) (0,1,2,4,5,6) (0,1,2,4,6) (0,3,4,5) (2,3,4) {46,31,48,44,50,45,32} +[#.#.] (1,3) (0,3) (0,2) {21,7,15,13} +[#..#.] (0,1,2,3) (1,3,4) (2,3) (1,2,4) (1,4) (0,2) {15,36,31,26,24} +[.#......] (0,2,3,5,7) (0,1,3,5,6) (0,2,4,5,6) (0,1,2,5,6,7) (3,7) (1,2,3,4,5,7) (4,7) (0,4,5,6,7) {47,25,38,27,40,52,47,51} +[##.#...##.] (0,7,8) (4,5,7) (0,2,3,5,6,8) (1,2,4,5,7,8,9) (1,3) (0,2,3,5,6,7,8,9) (0,4) (1,2,3,4,5,6,7,9) {45,45,54,46,56,67,34,63,55,36} +[###.#] (1,2,3,4) (1,3) (0,2,3,4) (1,2) {8,31,21,26,8} +[.#..#.#] (2,5,6) (1,3,4,6) (0,3,4,5,6) (1,3) (0,3,5,6) (1,2,3,4,5) (3) (0,1,3,5) (0,2,6) {134,35,20,168,115,154,141} +[##.##..###] (4) (0,2,3,5,6,8) (0,1,5,8,9) (2,5,6,7,9) (0,1,3,4,7,8,9) (0,1,2,3,4,5,6,9) (4,6) (0,4,6,8,9) (3,5) {80,40,30,59,57,61,52,20,73,63} +[##....#.] (0,1,2,4,5,7) (2,3,4,5,6,7) (3,5) (0,4,6,7) (0,1,6) (0,1,2,4,6,7) {42,30,145,140,157,150,157,157} +[.#.#] (0,2) (1,3) (0,3) (0,1) {23,20,0,15} +[..###...] (0,5,6) (0,5) (1,2,3,4,5,6) (0,1,2,3,6,7) (0,2,3,4,5,6) (2,3,4,7) {40,13,34,34,21,27,29,23} +[..#....#.#] (1,5,7,9) (0,3,4,5,6,7,8) (3,5,9) (0,3,5,6,7,9) (7,8) (1,2,3,7,8,9) (0,2,4,5,7,8,9) (0,2,3,4,5,6,7,8) (0,1,3,4) (2,3,5,7,8) (0,1,2,6,7,9) {57,48,42,76,40,79,34,103,70,83} +[.###.#.#] (1,2,3,6) (3,5,7) (3,6,7) (1,2,5) (0,2,3,4,6) (0,1,4,5) (0,1,2,3,4,5,7) {26,44,48,61,26,37,41,34} +[..###] (0,1,4) (0,3,4) (1,2,3) (0,1,2,3) {14,6,2,10,12} +[.#......#] (2,3,6) (1,4) (0,2,3,4,5,7) (0,1,5,6,7) (3,7) (0,1,4,5,6,7) (0,1,3,6,8) (0,1,2,5,8) (3,4,6,7) {38,37,26,33,29,34,40,37,10} +[..##] (1,3) (1,2) (0,1,3) (0) (0,2,3) {31,35,28,37} +[##..] (0) (0,2,3) (0,2) (0,1,3) (0,3) (1,3) {222,2,15,21} +[#.#.#...] (1,2,3,4,5) (0,1) (1,2,3,5,6) (1,3,4,6) (2,3,5,6,7) (1,3,4,6,7) (0,1,2,3,4,5,6) (0,2) (1,3,5,6,7) {40,88,66,80,56,58,65,16} +[.#.#] (0,1,3) (0,2) (1) (0,2,3) (0,3) {57,20,28,45} +[..####] (1,2,3,5) (1,2) (0,2,3,4,5) (2,3,5) (0,1,3,5) (0,3,4,5) {174,42,57,206,161,206} +[...#.#.#] (0,1,2,3,7) (4,5,6) (1,2,4,7) (0,1,2,3,4,6) (0,1,2,7) (4,5) (1,2,3,5,7) {21,39,39,21,39,25,15,29} +[##...##..] (0,2,3,4,6,7,8) (3,4,5) (0,1,2,3,4,5) (2,8) (0,2,3,4,5,7,8) (0,1,4,6) (1,3,5,6,7,8) (0,7) {199,20,205,227,209,44,201,215,221} +[#...#.] (0,1,4) (0,3) (2,3,4,5) (1,5) (2,4) (1,4,5) (1,4) {2,175,8,6,176,159} +[##..#.#] (0,3,4,5,6) (0,2,4,6) (0,1,2,3) (1,2,3,4,5,6) (3,4,5,6) {24,147,162,170,184,169,184} +[#.#.#] (1) (3,4) (0,1,3,4) (0,2,3) {15,0,15,31,16} +[..##...] (1,3,4,5) (0,3,4,5,6) (1,3,4,5,6) (5,6) (0,4,5,6) (0,2,4,6) {37,31,14,40,68,56,59} +[#.##..##] (3,5,6) (1,2,6) (0,3,4,5,6) (0,1,2,5,6,7) (2) (0,2,4,6) (2,6) (0,2,3,4,7) (0,3,6) {48,8,40,38,29,17,40,26} +[####.] (1,3,4) (0,2,3) (0,1,2) (0,1,4) (1,3) (4) (0,4) {63,43,33,33,45} +[.#..###] (1,2,3) (0,2,4,6) (1,4,5,6) (0,2,4,5) (4,5,6) (0,1,5,6) (0,3,4,6) (1,3,4,5) (1,4) {44,51,29,17,48,49,49} +[.....#..] (0,4,5,6,7) (0,2,7) (0,1,5) (0,3,4,5,7) (1,2,4) (2,3,4,6,7) (1,4) {38,32,27,19,53,38,24,34} +[##.#.##] (0,2,3,5,6) (1,2) (1,3,4,5,6) (1,4,6) (0,4,5,6) (0,1,2,3,4,5) {49,31,33,43,47,61,54} +[.##.###.] (2,3,5,6) (0,1,2,3,5,6) (1,5,7) (0,1,2,4,6,7) (0,2,3,4,5) (0,3,6) {34,33,43,36,21,38,51,31} +[....##..#.] (0,2,6) (0,3,6,9) (3,4,5) (0,1,2,4,5,6,7,8) (0,1,2,3,4,6,8) (1,2,7,8,9) (2,3,4,5,7,9) (0,1,2,3,6,9) (0,2,3,4,5,7,8) (7,8,9) (1,2,3,4,5,6,7,8,9) (0,1,3,4,5,7,8,9) {56,38,58,66,44,35,35,38,44,42} +[....#.#] (3,4,5,6) (0,3) (2,3,4,5) (0,3,4,6) (1,3,6) (1,3,4,5,6) (0,2,3) (0) (1,2,3,4,5) {43,28,30,78,56,42,46} +[##.....#.] (1,4,5,6,7,8) (1,2,3,4,5,7,8) (0,2,3,4,6,7,8) (0,1,7) (2,3,4,5,6,7,8) (0,1,6) (0,1,2,3,5,6,7) (1,3,6,8) (0,3,4,7,8) (0,2,3,4) (4,5) {30,38,44,64,47,32,56,48,56} +[..###] (0,3) (0,1,3) (2,3,4) (0,2,4) {33,10,34,31,34} +[##..] (0,2,3) (2,3) (0,1) {131,12,119,119} +[.#.#.##.##] (1,6,8,9) (0,1,3,7,8,9) (0,1,2,4,5,6,8) (0,1,2,3,4,5,6,7) (0,1,2,4,5,6,8,9) (0,3,4,5,6,9) (0,1,2,3,4,6,8,9) (0,1,4,6) (0,1,3,4) (2,7) (0,3,4,5,7,8,9) {58,51,167,45,47,38,47,167,29,36} +[.##.] (0,2) (0,3) (2) (1,2) {8,10,16,3} +[###.] (1) (0,2) (0,3) {21,6,20,1} +[#.#...] (0,1,5) (0,1,4,5) (1,2,3,4,5) (2,4) (0,2) {20,28,38,13,46,28} +[#..#..##] (0,4) (1,2,6) (0,2,6) (1,3,4,5,6,7) (0,2,4,6,7) (0) (4,6,7) (3,4,7) (0,1,2,4,5) {48,190,41,178,218,183,218,200} +[##...] (1,2,4) (0,2,4) (0,4) (2) (0,1,2,3) (0,1,2) (2,3) {50,20,54,9,36} +[##.#] (0,2,3) (0,2) (1,2) {18,11,29,17} +[.#####] (0,2,3,4) (0,4) (0,3,4) (1,2,4,5) {45,12,21,29,57,12} +[##.#] (0,1,2) (0,1,3) {31,31,20,11} +[.#.#...#.] (1,2,3,4,5,6,8) (1) (2,3,7) (0,3) (4,5,6) (0,1,3,8) (0,1,2,4,7) (2,6,7) (1,3,6,7,8) (1,4,5,7) (4,7) {26,219,40,67,209,190,46,235,42} +[...##..#.] (3,6) (2,6) (1,3,4,6,7) (0,2,3,4,5) (2,4,7) (0,2,3,4,6,7,8) (0,2,6) (1,8) (3,7,8) (0,6) {12,28,36,179,25,8,182,25,28} +[.##...] (3,4) (1,2,3,4,5) (0) (2,4,5) (3,4,5) (1,2,3,4) (2) {4,22,27,49,51,39} +[..#.#..] (0,1,2,4,6) (1,6) (0,2,4,5,6) (0,2,3,4,5,6) (1,4,5) (0,3,5,6) {42,32,38,22,45,40,58} +[.#..###] (3,5,6) (1,2,3,6) (0,3,4,5) (0,2,4,5,6) (1,3,4) (0,1,2,3,4,5) (0,1,3) (1,2,3,4,6) (1,6) {38,62,45,88,61,47,49} +[##.#..#.] (0,1,2,5,7) (4,5) (2,4,7) (1,2,3,4,6,7) (5) (0,4,6,7) (0,1,2,5,6,7) (0,2,3,5,7) (0,2,3,5) (1,4) {31,6,39,18,36,46,11,33} +[....#.##] (0,1,2,3,4,5) (0,1,4,7) (3,4,7) (1,2,3,4,6) (4,5,7) (1,3) (0,2,4,6) {26,26,29,26,45,0,29,16} +[##.#] (0,1,2) (0,1,3) {23,23,10,13} +[.####.##] (2,4) (1,2,5) (0,2,7) (1,4,5) (1,2,4,5,7) (0,1,2,3,5,6) (0,1,3,4,6) {22,59,52,21,56,53,21,13} +[#####] (0,2,4) (3,4) (0,3,4) (1,4) {8,11,6,19,36} +[##.......] (0,2,6) (4,6) (5,7) (0,1,2,3,4,5,6) (0,6,7,8) (0,1,2,3,4,6,7) (3,8) (0,1,3,5,7) {54,26,18,38,114,24,142,42,30} +[######..] (0,4,5,6) (0,1,2,3,5) (0,1,2,3,4,6) (0,1,2,4,5,6,7) (1,2,5,6,7) (1,6,7) {40,47,44,26,21,47,38,21} +[#.###] (2,3,4) (2,3) (0,4) (1,2) (1,3) (0) {12,28,23,35,13} +[#.###..##.] (0,5,7,8) (0,2,3,5,6,8,9) (2,3,5,8,9) (2,3,4,7,8) (1,3,4,5,6,7,8,9) (1,2,4,5,6,8) (2,3,4,6,7,8,9) (0,1,2,3,4,5,6) (1,3,4,5,7) (2,3,7,8,9) (0,3,6) {32,188,63,213,189,204,202,179,205,194} +[..#.#.#.#] (0,1,2,5,6,7,8) (0,1,2,3,4,6,7) (1,2,3,6,7,8) (1,8) (0,3,4,6) (2) (2,7) (0,4,5,8) (0,2,3,4,5,6,7) (1,2,3,4,7) (1,2,8) {43,50,42,27,40,23,30,32,48} +[.#....#] (0,5,6) (0,1,2,3,5,6) (2,3,6) (0,2,4,5,6) (0,1,4,5,6) (0,1,3,4,5,6) {43,30,16,31,21,43,50} +[###.#.....] (1,8) (2,5) (0,1,3,4,6,9) (0,1,2,3,5,9) (1,2,3,5,7,8) (3,4) (0,1,2,4,5,8) (0,1,3,4,8) (6,9) (0,1,4,5,6,7,9) (0,1) (1,2,3,5,6,7,8) {52,74,40,56,54,44,42,24,49,37} +[##.#] (0) (1,2) (3) (0,2) (1,3) (0,1) {34,30,7,17} +[####.##] (2,5) (0,1,2,3,5) (1,3,4) (0,2,6) (0,5) (3,5) {37,186,19,192,175,39,6} +[.##.......] (0,1,3,4,5,6,7,8) (0,1,2,3,5,9) (1,6) (2,3,4,6) (3,8) (0,2,3,4,5,6,7,8) (1,4,7,8,9) (2,3,6,7) (4,7,8) (1,3,4,8,9) (0,5,6,7,9) (1,2,5,7,8) {45,67,62,68,59,61,61,93,73,56} +[##.##.##] (1,7) (2,3) (0,1,4,5,6,7) (0,1,2,3,4,5,7) (0,1,2,3,4,5) (4) (1) (2,3,4,5,6) (0,5) (1,2,6) {49,86,82,63,68,62,40,41} +[#####.####] (0,1,2,5,8) (1,2,3,5,7,8,9) (0,1,2,3,6,7) (1,3,5,6) (1,2,3) (0,1,2,3,4,6,7,8,9) (0,2,4,5,6,7,8,9) (1,2,3,4,5,6,7,9) (0,2,4,7,8) (0,1,2,4,5,6,7,9) {68,91,90,64,38,75,71,69,53,50} +[#.#.] (1,3) (0,1,3) (0,3) (2,3) {8,12,109,125} +[####.....] (3,4,5,7) (0,1,2,4,5,7) (2,3,6,7,8) (0,1,5,8) (0,1,2,4,5,6,7) (1,3,8) (1,2,4) (0,2,3,5,6,7,8) (0,1,5,6,7,8) {178,180,64,49,55,195,174,201,168} +[....#] (0,3,4) (0,2,3,4) (1,2,3) (1,2,3,4) (2,3) {15,10,22,36,18} +[.#.#..####] (0,1,3,7,8,9) (0,2,3,4,5,6,8,9) (1,3,4,6,8,9) (0,1,2,4,5,6,7,8) (5,7,8,9) (0,2,3,5,6,7,8,9) (3,4,7) (0,1,2,3,5) (1,9) (4,5,8,9) (0,2,3,4,5,6,7,9) {49,58,32,69,53,49,35,69,60,77} +[.#..#] (0,1,2,3,4) (1,3) (0,2,3) (0,3) {201,30,21,221,10} +[.#.#] (1,2,3) (0,3) (2,3) (0,1) {19,24,23,33} +[##.#] (2) (0,2) (1,2,3) (1,2) (1,3) {8,22,25,13} +[.....##] (0,1,3,5,6) (1,4) (0,2,4,5,6) (0,2,3,6) (0,3,4) {185,27,155,184,18,21,175} +[..##.##..] (0,1,2,3,4,6,8) (5,6,7,8) (2,3) (0,1,2,5,7,8) (0,1,2,5,8) (1,2,3,5,6,7,8) (2,5,8) (0,1,2,3,4,5,6,7) (2,3,4,5,6,8) {24,40,46,35,16,35,35,32,44} +[##.#.#....] (0,2,4,5,6,7,8,9) (0,1,2,3) (5,6) (0,6,8) (4,6) (0,2,3,6,7,8) (1,4,5,8,9) (0,1,2,3,4,5,6,9) (0,1,2,4,5,6,7,8) (1,3,4,5,7) (0,1,5,6,8) (1,2,3,4,5,7,8,9) (1,3,5,6,8,9) {236,237,236,240,74,93,90,61,64,52} +[.#..#.###] (0,2,3,5,8) (1,2,5) (1,2,3,4,7,8) (1,3) (1,2,4,6,7,8) (1,2,3,4,6,8) (2,3,4,5,6,7,8) (3,5,7,8) (0,2,4,8) (0,2,5,6,8) {126,41,170,163,59,143,38,53,186} +[.###] (0,2) (2,3) (1,2,3) (1,2) {10,23,48,25} +[.#.##..#] (0,2,4,7) (2,3,5,6,7) (4,6) (0,1,3,6) (2,6) (3) (0,1,3,4,5,7) (0,7) (0,2,3,4,6) {47,22,169,181,45,157,191,175} +[#..#.#.] (0,1,6) (0,1,5) (0,6) (0,1,3,4,5,6) (0,2,3,4,5) (1,2,3,4) (0,2,3,5,6) (2,3,5) {185,37,41,55,33,46,175} +[..#.##...#] (1,2,3,4,5,6,7,8) (0,2,4,6,8,9) (0,1,2,3,4,5,6,7,9) (2,7) (4,5,6) (0,2,4,5,8) (1,3,4,5,6,8,9) (1,2,3,4,5,6,7) {35,39,205,39,80,77,61,183,28,19} +[...##.] (1,2,3,4) (3,4) (1,2,3,4,5) (1,3) (0,1,2,3) (0,5) (2,4,5) {20,41,41,61,54,47} diff --git a/2025/inputs/10_example.txt b/2025/inputs/10_example.txt new file mode 100644 index 0000000..dd91d7b --- /dev/null +++ b/2025/inputs/10_example.txt @@ -0,0 +1,3 @@ +[.##.] (3) (1,3) (2) (2,3) (0,2) (0,1) {3,5,4,7} +[...#.] (0,2,3,4) (2,3) (0,4) (0,1,2) (1,2,3,4) {7,5,12,7,2} +[.###.#] (0,1,2,3,4) (0,3,4) (0,1,2,4,5) (1,2) {10,11,11,5,10,5}