use std::collections::HashMap; #[cfg(debug_assertions)] const FILENAME: &str = "example.txt"; #[cfg(not(debug_assertions))] const FILENAME: &str = "input.txt"; fn main() { let binding = std::fs::read_to_string(FILENAME).unwrap(); let data: Vec<_> = binding.lines().collect(); part1(&data); part2(&data); } fn part2(data: &[&str]) { let mut counts = vec![HashMap::new(); data[0].len()]; for message in data { message.chars().enumerate().for_each(|(idx, c)| { counts[idx].entry(c).and_modify(|i| *i += 1).or_insert(1); }); } for count in counts { let the_char = count .iter() .min_by_key(|(_, val)| **val) .map(|(c, _)| c) .unwrap(); print!("{the_char}"); } println!(); } fn part1(data: &[&str]) { let mut counts = vec![HashMap::new(); data[0].len()]; for message in data { message.chars().enumerate().for_each(|(idx, c)| { counts[idx].entry(c).and_modify(|i| *i += 1).or_insert(1); }); } for count in counts { let the_char = count .iter() .max_by_key(|(_, val)| **val) .map(|(c, _)| c) .unwrap(); print!("{the_char}"); } println!(); }