add: 07, had to work today but srsly whats the fuzz with today

This commit is contained in:
2025-12-07 21:58:09 +01:00
parent bb992efa86
commit ca64030abd
3 changed files with 66 additions and 7 deletions

View File

@@ -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::<Vec<_>>();
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();

31
2025/07/p1.rs Normal file
View File

@@ -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
}

32
2025/07/p2.rs Normal file
View File

@@ -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
}