summaryrefslogtreecommitdiff
path: root/2022/Rust/src
diff options
context:
space:
mode:
Diffstat (limited to '2022/Rust/src')
-rw-r--r--2022/Rust/src/day5.rs16
-rw-r--r--2022/Rust/src/day6.rs57
2 files changed, 69 insertions, 4 deletions
diff --git a/2022/Rust/src/day5.rs b/2022/Rust/src/day5.rs
index 12ff7a8..d344ddd 100644
--- a/2022/Rust/src/day5.rs
+++ b/2022/Rust/src/day5.rs
@@ -73,17 +73,25 @@ impl FromStr for Command {
fn apply_command(stacks: &mut Vec<Stack>, cmd: &Command, part1: bool) {
if part1 {
for _ in 0..cmd.num_of_times {
- let element_to_push = stacks[cmd.from - 1].stack.pop_back().expect("welp the stack is empty");
+ let element_to_push = stacks[cmd.from - 1]
+ .stack
+ .pop_back()
+ .expect("welp the stack is empty");
stacks[cmd.target - 1].stack.push_back(element_to_push);
}
} else {
- let mut tmp_stack :VecDeque<StackElement> = VecDeque::new();
+ let mut tmp_stack: VecDeque<StackElement> = VecDeque::new();
for _ in 0..cmd.num_of_times {
- let element_to_push = stacks[cmd.from - 1].stack.pop_back().expect("welp the stack is empty");
+ let element_to_push = stacks[cmd.from - 1]
+ .stack
+ .pop_back()
+ .expect("welp the stack is empty");
tmp_stack.push_back(element_to_push);
}
for _ in 0..cmd.num_of_times {
- stacks[cmd.target - 1].stack.push_back(tmp_stack.pop_back().unwrap());
+ stacks[cmd.target - 1]
+ .stack
+ .push_back(tmp_stack.pop_back().unwrap());
}
}
}
diff --git a/2022/Rust/src/day6.rs b/2022/Rust/src/day6.rs
new file mode 100644
index 0000000..b3afab6
--- /dev/null
+++ b/2022/Rust/src/day6.rs
@@ -0,0 +1,57 @@
+use std::collections::HashSet;
+
+fn solve_functional(data: &str, window: usize) -> usize {
+ data.as_bytes()
+ .windows(window)
+ .map(|arr| {
+ arr.into_iter()
+ .map(|ele| *ele as usize)
+ .collect::<HashSet<_>>()
+ })
+ .position(|set| set.len() == window)
+ .unwrap()
+ + window
+}
+
+fn solve_part_one(data: &str) -> usize {
+ let v: Vec<char> = data.chars().collect();
+ for i in 0..v.len() - 4 {
+ let mut st: HashSet<char> = HashSet::new();
+ for j in i..i + 4 {
+ st.insert(v[j]);
+ }
+ if st.len() == 4 {
+ return i + 4;
+ }
+ }
+ unreachable!()
+}
+
+fn solve_part_two(data: &str) -> usize {
+ let v: Vec<char> = data.chars().collect();
+ for i in 0..v.len() - 14 {
+ let mut st: HashSet<char> = HashSet::new();
+ for j in i..i + 14 {
+ st.insert(v[j]);
+ }
+ if st.len() == 14 {
+ return i + 14;
+ }
+ }
+ unreachable!()
+}
+
+fn main() {
+ let data_test = include_str!("../data/day6.test");
+ let data_prod = include_str!("../data/day6.prod");
+ println!("{}", solve_part_one(data_test));
+ println!("{}", solve_part_one(data_prod));
+ println!("{}", solve_part_two(data_test));
+ println!("{}", solve_part_two(data_prod));
+
+
+ println!("{}", solve_functional(data_test, 4));
+ println!("{}", solve_functional(data_prod, 4));
+ println!("{}", solve_functional(data_test, 14));
+ println!("{}", solve_functional(data_prod, 14));
+}