Sha256: 24d4491755ccfccca9cd51b73141de52488d77db9fa06883b77d5fd644e3581f

Contents?: true

Size: 983 Bytes

Versions: 1

Compression:

Stored size: 983 Bytes

Contents

module Calcexam
  class Matrix
    include Enumerable
    attr_reader :operation, :x, :y

    def initialize(operation=:*, x=[], y=[])
      @operation = operation
      @x, @y = parse_interval(x), parse_interval(y)
    end

    def each
      @x.each do |x|
        @y.each do |y|
          yield([x, y])
        end
      end
    end

    def shuffle!
      @x.shuffle!
      @y.shuffle!
      self
    end

    def size
      @x.size * @y.size
    end

    def [](i, j=nil)
      if j.nil?
        j = i / @x.size
        i = i % @x.size
      end
      [@x[i], @y[j]]
    end

    private
    def parse_interval(interval)
      case
      when interval.respond_to?(:to_a)
        interval.to_a
      when interval.is_a?(String) && m = /^(\d+)\.\.(\d+)$/.match(interval)
        (m[1].to_i..m[2].to_i).to_a
      when interval.is_a?(String) && interval =~ /^\d+\s*(,\s*\d+)+$/
        interval.split(',').map(&:to_i)
      else
        [interval.to_i]
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
calcexam-0.0.1 lib/calcexam/matrix.rb