2015 day 3 ruby

This commit is contained in:
Bill Rossi 2025-12-01 04:21:11 -05:00
parent 7c063782df
commit a102279609
2 changed files with 69 additions and 0 deletions

12
ruby/2015/3/bin/problem Normal file
View File

@ -0,0 +1,12 @@
#/usr/bin/env ruby
require "santa"
directions = STDIN.read.chomp
santa = Santa.for(directions)
santa.run!
puts "Part 1: #{santa.visited_houses.length}"
squad = Santa::Squad.for(directions, 2)
squad.run!
puts "Part 2: #{squad.visited_houses.length}"

57
ruby/2015/3/lib/santa.rb Normal file
View File

@ -0,0 +1,57 @@
require "set"
class Santa
attr_reader :visited_houses, :directions, :x, :y
def initialize(directions, vh=Set.new)
@directions = directions
@visited_houses = vh
@x = 0
@y = 0
end
def self.for(string)
new string.split("")
end
def handle_direction!(direction)
case direction
when "^"
@y -= 1
when "v"
@y += 1
when "<"
@x -= 1
when ">"
@x += 1
end
@visited_houses.add [x, y]
end
def run!
@visited_houses.add [x, y]
directions.each do |direction|
handle_direction! direction
end
end
class Squad
attr_reader :directions, :santas, :visited_houses
def initialize(directions, count)
@directions = directions
@visited_houses = Set.new
@santas = 1.upto(count).map { Santa.new nil, @visited_houses }
end
def self.for(string, count)
new string.split(""), count
end
def run!
directions.each_with_index do |direction, index|
santas[index % 2].handle_direction! direction
end
end
end
end