- commit
- 3737ee934b89de91b97c9ea60c8530e717edab78
- parent
- 43a7385bb73991fa3f0f169ba515678f250af0a1
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2022-12-13 08:12
2022-12-12
Diffstat
A | 2022/12/input.txt | 41 | +++++++++++++++++++++++++++++++++++++++++ |
A | 2022/12/solution.rs | 81 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | 2022/12/test.txt | 5 | +++++ |
3 files changed, 127 insertions, 0 deletions
diff --git a/2022/12/input.txt b/2022/12/input.txt
@@ -0,0 +1,41 @@ -1 1 abcccccccccaaaaaaaaaaccccccccccccaaaaaaaaccaaccccccccccccccccccccccccccccccccccccccccccccaaaaaa -1 2 abccccccccccaaaaaaaaaccccccccccccaaaaaaaaaaaacccccccccccaacccacccccccccccccccccccccccccccaaaaaa -1 3 abcccccccccccaaaaaaacccccccccccccaaaaaaaaaaaaaacccccccccaaacaacccccccccaaaccccccccccccccccaaaaa -1 4 abccccccccccaaaaaaccccccccccccccaaaaaaaaaaaaaaaccccccccccaaaaaccccccccccaaacccccccccccccccccaaa -1 5 abccccccccccaaaaaaaccccccccccccaaaaaaaaaaaaaacccccccccccaaaaaacccccccccaaaacccccccccccccccccaac -1 6 abaaccaaccccaaccaaaccccccccaaaaaaaaaaaaaaacaaccccccccccaaaaaaaacccccccccaaalcccccccccccccccaaac -1 7 abaaaaaacccccccccaaccccccccaaaaaacccaaaacccaaccccccccccaaaaaaaaccccccccalllllllcccccccccccccccc -1 8 abaaaaaacccccccaaacccccccccaaaaccccccaaaccccaaaaacccccccccaacccccccaaaakllllllllcccccccaacccccc -1 9 abaaaaaacccccccaaaacccccccccaacccccccaaaccccaaaaacccccccccaacccccccaakkklllpllllccccacaaacccccc -1 10 abaaaaaaaccccccaaaaccccaaccccccccccccccccccaaaaaaccccccccccccccccccckkkkpppppplllcccaaaaaaacccc -1 11 abaaaaaaacaaaccaaaaccaaaaaaccccccccccccccccaaaaaacccccccaaaccccckkkkkkkpppppppplllcddaaaaaacccc -1 12 abcaaaacccaacccccccccaaaaaacccccaaaccccccccaaaaaacccccccaaaaccjkkkkkkkpppppuppplmmdddddaaaccccc -1 13 abccaaaaaaaaaccccccccaaaaaaccccaaaaaacccccccaaacccccccccaaaajjjkkkkkrpppuuuuupppmmmdddddacccccc -1 14 abccccaaaaaaaacccccccaaaaacccccaaaaaacccccccccccccccccccaaacjjjjrrrrrrppuuuuupqqmmmmmddddaccccc -1 15 abccccaaaaaaaaacccccccaaaacccccaaaaaaccccccccccccccccccccccjjjrrrrrrrrpuuuxuvvqqqmmmmmddddccccc -1 16 abccccaaaaaaaaacccccccccccccccccaaaaaccccaacccaccccccccaaccjjjrrrruuuuuuuxxyvvqqqqqmmmmmdddcccc -1 17 abccccaaaaaaaacccccccccaaaccccccaacaaccccaaacaacccaaacaaaccjjjrrrtuuuuuuuxxyvvvqqqqqmmmmdddcccc -1 18 abccaaaaaaaacccccccccccaaaaaccccccccccccccaaaaacccaaaaaaaccjjjrrttttxxxxxxyyvvvvvqqqqmmmmdeeccc -1 19 abccaaaccaaaccccccccaacaaaaacccccccccccccaaaaaacccaaaaaacccjjjrrtttxxxxxxxyyvvvvvvvqqqmmmeeeccc -1 20 abaaaaaaaaaacccaaaccaaaaaaaaaaaccaaaccccaaaaaaaacccaaaaaaaajjjqqrttxxxxxxxyyyyyyvvvqqqnnneeeccc -1 21 SbaaaaaaaaccccaaaaccaaaaaaaaaaaaaaaaacccaaaaaaaaccaaaaaaaaacjjjqqtttxxxxEzzyyyyvvvvqqqnnneeeccc -1 22 abcaaaaaacccccaaaaccccaaaaaaaccaaaaaaccccccaaccccaaaaaaaaaaciiiqqqtttxxxyyyyyyvvvvrrrnnneeecccc -1 23 abcaaaaaacccccaaaacccaaaaaaaaccaaaaaaccccccaaccccaaacaaacccciiiqqqqttxxyyyyyywvvvrrrnnneeeecccc -1 24 abcaaaaaaccccccccccccaaaaaaaaacaaaaacccccccccccccccccaaaccccciiiqqtttxxyyyyyywwrrrrnnnneeeccccc -1 25 abcaaacaacccccaacccccaaaaaaaaacaaaaacccccccccccccccccaaaccccciiiqqttxxxywwyyywwrrrnnnneeecccccc -1 26 abccccccccaaacaaccccccccccacccccccccccccccccccccccccccccccccciiqqqttxxwwwwwwywwrrrnnneeeccccccc -1 27 abccaacccccaaaaaccccccccccccccccccccccccccccccccccccccccaacaaiiqqqttwwwwsswwwwwrrrnnfffeccccccc -1 28 abaaaaccccccaaaaaacccccccccccccccccccccccccccccaaaccccccaaaaaiiqqqttssssssswwwwrrronfffaccccccc -1 29 abaaaaaacccaaaaaaacccccccccccccccccccccccccccaaaaaacccccaaaaaiiqqqssssssssssswrrrooofffaaaacccc -1 30 abaaaaaaccaaaaaacccccccccccccccccccccccccccccaaaaaacccccaaaaaiiqqqppssspppssssrrrooofffaaaacccc -1 31 abaaaaaaccaacaaacccccccccccccccccccccccccccccaaaaaacccccaaaaaiihpppppppppppossrrooofffaaaaacccc -1 32 abaaaaccccccccaacccccccccccccccccccccccccccccaaaaaccccccccaaahhhhppppppppppoooooooofffaaaaccccc -1 33 abaaaaccccccccccaacccccccccccccccccaaacccccccaaaaacccccccccccchhhhhhhhhhggpoooooooffffaaaaccccc -1 34 abccaacccccccacaaaccccccccccccccccaaaaacccccccccccccccccccccccchhhhhhhhhggggoooooffffaacaaacccc -1 35 abccccccccccaaaaacaaccccccccccccccaaaaaccccccccccccccccccccccccchhhhhhhhggggggggggffcaacccccccc -1 36 abccccccccccaaaaaaaaccccccccccccccaaaacccaacccccccccccaccccccccccccccaaaaaggggggggfcccccccccccc -1 37 abccccccccccccaaaaaccccaacccccccccaaaacaaaaccccccccaaaaccccccccccccccaaaacaaagggggcccccccccaccc -1 38 abcccccccccccaaaaacccccaacccccccccaaaaaaaaaccccccccaaaaaaccccccccccccaaaccaaaacccccccccccccaaac -1 39 abcccccccccccaacaaccaaaaaaaacccaaaaaaaaaaaccccccccccaaaaccccccccccccccaccccaaacccccccccccccaaaa -1 40 abccccccccccccccaaccaaaaaaaaccaaaaaaaaaaaccccccccccaaaaacccccccccccccccccccccacccccccccccccaaaa -1 41 abccccccccccccccccccccaaaaacccaaaaaaaaaaaacccccccccaacaacccccccccccccccccccccccccccccccccaaaaaa
diff --git a/2022/12/solution.rs b/2022/12/solution.rs
@@ -0,0 +1,81 @@ -1 1 #[path = "../lib.rs"] mod lib; -1 2 -1 3 fn get_map() -> (Vec<Vec<u8>>, (usize, usize), (usize, usize)) { -1 4 let mut heights = vec![]; -1 5 let mut start = (0, 0); -1 6 let mut end = (0, 0); -1 7 -1 8 for line in lib::iter_input() { -1 9 let mut row = vec![]; -1 10 for b in line.bytes() { -1 11 match b { -1 12 b'S' => { -1 13 start = (row.len(), heights.len()); -1 14 row.push(b'a'); -1 15 }, -1 16 b'E' => { -1 17 end = (row.len(), heights.len()); -1 18 row.push(b'z'); -1 19 }, -1 20 x => { -1 21 row.push(x); -1 22 }, -1 23 } -1 24 } -1 25 heights.push(row); -1 26 } -1 27 -1 28 return (heights, start, end); -1 29 } -1 30 -1 31 fn get_siblings(x: usize, y: usize, rows: usize, cols: usize) -> Vec<(usize, usize)> { -1 32 let mut result = vec![]; -1 33 if x > 0 { -1 34 result.push((x - 1, y)); -1 35 } -1 36 if x + 1 < cols { -1 37 result.push((x + 1, y)); -1 38 } -1 39 if y > 0 { -1 40 result.push((x, y - 1)); -1 41 } -1 42 if y + 1 < rows { -1 43 result.push((x, y + 1)); -1 44 } -1 45 return result; -1 46 } -1 47 -1 48 fn main() { -1 49 let (heights, start, end) = get_map(); -1 50 let rows = heights.len(); -1 51 let cols = heights[0].len(); -1 52 -1 53 let mut queue = vec![end]; -1 54 let mut m: Vec<Vec<u64>> = heights.iter().map(|row| -1 55 row.iter().map(|_| u64::MAX - 1).collect() -1 56 ).collect(); -1 57 -1 58 m[end.1][end.0] = 0; -1 59 -1 60 while let Some((x, y)) = queue.pop() { -1 61 for (x1, y1) in get_siblings(x, y, rows, cols).into_iter() { -1 62 if heights[y1][x1] + 1 >= heights[y][x] && m[y1][x1] > m[y][x] + 1 { -1 63 m[y1][x1] = m[y][x] + 1; -1 64 queue.push((x1, y1)); -1 65 } -1 66 } -1 67 } -1 68 -1 69 println!("part1: {}", m[start.1][start.0]); -1 70 -1 71 let mut min_a_distance = u64::MAX; -1 72 for y in 0..rows { -1 73 for x in 0..cols { -1 74 if heights[y][x] == b'a' && m[y][x] < min_a_distance { -1 75 min_a_distance = m[y][x]; -1 76 } -1 77 } -1 78 } -1 79 -1 80 println!("part2: {}", min_a_distance); -1 81 }
diff --git a/2022/12/test.txt b/2022/12/test.txt
@@ -0,0 +1,5 @@ -1 1 Sabqponm -1 2 abcryxxl -1 3 accszExk -1 4 acctuvwj -1 5 abdefghi