From 34ed72f328474cb2b56a61eaa94b8e1a7ca80b1c Mon Sep 17 00:00:00 2001 From: structix Date: Mon, 2 Dec 2024 09:28:14 +0100 Subject: [PATCH] Add day2 --- 2024/day2/.gitignore | 2 ++ 2024/day2/Cargo.lock | 7 +++++ 2024/day2/Cargo.toml | 6 +++++ 2024/day2/src/main.rs | 61 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+) create mode 100644 2024/day2/.gitignore create mode 100644 2024/day2/Cargo.lock create mode 100644 2024/day2/Cargo.toml create mode 100644 2024/day2/src/main.rs diff --git a/2024/day2/.gitignore b/2024/day2/.gitignore new file mode 100644 index 0000000..2ac37a0 --- /dev/null +++ b/2024/day2/.gitignore @@ -0,0 +1,2 @@ +target +input.txt diff --git a/2024/day2/Cargo.lock b/2024/day2/Cargo.lock new file mode 100644 index 0000000..63c2f60 --- /dev/null +++ b/2024/day2/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "day2" +version = "0.1.0" diff --git a/2024/day2/Cargo.toml b/2024/day2/Cargo.toml new file mode 100644 index 0000000..cd3d088 --- /dev/null +++ b/2024/day2/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day2" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/2024/day2/src/main.rs b/2024/day2/src/main.rs new file mode 100644 index 0000000..4d7f42f --- /dev/null +++ b/2024/day2/src/main.rs @@ -0,0 +1,61 @@ +use std::{collections::HashSet, fs}; + +fn main() { + let file = fs::read_to_string("./input.txt").unwrap(); + let mut rows = Vec::new(); + + for line in file.lines() { + let vals = line + .split_whitespace() + .map(|x| x.parse::().unwrap()) + .collect::>(); + + rows.push(vals); + } + + println!("Solution 1: {}", puzzle1(rows.clone())); + println!("Solution 2: {}", puzzle2(rows)); +} + +fn puzzle1(rows: Vec>) -> i32 { + let mut counter = 0; + for r in rows { + if is_safe(&r) { + counter += 1; + } + } + counter +} + +fn puzzle2(rows: Vec>) -> i32 { + let mut counter = 0; + for r in rows { + if is_safe(&r) { + counter += 1; + continue; + } + + for i in 0..r.len() { + let mut modrow = r.clone(); + modrow.remove(i); + if is_safe(&modrow) { + counter += 1; + break; + } + } + } + counter +} + +fn is_safe(row: &[i32]) -> bool { + let mut safeslopes: HashSet = HashSet::from_iter(vec![1, 2, 3]); + let mut safenegslopes: HashSet = HashSet::from_iter(vec![-1, -2, -3]); + + for i in 1..row.len() { + let diff = row[i] - row[i - 1]; + safeslopes.insert(diff); + safenegslopes.insert(diff); + } + + safeslopes.len() == 3 || safenegslopes.len() == 3 +}