AdventOfCode-2017/day3_2.rb

57 lines
941 B
Ruby

states = {
"left" => "down",
"down" => "right",
"right" => "up",
"up" => "left"
}
stepsx = {
"right" => 1,
"left" => -1
}
stepsy = {
"up" => 1,
"down" => -1
}
increases = {
"left" => 1,
"right" => 1
}
stepsx.default = 0
stepsy.default = 0
increases.default = 0
memory = Array.new(399)
399.times do |time|
memory[time] = Array.new(399, 0)
end
step = 1
x = 199
y = 199
memory[x][y] = 1
x += 1
state = "up"
memory[x][y] = 1
input = 289326
while(true) do
dx = stepsx[state]
dy = stepsy[state]
step.times do |time|
x += dx
y += dy
total = 0
for i in -1..1 do
for j in -1..1 do
if(!(j == 0 && i == 0)) then total += memory[x + i][y + j] end
end
end
puts total
if(total > input) then exit() end
memory[x][y] = total
end
state = states[state]
step += increases[state]
end