Compare commits

...

2 Commits

Author SHA1 Message Date
jazzpi a446a05c07 Day 6, puzzle 2 2022-12-13 16:56:25 +01:00
jazzpi e3c356b1ac Day 6, puzzle 1 2022-12-13 16:54:19 +01:00
4 changed files with 36 additions and 0 deletions

8
src/bin/d6p1.rs Normal file
View File

@ -0,0 +1,8 @@
use aoc22::{day6, util};
pub fn main() {
let input = util::parse_input();
let start = day6::parse_datastream(input.as_str(), 4);
println!("Packet starts after {} characters", start + 1);
}

8
src/bin/d6p2.rs Normal file
View File

@ -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);
}

19
src/day6.rs Normal file
View File

@ -0,0 +1,19 @@
use std::collections::{HashSet, VecDeque};
pub fn parse_datastream(stream: &str, n_distinct: usize) -> usize {
let mut chars: VecDeque<char> = VecDeque::new();
for (i, char) in stream.chars().enumerate() {
if i >= n_distinct {
chars.pop_front();
}
chars.push_back(char);
if i >= n_distinct - 1 {
let char_set: HashSet<char> = chars.iter().map(char::clone).collect();
if char_set.len() == n_distinct {
return i;
}
}
}
panic!("Couldn't find a start marker!")
}

View File

@ -3,4 +3,5 @@ pub mod day2;
pub mod day3;
pub mod day4;
pub mod day5;
pub mod day6;
pub mod util;