diff --git a/2017/input/day_03.txt b/2017/input/day_03.txt new file mode 100644 index 0000000..8c418b6 --- /dev/null +++ b/2017/input/day_03.txt @@ -0,0 +1 @@ +361527 \ No newline at end of file diff --git a/2017/ruby/day_03.rb b/2017/ruby/day_03.rb new file mode 100644 index 0000000..b3ce809 --- /dev/null +++ b/2017/ruby/day_03.rb @@ -0,0 +1,40 @@ +input = ARGF.read.to_i + +dir = [1,0] + +def next_dir(dir) + case dir + when [1,0] + [0,1] + when [0,1] + [-1,0] + when [-1,0] + [0,-1] + when [0,-1] + [1,0] + else + raise "invalid dir: #{dir}" + end +end + +grid = Hash.new(0) +grid[[0,0]] = 1 + +def next_value(grid, x, y) + [[-1, 1],[0, 1],[1,1], + [-1, 0], [1,0], + [-1,-1],[0,-1],[1,-1]].map {|i,j| grid[[x+i,y+j]]}.sum +end + +current = [0,0] +loop do + next_square = current.zip(dir).map {|a,b| a + b } + value = next_value(grid, *next_square) + puts "#{current}: #{value}" + exit if value > input + grid[next_square] = value + current = next_square + dir = next_dir(dir) if grid[current.zip(next_dir(dir)).map {|a,b| a + b }] == 0 +end + +p next_value(grid, 1,0)