You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
691 B
Rust
38 lines
691 B
Rust
use crate::util::prelude::*;
|
|
|
|
static INPUT: &str = include_str!("inputs/day6.txt");
|
|
|
|
fn find_start(s: &str, win_size: usize) -> usize {
|
|
let chars: Vec<_> = s.chars().collect();
|
|
|
|
chars
|
|
.windows(win_size)
|
|
.find(|chars| {
|
|
let char_counts =
|
|
chars.iter().fold(HashMap::default(), |mut counts, char| {
|
|
*counts.entry(char).or_insert(0) += 1;
|
|
|
|
counts
|
|
});
|
|
|
|
if *char_counts.values().max().unwrap() == 1 {
|
|
return true;
|
|
}
|
|
|
|
false
|
|
})
|
|
.map(|s| {
|
|
(unsafe { s.as_ptr().offset_from(chars.as_ptr()) } as usize)
|
|
+ s.len()
|
|
})
|
|
.unwrap()
|
|
}
|
|
|
|
pub fn part1() {
|
|
println!("{}", find_start(INPUT, 4));
|
|
}
|
|
|
|
pub fn part2() {
|
|
println!("{}", find_start(INPUT, 14));
|
|
}
|