From 6d9defce42fc36e8769dc88be2d0d110768878f8 Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Sun, 11 Dec 2022 22:27:25 +0100 Subject: [PATCH] Discover the magic of nom::combinator::value --- 2022/src/day05.rs | 3 ++- 2022/src/day10.rs | 3 ++- 2022/src/day11.rs | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/2022/src/day05.rs b/2022/src/day05.rs index ef0e392..cd44acb 100644 --- a/2022/src/day05.rs +++ b/2022/src/day05.rs @@ -6,6 +6,7 @@ use nom::bytes::complete::take_until; use nom::character::complete::newline; use nom::combinator::map; use nom::combinator::opt; +use nom::combinator::value; use nom::multi::fold_many1; use nom::multi::many1; use nom::sequence::delimited; @@ -31,7 +32,7 @@ fn parse_row<'a>(input: &'a [u8], stacks: &mut OwnedStacks) -> IResult<&'a [u8], Some(v[0]) }), // Or an empty stack into a None - map(tag(" "), |_| None), + value(None, tag(" ")), )), opt(tag(" ")), )), diff --git a/2022/src/day10.rs b/2022/src/day10.rs index 2da1e52..b292903 100644 --- a/2022/src/day10.rs +++ b/2022/src/day10.rs @@ -4,6 +4,7 @@ use nom::bytes::complete::tag; use nom::character::complete::newline; use nom::combinator::iterator; use nom::combinator::map; +use nom::combinator::value; use nom::sequence::preceded; use nom::sequence::terminated; use nom::IResult; @@ -36,7 +37,7 @@ impl Instruction { fn parse_instruction(input: &[u8]) -> IResult<&[u8], Instruction> { terminated( alt(( - map(tag("noop"), |_| Instruction::Noop), + value(Instruction::Noop, tag("noop")), map(preceded(tag("addx "), nom::character::complete::i32), |v| { Instruction::AddX(v) }), diff --git a/2022/src/day11.rs b/2022/src/day11.rs index c78b017..2a1fdb3 100644 --- a/2022/src/day11.rs +++ b/2022/src/day11.rs @@ -6,6 +6,7 @@ use nom::character::complete::digit1; use nom::character::complete::newline; use nom::combinator::map; use nom::combinator::map_res; +use nom::combinator::value; use nom::multi::separated_list0; use nom::multi::separated_list1; use nom::sequence::delimited; @@ -81,7 +82,7 @@ fn parse_operation(input: &[u8]) -> IResult<&[u8], Operation> { _ => Err(anyhow::anyhow!("Invalid operation {op:?}")), }, ), - map(tag("* old"), |_| Operation::Square), + value(Operation::Square, tag("* old")), )), )(input) }