Skip to main content

Anticlockwise spiral view of diamond matrix elements in ruby

Anticlockwise spiral view of matrix

Ruby program for Anticlockwise spiral view of diamond matrix elements. Here mentioned other language solution.

#  Ruby program for
#  Anticlockwise spiral view of diamond element in matrix
class SpiralTraversal 
	#  Method which is displaying the Anticlockwise spiral 
	#  Of matrix in diamond(mid) element
	def spiralView(matrix, x, y, p, q, k) 
		#  Find the middle column
		midCol = y + ((q - y) / 2)
		#  Get middle row (valid for odd square matrix)
		midRow = midCol
		#  Matrix are divided into 4 section
		#  Starting of middle row and column in form of top
		#  Case A
		#  Top to Left-bottom
		i = midCol
		j = 0
		while (i > y && k > 0) 
			print("  ", matrix[x + j][i])
			i -= 1
			k -= 1
			j += 1
		end

		#  Case B
		#  Middle left to middle right bottom
		i = y
		j = 0
		while (i <= midCol && k > 0) 
			print("  ", matrix[(midRow) + j][i])
			i += 1
			k -= 1
			j += 1
		end

		#  Case C
		#  Middle bottom to middle right side 
		i = midCol + 1
		j = 1
		while (i <= q && k > 0) 
			print("  ", matrix[(p) - j][i])
			i += 1
			k -= 1
			j += 1
		end

		#  Case D
		#  Middle right side to  top middle 
		i = q - 1
		j = 1
		while (i > midCol && k > 0) 
			print("  ", matrix[(midRow) - j][i])
			i -= 1
			k -= 1
			j += 1
		end

		if (x + 1 <= p - 1 && k > 0) 
			#  Recursive call
			self.spiralView(matrix, x + 1, y + 1, p - 1, q - 1, k)
		end

	end

	def diamondAnticlockwise(matrix) 
		row = matrix.length
		col = matrix[0].length
		#  Check whether the given matrix is a valid odd shape or not
		if (row != col || col % 2 == 0) 
			#  When Yes not a valid size
			print("\nNot a valid perfect Odd square matrix\n")
			return
		end

		#  (row*col)-((col+1)/2)*4 are provide the value of number of 
		#  Diamond element
		self.spiralView(matrix, 0, 0, row - 1, 
                        col - 1, (row * col) - ((col + 1) / 2) * 4)
	end

end

def main() 
	task = SpiralTraversal.new()
	#  Define matrix 
	matrix = [
		[1, 2, 3, 4, 5],
		[6, 7, 8, 9, 10],
		[11, 12, -1, 15, 16],
		[17, 18, 19, 20, 21],
		[22, 23, 24, 25, 26]
	]
	task.diamondAnticlockwise(matrix)
end

main()

Output

  3  7  11  18  24  20  16  9  8  12  19  15  -1




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment