summaryrefslogtreecommitdiff
path: root/13/2.lua
diff options
context:
space:
mode:
authorAlex Pickering <alex@cogarr.net>2025-02-07 12:49:48 -0600
committerAlex Pickering <alex@cogarr.net>2025-02-07 12:49:48 -0600
commit3555be54c2abb8d5ece008a60dbdfbde0ffbddd7 (patch)
tree278876284d07118ecdea5c48cb6453f3122887f0 /13/2.lua
downloadadvent_of_code_2022-3555be54c2abb8d5ece008a60dbdfbde0ffbddd7.tar.gz
advent_of_code_2022-3555be54c2abb8d5ece008a60dbdfbde0ffbddd7.tar.bz2
advent_of_code_2022-3555be54c2abb8d5ece008a60dbdfbde0ffbddd7.zip
inital commitHEADmaster
Diffstat (limited to '13/2.lua')
-rw-r--r--13/2.lua64
1 files changed, 64 insertions, 0 deletions
diff --git a/13/2.lua b/13/2.lua
new file mode 100644
index 0000000..4af213c
--- /dev/null
+++ b/13/2.lua
@@ -0,0 +1,64 @@
+require "ext"
+local lines = {}
+for line in io.lines() do table.insert(lines,line) end
+
+local sum = 0
+local loaded = {{{6}},{{2}}}
+for i = 1,#lines,3 do
+ local l1,l2 = lines[i], lines[i+1]
+ l1 = l1:gsub("%[","{"):gsub("]","}")
+ l2 = l2:gsub("%[","{"):gsub("]","}")
+ l1 = load("return "..l1)()
+ l2 = load("return "..l2)()
+ table.insert(loaded,l1)
+ table.insert(loaded,l2)
+end
+
+local function compare(a,b) -- return true if a comes before b
+ assert(a ~= nil)
+ assert(b ~= nil)
+ if type(a) == "number" and type(b) == "number" then
+ if a < b then return true
+ elseif a > b then return false
+ else return nil end
+ elseif type(a) == "table" and type(b) == "table" then
+ for i = 1,math.min(#a,#b) do
+ local result = compare(a[i],b[i])
+ if result ~= nil then
+ return result
+ end
+ end
+ if #a < #b then
+ return true
+ elseif #a > #b then
+ return false
+ else
+ return nil
+ end
+ elseif type(a) == "number" and type(b) == "table" then
+ return compare({a},b)
+ elseif type(a) == "table" and type(b) == "number" then
+ return compare(a,{b})
+ end
+end
+table.sort(loaded,compare)
+local i2, i6
+for i = 1,#loaded do
+ local function eq(n)
+ return loaded[i] and
+ type(loaded[i]) == "table" and
+ #loaded[i] == 1 and
+ type(loaded[i][1]) == "table" and
+ #loaded[i][1] == 1 and
+ loaded[i][1][1] == n
+ end
+ if eq(6) then
+ print("Found 6 at ",i)
+ i6 = i
+ end
+ if eq(2) then
+ print("Found 2 at ",i)
+ i2 = i
+ end
+end
+print(i6 * i2)