def uniform (char, height, width)
  [char * width] * height
end

def empty (height, width)
  uniform ' ', height, width
end

def glue_vertical(upper, lower)
  upper + lower
end

def glue_horizontal(left, right)
  left.zip(right).collect do |left_line, right_line|
    left_line + right_line
  end
end

def double_vertical (pattern)
  glue_vertical pattern, pattern
end

def double_horizontal (pattern)
  glue_horizontal pattern, pattern
end

width = 8
height = 5

black = uniform '#', height, width
white = empty height, width

two_by_two = glue_vertical(glue_horizontal(white, black),
                           glue_horizontal(black, white))
four_by_four = double_horizontal(double_vertical(two_by_two))
chess_board = double_horizontal(double_vertical(four_by_four))

puts chess_board
