Compare commits

..

No commits in common. "432d14e248016fdc23f337e419b393fd064aa705" and "2add30a6c1ee43e4485b8cacdd3e9b89c29789e7" have entirely different histories.

3 changed files with 22 additions and 24 deletions

View File

@ -13,8 +13,8 @@ class Main
@sum = 0 @sum = 0
grid = Grid.new(data) grid = Grid.new(data)
(0...grid.size).each do |row_index| (0...grid.rows.size).each do |row_index|
(0...grid[row_index].size).each do |column_index| (0...grid.columns.size).each do |column_index|
cell = grid.cell_at(row_index, column_index) cell = grid.cell_at(row_index, column_index)
next unless cell.value == "@" next unless cell.value == "@"

View File

@ -15,15 +15,15 @@ class Main
grid = Grid.new(data) grid = Grid.new(data)
loop do loop do
grid_updated = false grid_updated = false
(0...grid.size).each do |row_index| (0...grid.rows.size).each do |row_index|
(0...grid[row_index].size).each do |column_index| (0...grid.columns.size).each do |column_index|
cell = grid.cell_at(row_index, column_index) cell = grid.cell_at(row_index, column_index)
next unless cell.value == "@" next unless cell.value == "@"
if cell.neighbours.count do |neighbour| if cell.neighbours.count do |neighbour|
neighbour.value == "@" neighbour.value == "@"
end < 4 end < 4
grid[row_index][column_index].value = "x" data[row_index][column_index] = "x"
@sum += 1 @sum += 1
grid_updated = true grid_updated = true
end end
@ -31,6 +31,7 @@ class Main
end end
break unless grid_updated break unless grid_updated
grid = Grid.new(data)
end end
puts @sum puts @sum

View File

@ -1,14 +1,10 @@
require "forwardable"
require_relative "cell" require_relative "cell"
class Grid class Grid
attr_reader :columns attr_reader :rows, :columns
extend Forwardable
def_delegators :@data, :size, :[]
def initialize(input) def initialize(input)
@data = [] @rows = []
(0...input.size).each do |row_index| (0...input.size).each do |row_index|
row = [] row = []
(0...input[row_index].size).each do |column_index| (0...input[row_index].size).each do |column_index|
@ -16,26 +12,27 @@ class Grid
cell.value = input[row_index][column_index] cell.value = input[row_index][column_index]
row << cell row << cell
end end
@data << row @rows << row
end end
@columns = @rows.transpose
# Link neighbours # Link neighbours
(0...@data.size).each do |row_index| (0...@rows.size).each do |row_index|
(0...@data[row_index].size).each do |column_index| (0...@columns.size).each do |column_index|
cell = @data[row_index][column_index] cell = @rows[row_index][column_index]
cell.n = @data[row_index - 1][column_index] if row_index - 1 >= 0 cell.n = @rows[row_index - 1][column_index] if row_index - 1 >= 0
cell.ne = @data[row_index - 1][column_index + 1] if row_index - 1 >= 0 && column_index + 1 < @data[row_index - 1].size cell.ne = @rows[row_index - 1][column_index + 1] if row_index - 1 >= 0 && column_index + 1 < @columns.size
cell.e = @data[row_index][column_index + 1] if column_index + 1 < @data[row_index].size cell.e = @rows[row_index][column_index + 1] if column_index + 1 < @columns.size
cell.se = @data[row_index + 1][column_index + 1] if row_index + 1 < @data.size && column_index + 1 < @data[row_index + 1].size cell.se = @rows[row_index + 1][column_index + 1] if row_index + 1 < @rows.size && column_index + 1 < @columns.size
cell.s = @data[row_index + 1][column_index] if row_index + 1 < @data.size cell.s = @rows[row_index + 1][column_index] if row_index + 1 < @rows.size
cell.sw = @data[row_index + 1][column_index - 1] if row_index + 1 < @data.size && column_index - 1 >= 0 cell.sw = @rows[row_index + 1][column_index - 1] if row_index + 1 < @rows.size && column_index - 1 >= 0
cell.w = @data[row_index][column_index - 1] if column_index - 1 >= 0 cell.w = @rows[row_index][column_index - 1] if column_index - 1 >= 0
cell.nw = @data[row_index - 1][column_index - 1] if row_index - 1 >= 0 && column_index - 1 >= 0 cell.nw = @rows[row_index - 1][column_index - 1] if row_index - 1 >= 0 && column_index - 1 >= 0
end end
end end
end end
def cell_at(row, column) def cell_at(row, column)
@data[row][column] @rows[row][column]
end end
end end