Frans Bergman 2 years ago
parent
commit
531237f1c0
2 changed files with 550 additions and 0 deletions
  1. 512 0
      5.input
  2. 38 0
      5.rb

+ 512 - 0
5.input

@@ -0,0 +1,512 @@
+    [H]         [D]     [P]        
+[W] [B]         [C] [Z] [D]        
+[T] [J]     [T] [J] [D] [J]        
+[H] [Z]     [H] [H] [W] [S]     [M]
+[P] [F] [R] [P] [Z] [F] [W]     [F]
+[J] [V] [T] [N] [F] [G] [Z] [S] [S]
+[C] [R] [P] [S] [V] [M] [V] [D] [Z]
+[F] [G] [H] [Z] [N] [P] [M] [N] [D]
+ 1   2   3   4   5   6   7   8   9 
+
+move 2 from 8 to 2
+move 3 from 9 to 2
+move 1 from 3 to 8
+move 5 from 1 to 7
+move 2 from 9 to 2
+move 8 from 2 to 4
+move 6 from 7 to 2
+move 2 from 1 to 7
+move 4 from 5 to 9
+move 4 from 5 to 6
+move 1 from 8 to 3
+move 1 from 8 to 5
+move 2 from 9 to 8
+move 8 from 6 to 4
+move 4 from 3 to 6
+move 10 from 2 to 3
+move 1 from 5 to 1
+move 1 from 7 to 4
+move 2 from 9 to 8
+move 18 from 4 to 8
+move 1 from 1 to 6
+move 4 from 7 to 3
+move 12 from 8 to 4
+move 4 from 7 to 9
+move 5 from 6 to 9
+move 2 from 2 to 7
+move 3 from 9 to 5
+move 3 from 5 to 9
+move 1 from 2 to 8
+move 10 from 3 to 1
+move 2 from 7 to 8
+move 10 from 1 to 9
+move 1 from 3 to 5
+move 16 from 9 to 8
+move 1 from 3 to 2
+move 3 from 8 to 3
+move 1 from 5 to 9
+move 3 from 6 to 7
+move 2 from 7 to 2
+move 1 from 3 to 8
+move 5 from 4 to 1
+move 4 from 9 to 5
+move 2 from 2 to 5
+move 2 from 1 to 9
+move 23 from 8 to 4
+move 6 from 5 to 2
+move 5 from 2 to 6
+move 1 from 9 to 6
+move 2 from 2 to 4
+move 35 from 4 to 9
+move 1 from 6 to 1
+move 2 from 8 to 7
+move 1 from 6 to 8
+move 3 from 1 to 7
+move 1 from 7 to 1
+move 3 from 6 to 2
+move 4 from 3 to 7
+move 6 from 7 to 9
+move 1 from 6 to 9
+move 1 from 8 to 1
+move 2 from 2 to 9
+move 2 from 8 to 2
+move 3 from 7 to 3
+move 2 from 1 to 9
+move 5 from 9 to 3
+move 1 from 4 to 2
+move 1 from 1 to 4
+move 7 from 3 to 9
+move 1 from 3 to 4
+move 2 from 4 to 7
+move 24 from 9 to 4
+move 12 from 9 to 3
+move 1 from 3 to 1
+move 1 from 1 to 2
+move 2 from 2 to 6
+move 1 from 6 to 5
+move 1 from 6 to 8
+move 3 from 2 to 4
+move 1 from 7 to 4
+move 1 from 5 to 3
+move 1 from 9 to 8
+move 23 from 4 to 8
+move 17 from 8 to 5
+move 12 from 9 to 8
+move 10 from 8 to 7
+move 1 from 8 to 6
+move 5 from 4 to 3
+move 3 from 5 to 1
+move 3 from 1 to 6
+move 6 from 5 to 4
+move 10 from 3 to 1
+move 9 from 1 to 7
+move 2 from 4 to 9
+move 1 from 1 to 6
+move 4 from 8 to 1
+move 4 from 3 to 7
+move 4 from 6 to 5
+move 1 from 9 to 6
+move 1 from 9 to 2
+move 1 from 1 to 7
+move 1 from 2 to 7
+move 3 from 1 to 7
+move 9 from 5 to 9
+move 7 from 9 to 7
+move 2 from 9 to 1
+move 3 from 5 to 9
+move 3 from 4 to 8
+move 1 from 1 to 2
+move 1 from 2 to 6
+move 1 from 1 to 6
+move 5 from 8 to 7
+move 1 from 8 to 1
+move 1 from 3 to 9
+move 1 from 1 to 6
+move 2 from 9 to 5
+move 2 from 3 to 9
+move 4 from 6 to 3
+move 1 from 9 to 4
+move 2 from 4 to 8
+move 1 from 4 to 8
+move 1 from 9 to 5
+move 1 from 6 to 8
+move 23 from 7 to 8
+move 27 from 8 to 2
+move 2 from 8 to 1
+move 23 from 2 to 6
+move 3 from 5 to 3
+move 4 from 2 to 5
+move 2 from 3 to 1
+move 2 from 9 to 3
+move 4 from 1 to 4
+move 13 from 7 to 9
+move 1 from 5 to 6
+move 2 from 5 to 9
+move 1 from 5 to 3
+move 3 from 9 to 3
+move 5 from 9 to 5
+move 2 from 4 to 2
+move 1 from 4 to 9
+move 11 from 6 to 9
+move 9 from 6 to 1
+move 17 from 9 to 5
+move 3 from 7 to 4
+move 3 from 6 to 3
+move 14 from 5 to 2
+move 5 from 3 to 1
+move 2 from 9 to 4
+move 2 from 3 to 8
+move 5 from 5 to 9
+move 2 from 5 to 4
+move 7 from 1 to 8
+move 2 from 9 to 5
+move 3 from 9 to 8
+move 8 from 4 to 2
+move 2 from 7 to 8
+move 10 from 2 to 9
+move 10 from 2 to 6
+move 8 from 9 to 7
+move 2 from 3 to 9
+move 3 from 9 to 8
+move 5 from 3 to 9
+move 7 from 7 to 9
+move 3 from 2 to 9
+move 10 from 8 to 5
+move 1 from 7 to 6
+move 1 from 2 to 3
+move 4 from 1 to 6
+move 2 from 8 to 4
+move 1 from 4 to 6
+move 2 from 6 to 3
+move 2 from 3 to 1
+move 1 from 4 to 9
+move 4 from 1 to 5
+move 2 from 5 to 2
+move 2 from 8 to 4
+move 1 from 3 to 5
+move 3 from 5 to 7
+move 2 from 2 to 9
+move 3 from 7 to 6
+move 3 from 8 to 5
+move 10 from 5 to 7
+move 3 from 6 to 4
+move 11 from 6 to 1
+move 3 from 6 to 2
+move 12 from 1 to 3
+move 1 from 7 to 5
+move 9 from 7 to 3
+move 5 from 5 to 1
+move 4 from 4 to 6
+move 2 from 1 to 7
+move 1 from 2 to 6
+move 2 from 7 to 8
+move 1 from 2 to 4
+move 1 from 9 to 5
+move 3 from 6 to 7
+move 1 from 5 to 2
+move 9 from 9 to 5
+move 1 from 2 to 8
+move 1 from 4 to 8
+move 1 from 1 to 8
+move 1 from 4 to 2
+move 1 from 7 to 2
+move 1 from 6 to 2
+move 1 from 6 to 8
+move 6 from 9 to 6
+move 1 from 3 to 4
+move 9 from 3 to 5
+move 1 from 1 to 3
+move 2 from 2 to 6
+move 1 from 3 to 5
+move 14 from 5 to 1
+move 1 from 2 to 6
+move 5 from 6 to 4
+move 3 from 8 to 2
+move 5 from 6 to 1
+move 5 from 4 to 6
+move 1 from 7 to 1
+move 3 from 9 to 3
+move 7 from 5 to 7
+move 1 from 4 to 6
+move 2 from 7 to 5
+move 3 from 6 to 1
+move 3 from 8 to 1
+move 14 from 3 to 4
+move 8 from 4 to 2
+move 1 from 6 to 1
+move 15 from 1 to 6
+move 7 from 1 to 6
+move 6 from 1 to 3
+move 3 from 3 to 1
+move 2 from 4 to 5
+move 1 from 4 to 2
+move 19 from 6 to 8
+move 2 from 1 to 8
+move 4 from 5 to 4
+move 7 from 8 to 2
+move 2 from 3 to 1
+move 13 from 8 to 6
+move 4 from 4 to 9
+move 2 from 4 to 8
+move 2 from 1 to 6
+move 1 from 3 to 5
+move 19 from 2 to 3
+move 13 from 3 to 1
+move 1 from 4 to 9
+move 1 from 2 to 8
+move 3 from 7 to 1
+move 14 from 6 to 9
+move 2 from 6 to 4
+move 18 from 9 to 4
+move 3 from 7 to 2
+move 15 from 1 to 4
+move 2 from 1 to 8
+move 5 from 3 to 1
+move 1 from 3 to 6
+move 5 from 8 to 9
+move 3 from 9 to 5
+move 1 from 9 to 5
+move 1 from 8 to 9
+move 1 from 6 to 2
+move 3 from 9 to 4
+move 2 from 6 to 7
+move 30 from 4 to 6
+move 22 from 6 to 9
+move 6 from 9 to 4
+move 4 from 6 to 7
+move 1 from 1 to 6
+move 1 from 9 to 8
+move 1 from 7 to 6
+move 3 from 5 to 3
+move 5 from 6 to 5
+move 2 from 7 to 9
+move 4 from 1 to 5
+move 1 from 6 to 4
+move 1 from 8 to 7
+move 2 from 6 to 4
+move 17 from 9 to 8
+move 2 from 2 to 7
+move 2 from 3 to 1
+move 8 from 4 to 8
+move 1 from 3 to 8
+move 8 from 4 to 2
+move 2 from 1 to 2
+move 1 from 4 to 6
+move 4 from 7 to 1
+move 1 from 6 to 8
+move 19 from 8 to 3
+move 5 from 5 to 1
+move 5 from 5 to 9
+move 2 from 9 to 3
+move 6 from 1 to 9
+move 1 from 7 to 5
+move 1 from 7 to 4
+move 2 from 5 to 7
+move 2 from 2 to 4
+move 4 from 9 to 8
+move 12 from 8 to 7
+move 2 from 1 to 9
+move 1 from 7 to 4
+move 4 from 4 to 5
+move 3 from 9 to 3
+move 9 from 2 to 6
+move 2 from 7 to 5
+move 1 from 1 to 9
+move 5 from 9 to 7
+move 9 from 6 to 2
+move 6 from 2 to 8
+move 21 from 3 to 2
+move 12 from 2 to 9
+move 3 from 5 to 9
+move 3 from 3 to 8
+move 5 from 9 to 6
+move 13 from 2 to 3
+move 3 from 6 to 2
+move 10 from 9 to 8
+move 6 from 3 to 1
+move 3 from 2 to 9
+move 2 from 6 to 7
+move 5 from 3 to 9
+move 4 from 1 to 9
+move 3 from 8 to 5
+move 1 from 1 to 7
+move 6 from 5 to 7
+move 12 from 9 to 7
+move 1 from 1 to 8
+move 11 from 8 to 5
+move 9 from 5 to 7
+move 1 from 3 to 1
+move 4 from 8 to 7
+move 1 from 1 to 7
+move 2 from 8 to 3
+move 42 from 7 to 4
+move 3 from 7 to 9
+move 4 from 7 to 5
+move 1 from 7 to 8
+move 1 from 8 to 5
+move 1 from 7 to 5
+move 1 from 3 to 4
+move 1 from 3 to 9
+move 1 from 9 to 6
+move 1 from 6 to 4
+move 1 from 3 to 5
+move 3 from 9 to 2
+move 16 from 4 to 8
+move 3 from 2 to 4
+move 1 from 5 to 4
+move 30 from 4 to 6
+move 15 from 8 to 3
+move 2 from 4 to 5
+move 1 from 8 to 7
+move 13 from 3 to 6
+move 1 from 7 to 8
+move 1 from 3 to 8
+move 1 from 3 to 8
+move 4 from 5 to 2
+move 6 from 5 to 2
+move 2 from 8 to 6
+move 43 from 6 to 2
+move 1 from 6 to 1
+move 18 from 2 to 4
+move 24 from 2 to 6
+move 19 from 6 to 3
+move 4 from 6 to 3
+move 2 from 6 to 3
+move 3 from 3 to 2
+move 1 from 1 to 3
+move 23 from 3 to 6
+move 12 from 4 to 3
+move 7 from 3 to 9
+move 13 from 2 to 9
+move 1 from 8 to 4
+move 4 from 3 to 8
+move 6 from 4 to 2
+move 10 from 9 to 3
+move 6 from 2 to 9
+move 8 from 3 to 5
+move 3 from 5 to 3
+move 13 from 6 to 5
+move 4 from 3 to 9
+move 1 from 4 to 2
+move 4 from 8 to 3
+move 1 from 2 to 5
+move 14 from 9 to 5
+move 2 from 5 to 4
+move 2 from 4 to 3
+move 1 from 9 to 5
+move 4 from 6 to 1
+move 1 from 6 to 2
+move 6 from 3 to 2
+move 5 from 6 to 8
+move 2 from 3 to 7
+move 1 from 8 to 1
+move 25 from 5 to 7
+move 3 from 7 to 9
+move 5 from 2 to 9
+move 12 from 9 to 8
+move 3 from 1 to 6
+move 16 from 8 to 2
+move 1 from 9 to 2
+move 1 from 6 to 2
+move 1 from 1 to 3
+move 21 from 7 to 3
+move 2 from 7 to 1
+move 1 from 7 to 8
+move 2 from 2 to 1
+move 2 from 6 to 3
+move 18 from 2 to 9
+move 2 from 5 to 1
+move 1 from 2 to 1
+move 3 from 5 to 2
+move 13 from 9 to 1
+move 3 from 9 to 2
+move 1 from 8 to 7
+move 3 from 2 to 6
+move 2 from 5 to 1
+move 17 from 3 to 8
+move 3 from 3 to 8
+move 2 from 9 to 1
+move 1 from 7 to 5
+move 1 from 5 to 3
+move 2 from 6 to 4
+move 1 from 6 to 1
+move 15 from 8 to 2
+move 2 from 3 to 6
+move 1 from 8 to 5
+move 2 from 6 to 8
+move 13 from 2 to 9
+move 4 from 9 to 8
+move 9 from 8 to 9
+move 3 from 3 to 4
+move 4 from 9 to 7
+move 1 from 8 to 6
+move 1 from 7 to 5
+move 2 from 5 to 1
+move 1 from 6 to 3
+move 4 from 4 to 5
+move 1 from 4 to 6
+move 1 from 3 to 7
+move 1 from 5 to 6
+move 2 from 7 to 2
+move 4 from 2 to 3
+move 3 from 2 to 7
+move 1 from 3 to 6
+move 1 from 9 to 6
+move 2 from 5 to 2
+move 3 from 9 to 5
+move 1 from 6 to 1
+move 3 from 5 to 4
+move 12 from 1 to 2
+move 2 from 2 to 4
+move 2 from 7 to 8
+move 2 from 3 to 9
+move 1 from 4 to 7
+move 1 from 5 to 2
+move 1 from 8 to 3
+move 2 from 3 to 6
+move 7 from 2 to 8
+move 3 from 4 to 1
+move 7 from 8 to 5
+move 7 from 9 to 2
+move 1 from 4 to 5
+move 3 from 7 to 6
+move 5 from 6 to 9
+move 6 from 9 to 5
+move 4 from 9 to 6
+move 1 from 8 to 5
+move 1 from 7 to 4
+move 1 from 4 to 2
+move 2 from 2 to 9
+move 2 from 9 to 2
+move 11 from 5 to 3
+move 2 from 5 to 2
+move 1 from 2 to 9
+move 4 from 6 to 9
+move 1 from 2 to 9
+move 4 from 3 to 7
+move 3 from 6 to 4
+move 1 from 5 to 7
+move 18 from 1 to 3
+move 11 from 3 to 2
+move 1 from 7 to 9
+move 1 from 5 to 9
+move 14 from 3 to 6
+move 15 from 2 to 4
+move 5 from 2 to 5
+move 1 from 2 to 5
+move 1 from 1 to 9
+move 8 from 4 to 1
+move 5 from 5 to 9
+move 9 from 4 to 9
+move 4 from 7 to 4
+move 5 from 4 to 8
+move 2 from 9 to 6
+move 8 from 1 to 8
+move 1 from 5 to 3
+move 1 from 3 to 4
+move 1 from 1 to 8
+move 13 from 6 to 3
+move 9 from 9 to 5
+move 1 from 2 to 8
+move 8 from 5 to 1
+move 1 from 2 to 7

+ 38 - 0
5.rb

@@ -0,0 +1,38 @@
+@input = File.read("5.input").split("\n")
+
+def stacks()
+  return @input.filter {|line| line.include?("[")}.map{|line| line.chars.each_slice(4).to_a.map{|block| block[1]}}.transpose.map{|stack| stack.filter{|box| box != " "}.reverse}
+end
+
+@instrs = @input.filter{|line| line.include?("move")}.map{|line| line.split(/[a-z ]+/)}
+
+def part1()
+  stacks = stacks()
+
+  @instrs.each do |inst|
+    (_, cnt, from, to) = inst.map{|i| i.to_i}
+
+    (1..cnt).each do |_|
+      box = stacks[from - 1].pop()
+      stacks[to - 1].append(box)
+    end
+  end
+
+  puts stacks.map{|s| s[-1]}.join()
+end
+
+def part2()
+  stacks = stacks()
+
+  @instrs.each do |inst|
+    (_, cnt, from, to) = inst.map{|i| i.to_i}
+
+    boxes = stacks[from - 1].pop(cnt)
+    stacks[to - 1] = stacks[to - 1].concat(boxes)
+  end
+
+  puts stacks.map{|s| s[-1]}.join()
+end
+
+part1()
+part2()