--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)