Day 1: Historian Hysteria
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://blocks.programming.dev/ 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/22323136
- 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
Right IDs are directly read into a hash map counter.
use std::str::FromStr; use std::collections::HashMap; fn part1(input: String) { let mut left = Vec::new(); let mut right = Vec::new(); for line in input.lines() { let mut parts = line.split_whitespace() .map(|p| u32::from_str(p).unwrap()); left.push(parts.next().unwrap()); right.push(parts.next().unwrap()); } left.sort_unstable(); right.sort_unstable(); let diff: u32 = left.iter().zip(right) .map(|(l, r)| l.abs_diff(r)) .sum(); println!("{diff}"); } fn part2(input: String) { let mut left = Vec::new(); let mut right: HashMap<u32, u32> = HashMap::new(); for line in input.lines() { let mut parts = line.split_whitespace() .map(|p| u32::from_str(p).unwrap()); left.push(parts.next().unwrap()); *right.entry(parts.next().unwrap()).or_default() += 1; } let similar: u32 = left.iter() .map(|n| n * right.get(n).copied().unwrap_or_default()) .sum(); println!("{similar}"); } util::aoc_main!();