From f2abc065ad615931431025290f0753bdd9614775 Mon Sep 17 00:00:00 2001 From: Felix Van der Jeugt Date: Sun, 5 Dec 2021 10:11:11 +0100 Subject: [PATCH] day 5 --- day05/part1.lua | 41 +++++++++++++++++++++++++++++++++++++++++ day05/part2.lua | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 day05/part1.lua create mode 100644 day05/part2.lua diff --git a/day05/part1.lua b/day05/part1.lua new file mode 100644 index 0000000..2f9dfcc --- /dev/null +++ b/day05/part1.lua @@ -0,0 +1,41 @@ +function readline() + local x1 = io.read("*n") + io.read(1) -- "," + local y1 = io.read("*n") + io.read(4) -- " -> " + local x2 = io.read("*n") + io.read(1) -- "," + local y2 = io.read("*n") + io.read("*l") -- "...\n" + return x1, y1, x2, y2 +end + +io.input(arg[3]) +local x1, y1, x2, y2 = readline() +local field = {} +while x1 ~= nil do + if x1 == x2 then + for y = math.min(y1, y2), math.max(y1, y2) do + local row = field[x1] or {} + row[y] = (row[y] or 0) + 1 + field[x1] = row + end + elseif y1 == y2 then + for x = math.min(x1, x2), math.max(x1, x2) do + local row = field[x] or {} + row[y1] = (row[y1] or 0) + 1 + field[x] = row + end + end + x1, y1, x2, y2 = readline() +end + +local count = 0 +for r, row in pairs(field) do + for c, col in pairs(row) do + if col >= 2 then + count = count + 1 + end + end +end +print(count) diff --git a/day05/part2.lua b/day05/part2.lua new file mode 100644 index 0000000..2c4328d --- /dev/null +++ b/day05/part2.lua @@ -0,0 +1,48 @@ +function readline() + local x1 = io.read("*n") + io.read(1) -- "," + local y1 = io.read("*n") + io.read(4) -- " -> " + local x2 = io.read("*n") + io.read(1) -- "," + local y2 = io.read("*n") + io.read("*l") -- "...\n" + return x1, y1, x2, y2 +end + +function mark(field, x, y, count, dx, dy) + local i = 0 + while i <= count do + local row = field[x+i*dx] or {} + row[y+i*dy] = (row[y+i*dy] or 0) + 1 + field[x+i*dx] = row + i = i + 1 + end +end + +io.input(arg[3]) +local x1, y1, x2, y2 = readline() +local field = {} +while x1 ~= nil do + local x, y, count, dx, dy + if x1 == x2 then + mark(field, x1, math.min(y1, y2), math.abs(y1 - y2), 0, 1) + elseif y1 == y2 then + mark(field, math.min(x1, x2), y1, math.abs(x2 - x1), 1, 0) + elseif x1 + y1 == x2 + y2 then + mark(field, math.min(x1, x2), math.max(y1, y2), math.abs(x1 - x2), 1, -1) + else + mark(field, math.min(x1, x2), math.min(y1, y2), math.abs(x1 - x2), 1, 1) + end + x1, y1, x2, y2 = readline() +end + +local count = 0 +for r, row in pairs(field) do + for c, col in pairs(row) do + if col >= 2 then + count = count + 1 + end + end +end +print(count)