day06: Make more generic and add part 2 with it
Part 2 is basically the same just with 14 chars instead of 4.
This commit is contained in:
		
							parent
							
								
									035f8e86ac
								
							
						
					
					
						commit
						01789441db
					
				|  | @ -3,23 +3,25 @@ use std::error; | |||
| use std::fs::File; | ||||
| use std::io::prelude::*; | ||||
| 
 | ||||
| const N_CHARS: usize = 14; | ||||
| 
 | ||||
| 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..])?; | ||||
| 	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<dyn error::Error>> { | |||
| 		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(()) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue