[rust][7.1] Small tweaks to Day 7
change
commit 03ee5d1613d86558438639aec8267c46ee7bf630
author Alpha Chen <alpha.chen@gmail.com>
date
parent d6703409
diff --git a/rust/src/day_07.rs b/rust/src/day_07.rs
index df4b748..1626326 100644
--- a/rust/src/day_07.rs
+++ b/rust/src/day_07.rs
@@ -1,7 +1,7 @@
 use std::collections::HashMap;
 
 #[test]
-fn test_solve() {
+fn test_day_07() {
     let input = "123 -> x
 456 -> y
 x AND y -> d
@@ -61,19 +61,21 @@ impl<'a> Circuit<'a> {
     // TODO This should probably return a Result...
     // TODO Is there a way for this to not be mutable?
     fn signal_on(&mut self, wire_id: &'a str) -> u16 {
+        // NOTE Would've preferred to use unwrap_or_else on getting the signal, but couldn't
+        // figure out how to make the closure return the borrowed value correctly.
         if let Ok(value) = wire_id.parse::<u16>() {
             return value;
         }
 
         let wire = Wire(wire_id);
-        let value = match self.connections.get(&wire).unwrap() {
-            &Signal::Value(value) => return value,
-            &Signal::Wire(Wire(input_wire_id)) => self.signal_on(input_wire_id),
-            &Signal::Gate(Gate::And(Wire(a), Wire(b))) => self.signal_on(a) & self.signal_on(b),
-            &Signal::Gate(Gate::LeftShift(Wire(a), i)) => self.signal_on(a) << i,
-            &Signal::Gate(Gate::Not(Wire(a))) => !self.signal_on(a),
-            &Signal::Gate(Gate::Or(Wire(a), Wire(b))) => self.signal_on(a) | self.signal_on(b),
-            &Signal::Gate(Gate::RightShift(Wire(a), i)) => self.signal_on(a) >> i,
+        let value = match *self.connections.get(&wire).unwrap() {
+            Signal::Value(value) => return value,
+            Signal::Wire(Wire(input_wire_id)) => self.signal_on(input_wire_id),
+            Signal::Gate(Gate::And(Wire(a), Wire(b))) => self.signal_on(a) & self.signal_on(b),
+            Signal::Gate(Gate::LeftShift(Wire(a), i)) => self.signal_on(a) << i,
+            Signal::Gate(Gate::Not(Wire(a))) => !self.signal_on(a),
+            Signal::Gate(Gate::Or(Wire(a), Wire(b))) => self.signal_on(a) | self.signal_on(b),
+            Signal::Gate(Gate::RightShift(Wire(a), i)) => self.signal_on(a) >> i,
         };
         self.connections.insert(wire, Signal::Value(value));
         value