diff --git a/2025/3/deadvey/src/main.rs b/2025/3/deadvey/src/main.rs index 83b05e2..8d9ab89 100644 --- a/2025/3/deadvey/src/main.rs +++ b/2025/3/deadvey/src/main.rs @@ -18,9 +18,7 @@ fn algorithm(banks: &Vec<&str>) -> (u64, u64) overall_index += 1; if joltage as u64 > highest { prev_index = overall_index; - unsafe { - ptr::write(&mut highest as *mut u64, joltage as u64); - } + unsafe {ptr::write(&mut highest as *mut u64, joltage as u64);} if joltage == 57 { break; } } } @@ -28,27 +26,6 @@ fn algorithm(banks: &Vec<&str>) -> (u64, u64) joltages[i] = highest ^ 48; highest = 0; } - prev_index = 0; - for i in 0..=10 { - if joltages[i] > highest.into() { - unsafe { - ptr::write(&mut highest as *mut u64, joltages[i] as u64); - } - prev_index = i+1; - if joltages[i] == 9 { break; } - } - } - total1 += highest * 10; - highest = 0; - for i in prev_index..=11 { - if joltages[i] > highest.into() { - unsafe { - ptr::write(&mut highest as *mut u64, joltages[i] as u64); - } - if joltages[i] == 9 { break; } - } - } - total1 += highest; total2 += joltages[0] * 10_u64.pow(11) + joltages[1] * 10_u64.pow(10) + joltages[2] * 10_u64.pow(9) @@ -61,6 +38,25 @@ fn algorithm(banks: &Vec<&str>) -> (u64, u64) + joltages[9] * 10_u64.pow(2) + joltages[10] * 10_u64 + joltages[11]; + // part 1 + prev_index = 0; + for i in 0..=10 { + if joltages[i] > highest.into() { + unsafe {ptr::write(&mut highest as *mut u64, joltages[i] as u64);} + prev_index = i+1; + if joltages[i] == 9 { break; } + } + } + total1 += highest * 10; + highest = 0; + for i in prev_index..=11 { + if joltages[i] > highest.into() { + unsafe { + ptr::write(&mut highest as *mut u64, joltages[i] as u64);} + if joltages[i] == 9 { break; } + } + } + total1 += highest; } (total1, total2) diff --git a/2025/4/deadvey/Cargo.toml b/2025/4/deadvey/Cargo.toml new file mode 100644 index 0000000..63d909b --- /dev/null +++ b/2025/4/deadvey/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "deadvey" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/2025/4/deadvey/src/main.rs b/2025/4/deadvey/src/main.rs new file mode 100644 index 0000000..37ed25f --- /dev/null +++ b/2025/4/deadvey/src/main.rs @@ -0,0 +1,124 @@ +use std::fs; +use std::time::Instant; + +fn remove_dem(rows: &mut Vec>, i: usize, j: usize) { + rows[i][j] = 'x'; +} + +fn algorithm(rows: &mut Vec>) -> (u64, u64) { + let mut total1: u64 = 0; + let mut total2: u64 = 0; + let grid_width: usize = rows[0].len().try_into().unwrap(); + let grid_height: usize = rows.len().try_into().unwrap(); + let directions = vec![(-1,0),(1,0),(0,-1),(0,1),(-1,-1),(-1,1),(1,-1),(1,1)]; + let mut removed: bool = true; + let mut count: u8 = 66; + // First loop + for i in 0usize..(grid_height) { + for j in 0usize..(grid_width) { + if rows[i][j] == '@' { // @ + let mut surrounded_by = 0; + for (dr, dc) in &directions { + let new_row = i as isize + dr; + let new_column = j as isize + dc; + if new_row >= grid_height as isize { + continue + } + if new_row < 0 { + continue + } + if new_column >= grid_width as isize { + continue + } + if new_column < 0 { + continue + } + if rows[new_row as usize][new_column as usize] == '@' + || rows[new_row as usize][new_column as usize] == 'A' + { + surrounded_by += 1; + } + if surrounded_by >= 4 { + break + } + } + if surrounded_by < 4 { + rows[i][j] = 'A'; + total2 += 1; + total1 += 1; + removed = true; + } + } + } + } + // All other loops + while removed { + removed = false; + for i in 0usize..(grid_height) { + for j in 0usize..(grid_width) { + if rows[i][j] == '@' { // @ + let mut surrounded_by = 0; + for (dr, dc) in &directions { + let new_row = i as isize + dr; + let new_column = j as isize + dc; + if new_row >= grid_height as isize { + continue + } + if new_row < 0 { + continue + } + if new_column >= grid_width as isize { + continue + } + if new_column < 0 { + continue + } + if rows[new_row as usize][new_column as usize] == '@' + { + surrounded_by += 1; + } + else if rows[new_row as usize][new_column as usize] == count as char + { + surrounded_by += 1; + } + if surrounded_by >= 4 { break } + } + if surrounded_by < 4 { + rows[i][j] = count as char; + total2 += 1; + removed = true; + } + } + } + } + count += 1; + } + + (total1, total2) +} +fn main() { + let file_contents: String = fs::read_to_string("../large.txt").unwrap(); + let start = Instant::now(); + let mut grid: Vec> = file_contents + .lines() + .map(|line| line.chars().collect()) + .collect(); + let preamble = start.elapsed(); + + + let (total1, total2) = algorithm(&mut grid); + let end = start.elapsed(); + + println!("part1: {total1}"); + println!("part2: {total2}"); + println!("Times: + Preamble: {:.2?} + Loop: {:.2?} + Avg time per bank: {:.2?} + Total: {:.4?} + ", + preamble, + end-preamble, + (end-preamble)/(grid.len()).try_into().unwrap(), + end); +}