AdventOfCode/y2016/src/days/d6.rs
2024-12-09 13:20:27 +01:00

74 lines
1.6 KiB
Rust

use std::collections::HashMap;
pub fn process_part1(input: &str) -> String {
let line_len = input.find("\n").unwrap();
let mut rows: Vec<HashMap<char, u32>> = 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<HashMap<char, u32>> = 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");
}
}