From 69a8c7bb9862966b2f21dbb61e86f652f9b238f9 Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Fri, 25 Dec 2020 15:27:26 +0100 Subject: Add day 11 --- 11/b.rb | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 11/b.rb (limited to '11/b.rb') diff --git a/11/b.rb b/11/b.rb new file mode 100644 index 0000000..bc93bce --- /dev/null +++ b/11/b.rb @@ -0,0 +1,58 @@ +input = File.readlines('input.txt').map { |l| ".#{l.chomp}.".split '' } +input.unshift(['.'] * input[0].length) +input.push(['.'] * input[0].length) + +next_map = [] +input.size.times do + row = [] + input[0].size.times do + row.push '.' + end + next_map.push row +end + +changed = true +current_count = 0 +while changed + current_count = 0 + changed = false + (1...input.length-1).each do |i| + (1...input[0].length-1).each do |j| + if input[i][j] != '.' + count = 0 + (-1..1).each do |di| + (-1..1).each do |dj| + if !(di == 0 && dj == 0) + offset_i = i + di + offset_j = j + dj + while offset_i > 0 && offset_i < input.length - 1 && offset_j > 0 && offset_j < input[0].length - 1 && input[offset_i][offset_j] == '.' + offset_i += di + offset_j += dj + end + + count += input[offset_i][offset_j] == '#' ? 1 : 0 + end + end + end + + if count == 0 && input[i][j] == 'L' + next_map[i][j] = '#' + changed = true + elsif count >= 5 && input[i][j] == '#' + next_map[i][j] = 'L' + changed = true + else + next_map[i][j] = input[i][j] + end + + current_count += next_map[i][j] == '#' ? 1 : 0 + end + end + end + + tmp = input + input = next_map + next_map = tmp +end + +puts current_count -- cgit v1.2.3