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(-) (limited to '2017/src/bin') 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 nput class='txt' type='search' size='10' name='q' value=''/>
Commit message (Expand)Author
2019-11-11Test getopt_configJune McEnroe
2019-11-11Add userhost-in-names to manualJune McEnroe
2019-11-11Skip initial NAMES parametersJune McEnroe
2019-11-11Filter userhost-in-namesJune McEnroe
2019-11-10Compare words without copying in filtersJune McEnroe
2019-11-10Separate tags from all targetJune McEnroe
2019-11-10Filter invite-notifyJune McEnroe
2019-11-10Add capsicum note to READMEJune McEnroe
2019-11-10Filter extended-joinJune McEnroe
2019-11-10Expand client configuration documentation and list capabilitiesJune McEnroe
2019-11-10Request all supported caps from serverJune McEnroe
2019-11-10Filter ACCOUNT, AWAY, CHGHOST for incapable clientsJune McEnroe
2019-11-10Rename listen to localJune McEnroe
2019-11-09Remove extended-join and invite-notifyJune McEnroe
2019-11-09Maintain stateCaps and offer them to clientsJune McEnroe
2019-11-09Parse capabilitiesJune McEnroe
2019-11-09Avoid the reserved _A names with BIT macroJune McEnroe
2019-11-09Define macro for bit flag enumsJune McEnroe
2019-11-08Check that password is hashedJune McEnroe
2019-11-08Avoid calling getopt_long again after it returns -1June McEnroe
2019-11-08Only change AWAY status for registered clientsJune McEnroe
2019-11-07Just write the example normallyJune McEnroe
2019-11-07Include path in readlinkat errorJune McEnroe
2019-11-07Call clientConsume before clientRecvJune McEnroe
2019-11-06Use -l:filename in Linux.mkJune McEnroe
2019-11-06Fix compat.h for #defined strlcpyJune McEnroe
2019-11-06Allow unsetting LIBRESSL_PREFIXJune McEnroe
2019-11-06Document calico service configurationJune McEnroe
2019-11-06Document SASL EXTERNAL configuration in more detailJune McEnroe
2019-11-06Document pounce service configurationJune McEnroe
2019-11-06Mention Darwin and GNU/Linux in READMEJune McEnroe
2019-11-06Assume LibreSSL from brew on DarwinJune McEnroe
2019-11-06Remove -DNO_EXPLICIT_BZERO from Darwin.mkJune McEnroe
2019-11-06Don't install rc scripts or dirs on LinuxJune McEnroe