1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
use std::collections::HashMap;
use errors::*;
pub fn solve(input: &str) -> Result<String> {
let mut counters = HashMap::new();
for line in input.lines() {
for (i, c) in line.chars().enumerate() {
let mut col = counters.entry(i).or_insert_with(HashMap::new);
*col.entry(c).or_insert(0) += 1
}
}
let mut counters: Vec<_> = counters.iter().collect();
counters.sort_by_key(|&(idx, _)| idx);
Ok(counters.iter()
.map(|&(_, col)| {
let mut v: Vec<_> = col.iter().collect();
v.sort_by_key(|&(_, count)| count);
v.iter().map(|&(chr, _)| *chr).last().unwrap()
})
.collect())
}
#[test]
fn test_solve() {
let input = "eedadn
drvtee
eandsr
raavrd
atevrs
tsrnev
sdttsa
rasrtv
nssdts
ntnada
svetve
tesnvt
vntsnd
vrdear
dvrsen
enarar";
assert_eq!(solve(input).unwrap(), "easter".to_string());
}