mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-25 21:00:31 +01:00
Stream to reduce peak allocations
This commit is contained in:
@@ -6,6 +6,7 @@ use nom::branch::alt;
|
|||||||
use nom::bytes::complete::tag;
|
use nom::bytes::complete::tag;
|
||||||
use nom::character::complete::multispace1;
|
use nom::character::complete::multispace1;
|
||||||
use nom::character::complete::newline;
|
use nom::character::complete::newline;
|
||||||
|
use nom::combinator::iterator;
|
||||||
use nom::combinator::map;
|
use nom::combinator::map;
|
||||||
use nom::multi::many0;
|
use nom::multi::many0;
|
||||||
use nom::multi::separated_list0;
|
use nom::multi::separated_list0;
|
||||||
@@ -72,21 +73,17 @@ fn parse_signal(input: &[u8]) -> IResult<&[u8], Signal> {
|
|||||||
))(input)
|
))(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse_signal_pairs(input: &[u8]) -> IResult<&[u8], Vec<(Signal, Signal)>> {
|
fn parse_signal_pair(input: &[u8]) -> IResult<&[u8], (Signal, Signal)> {
|
||||||
separated_list0(
|
pair(
|
||||||
newline,
|
terminated(parse_signal, newline),
|
||||||
pair(
|
terminated(parse_signal, multispace1),
|
||||||
terminated(parse_signal, newline),
|
|
||||||
terminated(parse_signal, newline),
|
|
||||||
),
|
|
||||||
)(input)
|
)(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn part1(input: &[u8]) -> Result<String> {
|
pub fn part1(input: &[u8]) -> Result<String> {
|
||||||
let signals = parse_input(input, parse_signal_pairs)?;
|
let mut iterator = iterator(input, parse_signal_pair);
|
||||||
|
|
||||||
let result: usize = signals
|
let result: usize = (&mut iterator)
|
||||||
.into_iter()
|
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.filter_map(|(i, (first, second))| (first < second).then_some(i + 1))
|
.filter_map(|(i, (first, second))| (first < second).then_some(i + 1))
|
||||||
.sum();
|
.sum();
|
||||||
|
|||||||
Reference in New Issue
Block a user