Implement AoC 2025 #1
43
2025/05.rs
43
2025/05.rs
@@ -11,27 +11,36 @@ fn main() {
|
||||
|
||||
start..=end
|
||||
}).collect();
|
||||
println!("Ranges: {:?}", ranges);
|
||||
|
||||
ranges.sort_by_key(|v| *v.start());
|
||||
println!("Ranges: {:?}", ranges);
|
||||
loop {
|
||||
let result: Option<(usize, usize)> = ranges.iter().enumerate().find_map(|(idx, r)| {
|
||||
ranges.iter().enumerate().filter(|(o_idx, _)| idx != *o_idx).find_map(|(o_idx, other)| {
|
||||
r.contains(other.start()).then_some((idx, o_idx))
|
||||
})
|
||||
});
|
||||
|
||||
let ids: Vec<_> = CONTENT.lines().map(|l| l.trim()).skip_while(|l| !l.is_empty()).skip(1).map(|v| v.parse::<usize>().unwrap()).collect();
|
||||
println!("IDs: {:?}", ids);
|
||||
let (idx, o_idx) = match result {
|
||||
Some(r) => r,
|
||||
None => break,
|
||||
};
|
||||
|
||||
let first = ranges[idx].clone();
|
||||
let second = ranges[o_idx].clone();
|
||||
|
||||
let fresh = ids.iter().filter(|id| {
|
||||
for r in ranges.iter() {
|
||||
if r.start() > id {
|
||||
return false;
|
||||
}
|
||||
let new_range_start: usize = *first.start().min(second.start());
|
||||
let new_range_end: usize = *first.end().max(second.end());
|
||||
|
||||
if r.contains(id) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
let new_range = new_range_start..=new_range_end;
|
||||
|
||||
false
|
||||
}).count();
|
||||
println!("Fresh: {:?}", fresh);
|
||||
println!("Merge\n{:?} +\n{:?} =\n{:?}", first, second, new_range);
|
||||
ranges[idx] = new_range;
|
||||
ranges.remove(o_idx);
|
||||
}
|
||||
|
||||
ranges.sort_by_key(|v| (*v.start(), *v.end()));
|
||||
|
||||
println!("Ranges: \n{:#?}", ranges);
|
||||
|
||||
let result: usize = ranges.iter().map(|r| r.clone().count()).sum();
|
||||
println!("Result: {:?}", result);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user