about summary refs log tree commit diff
path: root/day03.rb
blob: e8b2d86b4dc15440203d14c4c0991d5e2a982b20 (plain) (blame)
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
require 'pp'

d = 368078

N = 20
a = Array.new(N) { Array.new(N, 0) }

x = y = N/2
a[x][y] = 1

y += 1

2.step(10, 2) { |n|
  steps = Array.new(n-1, [-1, 0]) +
          Array.new(n,   [ 0,-1]) +
          Array.new(n,   [ 1, 0]) +
          Array.new(n+1, [ 0, 1])
  steps.each { |(dx,dy)|
    a[x][y] = a[x-1][y-1] + a[x-1][y] + a[x-1][y+1] + 
              a[x  ][y-1] +             a[x  ][y+1] + 
              a[x+1][y-1] + a[x+1][y] + a[x+1][y+1]
    if a[x][y] > d
      p a[x][y]
      exit
    end
    x += dx
    y += dy
  }
}

a.each { |l| p l }