Resolve day 3
parent
a43593bbcd
commit
8021474688
|
@ -0,0 +1,98 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
require_relative '../common'
|
||||||
|
|
||||||
|
class Grid
|
||||||
|
def initialize(robosanta: false)
|
||||||
|
@robosanta = robosanta
|
||||||
|
|
||||||
|
@santa_position = Position.new
|
||||||
|
@robosanta_position = Position.new
|
||||||
|
|
||||||
|
@grid = Hash.new(0)
|
||||||
|
|
||||||
|
give_from_santa
|
||||||
|
give_from_robosanta
|
||||||
|
end
|
||||||
|
|
||||||
|
def houses_count
|
||||||
|
@grid.size
|
||||||
|
end
|
||||||
|
|
||||||
|
def move_santa(direction)
|
||||||
|
@santa_position.move direction
|
||||||
|
give_from_santa
|
||||||
|
end
|
||||||
|
|
||||||
|
def move_robosanta(direction)
|
||||||
|
@robosanta_position.move direction
|
||||||
|
give_from_robosanta
|
||||||
|
end
|
||||||
|
|
||||||
|
def give_from_santa
|
||||||
|
@grid[@santa_position.position] += 1
|
||||||
|
end
|
||||||
|
|
||||||
|
def give_from_robosanta
|
||||||
|
return unless @robosanta
|
||||||
|
@grid[@robosanta_position.position] += 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class Position
|
||||||
|
attr_accessor :position
|
||||||
|
|
||||||
|
def initialize
|
||||||
|
self.position = [0, 0]
|
||||||
|
end
|
||||||
|
|
||||||
|
def move(direction)
|
||||||
|
case direction
|
||||||
|
when '^'
|
||||||
|
up
|
||||||
|
when 'v'
|
||||||
|
down
|
||||||
|
when '<'
|
||||||
|
left
|
||||||
|
when '>'
|
||||||
|
right
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def up
|
||||||
|
self.position = [position[0] - 1, position[1]]
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
self.position = [position[0] + 1, position[1]]
|
||||||
|
end
|
||||||
|
|
||||||
|
def left
|
||||||
|
self.position = [position[0], position[1] - 1]
|
||||||
|
end
|
||||||
|
|
||||||
|
def right
|
||||||
|
self.position = [position[0], position[1] + 1]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def part1
|
||||||
|
Input.new(__dir__).readlines.join.chars.each_with_object(Grid.new) do |direction, grid|
|
||||||
|
grid.move_santa direction
|
||||||
|
end.houses_count
|
||||||
|
end
|
||||||
|
|
||||||
|
def part2(input)
|
||||||
|
input.chars.each_with_object(Grid.new(robosanta: true)).with_index do |(direction, grid), i|
|
||||||
|
if i.even?
|
||||||
|
grid.move_santa direction
|
||||||
|
else
|
||||||
|
grid.move_robosanta direction
|
||||||
|
end
|
||||||
|
end.houses_count
|
||||||
|
end
|
||||||
|
|
||||||
|
puts "=== Part 1 ==="
|
||||||
|
puts part1
|
||||||
|
puts "=== Part 2 ==="
|
||||||
|
puts part2(Input.new(__dir__).readlines.join)
|
Loading…
Reference in New Issue