1use utils::prelude::*;
2
3use crate::intcode::Interpreter;
4use crate::intcode::features::Day09Features;
5
6#[derive(Clone, Debug)]
8pub struct Day09 {
9 interpreter: Interpreter,
10}
11
12impl Day09 {
13 pub fn new(input: &str, _: InputType) -> Result<Self, InputError> {
14 Ok(Self {
15 interpreter: Interpreter::parse(input, 1)?,
16 })
17 }
18
19 #[must_use]
20 pub fn part1(&self) -> i64 {
21 self.run(1)
22 }
23
24 #[must_use]
25 pub fn part2(&self) -> i64 {
26 self.run(2)
27 }
28
29 fn run(&self, input: i64) -> i64 {
30 let mut interpreter = self.interpreter.clone();
31 interpreter.push_input(input);
32
33 let output = interpreter.expect_output::<Day09Features>();
34 interpreter.expect_halt::<Day09Features>();
35 output
36 }
37}
38
39examples!(Day09 -> (i64, i64) []);