This commit is contained in:
Felix Van der Jeugt 2021-12-17 10:03:15 +01:00
parent 1cc102ee1a
commit 6005fb089d
No known key found for this signature in database
GPG Key ID: 58B209295023754D
3 changed files with 56 additions and 0 deletions

19
day17/part1.lua Executable file
View File

@ -0,0 +1,19 @@
#!/usr/bin/env luajit
require("utils")
local xmin, xmax, ymin, ymax = string.match(io.open(arg[3]):read("*a"), "target area: x=(.*)%.%.(.*), y=(.*)%.%.(.*)")
xmin, xmax, ymin, ymax = tonumber(xmin), tonumber(xmax), tonumber(ymin), tonumber(ymax)
local maxdy = 0
if ymax > 0 then
maxdy = ymax
end
if ymin < 0 then
if -ymin - 1 > maxdy then
maxdy = -ymin - 1
end
end
print(euler(maxdy))

34
day17/part2.lua Executable file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env luajit
require("utils")
local xmin, xmax, ymin, ymax = string.match(io.open(arg[3]):read("*a"), "target area: x=(.*)%.%.(.*), y=(.*)%.%.(.*)")
xmin, xmax, ymin, ymax = tonumber(xmin), tonumber(xmax), tonumber(ymin), tonumber(ymax)
local mindy = ymin
local maxdy = 0
if ymax > 0 then maxdy = ymax end
if ymin < 0 then if -ymin - 1 > maxdy then maxdy = -ymin - 1 end end
local mindx = 0
while euler(mindx) < xmin do mindx = mindx + 1 end
local maxdx = xmax
local count = 0
for odx = mindx, maxdx do
for ody = mindy, maxdy do
local x, y, dx, dy = 0, 0, odx, ody
while x <= xmax and y >= math.min(0, ymin) do
x, y = x + dx, y + dy
if xmin <= x and x <= xmax and ymin <= y and y <= ymax then
count = count + 1
break
end
if dx > 0 then dx = dx - 1 end
dy = dy - 1
end
end
end
print(count)

View File

@ -84,3 +84,6 @@ function bin2dec(str)
return v
end
function euler(n)
return n * (n + 1) / 2
end