From 992fcb01be5272937c8be3c11568a703cecd6cde Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Sat, 26 Dec 2020 15:19:23 -0800 Subject: [PATCH] Day 18 part 1 (fixed) --- 2020/src/day18.rs | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/2020/src/day18.rs b/2020/src/day18.rs index 44df8d4..1c97b69 100644 --- a/2020/src/day18.rs +++ b/2020/src/day18.rs @@ -112,15 +112,23 @@ mod part1 { }; } - fn parse_term(tokens: &mut VecDeque) -> u64 { + pub fn parse_expression(tokens: &mut VecDeque) -> u64 { let mut result = parse_item(tokens); let mut t = tokens[0]; loop { match t { - Token::Mul | Token::Add => { + Token::Mul => { tokens.pop_front(); let rhs = parse_item(tokens); if let Token::Mul = t { + result = result * rhs; + } + t = tokens[0]; + } + Token::Add => { + tokens.pop_front(); + let rhs = parse_item(tokens); + if let Token::Add = t { result = result + rhs; } t = tokens[0]; @@ -130,26 +138,8 @@ mod part1 { } result } - - pub fn parse_expression(tokens: &mut VecDeque) -> u64 { - let mut result = parse_term(tokens); - let mut t = tokens[0]; - loop { - match t { - Token::Mul | Token::Add => { - tokens.pop_front(); - let rhs = parse_term(tokens); - if let Token::Add = t { - result = result * rhs; - } - t = tokens[0]; - } - _ => break, - } - } - result - } } + fn parse_part1(tokens: &[Token]) -> u64 { let mut vd: VecDeque = tokens.into_iter().cloned().collect(); part1::parse_expression(&mut vd)