From 0942f432ed6e05522b17b559b68eedddbe4f4c55 Mon Sep 17 00:00:00 2001 From: kageru Date: Wed, 11 Dec 2019 19:28:40 +0100 Subject: [PATCH] Add D11P1 --- 2019/11/Cargo.toml | 10 +++++++++ 2019/11/input | 1 + 2019/11/src/main.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 2019/11/Cargo.toml create mode 100644 2019/11/input create mode 100644 2019/11/src/main.rs diff --git a/2019/11/Cargo.toml b/2019/11/Cargo.toml new file mode 100644 index 0000000..5a8b539 --- /dev/null +++ b/2019/11/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "day11" +version = "0.1.0" +authors = ["kageru "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +intcode = { path = "../intcode" } diff --git a/2019/11/input b/2019/11/input new file mode 100644 index 0000000..4d79ecc --- /dev/null +++ b/2019/11/input @@ -0,0 +1 @@ +3,8,1005,8,302,1106,0,11,0,0,0,104,1,104,0,3,8,102,-1,8,10,101,1,10,10,4,10,1008,8,0,10,4,10,101,0,8,29,1006,0,78,2,1007,9,10,3,8,1002,8,-1,10,1001,10,1,10,4,10,1008,8,1,10,4,10,1002,8,1,58,1006,0,7,3,8,1002,8,-1,10,101,1,10,10,4,10,1008,8,0,10,4,10,1002,8,1,83,2,1009,4,10,3,8,102,-1,8,10,1001,10,1,10,4,10,1008,8,0,10,4,10,1002,8,1,109,1,106,11,10,1006,0,16,3,8,1002,8,-1,10,1001,10,1,10,4,10,1008,8,1,10,4,10,102,1,8,138,2,108,0,10,1,101,14,10,1,1109,1,10,3,8,1002,8,-1,10,101,1,10,10,4,10,1008,8,0,10,4,10,102,1,8,172,2,3,10,10,1006,0,49,3,8,1002,8,-1,10,101,1,10,10,4,10,1008,8,1,10,4,10,1001,8,0,201,1006,0,28,2,3,15,10,2,109,12,10,3,8,1002,8,-1,10,1001,10,1,10,4,10,108,0,8,10,4,10,1001,8,0,233,3,8,102,-1,8,10,1001,10,1,10,4,10,108,1,8,10,4,10,101,0,8,255,3,8,1002,8,-1,10,1001,10,1,10,4,10,108,1,8,10,4,10,102,1,8,277,2,1107,9,10,101,1,9,9,1007,9,946,10,1005,10,15,99,109,624,104,0,104,1,21101,0,932856042280,1,21101,0,319,0,1105,1,423,21101,0,387512640296,1,21101,330,0,0,1106,0,423,3,10,104,0,104,1,3,10,104,0,104,0,3,10,104,0,104,1,3,10,104,0,104,1,3,10,104,0,104,0,3,10,104,0,104,1,21101,0,46266346499,1,21102,1,377,0,1105,1,423,21102,1,46211836967,1,21102,1,388,0,1105,1,423,3,10,104,0,104,0,3,10,104,0,104,0,21102,1,825460941588,1,21102,411,1,0,1106,0,423,21101,709475738388,0,1,21102,1,422,0,1105,1,423,99,109,2,21201,-1,0,1,21101,0,40,2,21102,454,1,3,21101,0,444,0,1106,0,487,109,-2,2106,0,0,0,1,0,0,1,109,2,3,10,204,-1,1001,449,450,465,4,0,1001,449,1,449,108,4,449,10,1006,10,481,1102,1,0,449,109,-2,2106,0,0,0,109,4,2102,1,-1,486,1207,-3,0,10,1006,10,504,21101,0,0,-3,22101,0,-3,1,21201,-2,0,2,21102,1,1,3,21102,1,523,0,1105,1,528,109,-4,2105,1,0,109,5,1207,-3,1,10,1006,10,551,2207,-4,-2,10,1006,10,551,22101,0,-4,-4,1105,1,619,22102,1,-4,1,21201,-3,-1,2,21202,-2,2,3,21101,570,0,0,1106,0,528,22102,1,1,-4,21102,1,1,-1,2207,-4,-2,10,1006,10,589,21101,0,0,-1,22202,-2,-1,-2,2107,0,-3,10,1006,10,611,21201,-1,0,1,21101,611,0,0,106,0,486,21202,-2,-1,-2,22201,-4,-2,-4,109,-5,2105,1,0 diff --git a/2019/11/src/main.rs b/2019/11/src/main.rs new file mode 100644 index 0000000..f58a1fe --- /dev/null +++ b/2019/11/src/main.rs @@ -0,0 +1,51 @@ +use intcode::*; +use std::collections::HashMap; + +enum Direction { + Up, + Down, + Left, + Right, +} + +fn turn(dir: Direction, turn_value: i64) -> Direction { + match turn_value { + 0 => match dir { + Direction::Up => Direction::Left, + Direction::Right => Direction::Up, + Direction::Down => Direction::Right, + Direction::Left => Direction::Down, + }, + 1 => match dir { + Direction::Up => Direction::Right, + Direction::Right => Direction::Down, + Direction::Down => Direction::Left, + Direction::Left => Direction::Up, + }, + _ => unreachable!("Illegal turn value"), + } +} + +fn mv(pos: (i64, i64), dir: &Direction) -> (i64, i64) { + match dir { + Direction::Up => (pos.0, pos.1 + 1), + Direction::Right => (pos.0 + 1, pos.1), + Direction::Left => (pos.0 - 1, pos.1), + Direction::Down => (pos.0, pos.1 - 1), + } +} + +fn main() { + let mut positions= HashMap::new(); + let mut pc = IntComputer::new(read_input(), 0, vec![0]); + let mut pos = (0, 0); + let mut direction = Direction::Up; + while let IntComputerResult::Output(o) = pc.run() { + positions.insert(pos, o); + let turn_int = pc.run().unwrap(); + direction = turn(direction, turn_int); + pos = mv(pos, &direction); + pc.params.push(*positions.get(&pos).unwrap_or(&0)); + } + println!("Part 1: {}", positions.len()); +}