aboutsummaryrefslogtreecommitdiff
path: root/day03/part2
blob: c6c43390fa59e373bfcc2b5734757e76a80cfc72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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]