Implement 2025 - Day 3 - Part 2
This commit is contained in:
78
2025/03.rs
78
2025/03.rs
@@ -28,48 +28,50 @@ fn main() {
|
|||||||
}).collect();
|
}).collect();
|
||||||
println!("{:?}", raw_banks);
|
println!("{:?}", raw_banks);
|
||||||
|
|
||||||
let banks: Vec<Bank> = raw_banks.iter().map(|rbank| {
|
let mut result = 0usize;
|
||||||
Bank {
|
for bank in raw_banks.iter() {
|
||||||
values: core::array::from_fn(|i| {
|
|
||||||
let i = i as u8;
|
|
||||||
|
|
||||||
let first = rbank.iter().enumerate().find_map(|(idx, v)| {
|
|
||||||
(*v==i).then_some(idx)
|
|
||||||
})?;
|
|
||||||
let second = rbank.iter().enumerate().rev().find_map(|(idx, v)| {
|
|
||||||
(*v==i).then_some(idx)
|
|
||||||
})?;
|
|
||||||
|
|
||||||
Some((first, second))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}).collect();
|
|
||||||
println!("{:?}", banks);
|
|
||||||
|
|
||||||
let mut result = 0;
|
|
||||||
for bank in banks.iter() {
|
|
||||||
println!("{:?}", bank);
|
println!("{:?}", bank);
|
||||||
|
|
||||||
let iter_func = || bank.values.iter().enumerate().filter_map(|(idx, v)| {
|
let mut bank_iter = bank.iter();
|
||||||
let v = v.clone()?;
|
let mut digits: Vec<_> = (&mut bank_iter).take(12).collect();
|
||||||
Some((idx, v))
|
|
||||||
|
println!("Starting Digits {:?}", digits);
|
||||||
|
|
||||||
|
for other in bank_iter {
|
||||||
|
// println!("Looking to add {}", other);
|
||||||
|
|
||||||
|
let to_remove = digits.windows(2).enumerate().find_map(|(idx, window)| {
|
||||||
|
if window[0] >= window[1] {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
Some(idx)
|
||||||
|
});
|
||||||
|
// dbg!(to_remove);
|
||||||
|
|
||||||
|
match to_remove {
|
||||||
|
Some(to_remove) => {
|
||||||
|
digits.remove(to_remove);
|
||||||
|
digits.push(other);
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
if digits.last().copied().unwrap() < other {
|
||||||
|
digits.pop();
|
||||||
|
digits.push(other);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("Ending Digits {:?}", digits);
|
||||||
|
|
||||||
|
let bank_value = digits.iter().copied().rev().enumerate().fold(0usize, |acc, (idx, v)| {
|
||||||
|
acc + (*v as usize * 10usize.pow(idx as u32))
|
||||||
});
|
});
|
||||||
|
println!("Value {:?}", bank_value);
|
||||||
|
|
||||||
|
result += bank_value;
|
||||||
let value = iter_func().flat_map(|f| core::iter::repeat(f.clone()).zip(iter_func())).filter_map(|(first, second)| {
|
|
||||||
if !(first.1.0 < second.1.1) {
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
|
|
||||||
let value = (first.0 * 10 + second.0) as usize;
|
|
||||||
// println!("{:?} - {:?} => {}", first, second, value);
|
|
||||||
|
|
||||||
Some(value)
|
|
||||||
}).max().unwrap();
|
|
||||||
println!("{:?}", value);
|
|
||||||
|
|
||||||
result += value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("Result {:?}", result);
|
println!("Result: {:?}", result);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user