diff options
author | June McEnroe <june@causal.agency> | 2017-12-14 22:17:21 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-11-22 00:14:25 -0500 |
commit | a0338fc9e216dcaaae55a316cc0979e03c36652d (patch) | |
tree | ed2ef419945d0e8751c7752e14fae897cd73cdae | |
parent | Day 9 (diff) | |
download | aoc-a0338fc9e216dcaaae55a316cc0979e03c36652d.tar.gz aoc-a0338fc9e216dcaaae55a316cc0979e03c36652d.zip |
Day 9, part 2
-rw-r--r-- | 2017/src/bin/day09.rs | 29 |
1 files 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("{{<a!>},{<a!>},{<a!>},{<ab>}}")); } + +#[test] +fn part2() { + assert_eq!(0, solve2("<>")); + assert_eq!(17, solve2("<random characters>")); + assert_eq!(3, solve2("<<<<>")); + assert_eq!(2, solve2("<{!>}>")); + assert_eq!(0, solve2("<!!>")); + assert_eq!(0, solve2("<!!!>>")); + assert_eq!(10, solve2("<{o\"i!a,<{i<a>")); +} |