2021/02/script.rb

58 lines
1023 B
Ruby
Executable File

#!/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