summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--24/tests/main.rs4
-rw-r--r--25/Cargo.toml11
-rw-r--r--25/input2
-rw-r--r--25/input.small2
-rw-r--r--25/src/main.rs69
-rw-r--r--25/tests/main.rs14
-rw-r--r--Cargo.lock8
-rw-r--r--Cargo.nix35
-rw-r--r--Cargo.toml1
9 files changed, 144 insertions, 2 deletions
diff --git a/24/tests/main.rs b/24/tests/main.rs
index 4b8bde1..e935dc8 100644
--- a/24/tests/main.rs
+++ b/24/tests/main.rs
@@ -4,10 +4,10 @@ use std::process::Command;
 
 #[test]
 fn personal_input() -> Result<(), Box<dyn std::error::Error>> {
-  let mut command = Command::cargo_bin("advent_23")?;
+  let mut command = Command::cargo_bin("advent_24")?;
 
   command.arg("input");
-  command.assert().success().stdout("24798635\n12757828710\n");
+  command.assert().success().stdout("230\n3565\n");
 
   Ok(())
 }
diff --git a/25/Cargo.toml b/25/Cargo.toml
new file mode 100644
index 0000000..746f708
--- /dev/null
+++ b/25/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "advent_25"
+version = "0.1.0"
+authors = ["Irene Knapp <ireneista@gmail.com>"]
+edition = "2018"
+
+[dependencies]
+advent_lib = { path = "../lib" }
+
+[dev-dependencies]
+assert_cmd = "0.10"
diff --git a/25/input b/25/input
new file mode 100644
index 0000000..077ed30
--- /dev/null
+++ b/25/input
@@ -0,0 +1,2 @@
+14222596
+4057428
diff --git a/25/input.small b/25/input.small
new file mode 100644
index 0000000..9cbfc23
--- /dev/null
+++ b/25/input.small
@@ -0,0 +1,2 @@
+5764801
+17807724
diff --git a/25/src/main.rs b/25/src/main.rs
new file mode 100644
index 0000000..1fd0149
--- /dev/null
+++ b/25/src/main.rs
@@ -0,0 +1,69 @@
+use advent_lib::prelude::*;
+
+//use std::collections::BTreeSet;
+//use std::convert::TryFrom;
+
+
+
+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 input = advent_lib::read_lines_file(&filename)?;
+
+  let card_public = input[0].parse::<i64>().unwrap();
+  let door_public = input[1].parse::<i64>().unwrap();
+  let subject: i64 = 7;
+
+  let mut i = 0;
+  let mut value = 1;
+  let mut card_loop_size = None;
+  let mut door_loop_size = None;
+  loop {
+    value = iterate(value, subject);
+    i += 1;
+
+    if card_loop_size.is_none() {
+      if value == card_public {
+        card_loop_size = Some(i);
+      }
+    }
+
+    if door_loop_size.is_none() {
+      if value == door_public {
+        door_loop_size = Some(i);
+      }
+    }
+
+    if card_loop_size.is_some() && door_loop_size.is_some() {
+      break;
+    }
+  }
+
+  let key = transform(door_public, card_loop_size.unwrap());
+
+  println!("{}", key);
+
+  Ok(())
+}
+
+
+fn iterate(input: i64, subject: i64) -> i64 {
+  let mut output = input * subject;
+  output %= 20201227;
+  output
+}
+
+
+fn transform(subject: i64, loop_count: usize) -> i64 {
+  let mut value = 1;
+  for _ in 0 .. loop_count {
+    value = iterate(value, subject);
+  }
+  value
+}
+
diff --git a/25/tests/main.rs b/25/tests/main.rs
new file mode 100644
index 0000000..4b8bde1
--- /dev/null
+++ b/25/tests/main.rs
@@ -0,0 +1,14 @@
+use assert_cmd::prelude::*;
+use std::process::Command;
+
+
+#[test]
+fn personal_input() -> Result<(), Box<dyn std::error::Error>> {
+  let mut command = Command::cargo_bin("advent_23")?;
+
+  command.arg("input");
+  command.assert().success().stdout("24798635\n12757828710\n");
+
+  Ok(())
+}
+
diff --git a/Cargo.lock b/Cargo.lock
index 063950c..e2b2743 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -197,6 +197,14 @@ dependencies = [
 ]
 
 [[package]]
+name = "advent_25"
+version = "0.1.0"
+dependencies = [
+ "advent_lib",
+ "assert_cmd",
+]
+
+[[package]]
 name = "advent_lib"
 version = "0.1.0"
 dependencies = [
diff --git a/Cargo.nix b/Cargo.nix
index ee2714c..6eb5c7e 100644
--- a/Cargo.nix
+++ b/Cargo.nix
@@ -268,6 +268,16 @@ rec {
       # File a bug if you depend on any for non-debug work!
       debug = internal.debugCrate { inherit packageId; };
     };
+    "advent_25" = rec {
+      packageId = "advent_25";
+      build = internal.buildRustCrateWithFeatures {
+        packageId = "advent_25";
+      };
+
+      # Debug support which might change between releases.
+      # File a bug if you depend on any for non-debug work!
+      debug = internal.debugCrate { inherit packageId; };
+    };
     "advent_lib" = rec {
       packageId = "advent_lib";
       build = internal.buildRustCrateWithFeatures {
@@ -924,6 +934,31 @@ rec {
         ];
         
       };
+      "advent_25" = rec {
+        crateName = "advent_25";
+        version = "0.1.0";
+        edition = "2018";
+        crateBin = [
+          { name = "advent_25"; path = "src/main.rs"; }
+        ];
+        src = (builtins.filterSource sourceFilter ./25);
+        authors = [
+          "Irene Knapp <ireneista@gmail.com>"
+        ];
+        dependencies = [
+          {
+            name = "advent_lib";
+            packageId = "advent_lib";
+          }
+        ];
+        devDependencies = [
+          {
+            name = "assert_cmd";
+            packageId = "assert_cmd";
+          }
+        ];
+        
+      };
       "advent_lib" = rec {
         crateName = "advent_lib";
         version = "0.1.0";
diff --git a/Cargo.toml b/Cargo.toml
index 679f317..382370d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -25,4 +25,5 @@ members = [
   "22",
   "23",
   "24",
+  "25",
 ]