From a696b158cacf9b760f70d3d493ae146e580cceee Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Thu, 14 Dec 2017 22:05:16 -0500 Subject: Day 9 I was really sick at the start of the week, okay? --- 2017/src/bin/day09.rs | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 2017/src/bin/day09.rs (limited to '2017/src/bin') diff --git a/2017/src/bin/day09.rs b/2017/src/bin/day09.rs new file mode 100644 index 0000000..a8492d0 --- /dev/null +++ b/2017/src/bin/day09.rs @@ -0,0 +1,61 @@ +use std::io::{self, Read}; + +#[derive(Debug, Clone, Copy)] +enum State { + Group, + Garbage, + Ignore, +} + +use self::State::*; + +#[derive(Debug, Clone, Copy)] +struct Machine(State, u32); + +impl Machine { + fn next(self, input: char) -> Self { + match (self.0, input) { + (Ignore, _) => Machine(Garbage, self.1), + (Garbage, '!') => Machine(Ignore, self.1), + (Garbage, '>') => Machine(Group, self.1), + (Garbage, _) => self, + (Group, '<') => Machine(Garbage, self.1), + (Group, '{') => Machine(Group, self.1 + 1), + (Group, '}') => Machine(Group, self.1 - 1), + (Group, ',') => self, + _ => unimplemented!(), + } + } +} + +fn solve1(input: &str) -> u32 { + let mut score = 0; + let mut state = Machine(Group, 0); + for c in input.chars() { + let next = state.next(c); + if next.1 > state.1 { + score += next.1; + } + state = next; + } + score +} + +fn main() { + let mut input = String::new(); + io::stdin().read_to_string(&mut input).unwrap(); + + println!("Part 1: {}", solve1(input.trim())); +} + +#[test] +fn part1() { + assert_eq!(1, solve1("{}")); + assert_eq!(6, solve1("{{{}}}")); + assert_eq!(5, solve1("{{},{}}")); + assert_eq!(16, solve1("{{{},{},{{}}}}")); + assert_eq!(1, solve1("{,,,}")); + assert_eq!(9, solve1("{{},{},{},{}}")); + assert_eq!(9, solve1("{{},{},{},{}}")); + assert_eq!(3, solve1("{{},{},{},{}}")); +} -- cgit 1.4.1 nel.c?id=59fa144a7b935e96b51ec61e0f4c18e88c2210b4'>unfollow)
Commit message (Expand)Author
2017-09-06Move C code to bin, Makefile, AGPLJune McEnroe
2017-09-06Rename curtis -> homeJune McEnroe
2017-09-05Pass final NULL to execlpJune McEnroe
2017-09-05Add watch.cJune McEnroe
2017-09-02Remove Scala highlightingJune McEnroe
2017-08-31Fix Linux console Tarmak 3June McEnroe
2017-08-31Use Tarmak 3 on Linux consoleJune McEnroe
2017-08-25Install ddateJune McEnroe
2017-08-19Move nethack options to envJune McEnroe
2017-08-17Remove scala syntax fileJune McEnroe
2017-08-06Add wakeJune McEnroe
2017-08-04Use $() in install.shJune McEnroe
2017-08-02Create Code Tarmak 3 layoutJune McEnroe
2017-07-31Add tupJune McEnroe
2017-07-31Use designated initializer for hnel tableJune McEnroe
2017-07-30Add juneJune McEnroe
2017-07-30Play nethack as ValkyrieJune McEnroe
2017-07-28Add toggle to hnelJune McEnroe
2017-07-28Install slJune McEnroe
2017-07-25Add up, supJune McEnroe
2017-07-24Autopickup ringsJune McEnroe
2017-07-24Name dogJune McEnroe
2017-07-23Add nethackrcJune McEnroe
2017-07-23Remove useless setuid in briJune McEnroe
2017-07-23Clean up hnel a tiny bitJune McEnroe
2017-07-21Set window size in hnelJune McEnroe
2017-07-21Add hnelJune McEnroe
2017-07-19chmod 600 in dtchJune McEnroe