From 973ca9090337d17207e341b70119963022e2ddc9 Mon Sep 17 00:00:00 2001 From: Christian Segundo Date: Mon, 2 Dec 2024 09:30:01 +0100 Subject: add day 2 --- 2.lua | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 2.lua (limited to '2.lua') 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 -- cgit v1.2.3