Compare commits
2 Commits
2ce473c58d
...
4b9196370a
Author | SHA1 | Date | |
---|---|---|---|
4b9196370a | |||
fc68739d64 |
42
day2/day2_part1.lua
Normal file
42
day2/day2_part1.lua
Normal 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
67
day2/day2_part2.lua
Normal 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
1000
day2/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user