summaryrefslogtreecommitdiff
path: root/05
diff options
context:
space:
mode:
Diffstat (limited to '05')
-rw-r--r--05/1.lua29
-rw-r--r--05/2.lua38
-rwxr-xr-x05/ext.lua62
-rw-r--r--05/input.txt512
-rw-r--r--05/sample.txt9
5 files changed, 650 insertions, 0 deletions
diff --git a/05/1.lua b/05/1.lua
new file mode 100644
index 0000000..e4eaa6a
--- /dev/null
+++ b/05/1.lua
@@ -0,0 +1,29 @@
+#!/usr/bin/env lua
+local stacks
+for line in io.lines() do
+ if not stacks then -- first line
+ stacks = {}
+ local num_stacks = math.ceil(#line / 4)
+ for i = 1, num_stacks do
+ stacks[i] = {}
+ end
+ end
+ if line:sub(2,2) == "1" then break end -- end of crates
+ for i = 1, #line, 4 do
+ local letter = line:sub(i+1,i+1)
+ if letter ~= " " then
+ local stacknum = math.ceil(i/4)
+ table.insert(stacks[stacknum],1,letter)
+ end
+ end
+end
+for line in io.lines() do break end -- empty line between crates and orders
+for line in io.lines() do
+ local amt, from, to = line:match("move (%d+) from (%d+) to (%d+)")
+ amt, from, to = tonumber(amt), tonumber(from), tonumber(to)
+ for i = 1, amt do
+ table.insert(stacks[to],table.remove(stacks[from]))
+ end
+end
+table.insert(stacks,{"\n"})
+for _,c in ipairs(stacks) do io.write(c[#c]) end
diff --git a/05/2.lua b/05/2.lua
new file mode 100644
index 0000000..a132630
--- /dev/null
+++ b/05/2.lua
@@ -0,0 +1,38 @@
+#!/usr/bin/env lua
+
+local stacks
+for line in io.lines() do
+ if not stacks then -- first line
+ stacks = {}
+ local num_stacks = math.ceil(#line / 4)
+ for i = 1, num_stacks do
+ stacks[i] = {}
+ end
+ end
+ if line:sub(2,2) == "1" then
+ break -- end of crates
+ end
+ for i = 1, #line, 4 do
+ local letter = line:sub(i+1,i+1)
+ if letter ~= " " then
+ table.insert(stacks[math.ceil(i/4)],1,letter)
+ end
+ end
+end
+for line in io.lines() do break end -- empty line between crates and orders
+for line in io.lines() do
+ local amt, from, to = line:match("move (%d+) from (%d+) to (%d+)")
+ amt, from, to = tonumber(amt), tonumber(from), tonumber(to)
+ local crates = {}
+ for i = 1, amt do
+ table.insert(crates, table.remove(stacks[from]))
+ end
+ for i = 1, #crates do
+ table.insert(stacks[to], table.remove(crates))
+ end
+end
+local msg = {}
+for _,c in pairs(stacks) do
+ table.insert(msg,c[#c])
+end
+print(table.concat(msg))
diff --git a/05/ext.lua b/05/ext.lua
new file mode 100755
index 0000000..c1eb1cc
--- /dev/null
+++ b/05/ext.lua
@@ -0,0 +1,62 @@
+-- Override tostring to display more info about the table
+local old_tostring = tostring
+local numtabs = 0
+local printed_tables = {}
+
+local function tostring_helper(el)
+ assert(type(el) == "table", "Tried to call helper with something that was not a table, it was a " .. type(el))
+ local mt = getmetatable(el)
+ if mt and mt.__tostring then
+ return mt.__tostring(el)
+ elseif printed_tables[el] == true then
+ return old_tostring(el)
+ else
+ printed_tables[el] = true
+ numtabs = numtabs + 1
+ local strbuilder = setmetatable({"{"},{__index = table})
+ for k,v in pairs(el) do
+ local key,value
+ if type(k) == "table" then
+ key = tostring_helper(k)
+ else
+ key = old_tostring(k)
+ end
+ if type(v) == "table" then
+ value = tostring_helper(v)
+ else
+ value = old_tostring(v)
+ end
+ strbuilder:insert(string.format("%s%s : %s", string.rep("\t",numtabs), key, value))
+ end
+ strbuilder:insert(string.rep("\t",numtabs - 1) .. "}")
+ numtabs = numtabs - 1
+ return strbuilder:concat("\n")
+ end
+
+end
+function tostring(el)
+ printed_tables = {}
+ if type(el) == "table" then
+ return tostring_helper(el)
+ end
+ return old_tostring(el)
+end
+
+-- Functions to save my hands
+function printf(fmt, ...)
+ print(string.format(fmt,...))
+end
+function errorf(fmt, ...)
+ --Our error isn't actually in this function, it's 1 above us (1) = 2
+ error(string.format(fmt,...),2)
+end
+function assertf(bool, fmt, ...)
+ assert(type(fmt) == "string", "Assertf arg #2 was \"" .. type(fmt) .. "\", expected string")
+ if not bool then
+ args = {fmt}
+ for k,v in ipairs({...}) do
+ table.insert(args,tostring(v))
+ end
+ error(string.format(unpack(args)),2)
+ end
+end
diff --git a/05/input.txt b/05/input.txt
new file mode 100644
index 0000000..6b8d095
--- /dev/null
+++ b/05/input.txt
@@ -0,0 +1,512 @@
+ [V] [G] [H]
+[Z] [H] [Z] [T] [S]
+[P] [D] [F] [B] [V] [Q]
+[B] [M] [V] [N] [F] [D] [N]
+[Q] [Q] [D] [F] [Z] [Z] [P] [M]
+[M] [Z] [R] [D] [Q] [V] [T] [F] [R]
+[D] [L] [H] [G] [F] [Q] [M] [G] [W]
+[N] [C] [Q] [H] [N] [D] [Q] [M] [B]
+ 1 2 3 4 5 6 7 8 9
+
+move 3 from 2 to 5
+move 2 from 9 to 6
+move 4 from 7 to 1
+move 7 from 3 to 4
+move 2 from 9 to 8
+move 8 from 8 to 6
+move 1 from 7 to 4
+move 8 from 6 to 4
+move 4 from 5 to 7
+move 3 from 4 to 9
+move 2 from 6 to 3
+move 11 from 4 to 1
+move 1 from 3 to 4
+move 2 from 3 to 1
+move 1 from 7 to 6
+move 14 from 1 to 6
+move 7 from 4 to 3
+move 2 from 5 to 9
+move 5 from 6 to 4
+move 9 from 6 to 1
+move 3 from 4 to 8
+move 1 from 7 to 6
+move 3 from 4 to 1
+move 7 from 3 to 8
+move 5 from 9 to 5
+move 4 from 1 to 4
+move 3 from 7 to 2
+move 5 from 6 to 2
+move 3 from 4 to 1
+move 7 from 8 to 5
+move 3 from 6 to 8
+move 11 from 2 to 1
+move 1 from 4 to 3
+move 1 from 3 to 9
+move 2 from 2 to 9
+move 8 from 5 to 4
+move 1 from 1 to 7
+move 1 from 9 to 5
+move 8 from 4 to 1
+move 1 from 6 to 8
+move 2 from 9 to 1
+move 4 from 5 to 3
+move 2 from 7 to 3
+move 40 from 1 to 2
+move 24 from 2 to 9
+move 1 from 5 to 6
+move 11 from 2 to 3
+move 9 from 3 to 5
+move 12 from 9 to 4
+move 6 from 5 to 7
+move 4 from 7 to 4
+move 2 from 5 to 1
+move 2 from 1 to 9
+move 1 from 6 to 8
+move 9 from 4 to 8
+move 6 from 4 to 9
+move 17 from 9 to 6
+move 1 from 4 to 6
+move 17 from 6 to 5
+move 1 from 1 to 4
+move 2 from 7 to 9
+move 1 from 6 to 7
+move 2 from 2 to 9
+move 2 from 7 to 2
+move 6 from 3 to 8
+move 3 from 5 to 9
+move 1 from 4 to 9
+move 2 from 3 to 7
+move 4 from 5 to 6
+move 1 from 7 to 4
+move 1 from 4 to 2
+move 1 from 7 to 5
+move 9 from 8 to 1
+move 1 from 1 to 2
+move 2 from 9 to 3
+move 7 from 2 to 7
+move 1 from 9 to 5
+move 12 from 8 to 7
+move 3 from 1 to 9
+move 2 from 6 to 4
+move 9 from 9 to 3
+move 1 from 6 to 7
+move 1 from 9 to 5
+move 1 from 6 to 1
+move 9 from 7 to 1
+move 7 from 1 to 8
+move 4 from 3 to 9
+move 5 from 7 to 1
+move 3 from 9 to 1
+move 4 from 7 to 2
+move 12 from 1 to 5
+move 2 from 9 to 4
+move 7 from 8 to 2
+move 7 from 5 to 7
+move 4 from 3 to 4
+move 1 from 8 to 1
+move 2 from 2 to 1
+move 2 from 3 to 1
+move 3 from 2 to 7
+move 13 from 5 to 4
+move 1 from 8 to 3
+move 1 from 3 to 8
+move 1 from 3 to 5
+move 1 from 8 to 7
+move 17 from 4 to 8
+move 5 from 2 to 6
+move 2 from 1 to 6
+move 5 from 6 to 3
+move 9 from 7 to 1
+move 4 from 4 to 3
+move 1 from 6 to 2
+move 4 from 7 to 4
+move 1 from 6 to 5
+move 2 from 3 to 2
+move 15 from 1 to 4
+move 6 from 5 to 4
+move 4 from 3 to 5
+move 4 from 5 to 2
+move 2 from 2 to 4
+move 11 from 8 to 1
+move 2 from 8 to 3
+move 5 from 3 to 7
+move 4 from 2 to 8
+move 2 from 2 to 9
+move 4 from 7 to 8
+move 11 from 4 to 6
+move 2 from 5 to 4
+move 3 from 6 to 9
+move 4 from 1 to 4
+move 15 from 4 to 9
+move 1 from 7 to 3
+move 2 from 1 to 2
+move 6 from 4 to 5
+move 11 from 8 to 2
+move 16 from 9 to 4
+move 2 from 9 to 1
+move 4 from 2 to 3
+move 8 from 4 to 9
+move 1 from 8 to 7
+move 5 from 4 to 7
+move 6 from 7 to 3
+move 10 from 9 to 5
+move 5 from 3 to 1
+move 1 from 1 to 4
+move 5 from 1 to 9
+move 5 from 1 to 7
+move 5 from 4 to 1
+move 4 from 1 to 6
+move 3 from 1 to 9
+move 10 from 5 to 9
+move 2 from 7 to 1
+move 5 from 3 to 6
+move 4 from 5 to 7
+move 4 from 2 to 6
+move 2 from 5 to 6
+move 5 from 2 to 7
+move 18 from 6 to 1
+move 5 from 9 to 2
+move 7 from 9 to 6
+move 16 from 1 to 7
+move 4 from 6 to 1
+move 1 from 2 to 6
+move 2 from 2 to 6
+move 1 from 2 to 4
+move 4 from 9 to 3
+move 1 from 2 to 8
+move 5 from 7 to 5
+move 2 from 9 to 3
+move 1 from 5 to 9
+move 7 from 3 to 4
+move 1 from 9 to 7
+move 8 from 1 to 9
+move 1 from 8 to 9
+move 3 from 6 to 9
+move 17 from 7 to 5
+move 3 from 4 to 8
+move 3 from 4 to 2
+move 3 from 8 to 3
+move 3 from 3 to 7
+move 7 from 9 to 3
+move 6 from 5 to 9
+move 4 from 9 to 3
+move 10 from 7 to 2
+move 15 from 5 to 2
+move 4 from 6 to 3
+move 1 from 3 to 2
+move 23 from 2 to 5
+move 2 from 4 to 6
+move 2 from 6 to 7
+move 1 from 7 to 2
+move 1 from 6 to 9
+move 5 from 9 to 8
+move 3 from 8 to 7
+move 5 from 2 to 6
+move 2 from 2 to 3
+move 2 from 6 to 3
+move 3 from 6 to 2
+move 3 from 6 to 8
+move 10 from 5 to 9
+move 2 from 7 to 5
+move 1 from 5 to 8
+move 13 from 9 to 5
+move 6 from 5 to 6
+move 1 from 6 to 1
+move 1 from 7 to 3
+move 1 from 7 to 3
+move 13 from 5 to 6
+move 3 from 3 to 5
+move 1 from 2 to 1
+move 4 from 8 to 9
+move 2 from 2 to 6
+move 2 from 5 to 3
+move 2 from 3 to 6
+move 5 from 6 to 4
+move 9 from 5 to 9
+move 10 from 6 to 9
+move 1 from 1 to 7
+move 3 from 3 to 9
+move 1 from 8 to 1
+move 3 from 6 to 3
+move 1 from 7 to 6
+move 1 from 8 to 7
+move 2 from 6 to 1
+move 2 from 6 to 4
+move 3 from 4 to 6
+move 2 from 1 to 4
+move 10 from 9 to 6
+move 6 from 4 to 9
+move 17 from 9 to 1
+move 4 from 9 to 5
+move 19 from 1 to 7
+move 4 from 5 to 6
+move 1 from 9 to 3
+move 5 from 3 to 4
+move 5 from 4 to 8
+move 17 from 6 to 9
+move 17 from 9 to 2
+move 1 from 6 to 1
+move 1 from 1 to 2
+move 1 from 8 to 3
+move 2 from 3 to 2
+move 5 from 7 to 1
+move 1 from 7 to 3
+move 5 from 2 to 9
+move 4 from 8 to 2
+move 2 from 7 to 8
+move 3 from 9 to 3
+move 7 from 3 to 9
+move 2 from 8 to 7
+move 8 from 2 to 9
+move 5 from 9 to 6
+move 4 from 3 to 9
+move 11 from 2 to 3
+move 2 from 6 to 5
+move 1 from 9 to 4
+move 10 from 7 to 3
+move 3 from 1 to 8
+move 2 from 6 to 7
+move 15 from 3 to 8
+move 2 from 3 to 2
+move 2 from 1 to 3
+move 14 from 9 to 6
+move 1 from 4 to 9
+move 14 from 6 to 3
+move 5 from 7 to 2
+move 2 from 9 to 2
+move 1 from 5 to 3
+move 1 from 5 to 8
+move 12 from 3 to 7
+move 13 from 7 to 8
+move 1 from 6 to 7
+move 5 from 2 to 6
+move 1 from 6 to 2
+move 1 from 7 to 6
+move 4 from 6 to 8
+move 31 from 8 to 7
+move 15 from 7 to 8
+move 7 from 7 to 5
+move 4 from 2 to 3
+move 1 from 6 to 2
+move 3 from 5 to 8
+move 9 from 7 to 4
+move 2 from 2 to 9
+move 4 from 5 to 6
+move 13 from 3 to 9
+move 3 from 3 to 5
+move 13 from 9 to 1
+move 1 from 3 to 2
+move 2 from 6 to 5
+move 1 from 3 to 4
+move 2 from 6 to 5
+move 1 from 9 to 1
+move 6 from 8 to 9
+move 5 from 5 to 2
+move 2 from 9 to 8
+move 2 from 1 to 6
+move 1 from 9 to 4
+move 12 from 8 to 4
+move 2 from 6 to 9
+move 11 from 4 to 3
+move 9 from 4 to 2
+move 4 from 9 to 7
+move 2 from 5 to 6
+move 8 from 3 to 4
+move 2 from 3 to 9
+move 2 from 8 to 9
+move 4 from 4 to 9
+move 2 from 6 to 7
+move 1 from 3 to 7
+move 2 from 9 to 1
+move 5 from 4 to 2
+move 9 from 1 to 8
+move 1 from 4 to 9
+move 4 from 9 to 3
+move 1 from 3 to 6
+move 4 from 8 to 7
+move 1 from 3 to 6
+move 4 from 1 to 7
+move 1 from 3 to 8
+move 1 from 1 to 8
+move 2 from 6 to 7
+move 2 from 9 to 1
+move 1 from 4 to 5
+move 1 from 1 to 5
+move 11 from 8 to 4
+move 12 from 2 to 8
+move 1 from 9 to 8
+move 2 from 4 to 5
+move 1 from 1 to 8
+move 5 from 2 to 1
+move 1 from 3 to 2
+move 9 from 7 to 3
+move 6 from 7 to 5
+move 1 from 3 to 4
+move 1 from 5 to 1
+move 4 from 2 to 5
+move 4 from 4 to 1
+move 2 from 7 to 3
+move 3 from 4 to 1
+move 6 from 3 to 7
+move 9 from 8 to 7
+move 3 from 8 to 7
+move 11 from 5 to 9
+move 2 from 4 to 8
+move 5 from 8 to 7
+move 1 from 9 to 8
+move 12 from 9 to 5
+move 1 from 4 to 5
+move 5 from 1 to 8
+move 6 from 8 to 3
+move 1 from 3 to 8
+move 3 from 7 to 9
+move 4 from 7 to 6
+move 3 from 1 to 3
+move 3 from 1 to 6
+move 1 from 8 to 1
+move 7 from 6 to 2
+move 3 from 1 to 8
+move 7 from 3 to 4
+move 3 from 4 to 1
+move 1 from 4 to 2
+move 3 from 1 to 2
+move 1 from 7 to 6
+move 1 from 8 to 5
+move 9 from 5 to 3
+move 1 from 6 to 9
+move 11 from 3 to 6
+move 1 from 4 to 1
+move 1 from 3 to 4
+move 8 from 6 to 9
+move 1 from 3 to 1
+move 1 from 9 to 1
+move 2 from 6 to 2
+move 5 from 5 to 7
+move 5 from 9 to 3
+move 2 from 8 to 5
+move 1 from 1 to 2
+move 1 from 9 to 1
+move 15 from 7 to 4
+move 1 from 1 to 6
+move 1 from 6 to 9
+move 3 from 9 to 3
+move 1 from 3 to 5
+move 5 from 5 to 3
+move 9 from 2 to 9
+move 5 from 4 to 1
+move 1 from 6 to 7
+move 7 from 9 to 3
+move 1 from 4 to 7
+move 1 from 9 to 6
+move 1 from 6 to 5
+move 2 from 1 to 4
+move 3 from 9 to 3
+move 1 from 5 to 6
+move 7 from 4 to 3
+move 1 from 9 to 3
+move 16 from 3 to 1
+move 9 from 1 to 3
+move 5 from 4 to 2
+move 1 from 6 to 9
+move 12 from 1 to 9
+move 3 from 2 to 9
+move 5 from 7 to 3
+move 2 from 4 to 8
+move 2 from 7 to 2
+move 12 from 3 to 5
+move 6 from 2 to 9
+move 12 from 3 to 1
+move 2 from 8 to 6
+move 1 from 6 to 1
+move 6 from 5 to 8
+move 5 from 3 to 2
+move 2 from 5 to 8
+move 8 from 1 to 8
+move 13 from 9 to 7
+move 4 from 7 to 5
+move 4 from 1 to 4
+move 8 from 5 to 6
+move 1 from 1 to 6
+move 4 from 7 to 3
+move 1 from 3 to 1
+move 1 from 1 to 9
+move 4 from 9 to 5
+move 3 from 3 to 7
+move 12 from 8 to 7
+move 2 from 4 to 3
+move 2 from 6 to 9
+move 4 from 8 to 2
+move 2 from 3 to 9
+move 2 from 4 to 7
+move 3 from 5 to 7
+move 2 from 9 to 7
+move 3 from 6 to 1
+move 4 from 6 to 7
+move 1 from 5 to 4
+move 1 from 9 to 3
+move 12 from 2 to 5
+move 4 from 9 to 7
+move 11 from 5 to 1
+move 1 from 6 to 5
+move 1 from 1 to 4
+move 10 from 1 to 2
+move 2 from 5 to 1
+move 1 from 3 to 5
+move 7 from 2 to 5
+move 8 from 7 to 8
+move 2 from 2 to 8
+move 3 from 9 to 4
+move 5 from 4 to 3
+move 1 from 5 to 7
+move 3 from 7 to 1
+move 3 from 5 to 8
+move 1 from 2 to 5
+move 12 from 7 to 6
+move 4 from 1 to 3
+move 2 from 5 to 6
+move 7 from 3 to 7
+move 14 from 6 to 4
+move 1 from 5 to 6
+move 3 from 1 to 3
+move 4 from 3 to 2
+move 2 from 5 to 8
+move 11 from 7 to 4
+move 7 from 4 to 5
+move 1 from 3 to 4
+move 1 from 5 to 6
+move 14 from 8 to 7
+move 11 from 7 to 3
+move 2 from 2 to 6
+move 1 from 2 to 3
+move 5 from 5 to 4
+move 4 from 6 to 4
+move 8 from 7 to 8
+move 3 from 7 to 3
+move 1 from 2 to 1
+move 5 from 8 to 2
+move 4 from 4 to 3
+move 1 from 2 to 9
+move 1 from 1 to 9
+move 3 from 2 to 1
+move 1 from 5 to 4
+move 3 from 8 to 1
+move 1 from 7 to 4
+move 4 from 3 to 9
+move 1 from 8 to 7
+move 2 from 9 to 1
+move 6 from 3 to 4
+move 28 from 4 to 7
+move 15 from 7 to 8
+move 3 from 3 to 8
+move 1 from 2 to 9
+move 2 from 3 to 2
+move 7 from 1 to 4
+move 10 from 4 to 5
+move 10 from 5 to 6
+move 3 from 8 to 2
+move 1 from 1 to 7
+move 1 from 4 to 7
+move 1 from 9 to 6
+move 9 from 6 to 7
+move 1 from 2 to 4
+move 1 from 9 to 5
diff --git a/05/sample.txt b/05/sample.txt
new file mode 100644
index 0000000..84933bb
--- /dev/null
+++ b/05/sample.txt
@@ -0,0 +1,9 @@
+ [D]
+[N] [C]
+[Z] [M] [P]
+ 1 2 3
+
+move 1 from 2 to 1
+move 3 from 1 to 3
+move 2 from 2 to 1
+move 1 from 1 to 2