summaryrefslogtreecommitdiff
path: root/05/1.lua
diff options
context:
space:
mode:
Diffstat (limited to '05/1.lua')
-rw-r--r--05/1.lua29
1 files changed, 29 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