aoc

My solutions for the Advent of Code
git clone https://git.tronto.net/aoc
Download | Log | Files | Refs | README

commit 3ca7543b9332b23151bd64bf143c3bf570dd44f6
parent 51190479b1c1a58283919250ca3ee207ef6fa2a3
Author: Sebastiano Tronto <sebastiano@tronto.net>
Date:   Wed,  2 Jul 2025 11:21:58 +0200

Day 14 2022

Diffstat:
A2022/14/a.rs | 22++++++++++++++++++++++
A2022/14/b.rs | 22++++++++++++++++++++++
A2022/14/common.rs | 129+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A2022/14/input | 148+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A2022/14/test | 2++
5 files changed, 323 insertions(+), 0 deletions(-)

diff --git a/2022/14/a.rs b/2022/14/a.rs @@ -0,0 +1,22 @@ +mod common; +use common::*; + +fn drop(map: &mut Map, i: (usize, usize)) -> bool { + let (x, y) = i; + if y > map.ymax { return false; } + + for j in vec![(x, y+1), (x-1, y+1), (x+1, y+1)].into_iter() { + if !map.at(j) { return drop(map, j); } + } + + map[i] = true; + true +} + +fn main() { + let mut map = read_map_from_stdin(); + let mut i = 0; + while drop(&mut map, (500, 0)) { i+= 1; } + //map.print(); + println!("{i}"); +} diff --git a/2022/14/b.rs b/2022/14/b.rs @@ -0,0 +1,22 @@ +mod common; +use common::*; + +fn drop(map: &mut Map, i: (usize, usize)) -> bool { + let (x, y) = i; + if y < map.ymax { + for j in vec![(x, y+1), (x-1, y+1), (x+1, y+1)].into_iter() { + if !map.at(j) { return drop(map, j); } + } + } + + map[i] = true; + !map.at((500, 0)) // Returns false after filling the last -> off by 1 +} + +fn main() { + let mut map = read_map_from_stdin(); + let mut i = 0; + while drop(&mut map, (500, 0)) { i += 1; } + //map.print(); + println!("{}", i+1); +} diff --git a/2022/14/common.rs b/2022/14/common.rs @@ -0,0 +1,129 @@ +use std::cmp::{min, max}; +use std::ops::{Index, IndexMut}; + +pub struct Map { + cells: Vec<Vec<bool>>, + pub xmin: usize, + pub xmax: usize, + pub ymin: usize, + pub ymax: usize +} + +fn line_from_str(s: &str) -> Vec<(usize, usize)> { + let mut line = vec![]; + let mut i = 0; + while i < s.len() { + let mut j = s[i..].find(',').unwrap(); + let x = s[i..i+j].parse::<usize>().unwrap(); + i += j+1; + j = s[i..].find(|c| c == ' ' || c == '\n').unwrap(); + let y = s[i..i+j].parse::<usize>().unwrap(); + i += j+4; + line.push((x, y)); + } + line +} + +impl Index<(usize, usize)> for Map { + type Output = bool; + fn index(&self, i: (usize, usize)) -> &bool { + self.validate_index(i); + &self.cells[i.1-self.ymin][i.0-self.xmin] + } +} + +impl IndexMut<(usize, usize)> for Map { + fn index_mut(&mut self, i: (usize, usize)) -> &mut bool { + self.validate_index(i); + &mut self.cells[i.1-self.ymin][i.0-self.xmin] + } +} + +impl Map { + fn in_bounds(&self, i: (usize, usize)) -> bool { + i.0 >= self.xmin && i.0 <= self.xmax && + i.1 >= self.ymin && i.1 <= self.ymax + } + + fn validate_index(&self, i: (usize, usize)) { + if !self.in_bounds(i) { + panic!("Out of bounds: {} {} outside [{}, {}]x[{}, {}]", + i.0, i.1, self.xmin, self.xmax, self.ymin, self.ymax); + } + } + + pub fn at(&self, i: (usize, usize)) -> bool { + self.in_bounds(i) && self[i] + } + + fn set_bounds(&mut self, lines: &Vec<Vec<(usize, usize)>>) { + for l in lines { + for p in l { + self.xmin = min(self.xmin, p.0); + self.xmax = max(self.xmax, p.0); + self.ymin = min(self.ymin, p.1); + self.ymax = max(self.ymax, p.1+1); + } + } + + // Part 2 requires a larger map + self.xmin = min(self.xmin, 500 - self.ymax - 1); + self.xmax = max(self.xmax, 500 + self.ymax + 1); + self.cells = vec![ + vec![false; self.xmax-self.xmin+1]; self.ymax-self.ymin+1 + ]; + } + + fn fill_line(&mut self, line: &Vec<(usize, usize)>) { + for i in 0..line.len()-1 { + if line[i].0 == line[i+1].0 { + let y0 = min(line[i].1, line[i+1].1); + let y1 = max(line[i].1, line[i+1].1); + for y in y0..=y1 { + self[(line[i].0, y)] = true; + } + } else { + let x0 = min(line[i].0, line[i+1].0); + let x1 = max(line[i].0, line[i+1].0); + for x in x0..=x1 { + self[(x, line[i].1)] = true; + } + } + } + } + + fn from_lines(lines: &Vec<Vec<(usize, usize)>>) -> Map { + let mut map = Map { + cells: vec![], + xmin: 500, + xmax: 500, + ymin: 0, + ymax: 0 + }; + map.set_bounds(lines); + for l in lines { map.fill_line(l); } + map + } + + #[allow(dead_code)] + pub fn print(&self) { + println!("x: {} to {}", self.xmin, self.xmax); + println!("y: {} to {}", self.ymin, self.ymax); + for v in &self.cells { + for b in v { + print!("{}", if *b { '#' } else { '.' }); + } + println!(); + } + } +} + +pub fn read_map_from_stdin() -> Map { + let mut lines = Vec::<Vec<(usize, usize)>>::new(); + let mut s = String::new(); + while std::io::stdin().read_line(&mut s).unwrap() > 0 { + lines.push(line_from_str(&s)); + s.clear(); + } + Map::from_lines(&lines) +} diff --git a/2022/14/input b/2022/14/input @@ -0,0 +1,148 @@ +494,132 -> 494,134 -> 487,134 -> 487,139 -> 502,139 -> 502,134 -> 499,134 -> 499,132 +509,82 -> 514,82 +511,113 -> 511,116 -> 509,116 -> 509,120 -> 522,120 -> 522,116 -> 516,116 -> 516,113 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +510,65 -> 510,57 -> 510,65 -> 512,65 -> 512,63 -> 512,65 -> 514,65 -> 514,64 -> 514,65 +490,39 -> 490,42 -> 483,42 -> 483,49 -> 503,49 -> 503,42 -> 495,42 -> 495,39 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +526,150 -> 530,150 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +512,127 -> 516,127 +494,132 -> 494,134 -> 487,134 -> 487,139 -> 502,139 -> 502,134 -> 499,134 -> 499,132 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +522,153 -> 522,156 -> 515,156 -> 515,164 -> 533,164 -> 533,156 -> 528,156 -> 528,153 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +517,77 -> 524,77 -> 524,76 +522,153 -> 522,156 -> 515,156 -> 515,164 -> 533,164 -> 533,156 -> 528,156 -> 528,153 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +529,148 -> 533,148 +521,110 -> 525,110 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +511,113 -> 511,116 -> 509,116 -> 509,120 -> 522,120 -> 522,116 -> 516,116 -> 516,113 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +506,123 -> 510,123 +490,39 -> 490,42 -> 483,42 -> 483,49 -> 503,49 -> 503,42 -> 495,42 -> 495,39 +494,132 -> 494,134 -> 487,134 -> 487,139 -> 502,139 -> 502,134 -> 499,134 -> 499,132 +522,153 -> 522,156 -> 515,156 -> 515,164 -> 533,164 -> 533,156 -> 528,156 -> 528,153 +522,153 -> 522,156 -> 515,156 -> 515,164 -> 533,164 -> 533,156 -> 528,156 -> 528,153 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +510,65 -> 510,57 -> 510,65 -> 512,65 -> 512,63 -> 512,65 -> 514,65 -> 514,64 -> 514,65 +517,77 -> 524,77 -> 524,76 +520,84 -> 525,84 +506,127 -> 510,127 +522,153 -> 522,156 -> 515,156 -> 515,164 -> 533,164 -> 533,156 -> 528,156 -> 528,153 +494,132 -> 494,134 -> 487,134 -> 487,139 -> 502,139 -> 502,134 -> 499,134 -> 499,132 +494,132 -> 494,134 -> 487,134 -> 487,139 -> 502,139 -> 502,134 -> 499,134 -> 499,132 +497,23 -> 497,14 -> 497,23 -> 499,23 -> 499,16 -> 499,23 -> 501,23 -> 501,17 -> 501,23 +528,88 -> 533,88 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +497,23 -> 497,14 -> 497,23 -> 499,23 -> 499,16 -> 499,23 -> 501,23 -> 501,17 -> 501,23 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +490,39 -> 490,42 -> 483,42 -> 483,49 -> 503,49 -> 503,42 -> 495,42 -> 495,39 +550,150 -> 554,150 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +514,88 -> 519,88 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +506,84 -> 511,84 +506,52 -> 512,52 -> 512,51 +516,74 -> 520,74 +524,104 -> 528,104 +506,52 -> 512,52 -> 512,51 +511,113 -> 511,116 -> 509,116 -> 509,120 -> 522,120 -> 522,116 -> 516,116 -> 516,113 +527,106 -> 531,106 +497,23 -> 497,14 -> 497,23 -> 499,23 -> 499,16 -> 499,23 -> 501,23 -> 501,17 -> 501,23 +507,67 -> 507,68 -> 518,68 -> 518,67 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +538,146 -> 542,146 +497,23 -> 497,14 -> 497,23 -> 499,23 -> 499,16 -> 499,23 -> 501,23 -> 501,17 -> 501,23 +515,110 -> 519,110 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +530,108 -> 534,108 +497,23 -> 497,14 -> 497,23 -> 499,23 -> 499,16 -> 499,23 -> 501,23 -> 501,17 -> 501,23 +503,129 -> 507,129 +535,144 -> 539,144 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +507,67 -> 507,68 -> 518,68 -> 518,67 +500,88 -> 505,88 +507,67 -> 507,68 -> 518,68 -> 518,67 +500,127 -> 504,127 +511,113 -> 511,116 -> 509,116 -> 509,120 -> 522,120 -> 522,116 -> 516,116 -> 516,113 +517,86 -> 522,86 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +497,23 -> 497,14 -> 497,23 -> 499,23 -> 499,16 -> 499,23 -> 501,23 -> 501,17 -> 501,23 +527,110 -> 531,110 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +513,84 -> 518,84 +510,65 -> 510,57 -> 510,65 -> 512,65 -> 512,63 -> 512,65 -> 514,65 -> 514,64 -> 514,65 +533,110 -> 537,110 +503,125 -> 507,125 +535,148 -> 539,148 +507,88 -> 512,88 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +510,65 -> 510,57 -> 510,65 -> 512,65 -> 512,63 -> 512,65 -> 514,65 -> 514,64 -> 514,65 +524,108 -> 528,108 +490,39 -> 490,42 -> 483,42 -> 483,49 -> 503,49 -> 503,42 -> 495,42 -> 495,39 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +544,150 -> 548,150 +524,86 -> 529,86 +512,80 -> 517,80 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +490,39 -> 490,42 -> 483,42 -> 483,49 -> 503,49 -> 503,42 -> 495,42 -> 495,39 +521,106 -> 525,106 +522,153 -> 522,156 -> 515,156 -> 515,164 -> 533,164 -> 533,156 -> 528,156 -> 528,153 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +503,86 -> 508,86 +497,23 -> 497,14 -> 497,23 -> 499,23 -> 499,16 -> 499,23 -> 501,23 -> 501,17 -> 501,23 +509,125 -> 513,125 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +532,146 -> 536,146 +516,82 -> 521,82 +510,65 -> 510,57 -> 510,65 -> 512,65 -> 512,63 -> 512,65 -> 514,65 -> 514,64 -> 514,65 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +509,129 -> 513,129 +541,148 -> 545,148 +490,39 -> 490,42 -> 483,42 -> 483,49 -> 503,49 -> 503,42 -> 495,42 -> 495,39 +494,132 -> 494,134 -> 487,134 -> 487,139 -> 502,139 -> 502,134 -> 499,134 -> 499,132 +497,23 -> 497,14 -> 497,23 -> 499,23 -> 499,16 -> 499,23 -> 501,23 -> 501,17 -> 501,23 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +511,113 -> 511,116 -> 509,116 -> 509,120 -> 522,120 -> 522,116 -> 516,116 -> 516,113 +490,39 -> 490,42 -> 483,42 -> 483,49 -> 503,49 -> 503,42 -> 495,42 -> 495,39 +541,144 -> 545,144 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +511,113 -> 511,116 -> 509,116 -> 509,120 -> 522,120 -> 522,116 -> 516,116 -> 516,113 +538,150 -> 542,150 +510,65 -> 510,57 -> 510,65 -> 512,65 -> 512,63 -> 512,65 -> 514,65 -> 514,64 -> 514,65 +511,113 -> 511,116 -> 509,116 -> 509,120 -> 522,120 -> 522,116 -> 516,116 -> 516,113 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +515,129 -> 519,129 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +510,65 -> 510,57 -> 510,65 -> 512,65 -> 512,63 -> 512,65 -> 514,65 -> 514,64 -> 514,65 +522,153 -> 522,156 -> 515,156 -> 515,164 -> 533,164 -> 533,156 -> 528,156 -> 528,153 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +510,86 -> 515,86 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +494,132 -> 494,134 -> 487,134 -> 487,139 -> 502,139 -> 502,134 -> 499,134 -> 499,132 +521,88 -> 526,88 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +510,65 -> 510,57 -> 510,65 -> 512,65 -> 512,63 -> 512,65 -> 514,65 -> 514,64 -> 514,65 +497,129 -> 501,129 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +532,150 -> 536,150 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +547,148 -> 551,148 +493,36 -> 493,33 -> 493,36 -> 495,36 -> 495,35 -> 495,36 -> 497,36 -> 497,33 -> 497,36 -> 499,36 -> 499,35 -> 499,36 -> 501,36 -> 501,34 -> 501,36 -> 503,36 -> 503,34 -> 503,36 -> 505,36 -> 505,26 -> 505,36 -> 507,36 -> 507,31 -> 507,36 -> 509,36 -> 509,33 -> 509,36 +518,108 -> 522,108 +544,146 -> 548,146 +527,101 -> 527,99 -> 527,101 -> 529,101 -> 529,98 -> 529,101 -> 531,101 -> 531,92 -> 531,101 -> 533,101 -> 533,91 -> 533,101 -> 535,101 -> 535,99 -> 535,101 -> 537,101 -> 537,100 -> 537,101 -> 539,101 -> 539,93 -> 539,101 +538,142 -> 542,142 diff --git a/2022/14/test b/2022/14/test @@ -0,0 +1,2 @@ +498,4 -> 498,6 -> 496,6 +503,4 -> 502,4 -> 502,9 -> 494,9