summaryrefslogtreecommitdiff
path: root/src/bin/day_2.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/day_2.rs')
-rw-r--r--src/bin/day_2.rs29
1 files changed, 11 insertions, 18 deletions
diff --git a/src/bin/day_2.rs b/src/bin/day_2.rs
index 184c06c..f1a1ac7 100644
--- a/src/bin/day_2.rs
+++ b/src/bin/day_2.rs
@@ -140,15 +140,7 @@ impl Program {
}
fn add(&self) -> Program {
- match (
- self.codes
- .get(self.program_counter + 1)
- .and_then(|r| self.codes.get(*r as usize)),
- self.codes
- .get(self.program_counter + 2)
- .and_then(|r| self.codes.get(*r as usize)),
- self.codes.get(self.program_counter + 3),
- ) {
+ match (self.get_deref(1), self.get_dered(2), self.get(3)) {
(Some(in1), Some(in2), Some(out)) => Program {
program_counter: self.program_counter + 4,
codes: self.codes.update(*out as usize, in1 + in2),
@@ -159,15 +151,7 @@ impl Program {
}
fn multiply(&self) -> Program {
- match (
- self.codes
- .get(self.program_counter + 1)
- .and_then(|r| self.codes.get(*r as usize)),
- self.codes
- .get(self.program_counter + 2)
- .and_then(|r| self.codes.get(*r as usize)),
- self.codes.get(self.program_counter + 3),
- ) {
+ match (self.get_deref(1), self.get_dered(2), self.get(3)) {
(Some(in1), Some(in2), Some(out)) => Program {
program_counter: self.program_counter + 4,
codes: self.codes.update(*out as usize, in1 * in2),
@@ -191,6 +175,15 @@ impl Program {
..self.clone()
}
}
+
+ fn get(&self, pointer_offset: usize) -> Option<Intcode> {
+ self.codes.get(self.program_counter + pointer_offset)
+ }
+
+ fn get_deref(&self, pointer_offset: usize) -> Option<Intcode> {
+ self.get(pointer_offset)
+ .and_then(|r| self.codes.get(*r as usize))
+ }
}
#[derive(Debug, PartialEq)]