Compare commits

..

2 Commits

Author SHA1 Message Date
4b9196370a
Day 2: Part 2 2024-12-02 09:17:03 -05:00
fc68739d64
Day 2: Part 1 2024-12-02 08:52:38 -05:00
3 changed files with 1109 additions and 0 deletions

42
day2/day2_part1.lua Normal file
View File

@ -0,0 +1,42 @@
--Lua 5.4.2
local File = io.open("input.txt", "r")
if not File then
print("File not found")
return
end
local SafeReports = 0
for Line in File:lines() do
local IsSafe = true
local LastSign = 0
local LastNumber
for Number in Line:gmatch("%d+") do
if not LastNumber then
LastNumber = Number
goto continue
end
local Difference = math.abs(Number - LastNumber)
if Difference > 3 or Difference == 0 then
IsSafe = false
break
end
local Sign = (Number - LastNumber) > 0 and 1 or -1
if LastSign == 0 then
LastSign = Sign
else
if Sign ~= LastSign then
IsSafe = false
break
end
end
LastNumber = Number
::continue::
end
if IsSafe then
SafeReports = SafeReports + 1
end
end
print("Safe reports:", SafeReports)

67
day2/day2_part2.lua Normal file
View File

@ -0,0 +1,67 @@
--Lua 5.4.2
local File = io.open("input.txt", "r")
if not File then
print("File not found")
return
end
local function IsReportSafe(Numbers)
local IsSafe = true
local LastSign = 0
local LastNumber
for _, Number in next, Numbers do
if not LastNumber then
LastNumber = Number
goto continue
end
local Difference = math.abs(Number - LastNumber)
if Difference > 3 or Difference == 0 then
IsSafe = false
break
end
local Sign = (Number - LastNumber) > 0 and 1 or -1
if LastSign == 0 then
LastSign = Sign
else
if Sign ~= LastSign then
IsSafe = false
break
end
end
LastNumber = Number
::continue::
end
return IsSafe
end
local function Clone(t) --surface level copy
local Cloned = {}
for Key, Value in next, t do
Cloned[Key] = Value
end
return Cloned
end
local SafeReports = 0
for Line in File:lines() do
local Numbers = {}
for Number in Line:gmatch("%d+") do
table.insert(Numbers, tonumber(Number))
end
if IsReportSafe(Numbers) then
SafeReports = SafeReports + 1
else
for Index = 1, #Numbers do
local NumbersCopy = Clone(Numbers) --yikes
table.remove(NumbersCopy, Index)
if IsReportSafe(NumbersCopy) then
SafeReports = SafeReports + 1
break
end
end
end
end
print("Safe reports:", SafeReports)

1000
day2/input.txt Normal file

File diff suppressed because it is too large Load Diff