From a2a69a373a3ec90856e94fb5cf39b8a2157ffdda Mon Sep 17 00:00:00 2001 From: Joscha Date: Tue, 6 Dec 2022 09:50:12 +0100 Subject: [PATCH] [rs] Solve 2022_06 part 2 --- inputs/2022_06.solution | 1 + rs/src/y2022/d06.rs | 40 ++++++++++++++++++------------- sample_inputs/2022_06.01.solution | 1 + sample_inputs/2022_06.02.solution | 1 + sample_inputs/2022_06.03.solution | 1 + sample_inputs/2022_06.04.solution | 1 + sample_inputs/2022_06.05.solution | 1 + 7 files changed, 30 insertions(+), 16 deletions(-) diff --git a/inputs/2022_06.solution b/inputs/2022_06.solution index f651c3d..f09e090 100644 --- a/inputs/2022_06.solution +++ b/inputs/2022_06.solution @@ -1 +1,2 @@ Part 1: 1707 +Part 2: 3697 diff --git a/rs/src/y2022/d06.rs b/rs/src/y2022/d06.rs index 5940bd0..fff1d83 100644 --- a/rs/src/y2022/d06.rs +++ b/rs/src/y2022/d06.rs @@ -1,17 +1,25 @@ -pub fn solve(input: String) { - let part1 = input - .chars() - .zip(input.chars().skip(1)) - .zip(input.chars().skip(2)) - .zip(input.char_indices().skip(3)) - .find_map(|(((c1, c2), c3), (i, c4))| { - if c1 != c2 && c1 != c3 && c1 != c4 && c2 != c3 && c2 != c4 && c3 != c4 { - println!("{c1}{c2}{c3}{c4}"); - Some(i + 1) - } else { - None - } - }) - .unwrap(); - println!("Part 1: {part1}"); +use core::panic; +use std::collections::{HashSet, VecDeque}; + +fn scan(input: &str, lookback: usize) -> usize { + let mut last_n = VecDeque::with_capacity(lookback); + for (i, c) in input.chars().enumerate() { + last_n.push_back(c); + while last_n.len() > lookback { + last_n.pop_front(); + } + if last_n.len() < lookback { + continue; + } + let last_n_set = last_n.iter().copied().collect::>(); + if last_n_set.len() == lookback { + return i; + } + } + panic!() +} + +pub fn solve(input: String) { + println!("Part 1: {}", scan(&input, 4) + 1); + println!("Part 2: {}", scan(&input, 14) + 1); } diff --git a/sample_inputs/2022_06.01.solution b/sample_inputs/2022_06.01.solution index 257c3c0..0081629 100644 --- a/sample_inputs/2022_06.01.solution +++ b/sample_inputs/2022_06.01.solution @@ -1 +1,2 @@ Part 1: 7 +Part 2: 19 diff --git a/sample_inputs/2022_06.02.solution b/sample_inputs/2022_06.02.solution index 895b3bc..8007ba2 100644 --- a/sample_inputs/2022_06.02.solution +++ b/sample_inputs/2022_06.02.solution @@ -1 +1,2 @@ Part 1: 5 +Part 2: 23 diff --git a/sample_inputs/2022_06.03.solution b/sample_inputs/2022_06.03.solution index 75fbcbe..fe98259 100644 --- a/sample_inputs/2022_06.03.solution +++ b/sample_inputs/2022_06.03.solution @@ -1 +1,2 @@ Part 1: 6 +Part 2: 23 diff --git a/sample_inputs/2022_06.04.solution b/sample_inputs/2022_06.04.solution index 4d0f277..34fbbd7 100644 --- a/sample_inputs/2022_06.04.solution +++ b/sample_inputs/2022_06.04.solution @@ -1 +1,2 @@ Part 1: 10 +Part 2: 29 diff --git a/sample_inputs/2022_06.05.solution b/sample_inputs/2022_06.05.solution index d4ec59b..13bbc53 100644 --- a/sample_inputs/2022_06.05.solution +++ b/sample_inputs/2022_06.05.solution @@ -1 +1,2 @@ Part 1: 11 +Part 2: 26