main.rs (856B)
1 use std::collections::{HashMap, VecDeque}; 2 3 fn main() { 4 let input = std::fs::read_to_string("input.txt").unwrap().to_string(); 5 // 1542 6 println!("Part 1: {}", part_1(&input, 4).unwrap()); 7 // 3153 8 println!("Part 2: {}", part_1(&input, 14).unwrap()); 9 } 10 11 fn part_1(input: &str, header_size: usize) -> Option<usize> { 12 let mut buf = VecDeque::new(); 13 let mut counter = HashMap::new(); 14 for (i, c) in input.chars().enumerate() { 15 buf.push_back(c); 16 counter.insert(c, *counter.get(&c).unwrap_or(&0) + 1); 17 if buf.len() > header_size { 18 let h = buf.pop_front().unwrap(); 19 counter.insert(h, *counter.get(&h).unwrap() - 1); 20 if buf.iter().filter(|x| *counter.get(x).unwrap() == 1).count() == header_size { 21 return Some(i + 1); 22 } 23 } 24 } 25 None 26 }