aboutsummaryrefslogtreecommitdiff
path: root/day03
diff options
context:
space:
mode:
authorNat Lasseter <Nat Lasseter nathan@bytemark.co.uk>2017-12-15 01:32:39 +0000
committerNat Lasseter <Nat Lasseter nathan@bytemark.co.uk>2017-12-15 01:32:39 +0000
commit630bb4d3527eb5ae2f9789cb689088558a6173a8 (patch)
treef16445f4f53e395498c3f032c5bb32a02bb5f532 /day03
parent1a0e17e9d8551f1866642e3feb3e76c1f4890108 (diff)
Day03 Part2 at last :D
Diffstat (limited to 'day03')
-rwxr-xr-xday03/part250
1 files changed, 50 insertions, 0 deletions
diff --git a/day03/part2 b/day03/part2
new file mode 100755
index 0000000..c6c4339
--- /dev/null
+++ b/day03/part2
@@ -0,0 +1,50 @@
+#!/usr/bin/env ruby
+
+def turn(v)
+ return case v
+ when [0, 1]
+ [1, 0]
+ when [1, 0]
+ [0, -1]
+ when [0, -1]
+ [-1, 0]
+ when [-1, 0]
+ [0, 1]
+ end
+end
+
+input = gets.chomp.to_i
+
+wid = 31
+hei = 31
+
+r = (hei + 1) / 2
+c = (wid + 1) / 2
+
+going = [0, 1]
+
+grid = []
+hei.times { grid << ([0] * wid) }
+
+grid[r][c] = 1
+
+loop do
+ r += going[0]
+ c += going[1]
+
+ grid[r][c] =
+ grid[r][c+1] +
+ grid[r+1][c+1] +
+ grid[r+1][c] +
+ grid[r+1][c-1] +
+ grid[r][c-1] +
+ grid[r-1][c-1] +
+ grid[r-1][c] +
+ grid[r-1][c+1]
+
+ break if grid[r][c] > input
+ try = turn(going)
+ going = try if grid[r+try[0]][c+try[1]] == 0
+end
+
+puts grid[r][c]