diff --git a/inputs/2022/2022_13.solution b/inputs/2022/2022_13.solution index d039250..94be803 100644 --- a/inputs/2022/2022_13.solution +++ b/inputs/2022/2022_13.solution @@ -1,2 +1,2 @@ Part 1: 5003 -Part 2: ??? +Part 2: 20280 diff --git a/rs/src/y2022/d13.rs b/rs/src/y2022/d13.rs index 6dd7f4c..ba08be3 100644 --- a/rs/src/y2022/d13.rs +++ b/rs/src/y2022/d13.rs @@ -1,8 +1,9 @@ use std::cmp::Ordering; -use std::fmt; use std::iter::Peekable; use std::str::Chars; +use std::{fmt, iter}; +#[derive(Clone)] enum Message { Int(u32), List(Vec), @@ -97,4 +98,27 @@ pub fn solve(input: String) { .map(|(i, _)| i + 1) .sum::(); println!("Part 1: {part1}"); + + let divp1 = vec![Message::List(vec![Message::Int(2)])]; + let divp2 = vec![Message::List(vec![Message::Int(6)])]; + let mut packets = pairs + .into_iter() + .flat_map(|(a, b)| iter::once(a).chain(iter::once(b))) + .chain(iter::once(divp1.clone())) + .chain(iter::once(divp2.clone())) + .collect::>(); + packets.sort(); + let divp1i = packets + .iter() + .enumerate() + .find(|(_, p)| *p == &divp1) + .unwrap() + .0; + let divp2i = packets + .iter() + .enumerate() + .find(|(_, p)| *p == &divp2) + .unwrap() + .0; + println!("Part 2: {}", (divp1i + 1) * (divp2i + 1)); } diff --git a/sample_inputs/2022/2022_13.solution b/sample_inputs/2022/2022_13.solution index e16442d..fc39808 100644 --- a/sample_inputs/2022/2022_13.solution +++ b/sample_inputs/2022/2022_13.solution @@ -1,2 +1,2 @@ Part 1: 13 -Part 2: ??? +Part 2: 140