57 lines
941 B
Ruby
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
|