class Matrix

Attributes

columns_header[RW]
rows_header[RW]
table[RW]

Public Class Methods

new(args) click to toggle source
# File lib/primes_table/matrix.rb, line 6
def initialize(args)
  rows = header(args[:rows])
  columns = header(args[:columns])
  @table = load_table(rows, columns)
  @rows_header = rows
  @columns_header = columns
end

Public Instance Methods

print() click to toggle source

Private Instance Methods

cross_off(flags, prime) click to toggle source
# File lib/primes_table/matrix.rb, line 65
def cross_off(flags, prime)
  (prime * prime..flags.length).step(prime).each do |i|
    flags[i] = false
  end
end
format_collection(list, distance) click to toggle source
# File lib/primes_table/matrix.rb, line 50
def format_collection(list, distance)
  list.collect { |i| ' ' * (distance - i.to_s.size) + i.to_s }.join('  ').to_s
end
format_columns_header(distance) click to toggle source
# File lib/primes_table/matrix.rb, line 39
def format_columns_header(distance)
  "#{' ' * distance}   #{format_collection(columns_header, distance)}"
end
format_rows(row, index, distance) click to toggle source
# File lib/primes_table/matrix.rb, line 43
def format_rows(row, index, distance)
  len_index = rows_header[index].to_s.length
  format_prime = "#{rows_header[index]}#{' ' * (distance - len_index)}"
  collection = format_collection(row, distance)
  "#{format_prime} | #{collection}"
end
header(max) click to toggle source
# File lib/primes_table/matrix.rb, line 54
def header(max)
  flags = [true] * (max + 1)
  flags[0] = flags[1] = false
  prime = 2
  while prime <= Math.sqrt(max)
    cross_off(flags, prime)
    prime = next_prime(flags, prime)
  end
  process_flags(flags)
end
last_value() click to toggle source
# File lib/primes_table/matrix.rb, line 35
def last_value
  table[-1][-1]
end
load_table(rows, columns) click to toggle source
# File lib/primes_table/matrix.rb, line 24
def load_table(rows, columns)
  collection = []
  rows.each_with_index do |row_value, row_index|
    collection << []
    columns.each do |column|
      collection[row_index] << row_value * column
    end
  end
  collection
end
next_prime(flags, prime) click to toggle source
# File lib/primes_table/matrix.rb, line 71
def next_prime(flags, prime)
  following = prime + 1
  following += 1 while following < flags.length && !flags[following]
  following
end
process_flags(flags) click to toggle source
# File lib/primes_table/matrix.rb, line 77
def process_flags(flags)
  primes = []
  flags.each_with_index do |value, index|
    primes << index if value
  end
  primes
end