day 11 improvements

This commit is contained in:
RussellChamp committed 2024-12-13 17:22:09 +00:00
1 parent ee6c70ef8a
commit adc4cd49c4
2 files changed
+13 -14

No files matched your search

+2 -2
View File
@@ -37,11 +37,11 @@ Solutions for [Advent of Code](https://adventofcode.com/) in [Rust](https://www.
| [Day 8](./src/bin/08.rs) | `106.2µs` | `-` | | [Day 8](./src/bin/08.rs) | `106.2µs` | `-` |
| [Day 9](./src/bin/09.rs) | `1.0ms` | `-` | | [Day 9](./src/bin/09.rs) | `1.0ms` | `-` |
| [Day 10](./src/bin/10.rs) | `10.1ms` | `-` | | [Day 10](./src/bin/10.rs) | `10.1ms` | `-` |
| [Day 11](./src/bin/11.rs) | `6.0s` | `-` | | [Day 11](./src/bin/11.rs) | `1.9s` | `-` |
| [Day 12](./src/bin/12.rs) | `4.5ms` | `-` | | [Day 12](./src/bin/12.rs) | `4.5ms` | `-` |
| [Day 13](./src/bin/13.rs) | `3.1ms` | `-` | | [Day 13](./src/bin/13.rs) | `3.1ms` | `-` |
**Total: 6080.39ms** **Total: 1980.39ms**
<!--- benchmarking table ---> <!--- benchmarking table --->
--- ---
+11 -12
View File
@@ -18,33 +18,32 @@ pub fn part_two(_input: &str) -> Option<u32> {
None None
} }
fn step_stones(stones: &mut Vec<String>, max_steps: usize) { fn step_stones(stones: &mut Vec<usize>, max_steps: usize) {
for _step in 0..max_steps { for _step in 0..max_steps {
// println!("STEP #{step}: {:?} stones", stones.len()); // println!("STEP #{step}: {:?} stones", stones.len());
// stones.clone_from(&process_stones(stones).iter().map(|s| s as &str).collect_vec()); // stones.clone_from(&process_stones(stones).iter().map(|s| s as &str).collect_vec());
// stones = next_step.clone().iter().map(|s| s as &str).collect_vec(); // stones = next_step.clone().iter().map(|s| s as &str).collect_vec();
for idx in (0..stones.len()).rev() { for idx in (0..stones.len()).rev() {
let stone = &stones[idx]; let stone = &stones[idx];
let stone_length = stone.len(); let stone_digits = stone.checked_ilog10().unwrap_or(0) + 1;
if stone == "0" { if *stone == 0 {
stones[idx] = String::from("1"); stones[idx] = 1;
} else if stone_length % 2 == 0 { } else if stone_digits % 2 == 0 {
let mut stone_iter = stone.chars(); let stone_chars = stone.to_string().chars().collect_vec();
let first_half = stone_iter.by_ref().take(stone_length/2).collect::<String>(); let first_half = stone_chars.iter().take(stone_digits as usize / 2).collect::<String>().parse::<usize>().unwrap();
let second_half = stone_iter.by_ref().take(stone_length/2).collect::<String>().parse::<usize>().unwrap().to_string(); let second_half = stone_chars.iter().skip(stone_digits as usize / 2).take(stone_digits as usize / 2).collect::<String>().parse::<usize>().unwrap();
stones[idx] = first_half; stones[idx] = first_half;
stones.insert(idx + 1, second_half); stones.insert(idx + 1, second_half);
} else { } else {
let new_stone = stone.parse::<usize>().unwrap().mul(2024).to_string(); stones[idx] = stone.mul(2024);
stones[idx] = new_stone;
} }
} }
} }
} }
fn vecify_stones(input: &str) -> Vec<String> { fn vecify_stones(input: &str) -> Vec<usize> {
input.strip_suffix("\n").unwrap().split(" ").map(|s| s.to_string()).collect_vec() input.strip_suffix("\n").unwrap().split(" ").map(|s| s.parse::<usize>().unwrap()).collect_vec()
} }
#[cfg(test)] #[cfg(test)]