advent-of-code/12023/05/05_part2.lua

77 lines
1.6 KiB
Lua

--incomplete so far
io.input("input")
seeds = {}
nseeds = {}
mapi = 0
for line in io.lines() do
if mapi == 0 then
--[[
for num in line:gmatch("%d+") do
table.insert(seeds,tonumber(num))
end
--]]
--[
for start,range in line:gmatch("(%d+) (%d+)") do
start = tonumber(start)
range = tonumber(range)
for i=start,start+range-1 do
table.insert(seeds,i)
end
end
--]]
end
if line:match("^$") then
if mapi>0 then
-- print("result")
for i, seed in ipairs(seeds) do
if not nseeds[i] then
nseeds[i] = seed
end
-- print(i, seed, "->", nseeds[i])
end
for i,seed in ipairs(nseeds) do
seeds[i] = seed
end
nseeds = {}
end
mapi = mapi + 1
print(mapi)
goto continue
end
if mapi==0 or line:match("^[%a%- ]+:$") then
goto continue
end
dst, src, len = line:match("(%d+) (%d+) (%d+)")
dst = tonumber(dst)
src = tonumber(src)
len = tonumber(len)
-- print(dst, src, len)
for i, seed in ipairs(seeds) do
if seed >= src and seed<src+len then -- transform
diff = seed - src
nseeds[i] = dst + diff
-- print(seed,"->", dst+diff)
end
end
::continue::
end
print("final")
for i,s in ipairs(seeds) do
if i==1 then min = s
else if s<min then min=s end
end
print(i,s)
end
print("part 1", min)