diff options
author | Toby Vincent <tobyv@tobyvin.dev> | 2023-12-15 02:22:28 -0600 |
---|---|---|
committer | Toby Vincent <tobyv@tobyvin.dev> | 2023-12-15 02:22:28 -0600 |
commit | 2bac480e776e2b42e82eabef31f63fe6b0ccca1b (patch) | |
tree | 57a55276908aa98044e81bddaa9079c09e4123e4 | |
parent | f10fb4034835372c534d055781beae1febc65eb5 (diff) |
fix: impl day 14
-rw-r--r-- | src/day_14.rs | 28 |
1 files changed, 5 insertions, 23 deletions
diff --git a/src/day_14.rs b/src/day_14.rs index 27d9f63..b5064b5 100644 --- a/src/day_14.rs +++ b/src/day_14.rs @@ -21,12 +21,8 @@ impl Solution for Day14 { .map(|s| s.chars().collect::<Vec<_>>()) .collect::<Vec<_>>(); - print_grid(&grid); - tilt_grid(&mut grid); - print_grid(&grid); - Ok(grid_load(grid)) } @@ -37,7 +33,6 @@ impl Solution for Day14 { .collect::<Vec<_>>(); Ok(process_grid(grid, 1000000000)) - // 105606 == } } @@ -45,33 +40,20 @@ type Grid = Vec<Vec<char>>; fn process_grid(mut grid: Grid, count: usize) -> usize { let mut cache = HashMap::new(); - for i in 0..=count { + for i in 0..count { + if let Some(cycle) = cache.insert(grid.clone(), i) { + return process_grid(grid, (count - i) % (i - cycle)); + } + for _ in 0..4 { tilt_grid(&mut grid); grid = rotate_grid(&grid); } - - if let Some(cycle) = cache.insert(grid.clone(), i).map(|n| n + 1) { - println!("\rcycle found: {cycle} - {i}"); - return process_grid(grid, count % (i - cycle)); - } } - print_grid(&grid); - grid_load(grid) } -fn print_grid(grid: &Grid) { - println!( - "{}\n", - grid.iter() - .map(|v| v.iter().collect::<String>()) - .collect::<Vec<_>>() - .join("\n") - ) -} - fn tilt_grid(grid: &mut Grid) { for col in 0..grid[0].len() { for mut row in 0..grid.len() { |