Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace AscendingSpiral
- {
- public class Spiral
- {
- private enum Direction
- {
- Up,
- Down,
- Left,
- Right
- }
- public enum Rotation
- {
- Clockwise,
- Counterclockewise
- }
- private int spiralNum { get; set; }
- private Rotation rotation { get; set; }
- private int[,] spiralArray { get; set; }
- public Spiral(int numberToSpiral, Rotation rotation)
- {
- spiralNum = numberToSpiral;
- spiralArray = new int[spiralNum, spiralNum];
- this.rotation = rotation;
- CreateSpiral();
- }
- private void CreateSpiral()
- {
- Direction curDirection = rotation == Rotation.Clockwise ? Direction.Right : Direction.Down;
- switch(rotation){
- case Rotation.Clockwise:
- CreateSpiralClockwise();
- break;
- case Rotation.Counterclockewise:
- CreateSpiralCounterClockwise();
- break;
- }
- }
- private void CreateSpiralCounterClockwise(){
- var row = 0;
- var col = 0;
- var curNum = 1;
- var bottomBoundary = spiralNum - 1;
- var rightBoundary = spiralNum - 1;
- var leftBoundary = 0;
- var topBoundary = 0;
- var curDirection = Direction.Down;
- while(curNum <= spiralNum * spiralNum){
- spiralArray[X, Y] = curNum;
- if(curDirection == Direction.Down){
- if(row == bottomBoundary){
- col++;
- bottomBoundary--;
- curDirection = Direction.Right;
- }else{
- row++;
- }
- curNum++;
- continue;
- }
- if(curDirection == Direction.Right){
- if(col == rightBoundary){
- row--;
- rightBoundary--;
- curDirection = Direction.Up;
- }else{
- c++;
- }
- curNum++;
- continue;
- }
- if(curDirection == Direction.Up){
- if(row == topBoundary){
- col--;
- topBoundary++;
- curDirection = Direction.Left;
- }else{
- row--;
- }
- curNum++;
- continue;
- }
- if(curDirection == Direction.Left){
- if(col == leftBoundary){
- row++;
- leftBoundary++;
- curDirection = Direction.Down;
- }else{
- col--;
- }
- curNum++;
- continue;
- }
- }
- }
- private void CreateSpiralClockwise(){
- var X = 0;
- var Y = 0;
- var curNum = 1;
- var rightBound = spiralNum - 1;
- var downBound = spiralNum - 1;
- var leftBound = 0;
- var upBound = 0;
- var curDirection = Direction.Right;
- while (curNum <= spiralNum * spiralNum)
- {
- if (curDirection == Direction.Right)
- {
- spiralArray[X, Y] = curNum;
- if (Y == rightBound)
- {
- curDirection = Direction.Down;
- X++;
- rightBound--;
- }
- else
- {
- Y++;
- }
- curNum++;
- continue;
- }
- if (curDirection == Direction.Down)
- {
- spiralArray[X, Y] = curNum;
- if (X == downBound)
- {
- curDirection = Direction.Left;
- Y--;
- downBound--;
- }
- else
- {
- spiralArray[X, Y] = curNum;
- X++;
- }
- curNum++;
- continue;
- }
- if (curDirection == Direction.Left)
- {
- spiralArray[X, Y] = curNum;
- if (Y == leftBound)
- {
- curDirection = Direction.Up;
- X--;
- leftBound++;
- }
- else
- {
- Y--;
- }
- curNum++;
- continue;
- }
- if (curDirection == Direction.Up)
- {
- if (X == upBound)
- {
- curDirection = Direction.Right;
- X++;
- Y++;
- spiralArray[X, Y] = curNum;
- upBound++;
- Y++;
- }
- else
- {
- spiralArray[X, Y] = curNum;
- X--;
- }
- curNum++;
- continue;
- }
- }
- }
- public void PrintSpiral()
- {
- Console.WriteLine("--------------------------------------------------");
- for (int i = 0; i < spiralNum; i++)
- {
- for (int j = 0; j < spiralNum; j++)
- {
- if(spiralNum > 10)
- Console.Write(String.Format("{0,5}", spiralArray[i, j].ToString()));
- else
- Console.Write(String.Format("{0,3}", spiralArray[i, j].ToString()));
- }
- Console.WriteLine();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement