day06: Add part 1

Borrow-checker hindered me to keep the same HashSet around all the time
and just clear it, so it feels a little inefficient to have a new set
every time.
This commit is contained in:
MasterofJOKers 2022-12-19 14:34:02 +01:00
parent f083a70ae5
commit 035f8e86ac
3 changed files with 52 additions and 0 deletions

7
day06/Cargo.lock generated Normal file
View File

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "day06"
version = "0.1.0"

8
day06/Cargo.toml Normal file
View File

@ -0,0 +1,8 @@
[package]
name = "day06"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

37
day06/src/main.rs Normal file
View File

@ -0,0 +1,37 @@
use std::collections::HashSet;
use std::error;
use std::fs::File;
use std::io::prelude::*;
fn main() -> Result<(), Box<dyn error::Error>> {
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..])?;
while n > 0 {
for i in 4..(4 + n) {
pos += 1;
// println!("{}", std::str::from_utf8(&buf[(i - 4)..i]).unwrap());
// skip if we read uninitialized data from first run
if buf[i - 4] == 0 {
continue;
}
let set: HashSet<&u8> = HashSet::from_iter(&buf[(i - 4)..i]);
if set.len() == 4 {
found = true;
break;
}
}
if found {
break;
}
for i in 0..3 {
buf[i] = buf[29 + i];
}
n = f.read(&mut buf[3..])?;
}
println!("Found 4 different chars at position {}", pos);
Ok(())
}