Advertisement
Guest User

Untitled

a guest
Dec 10th, 2024
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.60 KB | None | 0 0
  1. use grid::Grid;
  2.  
  3. #[inline(always)]
  4. fn solve(grid: &Grid<usize>) -> usize {
  5.     grid.iter().enumerate()
  6.         .filter_map(|(trailhead, c)| {
  7.             if *c == 0 {
  8.                 let x = trailhead % grid.cols();
  9.                 let y = trailhead / grid.cols();
  10.  
  11.                 Some(check_cell(grid, &usize::MAX, x, y))
  12.             } else {
  13.                 None
  14.             }
  15.         })
  16.         .sum()
  17. }
  18.  
  19. fn check_cell(grid: &Grid<usize>, prev: &usize, x: usize, y: usize) -> usize {
  20.     let mut count = 0;
  21.  
  22.     if let Some(cell) = grid.get(y, x) {
  23.         if (cell > prev && cell - prev == 1) || prev == &usize::MAX {
  24.             if *cell == 9 {
  25.                 // set.insert((x, y));
  26.                 count += 1;
  27.             } else {
  28.                 count += check_cell(grid, &cell, x + 1, y);
  29.                 count += check_cell(grid, &cell, x, y + 1);
  30.                 if x > 0 {
  31.                     count += check_cell(grid, &cell, x - 1, y);
  32.                 }
  33.                 if y > 0 {
  34.                     count += check_cell(grid, &cell, x, y - 1);
  35.                 }
  36.             }
  37.         }
  38.     }
  39.  
  40.     count
  41. }
  42.  
  43. fn main() {
  44.     let input = include_str!("../input.txt")
  45.         .lines()
  46.         .map(|l| l.chars().map(|c| c.to_digit(10).unwrap() as usize).collect())
  47.         .collect::<Vec<Vec<usize>>>();
  48.     let cols = input.len();
  49.     let grid = Grid::from_vec(input.into_iter().flatten().collect(), cols);
  50.  
  51.     let time = std::time::Instant::now();
  52.  
  53.     let answer = solve(&grid);
  54.  
  55.     println!("Time elapsed: {:?}", time.elapsed());
  56.     println!("Answer: {}", answer);
  57. }
  58.  
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement