summaryrefslogtreecommitdiff
path: root/2.lua
diff options
context:
space:
mode:
authorChristian Segundo2024-12-02 09:30:01 +0100
committerChristian Segundo2024-12-02 09:30:01 +0100
commit973ca9090337d17207e341b70119963022e2ddc9 (patch)
treed5c8eb20cc15fc124a3abcc3f859bc09b77879c1 /2.lua
parent241b0b80875a1428b3d0c98ab83405fd2667f23d (diff)
downloadadvent-of-code-2024-973ca9090337d17207e341b70119963022e2ddc9.tar.gz
add day 2
Diffstat (limited to '2.lua')
-rw-r--r--2.lua72
1 files changed, 72 insertions, 0 deletions
diff --git a/2.lua b/2.lua
new file mode 100644
index 0000000..f8068ef
--- /dev/null
+++ b/2.lua
@@ -0,0 +1,72 @@
+local function is_safe(a)
+ local up = false
+ local down = false
+ local prev = nil
+
+ for i, number in ipairs(a) do
+ number = tonumber(number)
+
+ if prev == nil then
+ prev = number
+ goto continue
+ end
+
+ if down==false and up==false then
+ if number < prev then down = true
+ elseif number > prev then up = true
+ else return false end
+ end
+
+ if up then
+ if prev > number then return false end
+ local r=number-prev
+ if r~=1 and r~=2 and r~= 3 then return false end
+ prev = number
+ end
+
+ if down then
+ if number > prev then return false end
+ local r=prev-number
+ if r~=1 and r~=2 and r~= 3 then return false end
+ prev = number
+ end
+
+ ::continue::
+ end
+ return true
+end
+
+local file = io.open("2-input.txt", "r")
+
+local safe = 0
+local safe_one_skip = 0
+
+for line in file:lines() do
+ local numbers = line:gmatch("[^%s]+")
+ local numbers_arr = {}
+ for i in numbers do
+ table.insert(numbers_arr, i)
+ end
+
+ if is_safe(numbers_arr) then
+ safe = safe + 1
+ safe_one_skip = safe_one_skip + 1
+ else
+ for i=1, #numbers_arr do
+ local n = table.remove(numbers_arr, i)
+ if is_safe(numbers_arr) then
+ safe_one_skip = safe_one_skip + 1
+ break
+ end
+ table.insert(numbers_arr, i, n)
+ end
+ end
+
+end
+
+file:close()
+print("puzzle 1:", safe)
+print("puzzle 2:", safe_one_skip)
+
+-- 490
+-- 536