Anticlockwise spiral view of diamond matrix elements in kotlin

Kotlin program for Anticlockwise spiral view of diamond matrix elements. Here more solutions.
/*
Kotlin 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
fun spiralView(matrix: Array < Array < Int >> ,
x: Int, y: Int, p: Int, q: Int, size: Int): Unit
{
var k: Int = size;
// Find the middle column
val midCol: Int = y + ((q - y) / 2);
// Get middle row (valid for odd square matrix)
val midRow: Int = midCol;
// Matrix are divided into 4 section
// Starting of middle row and column in form of top
// Case A
// Top to Left-bottom
var i: Int = midCol;
var j: Int = 0;
while (i > y && k > 0)
{
print(" " + matrix[x + j][i]);
i -= 1;
k -= 1;
j += 1;
}
// 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;
}
// 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;
}
// 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;
}
if (x + 1 <= p - 1 && k > 0)
{
// Recursive call
this.spiralView(matrix, x + 1,
y + 1, p - 1, q - 1, k);
}
}
fun diamondAnticlockwise(matrix: Array < Array < Int >> ): Unit
{
val row: Int = matrix.count();
val col: Int = matrix[0].count();
// Check whether the given matrix is a valid odd shape or not
if (row != col || col % 2 == 0)
{
// When Yes not a valid size
println("\nNot a valid perfect Odd square matrix");
return;
}
// (row*col)-((col+1)/2)*4 are provide the value of number of
// Diamond element
this.spiralView(matrix, 0, 0, row - 1,
col - 1, (row * col) - ((col + 1) / 2) * 4);
}
}
fun main(args: Array < String > ): Unit
{
val task: SpiralTraversal = SpiralTraversal();
// Define matrix
val matrix: Array < Array < Int >> = arrayOf(
arrayOf(1, 2, 3, 4, 5),
arrayOf(6, 7, 8, 9, 10),
arrayOf(11, 12, -1, 15, 16),
arrayOf(17, 18, 19, 20, 21),
arrayOf(22, 23, 24, 25, 26)
);
task.diamondAnticlockwise(matrix);
}
Output
3 7 11 18 24 20 16 9 8 12 19 15 -1
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