summaryrefslogtreecommitdiff
path: root/2024_rust/src/day2.rs
diff options
context:
space:
mode:
authorGuillermo Ramos2024-12-06 15:59:32 +0100
committerGuillermo Ramos2024-12-06 16:29:18 +0100
commitff064b6f13019b15346ff320a486d70b95d80b2a (patch)
tree396868cbbd9be95f6ce0a808f8436d4a1a0f1d89 /2024_rust/src/day2.rs
parenta6029017bb354381c17afaf00526442966648c3f (diff)
downloadAoC-ff064b6f13019b15346ff320a486d70b95d80b2a.tar.gz
Each day is now a binary
Diffstat (limited to '2024_rust/src/day2.rs')
-rw-r--r--2024_rust/src/day2.rs65
1 files changed, 0 insertions, 65 deletions
diff --git a/2024_rust/src/day2.rs b/2024_rust/src/day2.rs
deleted file mode 100644
index f809141..0000000
--- a/2024_rust/src/day2.rs
+++ /dev/null
@@ -1,65 +0,0 @@
-#[derive(PartialEq, Clone, Copy)]
-enum Direction {
- Up,
- Down,
- Unknown,
-}
-use Direction::*;
-
-fn is_safe(levels: &[u32]) -> bool {
- let mut direction = Unknown;
- for i in 0..levels.len() - 1 {
- let [x, y] = levels[i..=i + 1] else {
- unreachable!()
- };
- let (diff, d) = if x > y { (x - y, Down) } else { (y - x, Up) };
- if direction == Unknown {
- direction = d;
- }
- if diff == 0 || diff > 3 || direction != d {
- return false;
- }
- }
- return true;
-}
-
-pub fn p1(input: &str) -> String {
- let mut total = 0;
- for report in input.lines() {
- let levels: Vec<u32> = report
- .split_whitespace()
- .map(|l| l.parse().unwrap())
- .collect();
- if is_safe(&levels) {
- total += 1;
- }
- }
-
- total.to_string()
-}
-
-fn is_safe_with_dampener(levels: &[u32]) -> bool {
- for i in 0..levels.len() {
- let mut levels_without_i: Vec<u32> = levels.to_vec();
- levels_without_i.remove(i);
- if is_safe(&levels_without_i) {
- return true;
- }
- }
- return false;
-}
-
-pub fn p2(input: &str) -> String {
- let mut total = 0;
- for report in input.lines() {
- let levels: Vec<u32> = report
- .split_whitespace()
- .map(|l| l.parse().unwrap())
- .collect();
- if is_safe(&levels) || is_safe_with_dampener(&levels) {
- total += 1;
- }
- }
-
- total.to_string()
-}