diff options
author | June McEnroe <june@causal.agency> | 2017-12-03 02:31:14 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-11-22 00:14:25 -0500 |
commit | c45044be65e4237516909c2db4c4ebcea2b5038f (patch) | |
tree | 5bd5a8801b491ddea14f02088c6d26ae69e2fd37 /2017/src/bin | |
parent | Day 2, part 2 (diff) | |
download | aoc-c45044be65e4237516909c2db4c4ebcea2b5038f.tar.gz aoc-c45044be65e4237516909c2db4c4ebcea2b5038f.zip |
Day 3
This is fucking awful and I'm angry.
Diffstat (limited to '2017/src/bin')
-rw-r--r-- | 2017/src/bin/day03.rs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/2017/src/bin/day03.rs b/2017/src/bin/day03.rs new file mode 100644 index 0000000..4f38ac3 --- /dev/null +++ b/2017/src/bin/day03.rs @@ -0,0 +1,57 @@ +use std::io::{self, Read}; + +// 17 16 15 14 13 +// 18 5 4 3 12 +// 19 6 1 2 11 +// 20 7 8 9 10 +// 21 22 23---> ... +// +// 1 R +// 1 U +// 2 L +// 2 D +// 3 R +// 3 U +// 4 L +// 4 D +// 5 R + +fn solve1(input: i32) -> i32 { + let ds = [(1, 0), (0, 1), (-1, 0), (0, -1)]; + + let mut n = 1; + let mut x = 0i32; + let mut y = 0i32; + let mut r = 1; + let mut i = 0; + + for &(dx, dy) in ds.iter().cycle() { + for _ in 0..r { + if n == input { + return x.abs() + y.abs(); + } + + n += 1; + x += dx; + y += dy; + } + r += i % 2; + i += 1; + } + unreachable!() +} + +fn main() { + let mut input = String::new(); + io::stdin().read_to_string(&mut input).unwrap(); + + println!("Part 1: {}", solve1(input.trim().parse().unwrap())); +} + +#[test] +fn part1() { + assert_eq!(0, solve1(1)); + assert_eq!(3, solve1(12)); + assert_eq!(2, solve1(23)); + assert_eq!(31, solve1(1024)); +} |