code: def process(operator, s)
          s = coerce(s) || s
          raise "operand needs to be a SpreadSheet, "+
                "Numeric or Array" unless s.is_a?(SpreadSheet)
          result = []
          rlabel = []
          clabel = []
          s1_row_count, s1_col_count = dim
          s2_row_count, s2_col_count = s.dim
          row_count = [s1_row_count, s2_row_count].max
          col_count = [s1_col_count, s2_col_count].max
          0.upto(row_count - 1) do |r|
            r1 = r % s1_row_count
            r2 = r % s2_row_count
            rlabel << "#{row_labels[r1]}#{operator}#{s.row_labels[r2]}"
            element = []
            0.upto(col_count - 1) do |c|
              c1 = c % s1_col_count
              c2 = c % s2_col_count
              clabel << "#{col_labels[c1]}#{operator}#{s.col_labels[c2]}"
              element << rows[r1][c1].send(operator, s.rows[r2][c2])
            end
            result << element
          end
          SpreadSheet.new(*result, row_labels: rlabel, col_labels: clabel)
        end
docs: Conducts the calculation of this spread sheet with the provided value
   based on the operator. It s is a number or an array it is coerced into
   a spread sheet