From 403f2a2b43d25d30f9b0e41c548017650505f48c Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Fri, 2 Dec 2016 07:51:59 +0200 Subject: Started AOC --- aoc2/src/main.rs | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 aoc2/src/main.rs (limited to 'aoc2/src') diff --git a/aoc2/src/main.rs b/aoc2/src/main.rs new file mode 100644 index 0000000..e3188e7 --- /dev/null +++ b/aoc2/src/main.rs @@ -0,0 +1,91 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +fn main() { + let lines = read_file(); + let mut current = '5'; + for line in lines { + current = line.chars().fold(current, |current, dir| move_char_2(current, dir)); + println!("{}", current); + } +} + +fn read_file() -> Vec { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} + + +//assume current in 1-9 range, and char is in UDLR +fn move_char(current: i32, dir: char) -> i32 { + match dir { + 'U' => if current <= 3 { current } else { current - 3}, + 'D' => if current >= 7 { current } else { current + 3}, + 'L' => if current%3 == 1 { current } else { current - 1}, + 'R' => if current%3 == 0 { current } else { current + 1}, + _ => panic!("Bad direction character") + } +} + +// 1 +// 2 3 4 +// 5 6 7 8 9 +// A B C +// D +fn move_char_2(current: char, dir: char) -> char { + match dir { + 'U' => match current { + '1'|'2'|'4'|'5'|'9' => current, + '3' => '1', + '6' => '2', + '7' => '3', + '8' => '4', + 'A' => '6', + 'B' => '7', + 'C' => '8', + 'D' => 'B', + _ => panic!("Bad current char") + }, + 'D' => match current { + 'A'|'D'|'C'|'5'|'9' => current, + '1' => '3', + '2' => '6', + '3' => '7', + '4' => '8', + '6' => 'A', + '7' => 'B', + '8' => 'C', + 'B' => 'D', + _ => panic!("Bad current char") + }, + 'L' => match current { + '1'|'2'|'5'|'A'|'D' => current, + '3' => '2', + '4' => '3', + '6' => '5', + '7' => '6', + '8' => '7', + '9' => '8', + 'B' => 'A', + 'C' => 'B', + _ => panic!("Bad current char") + }, + 'R' => match current { + '1'|'4'|'9'|'C'|'D' => current, + '2' => '3', + '3' => '4', + '5' => '6', + '6' => '7', + '7' => '8', + '8' => '9', + 'A' => 'B', + 'B' => 'C', + _ => panic!("Bad current char") + }, + _ => panic!("Bad direction character") + } +} -- cgit v1.2.3