diff --git a/src/bin/d6p1.rs b/src/bin/d6p1.rs index 15e8c6e..23c4229 100644 --- a/src/bin/d6p1.rs +++ b/src/bin/d6p1.rs @@ -2,7 +2,7 @@ use aoc22::{day6, util}; pub fn main() { let input = util::parse_input(); - let start = day6::parse_datastream(input.as_str()); + let start = day6::parse_datastream(input.as_str(), 4); - println!("Datastream starts after {} characters", start + 1); + println!("Packet starts after {} characters", start + 1); } diff --git a/src/bin/d6p2.rs b/src/bin/d6p2.rs new file mode 100644 index 0000000..767ae3e --- /dev/null +++ b/src/bin/d6p2.rs @@ -0,0 +1,8 @@ +use aoc22::{day6, util}; + +pub fn main() { + let input = util::parse_input(); + let start = day6::parse_datastream(input.as_str(), 14); + + println!("Message starts after {} characters", start + 1); +} diff --git a/src/day6.rs b/src/day6.rs index ba310b0..205774f 100644 --- a/src/day6.rs +++ b/src/day6.rs @@ -1,15 +1,15 @@ use std::collections::{HashSet, VecDeque}; -pub fn parse_datastream(stream: &str) -> usize { +pub fn parse_datastream(stream: &str, n_distinct: usize) -> usize { let mut chars: VecDeque = VecDeque::new(); for (i, char) in stream.chars().enumerate() { - if i >= 4 { + if i >= n_distinct { chars.pop_front(); } chars.push_back(char); - if i >= 3 { + if i >= n_distinct - 1 { let char_set: HashSet = chars.iter().map(char::clone).collect(); - if char_set.len() == 4 { + if char_set.len() == n_distinct { return i; } }