74 lines
1.6 KiB
Rust
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");
|
|
}
|
|
}
|