From 7117b5f76bbe8cbeb72eb7e105d1d1bccc4d6ba7 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Tue, 6 Dec 2016 19:28:51 -0500 Subject: Day 6 part 2 I still want to refactor this though. --- src/bin/day06.rs | 40 ++++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) (limited to 'src/bin') diff --git a/src/bin/day06.rs b/src/bin/day06.rs index 72ee658..7f8a516 100644 --- a/src/bin/day06.rs +++ b/src/bin/day06.rs @@ -9,7 +9,7 @@ fn frequencies(chars: &[char]) -> HashMap { map } -fn solve(input: &str) -> String { +fn solve1(input: &str) -> String { let len = input.find('\n').unwrap_or(input.len()); let mut columns = vec![Vec::new(); len]; @@ -28,16 +28,35 @@ fn solve(input: &str) -> String { .collect() } +fn solve2(input: &str) -> String { + let len = input.find('\n').unwrap_or(input.len()); + let mut columns = vec![Vec::new(); len]; + + for line in input.lines() { + for (i, ch) in line.chars().enumerate() { + columns[i].push(ch); + } + } + + columns.into_iter() + .map(|column| frequencies(&column)) + .map(IntoIterator::into_iter) + .map(|iter| iter.min_by_key(|&(_, v)| v)) + .map(Option::unwrap) + .map(|(ch, _)| ch) + .collect() +} + fn main() { let mut input = String::new(); io::stdin().read_to_string(&mut input).unwrap(); - println!("Part 1: {}", solve(&input)); + println!("Part 1: {}", solve1(&input)); + println!("Part 2: {}", solve2(&input)); } -#[test] -fn part1() { - let input = " +#[cfg(test)] +const TEST_INPUT: &'static str = " eedadn drvtee eandsr @@ -55,5 +74,14 @@ vrdear dvrsen enarar "; - assert_eq!("easter", solve(input.trim())); + + +#[test] +fn part1() { + assert_eq!("easter", solve1(TEST_INPUT.trim())); +} + +#[test] +fn part2() { + assert_eq!("advent", solve2(TEST_INPUT.trim())); } -- cgit 1.4.1