DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Snippets has posted 5883 posts at DZone. View Full User Profile

Matrix Rotator

02.01.2007
| 4639 views |
  • submit to reddit
        This method rotates a matrix
Example output:
~/Desktop% ruby rotate.rb
normal
12345
00000
fooba
rotated left
50a
40b
30o
20o
10f
rotated right
f01
o02
o03
b04
a05

def rotateMatrix(matrix, direction)
  # - You must Rotate the matrix neo!
  oldMap = matrix

  # Get the number of lines in the old map (they're the new columns)
  lineCount = oldMap.size
  # Get the number of columns in the old map (We have that many rows now)
  columnCount = oldMap[0].size
  @map = []
  columnCount.times { @map.push [] }

  # Loop through every line in the old map, retrieve the appropriate column
  # and make a horizontal column with it's contents
  # we'll take one (old)line at a time and rotate it.
  onLine = 0
  oldMap.each do |oldLine|
    onColumn = 0
    oldLine.each do
      case direction
      when :right
        @map[(columnCount - 1) - onColumn][(lineCount - 1) - onLine] = oldLine[(columnCount - 1) - onColumn]
      when :left
        @map[onColumn][onLine] = oldLine[(columnCount - 1) - onColumn]
      end
      onColumn += 1
    end
    onLine += 1
  end
  @map
end

def rotateRight(matrix)
  rotateMatrix(matrix, :right)
end

def rotateLeft(matrix)
  rotateMatrix(matrix, :left)
end