class C4::Model::Matrix
Attributes
columns[R]
matrix[R]
rows[R]
Public Class Methods
new(matrix, rows, columns)
click to toggle source
# File lib/c4/model/matrix.rb, line 12 def initialize(matrix, rows, columns) @matrix = matrix @rows = rows @columns = columns end
Public Instance Methods
diagonal()
click to toggle source
rubocop:enable Metrics/AbcSize
# File lib/c4/model/matrix.rb, line 48 def diagonal Array.new(size).each_with_index.map do |_, i| matrix[i][i] end end
diagonals()
click to toggle source
rubocop:enable Metrics/AbcSize, Performance/TimesMap
# File lib/c4/model/matrix.rb, line 69 def diagonals quadrants.flat_map(&:quadrant_diagonals).uniq end
partial_square(from, to)
click to toggle source
# File lib/c4/model/matrix.rb, line 34 def partial_square(from, to) self.class.new(matrix[from..to].map { |a| a[from..to] }, to - from + 1, to - from + 1) end
quadrant_diagonals()
click to toggle source
# File lib/c4/model/matrix.rb, line 82 def quadrant_diagonals (0...size).map do |i| partial_square(0, i).rotate.diagonal end end
quadrants()
click to toggle source
# File lib/c4/model/matrix.rb, line 73 def quadrants [ square, square.rotate, square.rotate.rotate, square.rotate.rotate.rotate ] end
reverse()
click to toggle source
# File lib/c4/model/matrix.rb, line 54 def reverse self.class.new(matrix.reverse, rows, columns) end
rotate()
click to toggle source
rubocop:disable Metrics/AbcSize, Performance/TimesMap
# File lib/c4/model/matrix.rb, line 59 def rotate result = rows.times.map do |r| columns.times.map do |c| matrix[columns - c - 1][r] end end self.class.new(result, columns, rows) end
size()
click to toggle source
# File lib/c4/model/matrix.rb, line 30 def size [rows, columns].max end
square()
click to toggle source
rubocop:disable Metrics/AbcSize
# File lib/c4/model/matrix.rb, line 39 def square sq = matrix.map do |col| col[0, size].fill_up_to(size, nil) end sq[0, size].fill_up_to(size, Array.new(size)) self.class.new(sq, size, size) end
transpose()
click to toggle source
# File lib/c4/model/matrix.rb, line 18 def transpose self.class.new( Array.new(rows).each_with_index.map do |_, row| Array.new(columns).each_with_index.map do |_, column| matrix[column][row] end end, columns, rows ) end