1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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))
|