diff --git a/02/input b/02/input new file mode 100644 index 0000000..ba22f2f --- /dev/null +++ b/02/input @@ -0,0 +1,1000 @@ +forward 9 +forward 7 +down 7 +down 3 +forward 2 +forward 3 +forward 7 +down 6 +forward 7 +down 7 +forward 9 +down 9 +up 2 +down 5 +up 1 +forward 5 +forward 6 +up 4 +down 3 +down 4 +down 5 +up 6 +down 3 +forward 6 +forward 4 +down 4 +forward 5 +down 2 +up 1 +up 8 +down 1 +down 6 +forward 8 +down 4 +forward 8 +forward 6 +forward 2 +forward 2 +forward 3 +forward 8 +up 9 +up 2 +down 3 +up 3 +forward 5 +forward 2 +up 5 +forward 9 +down 7 +down 2 +up 7 +down 4 +down 6 +up 2 +down 9 +forward 7 +down 8 +forward 6 +up 1 +forward 6 +forward 4 +down 5 +forward 6 +down 8 +down 3 +forward 7 +down 8 +up 7 +down 1 +up 1 +forward 9 +down 7 +up 3 +down 6 +down 6 +down 6 +down 7 +down 9 +down 6 +down 9 +down 8 +down 3 +down 7 +down 3 +up 8 +down 5 +down 9 +up 4 +forward 5 +forward 5 +forward 2 +up 1 +forward 6 +down 6 +down 2 +forward 1 +forward 8 +down 4 +down 1 +down 8 +down 7 +forward 6 +forward 8 +down 8 +up 1 +up 1 +forward 1 +forward 3 +up 8 +down 1 +forward 4 +down 3 +forward 3 +forward 4 +forward 3 +down 3 +down 9 +down 3 +up 6 +forward 6 +forward 8 +forward 2 +up 1 +up 4 +up 4 +down 2 +down 2 +down 2 +forward 7 +up 9 +down 9 +up 1 +down 5 +forward 4 +down 2 +down 4 +forward 3 +down 7 +down 9 +forward 1 +up 5 +down 5 +down 5 +forward 2 +down 6 +forward 8 +up 4 +forward 6 +up 1 +down 4 +forward 2 +down 9 +forward 5 +down 7 +down 8 +down 9 +forward 6 +up 6 +forward 9 +forward 9 +down 7 +forward 7 +forward 5 +up 9 +forward 3 +down 9 +down 1 +down 8 +down 4 +forward 5 +forward 6 +forward 8 +forward 8 +down 4 +down 3 +down 8 +forward 3 +down 6 +down 8 +down 2 +up 8 +up 9 +down 6 +forward 3 +down 4 +down 6 +forward 9 +forward 6 +up 2 +down 8 +forward 2 +down 7 +forward 9 +up 9 +down 9 +down 2 +forward 9 +down 4 +down 9 +up 4 +forward 6 +down 2 +down 9 +forward 8 +forward 2 +up 8 +forward 9 +forward 2 +forward 3 +down 2 +up 3 +forward 9 +down 6 +down 3 +down 1 +forward 9 +forward 8 +down 9 +up 7 +down 8 +up 7 +forward 1 +forward 1 +forward 7 +down 2 +down 1 +up 1 +up 6 +down 5 +up 9 +up 7 +forward 1 +forward 6 +forward 1 +up 4 +down 6 +forward 2 +up 7 +down 2 +up 8 +forward 9 +forward 6 +forward 3 +forward 8 +down 1 +forward 8 +up 3 +forward 1 +forward 1 +up 9 +down 1 +down 8 +down 2 +forward 8 +down 8 +forward 7 +down 5 +forward 8 +forward 3 +forward 6 +forward 7 +up 5 +down 5 +forward 8 +down 2 +forward 3 +down 4 +down 9 +forward 6 +forward 5 +up 4 +forward 7 +down 3 +forward 9 +forward 5 +down 3 +up 5 +forward 4 +forward 8 +down 7 +up 2 +forward 7 +down 5 +up 2 +down 9 +forward 4 +down 3 +forward 5 +forward 4 +down 3 +forward 6 +up 1 +forward 8 +down 1 +up 7 +forward 8 +up 1 +up 1 +forward 2 +down 8 +forward 4 +forward 8 +up 6 +forward 5 +forward 7 +up 6 +up 4 +up 6 +down 1 +forward 3 +down 1 +down 1 +down 8 +forward 8 +down 5 +down 5 +forward 5 +forward 9 +down 9 +forward 7 +down 3 +down 5 +forward 6 +down 1 +down 5 +up 8 +down 9 +forward 3 +down 6 +up 2 +down 2 +forward 2 +up 2 +forward 8 +down 2 +forward 9 +forward 2 +down 7 +down 5 +forward 1 +forward 7 +up 6 +up 8 +forward 8 +forward 8 +up 3 +forward 8 +down 6 +down 6 +forward 4 +down 8 +down 5 +down 7 +forward 1 +forward 9 +forward 9 +up 5 +down 9 +down 1 +forward 4 +forward 1 +up 9 +forward 6 +down 6 +forward 2 +up 6 +forward 9 +up 1 +down 2 +up 3 +forward 2 +forward 1 +forward 6 +down 9 +up 1 +forward 7 +up 3 +forward 6 +forward 6 +up 2 +down 8 +forward 4 +down 4 +forward 2 +forward 2 +down 4 +down 7 +down 4 +down 5 +forward 3 +down 1 +forward 1 +forward 8 +down 7 +up 1 +forward 7 +forward 2 +down 9 +down 2 +up 2 +forward 3 +down 4 +down 7 +down 8 +forward 4 +forward 5 +forward 3 +up 3 +down 6 +forward 4 +forward 4 +forward 8 +forward 1 +up 2 +up 3 +down 4 +up 9 +forward 1 +forward 1 +forward 9 +down 2 +down 5 +up 9 +down 7 +down 9 +down 2 +down 4 +forward 1 +forward 1 +forward 8 +down 9 +down 6 +forward 2 +up 3 +down 8 +forward 1 +forward 8 +forward 4 +up 7 +forward 5 +forward 2 +forward 2 +up 8 +down 5 +forward 6 +down 3 +up 5 +forward 8 +forward 3 +forward 9 +down 1 +down 3 +forward 8 +down 2 +forward 6 +forward 2 +down 3 +down 3 +forward 6 +forward 4 +forward 7 +forward 2 +up 7 +up 4 +up 6 +forward 9 +down 3 +down 3 +up 7 +down 4 +up 3 +up 3 +down 5 +forward 1 +up 3 +down 1 +forward 2 +up 9 +forward 7 +down 6 +forward 4 +forward 8 +up 1 +forward 6 +down 7 +down 4 +up 9 +forward 4 +down 7 +up 1 +forward 9 +down 4 +down 7 +forward 1 +down 6 +down 6 +forward 3 +up 8 +forward 3 +down 1 +down 5 +down 8 +forward 2 +up 5 +forward 2 +up 7 +forward 5 +forward 1 +forward 3 +forward 4 +forward 5 +up 1 +forward 9 +down 5 +down 7 +up 9 +down 9 +forward 7 +up 6 +up 7 +forward 2 +forward 1 +up 4 +forward 6 +forward 9 +down 1 +forward 4 +down 5 +forward 4 +down 3 +down 5 +forward 6 +forward 3 +down 3 +down 8 +down 2 +down 4 +down 6 +down 4 +forward 2 +up 9 +down 3 +forward 1 +forward 9 +forward 5 +forward 5 +forward 9 +up 1 +down 4 +down 4 +up 7 +down 3 +up 3 +up 4 +forward 3 +forward 1 +forward 8 +up 6 +down 8 +down 4 +forward 7 +forward 9 +forward 2 +forward 8 +up 2 +down 4 +down 5 +forward 9 +down 6 +down 7 +down 8 +up 8 +forward 3 +forward 7 +forward 8 +up 2 +down 9 +down 6 +forward 3 +forward 4 +down 4 +forward 2 +up 6 +forward 1 +forward 7 +down 2 +down 1 +forward 2 +forward 2 +down 2 +forward 2 +forward 7 +up 4 +down 3 +forward 9 +down 7 +down 7 +down 6 +forward 3 +forward 9 +down 9 +forward 2 +down 5 +down 4 +down 9 +up 9 +down 6 +down 8 +down 1 +forward 8 +up 4 +up 4 +down 8 +forward 6 +down 2 +forward 4 +forward 3 +forward 2 +forward 4 +down 4 +forward 6 +down 9 +up 7 +up 5 +down 7 +down 4 +up 3 +forward 4 +down 9 +forward 6 +forward 4 +forward 4 +down 9 +forward 3 +forward 2 +up 7 +forward 3 +down 1 +down 3 +up 5 +down 8 +down 3 +down 4 +forward 7 +forward 9 +up 2 +forward 3 +up 4 +down 5 +up 3 +up 9 +down 6 +down 2 +down 5 +up 4 +up 6 +forward 4 +forward 6 +up 5 +up 5 +forward 8 +down 6 +forward 6 +down 7 +down 5 +down 3 +down 8 +forward 6 +forward 9 +forward 9 +up 9 +down 3 +up 5 +forward 4 +down 7 +forward 5 +down 7 +down 4 +forward 2 +forward 9 +down 8 +up 3 +up 7 +down 7 +up 7 +forward 3 +down 2 +forward 7 +down 4 +forward 1 +down 6 +forward 1 +up 4 +down 7 +up 3 +forward 7 +forward 5 +forward 7 +forward 6 +up 2 +down 4 +down 8 +down 4 +up 3 +forward 3 +up 3 +up 3 +down 7 +down 2 +down 3 +forward 7 +down 6 +down 9 +up 1 +down 8 +down 6 +down 3 +up 2 +up 6 +forward 9 +forward 5 +forward 4 +forward 9 +down 9 +forward 2 +up 7 +down 4 +down 8 +up 2 +forward 6 +up 6 +up 4 +down 2 +forward 6 +forward 4 +up 3 +down 6 +forward 5 +forward 3 +up 4 +down 7 +down 2 +down 6 +up 7 +forward 2 +forward 1 +forward 3 +down 2 +forward 1 +forward 2 +forward 4 +down 2 +down 5 +down 7 +down 8 +down 1 +up 1 +up 1 +forward 9 +down 3 +down 1 +forward 4 +up 6 +up 8 +forward 7 +forward 9 +down 3 +forward 9 +down 9 +forward 6 +down 1 +forward 7 +down 9 +forward 1 +down 8 +forward 8 +up 7 +forward 4 +up 5 +up 9 +forward 1 +forward 4 +forward 3 +down 3 +down 8 +up 3 +forward 1 +up 5 +forward 5 +up 6 +forward 8 +forward 1 +down 7 +forward 2 +down 9 +forward 3 +forward 7 +forward 2 +down 4 +forward 2 +up 6 +down 7 +up 3 +forward 7 +down 8 +down 3 +forward 2 +up 7 +down 2 +down 8 +up 6 +forward 7 +forward 1 +down 3 +forward 2 +forward 8 +down 8 +forward 1 +down 7 +down 1 +up 5 +up 3 +forward 5 +down 5 +up 9 +up 9 +down 3 +up 3 +down 4 +down 6 +up 7 +forward 3 +up 5 +down 3 +forward 4 +down 1 +up 1 +up 6 +down 8 +forward 5 +up 2 +down 5 +forward 6 +forward 4 +forward 9 +down 9 +down 5 +forward 5 +down 7 +down 7 +down 8 +forward 3 +down 6 +forward 5 +forward 5 +down 6 +forward 3 +down 7 +up 4 +up 3 +down 5 +forward 9 +forward 9 +up 9 +down 1 +up 2 +up 3 +down 7 +forward 3 +down 7 +down 4 +down 5 +down 1 +down 4 +up 9 +forward 1 +up 8 +forward 7 +up 6 +down 1 +up 2 +forward 2 +up 9 +down 6 +forward 4 +down 2 +up 5 +forward 1 +forward 4 +down 6 +down 2 +up 8 +forward 2 +forward 8 +forward 4 +down 9 +up 3 +forward 5 +forward 9 +forward 4 +down 2 +up 4 +up 9 +down 5 +up 2 +forward 6 +up 2 +down 6 +up 5 +up 3 +up 9 +forward 8 +down 2 +forward 7 +up 8 +down 9 +forward 2 +forward 2 +down 6 +forward 9 +forward 2 +forward 8 +up 3 +forward 5 +down 4 +forward 2 +down 7 +up 6 +forward 7 +down 6 +down 8 +down 3 +up 4 +up 5 +down 2 +down 9 +forward 2 +down 7 +forward 2 +forward 3 +forward 9 +down 6 +down 1 +forward 6 +down 5 +forward 2 +down 5 +down 1 +forward 5 +down 4 +down 6 +down 5 +forward 9 +up 6 +up 5 +up 2 +down 1 +down 8 +forward 4 +down 2 +forward 5 +down 1 +forward 7 +down 8 +down 9 +down 7 +up 1 +forward 2 +up 8 +down 9 +down 2 +down 1 +down 9 +down 2 +down 5 +forward 9 +forward 1 +down 1 +forward 9 +forward 7 +down 6 +down 1 +down 7 +forward 4 +forward 1 +forward 4 +forward 5 +forward 5 +down 2 +forward 7 +forward 6 +forward 3 +forward 9 +up 1 +down 5 +down 4 +down 2 +forward 1 +up 7 +forward 2 diff --git a/02/script.rb b/02/script.rb new file mode 100755 index 0000000..d20eab7 --- /dev/null +++ b/02/script.rb @@ -0,0 +1,57 @@ +#!/usr/bin/env ruby + +require_relative '../common' + +class Day02 < Day + def part1 + input.each_with_object(Position.new) { |cmd, position| position.process cmd }.result + end + + def part2 + input.each_with_object(Position.new(use_aim: true)) { |cmd, position| position.process cmd }.result + end + + class Position + def initialize(use_aim: false) + @use_aim = use_aim + + @horizontal_position = 0 + @depth = 0 + @aim = 0 + end + + def process command + direction, value = command.match(/\A(forward|down|up) ([0-9]+)\z/).captures + send direction, value.to_i + end + + def result + @horizontal_position * @depth + end + + private + + def forward value + @horizontal_position += value + @depth += @aim * value if @use_aim + end + + def down value + if @use_aim + @aim += value + else + @depth += value + end + end + + def up value + if @use_aim + @aim -= value + else + @depth -= value + end + end + end +end + +Day02.run