aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorj-james2022-12-06 06:54:35 +0000
committerj-james2022-12-06 06:54:35 +0000
commit216616ab804a9b8df86511f356f692db5406d654 (patch)
tree9e01ee175059e2bc76ce94c55d9685139c0e9fc5
parentfbf08093a62a6c99e14df0b001d4acc5459e8e06 (diff)
Day Six
-rw-r--r--2022/nim/day06/src/main.nim25
-rw-r--r--2022/rust/day06/Cargo.lock7
-rw-r--r--2022/rust/day06/Cargo.toml8
-rw-r--r--2022/rust/day06/src/main.rs27
4 files changed, 67 insertions, 0 deletions
diff --git a/2022/nim/day06/src/main.nim b/2022/nim/day06/src/main.nim
new file mode 100644
index 0000000..cd8eb0a
--- /dev/null
+++ b/2022/nim/day06/src/main.nim
@@ -0,0 +1,25 @@
+# Day 6: Tuning Trouble
+import std/[os, strutils, sets]
+
+let input = paramStr(1).readFile().strip().split("\n")[0]
+
+iterator slide(input: string, num: int): string =
+ for i in 0 ..< input.len - num:
+ var result: string
+ for j in 0 ..< num:
+ result &= input[i+j]
+ yield result
+
+var i = 4
+for window in input.slide(4):
+ if window.toHashSet.len == 4:
+ break
+ inc i
+echo i
+
+i = 14
+for window in input.slide(14):
+ if window.toHashSet.len == 14:
+ break
+ inc i
+echo i
diff --git a/2022/rust/day06/Cargo.lock b/2022/rust/day06/Cargo.lock
new file mode 100644
index 0000000..0c65426
--- /dev/null
+++ b/2022/rust/day06/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "day06"
+version = "0.1.0"
diff --git a/2022/rust/day06/Cargo.toml b/2022/rust/day06/Cargo.toml
new file mode 100644
index 0000000..2f276f3
--- /dev/null
+++ b/2022/rust/day06/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "day06"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/2022/rust/day06/src/main.rs b/2022/rust/day06/src/main.rs
new file mode 100644
index 0000000..b5f42cc
--- /dev/null
+++ b/2022/rust/day06/src/main.rs
@@ -0,0 +1,27 @@
+use std::collections::HashSet;
+use std::env;
+use std::fs;
+
+fn main() {
+ let args = env::args().nth(1).expect("missing input");
+ let input = fs::read_to_string(args).unwrap();
+ let signal: Vec<char> = input.trim().chars().collect();
+
+ let depth = 4;
+ for (i, c) in signal.windows(depth).enumerate() {
+ // why can rust not infer the type of HashSet?
+ // https://stackoverflow.com/questions/62949404/
+ if HashSet::<_>::from_iter(c).len() == depth {
+ println!("{}", i + depth);
+ break;
+ }
+ }
+
+ let depth = 14;
+ for (i, c) in signal.windows(depth).enumerate() {
+ if HashSet::<_>::from_iter(c).len() == depth {
+ println!("{}", i + depth);
+ break;
+ }
+ }
+}