1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Location = Struct.new(*%i[x y]) do
def +(a_location)
Location.new(self.x + a_location.x,
self.y + a_location.y)
end
end
direction = Hash[{ ?^ => [0, 1],
?v => [0, -1],
?> => [1, 0],
?< => [-1, 0] }.map {|k,v| [k, Location.new(*v)] }]
# location = Location.new(0,0)
# houses = DATA.read.strip.each_char.with_object(Hash.new {|h,k| h[k] = 0 }) do |char, houses|
# houses[location] += 1
# location += direction[char]
# end
# houses[location] += 1
santa = Location.new(0,0)
robo_santa = Location.new(0,0)
houses = DATA.read.strip.each_char.each_slice(2).with_object(Hash.new {|h,k| h[k] = 0 }) do |(s, rs), houses|
houses[santa] += 1
houses[robo_santa] += 1
santa += direction[s]
robo_santa += direction[rs]
end
houses[santa] += 1
houses[robo_santa] += 1
puts houses.select {|_,v| v.size > 1 }.size
__END__