summaryrefslogtreecommitdiff
path: root/2022/day6/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to '2022/day6/src/lib.rs')
-rw-r--r--2022/day6/src/lib.rs67
1 files changed, 67 insertions, 0 deletions
diff --git a/2022/day6/src/lib.rs b/2022/day6/src/lib.rs
new file mode 100644
index 0000000..76acb53
--- /dev/null
+++ b/2022/day6/src/lib.rs
@@ -0,0 +1,67 @@
+pub fn part(input: &str, m: usize) -> usize {
+ let n = input.len();
+
+ for i in 0..n {
+ let s = &input[i..i + m];
+ let mut check = false;
+ if s.trim().len() < m {
+ break;
+ }
+
+ 'o: for j in 0..m {
+ for k in 0..m {
+ if j == k {
+ continue;
+ }
+
+ if s.chars().nth(j) == s.chars().nth(k) {
+ check = true;
+ break 'o;
+ }
+ }
+ }
+
+ if !check {
+ return i + m;
+ }
+ }
+
+ 0
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_example() {
+ let input = include_str!("../example.txt");
+ let result = part(input, 4);
+
+ assert_eq!(result, 5);
+ }
+
+ #[test]
+ fn test_input() {
+ let input = include_str!("../input.txt");
+ let result = part(input, 4);
+
+ assert_eq!(result, 1779);
+ }
+
+ #[test]
+ fn test_example2() {
+ let input = include_str!("../example.txt");
+ let result = part(input, 14);
+
+ assert_eq!(result, 23);
+ }
+
+ #[test]
+ fn test_input2() {
+ let input = include_str!("../input.txt");
+ let result = part(input, 14);
+
+ assert_eq!(result, 23);
+ }
+}