aoc2022/src/days/day6.rs
2022-12-06 08:24:31 -06:00

44 lines
956 B
Rust

use aoc_runner_derive::aoc;
use itertools::Itertools;
#[aoc(day6, part1, tuple_windows)]
fn part1_tuple_windows(input: &str) -> usize {
input
.char_indices()
.tuple_windows()
.find_map(|((_, a), (_, b), (_, c), (i, d))| {
if [a, b, c, d].iter().duplicates().count() == 0 {
Some(i + d.len_utf8())
} else {
None
}
})
.unwrap()
}
#[aoc(day6, part1, indexing)]
fn part1_indexing(input: &str) -> usize {
const N: usize = 4;
for i in N..=input.len() {
let s = &input[i - N..i];
if s.chars().duplicates().count() == 0 {
return i;
}
}
usize::MAX
}
#[aoc(day6, part2)]
fn part2(input: &str) -> usize {
const N: usize = 14;
for i in N..=input.len() {
let s = &input[i - N..i];
if s.chars().duplicates().count() == 0 {
return i;
}
}
usize::MAX
}