From 315d0cac7e601b187e333d8f3b93caf95ecb9854 Mon Sep 17 00:00:00 2001 From: kageru Date: Thu, 12 Dec 2019 22:52:13 +0100 Subject: [PATCH] Clean up day 12 + some forgotten intcode stuff --- 2019/11/src/main.rs | 8 +++---- 2019/12/src/main.rs | 41 +++++++++++++++++++-------------- 2019/intcode/src/intcomputer.rs | 9 ++++++++ 2019/intcode/src/lib.rs | 2 +- 4 files changed, 38 insertions(+), 22 deletions(-) diff --git a/2019/11/src/main.rs b/2019/11/src/main.rs index fb1be78..ea9c2f9 100644 --- a/2019/11/src/main.rs +++ b/2019/11/src/main.rs @@ -56,10 +56,10 @@ impl Robot { #[rustfmt::skip] fn get_boundaries(positions: &HashMap<(i64, i64), i64>) -> (i64, i64, i64, i64) { let keys = positions.keys(); - let x_max = keys.clone().into_iter().max_by_key(|k| k.0).unwrap() .0; - let y_max = keys.clone().into_iter().max_by_key(|k| k.1).unwrap() .1; - let x_min = keys.clone().into_iter().min_by_key(|k| k.0).unwrap() .0; - let y_min = keys.clone().into_iter().min_by_key(|k| k.1).unwrap() .1; + let x_max = keys.clone().into_iter().max_by_key(|k| k.0).unwrap().0; + let y_max = keys.clone().into_iter().max_by_key(|k| k.1).unwrap().1; + let x_min = keys.clone().into_iter().min_by_key(|k| k.0).unwrap().0; + let y_min = keys.clone().into_iter().min_by_key(|k| k.1).unwrap().1; (x_min, x_max, y_min, y_max) } diff --git a/2019/12/src/main.rs b/2019/12/src/main.rs index 83cc79e..89b284f 100644 --- a/2019/12/src/main.rs +++ b/2019/12/src/main.rs @@ -78,7 +78,7 @@ impl System { } fn main() { - let system = System { + let mut system = System { moons: io::stdin() .lock() .lines() @@ -92,25 +92,29 @@ fn main() { let energy: i64 = part1_system.moons.into_iter().map(|m| m.energy()).sum(); println!("Part 1: {}", energy); - let mut part2_system = system.clone(); - let initial_x = extract_attribute(&part2_system, |m| (m.x, m.x_vel)); - let initial_y = extract_attribute(&part2_system, |m| (m.y, m.y_vel)); - let initial_z = extract_attribute(&part2_system, |m| (m.z, m.z_vel)); + let initial_x = extract_attribute(&system, |m| (m.x, m.x_vel)); + let initial_y = extract_attribute(&system, |m| (m.y, m.y_vel)); + let initial_z = extract_attribute(&system, |m| (m.z, m.z_vel)); let (mut x_found, mut y_found, mut z_found) = (0u64, 0, 0); for i in 1.. { - let _: u64 = i; - part2_system = part2_system.step(); - let xs = extract_attribute(&part2_system, |m| (m.x, m.x_vel)); - if x_found == 0 && xs == initial_x { - x_found = i; + system = system.step(); + if x_found == 0 { + let xs = extract_attribute(&system, |m| (m.x, m.x_vel)); + if xs == initial_x { + x_found = i; + } } - let ys = extract_attribute(&part2_system, |m| (m.y, m.y_vel)); - if y_found == 0 && ys == initial_y { - y_found = i; + if y_found == 0 { + let ys = extract_attribute(&system, |m| (m.y, m.y_vel)); + if ys == initial_y { + y_found = i; + } } - let zs = extract_attribute(&part2_system, |m| (m.z, m.z_vel)); - if z_found == 0 && zs == initial_z { - z_found = i; + if z_found == 0 { + let zs = extract_attribute(&system, |m| (m.z, m.z_vel)); + if zs == initial_z { + z_found = i; + } } if x_found != 0 && y_found != 0 && z_found != 0 { break; @@ -119,7 +123,10 @@ fn main() { println!("Part 2: {}", lcm(lcm(x_found, y_found), z_found)); } -fn extract_attribute(system: &System, f: F) -> Vec<(i64, i64)> where F: (FnMut(Moon) -> (i64, i64)){ +fn extract_attribute(system: &System, f: F) -> Vec<(i64, i64)> +where + F: (FnMut(Moon) -> (i64, i64)), +{ system.moons.clone().into_iter().map(f).collect() } diff --git a/2019/intcode/src/intcomputer.rs b/2019/intcode/src/intcomputer.rs index 0a635a0..3af44b2 100644 --- a/2019/intcode/src/intcomputer.rs +++ b/2019/intcode/src/intcomputer.rs @@ -10,6 +10,15 @@ pub enum IntComputerResult { Output(i64), } +impl IntComputerResult { + pub fn unwrap(self) -> i64 { + match self { + IntComputerResult::Halt => panic!("Attempted to get value of halt operation"), + IntComputerResult::Output(o) => o, + } + } +} + impl IntComputer { pub fn new(tape: Vec, pos: i64, params: Vec) -> Self { IntComputer { diff --git a/2019/intcode/src/lib.rs b/2019/intcode/src/lib.rs index 7333731..4e08dea 100644 --- a/2019/intcode/src/lib.rs +++ b/2019/intcode/src/lib.rs @@ -1,4 +1,4 @@ -use intcomputer::*; +pub use intcomputer::*; use itertools::Itertools; use std::convert::TryFrom; use std::io::{self, BufRead};