46 lines
1.0 KiB
Rust
46 lines
1.0 KiB
Rust
use std::error::Error;
|
|
use std::fs::File;
|
|
use std::io::{self, BufRead};
|
|
|
|
fn find_sequence(line: &str, len: usize) -> usize {
|
|
let mut answer = 0;
|
|
|
|
for i in 0..line.len() - len {
|
|
let mut set1 = 0u32;
|
|
let mut repeated = false;
|
|
for c in line[i..i + len].chars() {
|
|
let bit = 1 << (c as u32 - 'a' as u32);
|
|
if bit & set1 == 0 {
|
|
set1 |= bit;
|
|
} else {
|
|
repeated = true;
|
|
break;
|
|
}
|
|
}
|
|
if !repeated {
|
|
answer = i + len;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return answer;
|
|
}
|
|
|
|
fn main() -> Result<(), Box<dyn Error>> {
|
|
let file = File::open("inputs/day6.txt")?;
|
|
let line = io::BufReader::new(file)
|
|
.lines()
|
|
.nth(0)
|
|
.unwrap()
|
|
.unwrap()
|
|
.to_owned();
|
|
|
|
let answer1 = find_sequence(&line, 4);
|
|
println!("Answer Part1: {}", answer1);
|
|
|
|
let answer2 = find_sequence(&line, 14);
|
|
println!("Answer Part2: {}", answer2);
|
|
|
|
Ok(())
|
|
}
|