From 0db2018217e99f7c2b663d77b66b98a75f48c5cb Mon Sep 17 00:00:00 2001 From: Johannes Date: Sun, 8 Dec 2019 20:26:31 +0100 Subject: [PATCH] day07 task 1 --- input/day07.txt | 1 + src/main.rs | 2 +- src/tasks/day05.rs | 8 ++++---- src/tasks/day07.rs | 28 ++++++++++++++++++++++++++++ src/tasks/mod.rs | 1 + 5 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 input/day07.txt create mode 100644 src/tasks/day07.rs diff --git a/input/day07.txt b/input/day07.txt new file mode 100644 index 0000000..0aea99d --- /dev/null +++ b/input/day07.txt @@ -0,0 +1 @@ +3,8,1001,8,10,8,105,1,0,0,21,42,63,76,101,114,195,276,357,438,99999,3,9,101,2,9,9,102,5,9,9,1001,9,3,9,1002,9,5,9,4,9,99,3,9,101,4,9,9,102,5,9,9,1001,9,5,9,102,2,9,9,4,9,99,3,9,1001,9,3,9,1002,9,5,9,4,9,99,3,9,1002,9,2,9,101,5,9,9,102,3,9,9,101,2,9,9,1002,9,3,9,4,9,99,3,9,101,3,9,9,102,2,9,9,4,9,99,3,9,1001,9,2,9,4,9,3,9,102,2,9,9,4,9,3,9,101,2,9,9,4,9,3,9,102,2,9,9,4,9,3,9,101,1,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,1001,9,2,9,4,9,3,9,1001,9,2,9,4,9,3,9,1001,9,1,9,4,9,99,3,9,102,2,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,102,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,102,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,102,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,102,2,9,9,4,9,99,3,9,102,2,9,9,4,9,3,9,102,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,2,9,9,4,9,3,9,1001,9,2,9,4,9,99,3,9,1001,9,1,9,4,9,3,9,101,2,9,9,4,9,3,9,102,2,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,102,2,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,1001,9,2,9,4,9,3,9,102,2,9,9,4,9,3,9,1001,9,2,9,4,9,99,3,9,102,2,9,9,4,9,3,9,101,1,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,2,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,101,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,2,9,9,4,9,99 \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 2bad024..74b9f38 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ mod tasks; fn main() { - tasks::day05::run(); + tasks::day07::run(); } diff --git a/src/tasks/day05.rs b/src/tasks/day05.rs index 3ac5c93..e468327 100644 --- a/src/tasks/day05.rs +++ b/src/tasks/day05.rs @@ -9,7 +9,7 @@ pub fn run() { task2(ram.clone()); } -struct IntCodeComputer { +pub struct IntCodeComputer { input_storage: Vec, output_storage: Vec, pc: usize, @@ -140,7 +140,7 @@ impl Op { } impl IntCodeComputer { - fn new(input: Vec, memory: Vec) -> Self { + pub fn new(input: Vec, memory: Vec) -> Self { IntCodeComputer { input_storage: input, output_storage: Vec::new(), @@ -149,7 +149,7 @@ impl IntCodeComputer { } } - fn run_until_end(&mut self) { + pub fn run_until_end(&mut self) { let mut op = Op::from(self.pc, &self.ram); let mut inputs = self.input_storage.iter(); while op.opcode != OpCode::Terminate { @@ -212,7 +212,7 @@ impl IntCodeComputer { } } - fn get_output(&self) -> &[i32] { + pub fn get_output(&self) -> &[i32] { self.output_storage.as_slice() } } diff --git a/src/tasks/day07.rs b/src/tasks/day07.rs new file mode 100644 index 0000000..9898deb --- /dev/null +++ b/src/tasks/day07.rs @@ -0,0 +1,28 @@ +use crate::tasks::day05::IntCodeComputer; +use itertools::Itertools; + +#[allow(dead_code)] +pub fn run() { + let prog_code: Vec<_> = std::fs::read_to_string("input/day07.txt") + .unwrap() + .split(",") + .map(|s| s.parse::().unwrap()) + .collect(); + task1(prog_code.clone()); +} + +fn task1(input: Vec) { + let phases = vec![0, 1, 2, 3, 4]; + let result = phases + .iter() + .permutations(phases.len()) + .map(|perm| { + perm.iter().fold(0, |signal, phase| { + let mut computer = IntCodeComputer::new(vec![**phase, signal], input.clone()); + computer.run_until_end(); + *computer.get_output().last().unwrap() + }) + }) + .max(); + println!("Task 1: best signal is {}", result.unwrap()); +} diff --git a/src/tasks/mod.rs b/src/tasks/mod.rs index b42f001..c474e40 100644 --- a/src/tasks/mod.rs +++ b/src/tasks/mod.rs @@ -3,4 +3,5 @@ pub mod day03; pub mod day04; pub mod day05; pub mod day06; +pub mod day07; pub mod day08;