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
I’m doing it in Rust again this year. I stopped keeping up with it after day 3 last year, so let’s hope I last longer this time around.
Solution Spoiler Alert
use std::collections::HashMap; use crate::utils::read_lines; pub fn solution1() { let (mut id_list1, mut id_list2) = get_id_lists(); id_list1.sort(); id_list2.sort(); let total_distance = id_list1 .into_iter() .zip(id_list2) .map(|(left, right)| (left - right).abs()) .sum::<i32>(); println!("Total distance = {total_distance}"); } pub fn solution2() { let (id_list1, id_list2) = get_id_lists(); let id_count_map = id_list2 .into_iter() .fold(HashMap::<_, i32>::new(), |mut map, id| { *map.entry(id).or_default() += 1i32; map }); let similarity_score = id_list1 .into_iter() .map(|id| id * id_count_map.get(&id).copied().unwrap_or_default()) .sum::<i32>(); println!("Similarity score = {similarity_score}"); } fn get_id_lists() -> (Vec<i32>, Vec<i32>) { read_lines("src/day1/input.txt") .map(|line| { let mut ids = line.split_whitespace().map(|id| { id.parse::<i32>() .expect("Ids from input must be valid integers") }); ( ids.next().expect("First Id on line must be present"), ids.next().expect("Second Id on line must be present"), ) }) .unzip() }
I’m keeping my solutions up on GitHub.