Search code examples
c#matrixspiral

Printing a matrix like a snake


I am to print a matrix in C# like a snake, something like this. Any advice on how to proceed?

1 2 3 4 5 6 
          6
1 2 3 4   6
1     4   6
1     4   6
1     4   6 
1   3 4   6
1         6
1 2 3 4 5 6

Here is the code I have so far. Basically i need to figure out how to skip rows and columns.

Console.WriteLine("Enter your number: ");
        int n = Convert.ToInt32(Console.ReadLine());
        int[,] a = new int[n, n];
        int printVal = 1;
        int c1 = 0, c2 = n - 1;
        while(printVal <= n * n)
        {
            //dvizenje na desno
            for (int i = c1; i <= c2; i++)
                a[c1, i] = printVal++;

            //dvizenje nadolu
            for (int j = c1 + 1; j <= c2; j++)
                a[j, c2] = printVal++;

            // dvizenje na levo
            for (int i = c2 - 1; i >= c1; i--)
                a[c2, i] = printVal++;

            //dvizenje nagore
            for (int j = c2 - 1; j >= c1 + 1; j--)
                a[j, c1] = printVal++;
            c1++;
            c2--;
        }
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                Console.Write(a[i, j] + "\t");
            }
            Console.WriteLine();
        }

Solution

  • Something like that, it's not finished and can be more effective but it's the idea (Builder Design Pattern)

    public class NumberElement
    {
        private StringBuilder sb;
    
        public NumberElement()
        {
            sb = new StringBuilder();
        }
    
        public void AddNumbers(int Numbers)
        {
            for(int i = 1; i < Numbers + 1; i++)
            {
                AddNumber(i);
            }
        }
    
        public void AddSpaces(int SpaceNumber)
        {
            for (int i = 1; i < SpaceNumber + 1; i++)
            {
                AddSpace();
            }
        }
        public void AddNumber(int number)
        {
                sb.Append(number + " ");
        }
        public void AddSpace()
        {
                sb.Append("  ");
        }
    
        public void AddNewLine()
        {
            sb.Append("\n");
        }
    
        public override string ToString()
        {
    
            return sb.ToString();
        }
    }
    
    class Program
    {
        static public void Example(NumberElement ne)
        {
            //Line 1
            ne.AddNumbers(6);
            ne.AddNewLine();
            //Line 2
            ne.AddSpaces(5);
            ne.AddNumber(6);
            ne.AddNewLine();
            //Line 3
            ne.AddNumbers(4);
            ne.AddSpace();
            ne.AddNumber(6);
            ne.AddNewLine();
            //Line 4
            ne.AddNumber(1);
            ne.AddSpaces(2);
            ne.AddNumber(4);
            ne.AddSpace();
            ne.AddNumber(6);
            ne.AddNewLine();
            //Line 5
            ne.AddNumber(1);
            ne.AddSpaces(2);
            ne.AddNumber(4);
            ne.AddSpace();
            ne.AddNumber(6);
            ne.AddNewLine();
            //Line 6
            ne.AddNumber(1);
            ne.AddSpaces(2);
            ne.AddNumber(4);
            ne.AddSpace();
            ne.AddNumber(6);
            ne.AddNewLine();
            //Line 6
            ne.AddNumber(1);
            ne.AddSpace();
            ne.AddNumber(3);
            ne.AddNumber(4);
            ne.AddSpace();
            ne.AddNumber(6);
            ne.AddNewLine();
            //Line 7
            ne.AddNumber(1);
            ne.AddSpaces(4);
            ne.AddNumber(6);
            ne.AddNewLine();
            //Line 8
            ne.AddNumbers(6);
        }
    
        static void Main(string[] args)
        {
            NumberElement ne = new NumberElement();
            Example(ne);
            Console.WriteLine(ne);
        }
    }