Advertisement
Guest User

C# with Bonus

a guest
Jun 21st, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.62 KB | None | 0 0
  1. using System;
  2.  
  3. namespace AscendingSpiral
  4. {
  5.     public class Spiral
  6.     {
  7.         private enum Direction
  8.         {
  9.             Up,
  10.             Down,
  11.             Left,
  12.             Right
  13.         }
  14.  
  15.         public enum Rotation
  16.         {
  17.             Clockwise,
  18.             Counterclockewise
  19.         }
  20.  
  21.         private int spiralNum { get; set; }
  22.         private Rotation rotation { get; set; }
  23.         private int[,] spiralArray { get; set; }
  24.  
  25.         public Spiral(int numberToSpiral, Rotation rotation)
  26.         {
  27.             spiralNum = numberToSpiral;
  28.             spiralArray = new int[spiralNum, spiralNum];
  29.             this.rotation = rotation;
  30.             CreateSpiral();
  31.         }
  32.  
  33.         private void CreateSpiral()
  34.         {
  35.             Direction curDirection = rotation == Rotation.Clockwise ? Direction.Right : Direction.Down;
  36.            
  37.             switch(rotation){
  38.                 case Rotation.Clockwise:
  39.                     CreateSpiralClockwise();
  40.                     break;
  41.                 case Rotation.Counterclockewise:
  42.                     CreateSpiralCounterClockwise();
  43.                     break;
  44.             }
  45.         }
  46.        
  47.         private void CreateSpiralCounterClockwise(){
  48.             var row = 0;
  49.             var col = 0;
  50.             var curNum = 1;
  51.             var bottomBoundary = spiralNum - 1;
  52.             var rightBoundary = spiralNum - 1;
  53.             var leftBoundary = 0;
  54.             var topBoundary = 0;
  55.             var curDirection = Direction.Down;
  56.            
  57.            
  58.             while(curNum <= spiralNum * spiralNum){
  59.                
  60.                 spiralArray[X, Y] = curNum;
  61.                
  62.                 if(curDirection == Direction.Down){
  63.                     if(row == bottomBoundary){
  64.                         col++;
  65.                         bottomBoundary--;
  66.                         curDirection = Direction.Right;
  67.                     }else{
  68.                         row++;
  69.                     }
  70.                    
  71.                     curNum++;
  72.                     continue;
  73.                 }
  74.                
  75.                 if(curDirection == Direction.Right){
  76.                     if(col == rightBoundary){
  77.                         row--;
  78.                         rightBoundary--;
  79.                         curDirection = Direction.Up;
  80.                     }else{
  81.                         c++;
  82.                     }
  83.                    
  84.                     curNum++;
  85.                     continue;
  86.                 }
  87.                
  88.                 if(curDirection == Direction.Up){
  89.                     if(row == topBoundary){
  90.                         col--;
  91.                         topBoundary++;
  92.                         curDirection = Direction.Left;
  93.                     }else{
  94.                         row--;
  95.                     }
  96.                    
  97.                     curNum++;
  98.                     continue;
  99.                 }
  100.                
  101.                 if(curDirection == Direction.Left){
  102.                     if(col == leftBoundary){
  103.                         row++;
  104.                         leftBoundary++;
  105.                         curDirection = Direction.Down;
  106.                     }else{
  107.                         col--;
  108.                     }
  109.                    
  110.                     curNum++;
  111.                     continue;
  112.                 }
  113.             }
  114.         }
  115.        
  116.         private void CreateSpiralClockwise(){
  117.             var X = 0;
  118.             var Y = 0;
  119.             var curNum = 1;
  120.             var rightBound = spiralNum - 1;
  121.             var downBound = spiralNum - 1;
  122.             var leftBound = 0;
  123.             var upBound = 0;
  124.             var curDirection = Direction.Right;
  125.            
  126.             while (curNum <= spiralNum * spiralNum)
  127.             {
  128.                 if (curDirection == Direction.Right)
  129.                 {
  130.                     spiralArray[X, Y] = curNum;
  131.  
  132.                     if (Y == rightBound)
  133.                     {
  134.                         curDirection = Direction.Down;
  135.                         X++;
  136.                         rightBound--;
  137.                     }
  138.                     else
  139.                     {
  140.                         Y++;
  141.                     }
  142.  
  143.                     curNum++;
  144.                     continue;
  145.                 }
  146.                
  147.                 if (curDirection == Direction.Down)
  148.                 {
  149.                     spiralArray[X, Y] = curNum;
  150.  
  151.                     if (X == downBound)
  152.                     {
  153.                         curDirection = Direction.Left;
  154.                         Y--;
  155.                         downBound--;
  156.                     }
  157.                     else
  158.                     {
  159.                         spiralArray[X, Y] = curNum;
  160.                         X++;
  161.                     }
  162.  
  163.                     curNum++;
  164.                     continue;
  165.                 }
  166.  
  167.                 if (curDirection == Direction.Left)
  168.                 {
  169.                     spiralArray[X, Y] = curNum;
  170.  
  171.                     if (Y == leftBound)
  172.                     {
  173.                         curDirection = Direction.Up;
  174.                         X--;
  175.                         leftBound++;
  176.                     }
  177.                     else
  178.                     {
  179.                         Y--;
  180.                     }
  181.  
  182.                     curNum++;
  183.                     continue;
  184.                 }
  185.  
  186.                 if (curDirection == Direction.Up)
  187.                 {
  188.                     if (X == upBound)
  189.                     {
  190.                         curDirection = Direction.Right;
  191.                         X++;
  192.                         Y++;
  193.                         spiralArray[X, Y] = curNum;
  194.                         upBound++;
  195.                         Y++;
  196.                     }
  197.                     else
  198.                     {
  199.                         spiralArray[X, Y] = curNum;
  200.                         X--;
  201.                     }
  202.  
  203.                     curNum++;
  204.                     continue;
  205.                 }
  206.             }
  207.         }
  208.        
  209.         public void PrintSpiral()
  210.         {
  211.             Console.WriteLine("--------------------------------------------------");
  212.             for (int i = 0; i < spiralNum; i++)
  213.             {
  214.                 for (int j = 0; j < spiralNum; j++)
  215.                 {
  216.                     if(spiralNum > 10)
  217.                         Console.Write(String.Format("{0,5}", spiralArray[i, j].ToString()));
  218.                     else
  219.                         Console.Write(String.Format("{0,3}", spiralArray[i, j].ToString()));
  220.                 }
  221.                 Console.WriteLine();
  222.             }
  223.         }
  224.     }
  225. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement