summaryrefslogtreecommitdiff
path: root/2020/Rust/src/day1.rs
diff options
context:
space:
mode:
authoromagdy <omar.professional8777@gmail.com>2024-12-08 15:28:08 +0200
committeromagdy <omar.professional8777@gmail.com>2024-12-08 15:28:08 +0200
commit01c6b2cb42a4144a573ec43e9e25c6718741a272 (patch)
tree158b76f6363cd29251cedfa33f0cbf83ea5229c8 /2020/Rust/src/day1.rs
parent57fc57ecc40f879a3ccb637a5f420a1e0a655eab (diff)
downloadaoc-01c6b2cb42a4144a573ec43e9e25c6718741a272.tar.xz
aoc-01c6b2cb42a4144a573ec43e9e25c6718741a272.zip
Some solutions to AOC 2020
Diffstat (limited to '2020/Rust/src/day1.rs')
-rwxr-xr-x2020/Rust/src/day1.rs47
1 files changed, 47 insertions, 0 deletions
diff --git a/2020/Rust/src/day1.rs b/2020/Rust/src/day1.rs
new file mode 100755
index 0000000..9a84dd4
--- /dev/null
+++ b/2020/Rust/src/day1.rs
@@ -0,0 +1,47 @@
+use std::collections::HashSet;
+
+fn solve_part_one(input: &str) -> i32 {
+ let mut seen = HashSet::new();
+ let numbers: Vec<i32> = input
+ .lines()
+ .map(|line| line.trim().parse().unwrap())
+ .collect();
+
+ for &number in &numbers {
+ let complement = 2020 - number;
+ if seen.contains(&complement) {
+ return number * complement;
+ }
+ seen.insert(number);
+ }
+ panic!("No two numbers sum to 2020!");
+}
+
+fn solve_part_two(input: &str) -> i32 {
+ let numbers: Vec<i32> = input
+ .lines()
+ .map(|line| line.trim().parse().unwrap())
+ .collect();
+
+ for (i, &first) in numbers.iter().enumerate() {
+ let mut seen = HashSet::new();
+ let target_sum = 2020 - first;
+ for &second in &numbers[i + 1..] {
+ let complement = target_sum - second;
+ if seen.contains(&complement) {
+ return first * second * complement;
+ }
+ seen.insert(second);
+ }
+ }
+ panic!("No three numbers sum to 2020!");
+}
+
+fn main() {
+ let test = include_str!("../input/day_1.test");
+ let prod = include_str!("../input/day_1.prod");
+ println!("Test_1: {}", solve_part_one(test));
+ println!("Prod_1: {}", solve_part_one(prod));
+ println!("Test_2: {}", solve_part_two(test));
+ println!("Prod_2: {}", solve_part_two(prod));
+}