diff --git a/2025/06/p2.rs b/2025/06/p2.rs index 2c5a2a4..50f64d9 100644 --- a/2025/06/p2.rs +++ b/2025/06/p2.rs @@ -6,10 +6,6 @@ enum Op { #[unsafe(no_mangle)] pub unsafe extern "Rust" fn challenge_usize(buf: &[u8]) -> usize { - fn d(d: u8) -> usize { - if d == b' ' { 0 } else { (d - b'0') as usize } - } - use Op::*; let mut iter = buf[0..(buf.len() - 1)] @@ -28,7 +24,7 @@ pub unsafe extern "Rust" fn challenge_usize(buf: &[u8]) -> usize { }) .collect::>(); - iter.enumerate().for_each(|(bottom_idx, ln)| { + iter.for_each(|ln| { let mut idx = 0; ln.filter_map(|n_str| { let r = (idx, n_str); @@ -45,7 +41,7 @@ pub unsafe extern "Rust" fn challenge_usize(buf: &[u8]) -> usize { }); }); - println!("{ops:?}"); + // println!("{ops:?}"); ops.iter().fold(0, |acc, (opacc, vec, _)| { let n: usize = match opacc { Mul => vec.iter().map(|(a, _)| a).product(), @@ -59,7 +55,7 @@ fn insert_dig(into: &mut Vec<(usize, u32)>, at: usize, dig: u8) { if dig != b' ' { if let Some((mref, len)) = into.get_mut(at) { *mref += (dig - b'0') as usize * 10usize.pow(*len); - dbg!(mref); + // dbg!(mref); *len += 1; } else { let mut i = into.len(); diff --git a/2025/07/p1.rs b/2025/07/p1.rs new file mode 100644 index 0000000..ba58e58 --- /dev/null +++ b/2025/07/p1.rs @@ -0,0 +1,31 @@ +#[unsafe(no_mangle)] +pub extern "Rust" fn challenge_usize(buf: &[u8]) -> usize { + let mut splits = 0; + + let mut ln_iter = buf[0..(buf.len() - 1)].split(|&b| b == b'\n'); + + let first_line = ln_iter.next().unwrap(); + let mut ray_boollist = Box::new_uninit_slice(first_line.len()); + first_line + .iter() + .map(|&c| c == b'S') + .enumerate() + .for_each(|(i, b)| { + ray_boollist[i].write(b); + }); + let mut ray_boollist = unsafe { ray_boollist.assume_init() }; + + for ln in ln_iter { + // dbg!(unsafe { str::from_utf8_unchecked(ln) }, splits); + for (i, _) in ln.iter().enumerate().filter(|&(_, &c)| c == b'^') { + if ray_boollist[i] { + splits += 1; + ray_boollist[i] = false; + ray_boollist.get_mut(i - 1).map(|b| *b = true); + ray_boollist.get_mut(i + 1).map(|b| *b = true); + } + } + } + + splits +} diff --git a/2025/07/p2.rs b/2025/07/p2.rs new file mode 100644 index 0000000..da26383 --- /dev/null +++ b/2025/07/p2.rs @@ -0,0 +1,32 @@ +#[unsafe(no_mangle)] +pub extern "Rust" fn challenge_usize(buf: &[u8]) -> usize { + let mut splits = 0; + + let mut ln_iter = buf[0..(buf.len() - 1)].split(|&b| b == b'\n'); + + let first_line = ln_iter.next().unwrap(); + let mut ray_boollist = Box::new_uninit_slice(first_line.len()); + first_line + .iter() + .map(|&c| if c == b'S' { 1 } else { 0 }) + .enumerate() + .for_each(|(i, b)| { + ray_boollist[i].write(b); + }); + let mut ray_list = unsafe { ray_boollist.assume_init() }; + + for ln in ln_iter { + // dbg!(unsafe { str::from_utf8_unchecked(ln) }, splits); + for (i, _) in ln.iter().enumerate().filter(|&(_, &c)| c == b'^') { + let worlds_here = ray_list[i]; + splits += worlds_here; + if worlds_here > 0 { + ray_list[i] = 0; + ray_list.get_mut(i - 1).map(|b| *b += worlds_here); + ray_list.get_mut(i + 1).map(|b| *b += worlds_here); + } + } + } + + splits + 1 // + 1 idk why +}