Day 6 speed update
This commit is contained in:
		| @@ -1,22 +1,29 @@ | ||||
| use std::{collections::HashSet, fs::read_to_string}; | ||||
|  | ||||
| fn find_nonrecuring_sequence(input: &[char], length: usize) -> usize { | ||||
| fn find_nonrecuring_sequence(input: &[char], length: usize) -> Option<usize> { | ||||
|     input | ||||
|         .windows(length) | ||||
|         .enumerate() | ||||
|         .find(|(_, chars)| chars.iter().collect::<HashSet<_>>().len() == length) | ||||
|         .unwrap_or((input.len(), &[])) | ||||
|         .0 | ||||
|         + length | ||||
|         .find(|(_, chars)| { | ||||
|             for i in 1..chars.len() { | ||||
|                 if chars[..i].contains(&chars[i]) { | ||||
|                     return false; | ||||
|                 } | ||||
|             } | ||||
|             true | ||||
|         }) | ||||
|         //.find(|(_, chars)| chars.iter().collect::<HashSet<_>>().len() == length) | ||||
|         .map(|(i, _)| i + length) | ||||
| } | ||||
|  | ||||
| fn main() { | ||||
| fn main() -> Result<(), std::io::Error> { | ||||
|     const PACKET_START_LENGTH: usize = 4; | ||||
|     const MESSAGE_START_LENGTH: usize = 14; | ||||
|     let input = read_to_string("input.txt").unwrap(); | ||||
|     let input = read_to_string("input.txt")?; | ||||
|     let input = input.chars().collect::<Vec<_>>(); | ||||
|     let packet_marker = find_nonrecuring_sequence(&input, PACKET_START_LENGTH); | ||||
|     println!("first packet marker at {packet_marker}"); | ||||
|     println!("first packet marker at {packet_marker:?}"); | ||||
|     let message_marker = find_nonrecuring_sequence(&input, MESSAGE_START_LENGTH); | ||||
|     println!("first message marker at {message_marker}"); | ||||
|     println!("first message marker at {message_marker:?}"); | ||||
|     Ok(()) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user