summary refs log tree commit diff
path: root/01/src
diff options
context:
space:
mode:
authorIrene Knapp <ireneista@gmail.com>2021-11-30 18:44:19 -0800
committerIrene Knapp <ireneista@gmail.com>2021-11-30 18:44:19 -0800
commit0fc36ff992d4ea1a7fe5240da8c5c63f7c602a6e (patch)
tree02ccf50a7a7f4500bc41ca997bfb4618b07bffb3 /01/src
Initial, based on last year
Diffstat (limited to '01/src')
-rw-r--r--01/src/main.rs68
1 files changed, 68 insertions, 0 deletions
diff --git a/01/src/main.rs b/01/src/main.rs
new file mode 100644
index 0000000..b7cdbbf
--- /dev/null
+++ b/01/src/main.rs
@@ -0,0 +1,68 @@
+use advent_lib::prelude::*;
+
+use std::collections::BTreeSet;
+
+
+fn main() -> Result<()> {
+  let mut args = std::env::args();
+  if args.len() != 2 {
+    eprintln!("Usage: advent input");
+  }
+  let _ = args.next();
+  let filename = args.next().unwrap();
+
+  let mut input = advent_lib::read_int_file(&filename)?;
+
+  input.sort();
+
+  let mut input_set = BTreeSet::new();
+  for item in &input {
+    input_set.insert(item);
+  }
+
+  for i in 0 .. input.len() {
+    let a = input[i];
+    if a > 2020 {
+      break;
+    }
+
+    let b = 2020 - a;
+    if input_set.contains(&b) {
+      let product = a * b;
+      println!("a: {:?}, b: {:?}, a*b: {:?}", a, b, product);
+      break;
+    }
+  }
+
+  let mut done = false;
+  for i in 0 .. input.len() {
+    if done {
+      break;
+    }
+
+    let a = input[i];
+    if a > 2020 {
+      break;
+    }
+
+    for j in i+1 .. input.len() {
+      let b = input[j];
+
+      if a + b > 2020 {
+        break;
+      }
+
+      let c = 2020 - a - b;
+      if input_set.contains(&c) {
+        let product = a * b * c;
+        println!("a: {:?}, b: {:?}, c: {:?}, a*b*c: {:?}", a, b, c, product);
+
+        done = true;
+        break;
+      }
+    }
+  }
+
+  Ok(())
+}
+