From 799c56529debf4214be4c17eda81776c0f6ec691 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Thu, 14 Dec 2017 22:17:21 -0500 Subject: Day 9, part 2 --- 2017/src/bin/day09.rs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/2017/src/bin/day09.rs b/2017/src/bin/day09.rs index a8492d0..e88b6f4 100644 --- a/2017/src/bin/day09.rs +++ b/2017/src/bin/day09.rs @@ -1,6 +1,6 @@ use std::io::{self, Read}; -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] enum State { Group, Garbage, @@ -9,7 +9,7 @@ enum State { use self::State::*; -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] struct Machine(State, u32); impl Machine { @@ -41,11 +41,25 @@ fn solve1(input: &str) -> u32 { score } +fn solve2(input: &str) -> u32 { + let mut garbage = 0; + let mut state = Machine(Group, 0); + for c in input.chars() { + let next = state.next(c); + if next == state && state.0 == Garbage { + garbage += 1; + } + state = next; + } + garbage +} + fn main() { let mut input = String::new(); io::stdin().read_to_string(&mut input).unwrap(); println!("Part 1: {}", solve1(input.trim())); + println!("Part 2: {}", solve2(input.trim())); } #[test] @@ -59,3 +73,14 @@ fn part1() { assert_eq!(9, solve1("{{},{},{},{}}")); assert_eq!(3, solve1("{{},{},{},{}}")); } + +#[test] +fn part2() { + assert_eq!(0, solve2("<>")); + assert_eq!(17, solve2("")); + assert_eq!(3, solve2("<<<<>")); + assert_eq!(2, solve2("<{!>}>")); + assert_eq!(0, solve2("")); + assert_eq!(0, solve2(">")); + assert_eq!(10, solve2("<{o\"i!a,<{i")); +} -- cgit 1.4.1