Skip to content

Commit 52ed090

Browse files
committed
Day 15 - Puzzle 2
1 parent 2523ba1 commit 52ed090

File tree

1 file changed

+11
-20
lines changed

1 file changed

+11
-20
lines changed

lib/solutions/day_15.rb

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -110,36 +110,27 @@ def score
110110
def step!(direction)
111111
dir = map_direction(direction)
112112
player = @entities.find { |e| e.type == :player }
113-
move!(player, dir)
113+
move!(player, dir) if can_move?(player, dir)
114114
end
115115

116-
# Move,
117-
def move!(entity, dir)
118-
# puts "Moving #{entity.type} #{entity.x},#{entity.y} #{dir.inspect}"
116+
def can_move?(entity, dir)
117+
move!(entity, dir, true)
118+
end
119119

120+
def move!(entity, dir, test = false)
120121
# Get list of target coords to check
121122
targets = entity.targets(dir)
122-
123-
# puts targets.inspect
124-
125123
entities = find_entities_at(targets)
126124

127-
# puts entities.inspect
128-
129125
# Can't move if we're hitting a wall
130-
return false if entities.any? { |e| e.type == :wall }
131-
132-
# Free space
133-
# REMOVE: entities.all? { |e| e.move!(dir)} will return true for an
134-
# empty array as well.
135-
# if entities.none?
136-
# entity.move!(dir)
137-
# return true
138-
# end
126+
return false if entities.any? { |e| e.type == :wall }
139127

140128
# Now free space, not a wall, so it must be one or two crates
141-
if entities.all? { |e| move!(e, dir)}
142-
entity.move!(dir)
129+
if entities.all? { |e| can_move?(e, dir)}
130+
if !test
131+
entities.each { |e| move!(e, dir) }
132+
entity.move!(dir)
133+
end
143134
return true
144135
end
145136

0 commit comments

Comments
 (0)