From 0968951383c51a136080a37fa097654fdc8906bf Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 15 Nov 2019 15:18:36 +0100 Subject: [PATCH] 2018: day02: part 2 --- aoc2018/src/day02.rs | 50 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/aoc2018/src/day02.rs b/aoc2018/src/day02.rs index e347c5f..d4dfc3b 100644 --- a/aoc2018/src/day02.rs +++ b/aoc2018/src/day02.rs @@ -6,6 +6,7 @@ const INPUT: &str = include_str!("../input/day02.txt"); pub fn run() -> Result<()> { println!("part 1: {}", part1(INPUT)?); + println!("part 2: {}", part2(INPUT)?); Ok(()) } @@ -32,6 +33,36 @@ fn part1(input: &str) -> Result { Ok(twice * thrice) } +fn part2(input: &str) -> Result { + let lines = input.lines().collect::>(); + + for i in 0..lines.len() { + for j in (i + 1)..lines.len() { + let different = lines[i] + .chars() + .zip(lines[j].chars()) + .filter(|tuple| tuple.0 != tuple.1) + .count(); + + if different == 1 { + return Ok(common_letters(lines[i], lines[j])); + } + } + } + + Ok("".into()) +} + +fn common_letters(a: &str, b: &str) -> String { + a.chars() + .zip(b.chars()) + .filter_map(|e| match e { + (a, b) if a == b => Some(a), + _ => None, + }) + .collect() +} + #[cfg(test)] mod tests { use super::*; @@ -54,4 +85,23 @@ ababab fn part1_real() { assert_eq!(part1(INPUT).unwrap(), 5750); } + + #[test] + fn part2_provided() { + let input = "abcde +fghij +klmno +pqrst +fguij +axcye +wvxyz +"; + + assert_eq!(part2(input).unwrap(), "fgij"); + } + + #[test] + fn part2_real() { + assert_eq!(part2(INPUT).unwrap(), "tzyvunogzariwkpcbdewmjhxi"); + } }