Resolve day 2
parent
c7fa7b0567
commit
b458fb9c99
|
@ -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
|
Loading…
Reference in New Issue