Day 5: Cafeteria
Megathread guidelines
- Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
- You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL
FAQ
- What is this?: Here is a post with a large amount of details: https://programming.dev/post/6637268
- Where do I participate?: https://adventofcode.com/
- Is there a leaderboard for the community?: We have a programming.dev leaderboard with the info on how to join in this post: https://programming.dev/post/6631465


Rust
#[test] fn test_y2025_day5_part2() { let input = std::fs::read_to_string("input/2025/day_5.txt").unwrap(); let (fresh, _) = input.split_once("\n\n").unwrap(); let mut fresh = fresh .lines() .map(|l| { let (p1, p2) = l.split_once("-").unwrap(); (p1.parse::<usize>().unwrap(), p2.parse::<usize>().unwrap()) }) .collect::<Vec<(usize, usize)>>(); fresh.sort_by_key(|a| a.0); let mut non_overlapping = vec![*fresh.first().unwrap()]; for range in fresh[1..].iter() { let last = *non_overlapping.last().unwrap(); if range.0 > last.1 { // println!("Non overlapping: {range:?} -> {last:?}"); non_overlapping.push((range.0, range.1)); continue; } if range.0 <= last.1 && range.1 > last.1 { // println!("Overlapping: {range:?} -> {last:?}"); let new_last = (last.0, range.1); non_overlapping.pop(); non_overlapping.push(new_last); continue; } // println!("{range:?} is entirely within {last:?}"); } let mut count = 0; for r in &non_overlapping { count += r.1 - r.0 + 1; } assert_eq!(count, 352556672963116); println!("{}", count); }Took me way longer than it should have to work out pt2, got tripped up by a
<instead of<=.