diff --git a/2016/rust/src/day_06.rs b/2016/rust/src/day_06.rs
new file mode 100644
index 0000000..aa00f90
--- /dev/null
+++ b/2016/rust/src/day_06.rs
@@ -0,0 +1,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());
+}
diff --git a/2016/rust/src/lib.rs b/2016/rust/src/lib.rs
index cef1563..b9cc037 100644
--- a/2016/rust/src/lib.rs
+++ b/2016/rust/src/lib.rs
@@ -11,3 +11,4 @@ pub mod day_02;
pub mod day_03;
pub mod day_04;
pub mod day_05;
+pub mod day_06;
diff --git a/2016/rust/src/main.rs b/2016/rust/src/main.rs
index 99c3f8f..ad71ce8 100644
--- a/2016/rust/src/main.rs
+++ b/2016/rust/src/main.rs
@@ -10,7 +10,7 @@ fn main() {
let mut input = String::new();
io::stdin().read_to_string(&mut input).ok();
- let solution = day_05::solve(&input)?;
+ let solution = day_06::solve(&input)?;
println!("{}", solution);
Ok(())