day18 simplification. No subtraction of division necessary
This commit is contained in:
parent
40b618593f
commit
62601e0782
28
src/day18.rs
28
src/day18.rs
@ -4,7 +4,7 @@ use nom::bytes::complete::tag;
|
||||
use nom::character::complete::{char, digit1, space0};
|
||||
use nom::combinator::map_res;
|
||||
use nom::multi::fold_many0;
|
||||
use nom::sequence::{delimited, pair};
|
||||
use nom::sequence::{delimited, preceded};
|
||||
use nom::IResult;
|
||||
use std::str::FromStr;
|
||||
|
||||
@ -20,32 +20,18 @@ fn num_or_paren_expr(i: &str) -> IResult<&str, usize> {
|
||||
alt((num, paren_expr))(i)
|
||||
}
|
||||
|
||||
fn add_or_sub(i: &str) -> IResult<&str, usize> {
|
||||
fn add_or_paren(i: &str) -> IResult<&str, usize> {
|
||||
let (i, lhs) = num_or_paren_expr(i)?;
|
||||
|
||||
fold_many0(
|
||||
pair(alt((char('+'), char('-'))), num_or_paren_expr),
|
||||
lhs,
|
||||
|lhs, (op, rhs)| match op {
|
||||
'+' => lhs + rhs,
|
||||
'-' => lhs - rhs,
|
||||
_ => unreachable!("invalid op"),
|
||||
},
|
||||
)(i)
|
||||
fold_many0(preceded(char('+'), num_or_paren_expr), lhs, |lhs, rhs| {
|
||||
lhs + rhs
|
||||
})(i)
|
||||
}
|
||||
|
||||
fn expr(i: &str) -> IResult<&str, usize> {
|
||||
let (i, lhs) = add_or_sub(i)?;
|
||||
let (i, lhs) = add_or_paren(i)?;
|
||||
|
||||
fold_many0(
|
||||
pair(alt((char('*'), char('/'))), add_or_sub),
|
||||
lhs,
|
||||
|lhs, (op, rhs)| match op {
|
||||
'*' => lhs * rhs,
|
||||
'/' => lhs / rhs,
|
||||
_ => unreachable!("invalid op"),
|
||||
},
|
||||
)(i)
|
||||
fold_many0(preceded(char('*'), add_or_paren), lhs, |lhs, rhs| lhs * rhs)(i)
|
||||
}
|
||||
|
||||
#[aoc(day18, part1)]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user