aoc2020/day_11/first.rb
2020-12-11 15:15:17 +01:00

53 lines
854 B
Ruby

# frozen_string_literal: true
input = File.readlines('./input').map(&:strip).map(&:chars)
$dirs = [
[-1, -1],
[-1, 0],
[-1, 1],
[0, -1],
[0, 1],
[1, -1],
[1, 0],
[1, 1]
]
def round(map)
output = []
map.each_index do |row|
output << []
map[row].each_index do |col|
tmp = $dirs.map do |x, y|
x_index = row + x
y_index = col + y
next nil if x_index.negative? || y_index.negative?
map[row + x]&.[](col + y)
end
occupied = tmp.compact.count('#')
output[row][col] = case [map[row][col], occupied]
in ['L', 0]
'#'
in ['#', 4..]
'L'
else
map[row][col]
end
end
end
output
end
last_hash = 0
out = input
until out.hash == last_hash
last_hash = out.hash
out = round out
end
puts out.map{_1.count('#')}.inject(:+)