summaryrefslogtreecommitdiff
path: root/day9/src/lib.rs
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2022-12-05 19:46:06 +0100
committerSanto Cariotti <santo@dcariotti.me>2022-12-05 19:46:06 +0100
commitcf6303a5bc1558ebdb7b467da38f74cd3ac3a9b1 (patch)
tree6292cb239a8cf114179c6e7c8b3015840dfbae6e /day9/src/lib.rs
parent6e10cc2773fcaff64902b13f44443da014f38be7 (diff)
Add 2022
Diffstat (limited to 'day9/src/lib.rs')
-rw-r--r--day9/src/lib.rs90
1 files changed, 0 insertions, 90 deletions
diff --git a/day9/src/lib.rs b/day9/src/lib.rs
deleted file mode 100644
index 3391a74..0000000
--- a/day9/src/lib.rs
+++ /dev/null
@@ -1,90 +0,0 @@
-use std::str::FromStr;
-
-#[derive(Debug)]
-struct Heightmap {
- data: Vec<Vec<u8>>,
- rows: usize,
- cols: usize,
-}
-
-impl FromStr for Heightmap {
- type Err = ();
-
- fn from_str(s: &str) -> Result<Self, Self::Err> {
- let rows: Vec<_> = s.trim().split('\n').collect::<Vec<&str>>();
- let mut data: Vec<Vec<u8>> = vec![];
- for row in &rows {
- data.push(
- row.chars()
- .map(|x| x.to_digit(10).unwrap() as u8)
- .collect::<Vec<u8>>(),
- );
- }
- Ok(Heightmap {
- data,
- rows: rows.len(),
- cols: rows[0].chars().count(),
- })
- }
-}
-
-impl Heightmap {
- fn resolve(&self) -> usize {
- let mut count: usize = 0;
-
- for i in 0..self.rows {
- for j in 0..self.cols {
- let top = if i > 0 { self.data[i - 1][j] } else { 10 };
-
- let bottom = if i < self.rows - 1 {
- self.data[i + 1][j]
- } else {
- 10
- };
-
- let left = if j > 0 { self.data[i][j - 1] } else { 10 };
-
- let right = if j < self.cols - 1 {
- self.data[i][j + 1]
- } else {
- 10
- };
- let center = self.data[i][j];
-
- if center < top && center < bottom && center < left && center < right {
- count += (center + 1) as usize;
- }
- }
- }
-
- count
- }
-}
-
-pub fn part1(input: &str) -> usize {
- let grid: Heightmap = input.parse().unwrap();
- let result = grid.resolve();
-
- result
-}
-
-#[cfg(test)]
-mod day9_test {
- use super::*;
-
- #[test]
- fn test_with_example_data() {
- let data = include_str!("../example.txt");
- let result = part1(data);
-
- assert_eq!(result, 15);
- }
-
- #[test]
- fn test_puzzle_input_part1() {
- let data = include_str!("../input.txt");
- let result = part1(data);
-
- assert_eq!(result, 541);
- }
-}