Day 6, puzzle 2
This commit is contained in:
parent
e3c356b1ac
commit
a446a05c07
@ -2,7 +2,7 @@ use aoc22::{day6, util};
|
|||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
let input = util::parse_input();
|
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);
|
||||||
}
|
}
|
||||||
|
8
src/bin/d6p2.rs
Normal file
8
src/bin/d6p2.rs
Normal 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);
|
||||||
|
}
|
@ -1,15 +1,15 @@
|
|||||||
use std::collections::{HashSet, VecDeque};
|
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<char> = VecDeque::new();
|
let mut chars: VecDeque<char> = VecDeque::new();
|
||||||
for (i, char) in stream.chars().enumerate() {
|
for (i, char) in stream.chars().enumerate() {
|
||||||
if i >= 4 {
|
if i >= n_distinct {
|
||||||
chars.pop_front();
|
chars.pop_front();
|
||||||
}
|
}
|
||||||
chars.push_back(char);
|
chars.push_back(char);
|
||||||
if i >= 3 {
|
if i >= n_distinct - 1 {
|
||||||
let char_set: HashSet<char> = chars.iter().map(char::clone).collect();
|
let char_set: HashSet<char> = chars.iter().map(char::clone).collect();
|
||||||
if char_set.len() == 4 {
|
if char_set.len() == n_distinct {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user