diff --git a/2021/src/day21.rs b/2021/src/day21.rs index 77043ba..2288259 100644 --- a/2021/src/day21.rs +++ b/2021/src/day21.rs @@ -139,11 +139,7 @@ pub fn part2(input: &mut dyn Read) -> String { let (a_wins, a_alive) = multiverse(a); let (b_wins, b_alive) = multiverse(b); - let a_winner: u64 = a_wins[1..] - .into_iter() - .zip(b_alive) - .map(|(&a, b)| a * b) - .sum(); + let a_winner: u64 = a_wins[1..].iter().zip(b_alive).map(|(&a, b)| a * b).sum(); let b_winner: u64 = b_wins.into_iter().zip(a_alive).map(|(a, b)| a * b).sum(); a_winner.max(b_winner).to_string() diff --git a/2021/src/day22.rs b/2021/src/day22.rs index 836ef4e..dcbe98f 100644 --- a/2021/src/day22.rs +++ b/2021/src/day22.rs @@ -23,14 +23,17 @@ fn parse_range(input: &[u8]) -> IResult<&[u8], CRange> { })(input) } -fn parse_input<'a>(input: &[u8]) -> IResult<&[u8], Vec<(bool, CRange, CRange, CRange)>> { +fn parse_input(input: &[u8]) -> IResult<&[u8], Vec<(bool, [CRange; 3])>> { let parse_state = alt((map(tag("on x="), |_| true), map(tag("off x="), |_| false))); - let parse_line = tuple(( - parse_state, - parse_range, - preceded(tag(",y="), parse_range), - preceded(tag(",z="), parse_range), - )); + let parse_line = map( + tuple(( + parse_state, + parse_range, + preceded(tag(",y="), parse_range), + preceded(tag(",z="), parse_range), + )), + |(b, x, y, z)| (b, [x, y, z]), + ); separated_list1(newline, parse_line)(input) } @@ -45,7 +48,7 @@ pub fn part1(input: &mut dyn Read) -> String { let ranges = read_input(input, parse_input); - for (toggle, xr, yr, zr) in ranges { + for (toggle, [xr, yr, zr]) in ranges { for z in zr { if !valid_range.contains(&z) { continue;