#!/usr/bin/env ruby # frozen_string_literal: true require_relative "grid" class Main def run data = [] $stdin.each_line do |line| data << line.chomp end @sum = 0 removed_sum = 1 grid = Grid.new(data) until removed_sum == 0 removed_sum = 0 (0...grid.rows.size).each do |row_index| (0...grid.columns.size).each do |column_index| next unless grid.cell_at(row_index, column_index).value == "@" memo = grid.cell_at(row_index, column_index).neighbours.reject do |cell| grid.cell_at(cell.row, cell.column).value != "@" end if memo.size < 4 data[row_index][column_index] = "x" removed_sum += 1 end end end @sum += removed_sum grid = Grid.new(data) end puts @sum end end Main.new.run