diff options
author | June McEnroe <june@causal.agency> | 2017-12-09 02:50:05 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-11-22 00:14:25 -0500 |
commit | 7120a42a45a1091b8f87041e4b0fc03d678af4fa (patch) | |
tree | e4a958eeaa77590bb4a93a98a42229d1871a1920 /2017/src | |
parent | Day 7, part 2 (diff) | |
download | aoc-7120a42a45a1091b8f87041e4b0fc03d678af4fa.tar.gz aoc-7120a42a45a1091b8f87041e4b0fc03d678af4fa.zip |
Day 8
Diffstat (limited to '2017/src')
-rw-r--r-- | 2017/src/bin/day08.rs | 57 |
1 files changed, 57 insertions, 0 deletions
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 +" + )); +} |