Browse Source

Completed day 4

Tyler Hallada 4 years ago
parent
commit
7845628111
3 changed files with 87 additions and 0 deletions
  1. 6 0
      day4/Cargo.lock
  2. 9 0
      day4/Cargo.toml
  3. 72 0
      day4/src/main.rs

+ 6 - 0
day4/Cargo.lock

@@ -0,0 +1,6 @@
1
+# This file is automatically @generated by Cargo.
2
+# It is not intended for manual editing.
3
+[[package]]
4
+name = "day4"
5
+version = "0.1.0"
6
+

+ 9 - 0
day4/Cargo.toml

@@ -0,0 +1,9 @@
1
+[package]
2
+name = "day4"
3
+version = "0.1.0"
4
+authors = ["Tyler Hallada <tyler@hallada.net>"]
5
+edition = "2018"
6
+
7
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8
+
9
+[dependencies]

+ 72 - 0
day4/src/main.rs

@@ -0,0 +1,72 @@
1
+const INPUT_MIN: u32 = 245318;
2
+const INPUT_MAX: u32 = 765747;
3
+
4
+fn solve_part1() -> u32 {
5
+    let mut counter = 0;
6
+    for num in INPUT_MIN..=INPUT_MAX {
7
+        let num_string = num.to_string();
8
+        let mut previous = None;
9
+        let mut has_double = false;
10
+        let mut decreasing = false;
11
+        for c in num_string.chars() {
12
+            match previous {
13
+                None => previous = Some(c),
14
+                Some(p) => {
15
+                    if p == c {
16
+                        has_double = true;
17
+                    }
18
+                    if p.to_digit(10) > c.to_digit(10) {
19
+                        decreasing = true;
20
+                        break;
21
+                    }
22
+                    previous = Some(c);
23
+                }
24
+            }
25
+        }
26
+        if has_double && !decreasing {
27
+            counter += 1;
28
+        }
29
+    }
30
+    counter
31
+}
32
+
33
+fn solve_part2() -> u32 {
34
+    // too lazy to DRY it up
35
+    let mut counter = 0;
36
+    for num in INPUT_MIN..=INPUT_MAX {
37
+        let num_string = num.to_string();
38
+        let mut previous = None;
39
+        let mut has_double = false;
40
+        let mut matching_group_count = 1;
41
+        let mut decreasing = false;
42
+        for c in num_string.chars() {
43
+            match previous {
44
+                None => previous = Some(c),
45
+                Some(p) => {
46
+                    if p == c {
47
+                        matching_group_count += 1;
48
+                    } else {
49
+                        if matching_group_count == 2 {
50
+                            has_double = true;
51
+                        }
52
+                        matching_group_count = 1;
53
+                    }
54
+                    if p.to_digit(10) > c.to_digit(10) {
55
+                        decreasing = true;
56
+                        break;
57
+                    }
58
+                    previous = Some(c);
59
+                }
60
+            }
61
+        }
62
+        if (matching_group_count == 2 || has_double) && !decreasing {
63
+            counter += 1;
64
+        }
65
+    }
66
+    counter
67
+}
68
+
69
+fn main() {
70
+    println!("Part 1: {}", solve_part1());
71
+    println!("Part 2: {}", solve_part2());
72
+}