From d1be2b22e02a8cf82fa9b94099f21718c24d79be Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 6 Dec 2022 12:04:21 +0100 Subject: [PATCH] Day 6 speed update --- day6/src/main.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/day6/src/main.rs b/day6/src/main.rs index bfdec89..2408a2f 100644 --- a/day6/src/main.rs +++ b/day6/src/main.rs @@ -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 { input .windows(length) .enumerate() - .find(|(_, chars)| chars.iter().collect::>().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::>().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::>(); 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(()) }