summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--2021/day9/src/main.rs49
1 files changed, 18 insertions, 31 deletions
diff --git a/2021/day9/src/main.rs b/2021/day9/src/main.rs
index 3c8d4c6..5d84be9 100644
--- a/2021/day9/src/main.rs
+++ b/2021/day9/src/main.rs
@@ -39,25 +39,19 @@ fn main() {
39 for (ndx, num) in height.iter().enumerate() { 39 for (ndx, num) in height.iter().enumerate() {
40 let up = points 40 let up = points
41 .get(((idx as isize) - 1) as usize) 41 .get(((idx as isize) - 1) as usize)
42 .unwrap_or_else(|| &nine) 42 .unwrap_or(&nine)
43 .get(ndx) 43 .get(ndx)
44 .unwrap_or_else(|| &9); 44 .unwrap_or(&9);
45 45
46 let down = match points.get(idx + 1) { 46 let down = match points.get(idx + 1) {
47 Some(line) => match line.get(ndx) { 47 Some(line) => line.get(ndx).unwrap_or(&9),
48 Some(number) => number,
49 None => &9,
50 },
51 None => &9,
52 };
53 let left = match height.get((ndx as isize - 1) as usize) {
54 Some(number) => number,
55 None => &9,
56 };
57 let right = match height.get(ndx + 1) {
58 Some(number) => number,
59 None => &9, 48 None => &9,
60 }; 49 };
50
51 let left = height.get((ndx as isize - 1) as usize).unwrap_or(&9);
52
53 let right = height.get(ndx + 1).unwrap_or(&9);
54
61 if num < up && num < down && num < right && num < left { 55 if num < up && num < down && num < right && num < left {
62 risk_level += 1 + *num; 56 risk_level += 1 + *num;
63 basins.push(Basin { 57 basins.push(Basin {
@@ -81,29 +75,22 @@ fn main() {
81 75
82 let up = points 76 let up = points
83 .get(((minibasin.x as isize) - 1) as usize) 77 .get(((minibasin.x as isize) - 1) as usize)
84 .unwrap_or_else(|| &nine) 78 .unwrap_or(&nine)
85 .get(minibasin.y) 79 .get(minibasin.y)
86 .unwrap_or_else(|| &9); 80 .unwrap_or(&9);
87 81
88 let down = match points.get(minibasin.x + 1) { 82 let down = match points.get(minibasin.x + 1) {
89 Some(line) => match line.get(minibasin.y) { 83 Some(line) => line.get(minibasin.y).unwrap_or(&9),
90 Some(number) => number,
91 None => &9,
92 },
93 None => &9, 84 None => &9,
94 }; 85 };
95 let left = match points.get(minibasin.x) { 86 let left = match points.get(minibasin.x) {
96 Some(line) => match line.get(((minibasin.y as isize) - 1) as usize) { 87 Some(line) => line
97 Some(number) => number, 88 .get(((minibasin.y as isize) - 1) as usize)
98 None => &9, 89 .unwrap_or(&9),
99 },
100 None => &9, 90 None => &9,
101 }; 91 };
102 let right = match points.get(minibasin.x) { 92 let right = match points.get(minibasin.x) {
103 Some(line) => match line.get(minibasin.y + 1) { 93 Some(line) => line.get(minibasin.y + 1).unwrap_or(&9),
104 Some(number) => number,
105 None => &9,
106 },
107 None => &9, 94 None => &9,
108 }; 95 };
109 96
@@ -163,12 +150,12 @@ fn main() {
163 150
164 let mut lens: Vec<usize> = basins.iter().map(|x| x.points.len()).collect(); 151 let mut lens: Vec<usize> = basins.iter().map(|x| x.points.len()).collect();
165 152
166 lens.sort(); 153 lens.sort_unstable();
167 lens.reverse(); 154 lens.reverse();
168 155
169 let foo: usize = lens.iter().take(3).product(); 156 let biggest_basins: usize = lens.iter().take(3).product();
170 157
171 println!("{}", foo); 158 println!("{}", biggest_basins);
172 println!("{}", risk_level); 159 println!("{}", risk_level);
173} 160}
174 161