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:
		
							parent
							
								
									f083a70ae5
								
							
						
					
					
						commit
						035f8e86ac
					
				| 
						 | 
				
			
			@ -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"
 | 
			
		||||
| 
						 | 
				
			
			@ -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]
 | 
			
		||||
| 
						 | 
				
			
			@ -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(())
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue