diff options
Diffstat (limited to '2.lua')
-rw-r--r-- | 2.lua | 72 |
1 files changed, 72 insertions, 0 deletions
@@ -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 |