summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorToby Vincent <tobyv@tobyvin.dev>2023-12-15 02:22:28 -0600
committerToby Vincent <tobyv@tobyvin.dev>2023-12-15 02:22:28 -0600
commit2bac480e776e2b42e82eabef31f63fe6b0ccca1b (patch)
tree57a55276908aa98044e81bddaa9079c09e4123e4
parentf10fb4034835372c534d055781beae1febc65eb5 (diff)
fix: impl day 14
-rw-r--r--src/day_14.rs28
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() {