From 7120a42a45a1091b8f87041e4b0fc03d678af4fa Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Sat, 9 Dec 2017 02:50:05 -0500 Subject: Day 8 --- 2017/src/bin/day08.rs | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 2017/src/bin/day08.rs (limited to '2017/src') diff --git a/2017/src/bin/day08.rs b/2017/src/bin/day08.rs new file mode 100644 index 0000000..e5a9ad0 --- /dev/null +++ b/2017/src/bin/day08.rs @@ -0,0 +1,57 @@ +use std::collections::HashMap; +use std::io::{self, Read}; + +fn solve1(input: &str) -> i32 { + let mut regs = HashMap::new(); + for line in input.lines() { + let mut words = line.split_whitespace(); + let dest = words.next().unwrap(); + let op = words.next().unwrap(); + let val = words.next().unwrap(); + assert_eq!(Some("if"), words.next()); + let src = words.next().unwrap(); + let cmp = words.next().unwrap(); + let rhs = words.next().unwrap(); + + let mut val: i32 = val.parse().unwrap(); + if op == "dec" { + val = -val; + } + let rhs: i32 = rhs.parse().unwrap(); + let src = *regs.entry(src.to_owned()).or_insert(0); + let dest = regs.entry(dest.to_owned()).or_insert(0); + + let cond = match cmp { + "==" => src == rhs, + "!=" => src != rhs, + "<=" => src <= rhs, + ">=" => src >= rhs, + "<" => src < rhs, + ">" => src > rhs, + _ => unimplemented!(), + }; + if cond { + *dest += val; + } + } + regs.values().cloned().max().unwrap() +} + +fn main() { + let mut input = String::new(); + io::stdin().read_to_string(&mut input).unwrap(); + + println!("Part 1: {}", solve1(&input)); +} + +#[test] +fn part1() { + assert_eq!(1, solve1( +"\ +b inc 5 if a > 1 +a inc 1 if b < 5 +c dec -10 if a >= 1 +c inc -20 if c == 10 +" + )); +} -- cgit 1.4.1