diff --git a/day11/part1.lua b/day11/part1.lua new file mode 100755 index 0000000..f2e98ac --- /dev/null +++ b/day11/part1.lua @@ -0,0 +1,56 @@ +#!/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 diff --git a/day11/part2.lua b/day11/part2.lua new file mode 100755 index 0000000..cd1dfe7 --- /dev/null +++ b/day11/part2.lua @@ -0,0 +1,60 @@ +#!/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 + +for step = 1, math.huge do + for r, row in pairs(grid) do + for c, cell in pairs(row) do + flash(grid, r, c) + end + end + local flashes = 0 + 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() + if flashes == #grid * #grid[1] then + print(step) + break + end +end