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
# File lib/primes_table/matrix.rb, line 14 def print distance = last_value.to_s.length puts format_columns_header(distance) table.each_with_index do |row, index| puts format_rows(row, index, distance) end end
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