aboutsummaryrefslogtreecommitdiff
path: root/day05/part2.rb
blob: ae17888c992e23d5a5b0cc2f1426320af0a18543 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
lines = $stdin.readlines

brk = lines.index(?\n)
stackin = lines[0..(brk-2)]
movein = lines[(brk+1)..-1]

numstacks = lines[brk-1].split[-1].to_i
stacks = Array.new(numstacks) { [] }

stackin.reverse.each do |rank|
  stack = 0
  until rank.empty? do
    stacks[stack] << rank[1] if rank[0] == ?[
    rank = rank[4..-1]
    stack += 1
  end
end

movein.each do |istr|
  n, f, t = istr.scan(/\Amove (\d+) from (\d+) to (\d+)\Z/)[0].map(&:to_i)
  stacks[t-1].push(*stacks[f-1].pop(n))
end

puts stacks.map(&:pop).join