From 57e6b57aae9d26a84993706609fe6d64924842e4 Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Sun, 18 Dec 2016 14:53:10 -0500 Subject: Day 17 part 2 --- src/bin/day17.rs | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) (limited to 'src/bin/day17.rs') diff --git a/src/bin/day17.rs b/src/bin/day17.rs index a80cbb8..c769f32 100644 --- a/src/bin/day17.rs +++ b/src/bin/day17.rs @@ -93,7 +93,7 @@ impl State { } } -fn solve(passcode: &str) -> String { +fn solve1(passcode: &str) -> String { let mut states = VecDeque::new(); states.push_back(State::default()); @@ -107,16 +107,42 @@ fn solve(passcode: &str) -> String { panic!("no path to vault") } +fn solve2(passcode: &str) -> usize { + let mut states = VecDeque::new(); + states.push_back(State::default()); + + let mut longest = None; + + while let Some(state) = states.pop_front() { + if state.is_vault() { + longest = Some(state.clone()); + } else { + state.generate_states(&mut states, passcode); + } + } + + longest.unwrap().path.len() +} + fn main() { let mut input = String::new(); io::stdin().read_to_string(&mut input).unwrap(); - println!("Part 1: {}", solve(input.trim())); + println!("Part 1: {}", solve1(input.trim())); + println!("Part 2: {}", solve2(input.trim())); } #[test] fn part1() { - assert_eq!("DDRRRD", solve("ihgpwlah")); - assert_eq!("DDUDRLRRUDRD", solve("kglvqrro")); - assert_eq!("DRURDRUDDLLDLUURRDULRLDUUDDDRR", solve("ulqzkmiv")); + assert_eq!("DDRRRD", solve1("ihgpwlah")); + assert_eq!("DDUDRLRRUDRD", solve1("kglvqrro")); + assert_eq!("DRURDRUDDLLDLUURRDULRLDUUDDDRR", solve1("ulqzkmiv")); +} + +#[test] +#[ignore] +fn part2() { + assert_eq!(370, solve2("ihgpwlah")); + assert_eq!(492, solve2("kglvqrro")); + assert_eq!(830, solve2("ulqzkmiv")); } -- cgit 1.4.1 ef='/src/log/?id=aafce57e7197108521ac34c504f305a41bf730d2&follow=1'>root/etc/README.Go-Mono (unfollow)
Commit message (Expand)Author
2021-09-25Sandbox up on both FreeBSD and OpenBSDJune McEnroe
2021-09-25Set SO_REUSEADDR in quickJune McEnroe
2021-09-25Revert "Add cat alias using less"June McEnroe
2021-09-24Pledge downgradeJune McEnroe
2021-09-24Set original socket CLOEXECJune McEnroe
2021-09-24Consume request headers using MSG_PEEKJune McEnroe
2021-09-24Set only HTTP_HOSTJune McEnroe
2021-09-23Scroll by single lines in xtermJune McEnroe
2021-09-23Hide htop "function bar"June McEnroe
2021-09-23Allow FocusEvents in xtermJune McEnroe
2021-09-23Use NI_NUMERICSERVJune McEnroe
2021-09-23Make up build away from FreeBSDJune McEnroe
2021-09-23Add quickJune McEnroe
2021-09-23Add The HobbitJune McEnroe
2021-09-22Remove PSF fontsJune McEnroe
2021-09-22Remove Linux-specific utilitiesJune McEnroe
2021-09-22Call sandbox in CGI modeJune McEnroe
2021-09-22Support HTTP PUT in upJune McEnroe
2021-09-22Remove default faviconJune McEnroe
2021-09-21Use Z_FILTERED strategyJune McEnroe
2021-09-21Recalculate various lengths only as neededJune McEnroe
2021-09-21Rewrite pngo, add explicit optionsJune McEnroe
2021-09-16Fix /* **/ comment matchingJune McEnroe
2021-09-15Remove typer, add downgrade to READMEJune McEnroe
2021-09-15Set bot mode on downgradeJune McEnroe
2021-09-15Enter capsicum in downgradeJune McEnroe
2021-09-15Factor out common parts of downgrade messagesJune McEnroe
2021-09-14Add downgrade IRC botJune McEnroe
2021-09-14Sort by title if authors matchJune McEnroe
2021-09-13Swap-remove tags as they're foundJune McEnroe
2021-09-12Replace htagml regex with strncmpJune McEnroe
2021-09-11Also defer printing comment for lone close-parensJune McEnroe
2021-09-10Publish "git-comment"June McEnroe
2021-09-10Add git comment --pretty optionJune McEnroe
2021-09-08Defer printing comment if line is blank or closing braceJune McEnroe
2021-09-08Up default min-repeat to 30 linesJune McEnroe
2021-09-08Handle dirty lines in git-commentJune McEnroe
2021-09-08Document and install git-commentJune McEnroe
2021-09-08Add repeat and all options to git-commentJune McEnroe
2021-09-08Add group threshold to git-commentJune McEnroe