57 lines
980 B
Lua
Executable File
57 lines
980 B
Lua
Executable File
#!/usr/bin/env luajit
|
|
require("utils")
|
|
|
|
local grid = {}
|
|
for line in io.lines(arg[3]) do
|
|
local row = {}
|
|
for char in chars(line) do
|
|
table.insert(row, tonumber(char))
|
|
end
|
|
table.insert(grid, row)
|
|
end
|
|
|
|
function printgrid()
|
|
for r, row in pairs(grid) do
|
|
for c, cell in pairs(row) do
|
|
if cell > 9 then
|
|
io.write('*')
|
|
else
|
|
io.write(cell)
|
|
end
|
|
end
|
|
io.write('\n')
|
|
end
|
|
end
|
|
|
|
printgrid()
|
|
|
|
function flash(grid, r, c)
|
|
grid[r][c] = grid[r][c] + 1
|
|
if grid[r][c] == 10 then
|
|
for dr = -1, 1 do if 0 < r + dr and r + dr <= #grid then
|
|
for dc = -1, 1 do if 0 < c + dc and c + dc <= #grid[r] then
|
|
flash(grid, r + dr, c + dc)
|
|
end end
|
|
end end
|
|
end
|
|
end
|
|
|
|
local flashes = 0
|
|
for step = 1, 100 do
|
|
for r, row in pairs(grid) do
|
|
for c, cell in pairs(row) do
|
|
flash(grid, r, c)
|
|
end
|
|
end
|
|
for r, row in pairs(grid) do
|
|
for c, cell in pairs(row) do
|
|
if cell > 9 then
|
|
grid[r][c] = 0
|
|
flashes = flashes + 1
|
|
end
|
|
end
|
|
end
|
|
print(flashes)
|
|
printgrid()
|
|
end
|