use std::collections::HashMap; pub fn process_part1(input: &str) -> String { let line_len = input.find("\n").unwrap(); let mut rows: Vec> = vec![HashMap::new(); line_len]; input.lines().for_each(|line| { for (idx, chara) in line.chars().enumerate() { rows[idx] .entry(chara) .and_modify(|count| *count += 1) .or_insert(1); } }); let mut res = String::new(); for row in rows { let most_common = row.iter().max_by(|a, b| a.1.cmp(b.1)).unwrap().0; res.push(*most_common); } res } pub fn process_part2(input: &str) -> String { let line_len = input.find("\n").unwrap(); let mut rows: Vec> = vec![HashMap::new(); line_len]; input.lines().for_each(|line| { for (idx, chara) in line.chars().enumerate() { rows[idx] .entry(chara) .and_modify(|count| *count += 1) .or_insert(1); } }); let mut res = String::new(); for row in rows { let most_common = row.iter().max_by(|a, b| b.1.cmp(a.1)).unwrap().0; res.push(*most_common); } res } #[cfg(test)] mod tests { use super::*; const INPUT: &str = "eedadn drvtee eandsr raavrd atevrs tsrnev sdttsa rasrtv nssdts ntnada svetve tesnvt vntsnd vrdear dvrsen enarar"; #[test] fn part1() { let result = process_part1(INPUT); assert_eq!(result, *"easter"); } #[test] fn part2() { let result = process_part2(INPUT); assert_eq!(result, *"advent"); } }