diff --git a/day06/src/main.rs b/day06/src/main.rs index 623064d..d60a740 100644 --- a/day06/src/main.rs +++ b/day06/src/main.rs @@ -3,23 +3,25 @@ use std::error; use std::fs::File; use std::io::prelude::*; +const N_CHARS: usize = 14; + fn main() -> Result<(), Box> { let mut f = File::open("input.txt")?; let mut buf = [0; 32]; let mut pos = 0; let mut found = false; - let mut n = f.read(&mut buf[3..])?; + let mut n = f.read(&mut buf[(N_CHARS - 1)..])?; while n > 0 { - for i in 4..(4 + n) { + for i in N_CHARS..(N_CHARS + n) { pos += 1; - // println!("{}", std::str::from_utf8(&buf[(i - 4)..i]).unwrap()); + // println!("{}", std::str::from_utf8(&buf[(i - N_CHARS)..i]).unwrap()); // skip if we read uninitialized data from first run - if buf[i - 4] == 0 { + if buf[i - N_CHARS] == 0 { continue; } - let set: HashSet<&u8> = HashSet::from_iter(&buf[(i - 4)..i]); - if set.len() == 4 { + let set: HashSet<&u8> = HashSet::from_iter(&buf[(i - N_CHARS)..i]); + if set.len() == N_CHARS { found = true; break; } @@ -27,10 +29,10 @@ fn main() -> Result<(), Box> { if found { break; } - for i in 0..3 { - buf[i] = buf[29 + i]; + for i in 0..(N_CHARS - 1) { + buf[i] = buf[(32 - N_CHARS + 1) + i]; } - n = f.read(&mut buf[3..])?; + n = f.read(&mut buf[(N_CHARS - 1)..])?; } println!("Found 4 different chars at position {}", pos); Ok(())