From b4ec1ca42813e733f2c4183c5d523f53557c151c Mon Sep 17 00:00:00 2001 From: Dory Date: Sun, 10 Mar 2024 00:02:11 -0800 Subject: [PATCH] d6p2 --- day6/src/main.rs | 17 ++++++++--------- day6/src/main1.rs | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 day6/src/main1.rs diff --git a/day6/src/main.rs b/day6/src/main.rs index 70f1932..068d9e3 100644 --- a/day6/src/main.rs +++ b/day6/src/main.rs @@ -1,25 +1,24 @@ use std::env; use std::fs::File; use std::io::{BufReader, Read}; +use std::collections::{VecDeque, HashSet}; fn main() { let file = File::open(&env::args().nth(1).unwrap()).unwrap(); let reader = BufReader::new(file); - let (mut x1, mut x2, mut x3) = (0, 0, 0); + let mut prevs: VecDeque = VecDeque::new(); let mut i = 0; for byte in reader.bytes() { i += 1; - let c = byte.unwrap(); - if c != x1 && c != x2 && c != x3 - && x1 != x2 && x1 != x3 && x2 != x3 - && x1 != 0 { + prevs.push_back(byte.unwrap()); + if prevs.len() > 14 { + prevs.pop_front(); + } + let set: HashSet = HashSet::from_iter(prevs.iter().cloned()); + if set.len() == 14 { println!("{}", i); break; - } else { - x1 = x2; - x2 = x3; - x3 = c; } } } diff --git a/day6/src/main1.rs b/day6/src/main1.rs new file mode 100644 index 0000000..70f1932 --- /dev/null +++ b/day6/src/main1.rs @@ -0,0 +1,26 @@ +use std::env; +use std::fs::File; +use std::io::{BufReader, Read}; + +fn main() { + let file = File::open(&env::args().nth(1).unwrap()).unwrap(); + let reader = BufReader::new(file); + + let (mut x1, mut x2, mut x3) = (0, 0, 0); + let mut i = 0; + for byte in reader.bytes() { + i += 1; + let c = byte.unwrap(); + if c != x1 && c != x2 && c != x3 + && x1 != x2 && x1 != x3 && x2 != x3 + && x1 != 0 { + println!("{}", i); + break; + } else { + x1 = x2; + x2 = x3; + x3 = c; + } + } +} +