aoc/2022/6/src/main.rs

55 lines
1.5 KiB
Rust

fn main() {
let contents = std::fs::read_to_string("./input").expect("Failed to read input file");
let mut x: usize = 0;
while x < contents.len() - 3 {
let slice = contents.get(x..x+4).expect("Couldn't slice it");
if !has_duplicates(slice) {
println!("[PART 1] First 4 with no duplicates ends at index {}, after the {}th byte", x+3, x+4);
break;
}
x +=1;
}
while x < contents.len() - 13 {
let slice = contents.get(x..x+14).expect("Couldn't slice it");
if !has_duplicates(slice) {
println!("[PART 2] First 4 with no duplicates ends at index {}, after the {}th byte", x+13, x+14);
break;
}
x +=1;
}
}
fn has_duplicates(s: &str) -> bool {
let mut x: usize = 0;
while x < s.len() {
let mut y: usize = x + 1;
while y < s.len() {
if x == y {
y += 1;
continue;
}
if s[x..x+1] == s[y..y+1] {
return true;
}
y += 1;
}
x += 1;
}
return false;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_has_duplicates() {
assert_eq!(has_duplicates("asdf"), false);
assert_eq!(has_duplicates("addf"), true);
assert_eq!(has_duplicates("asda"), true);
assert_eq!(has_duplicates("aadf"), true);
assert_eq!(has_duplicates("aada"), true);
assert_eq!(has_duplicates("aaaa"), true);
}
}