Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.89 KB | None | 0 0
  1. using System;
  2. using System.Text;
  3. using System.Text.RegularExpressions;
  4.  
  5.    
  6. class Snake
  7. {
  8.     public struct PositionInCube
  9.     {  
  10.         public short currTable, currRow, currCol;
  11.        
  12.         public PositionInCube(short cT, short cR, short cC)
  13.         {
  14.             currTable = cT;
  15.             currRow = cR;
  16.             currCol = cC;
  17.         }
  18.     };
  19.    
  20.     public static string ExtractCubeLayers(ref string cubeField)
  21.     {
  22.         StringBuilder sb = new StringBuilder();
  23.        
  24.         foreach (char c in cubeField)
  25.             if (c == 'o' || c == 's' || c == 'a')
  26.                 sb.Append(c);  
  27.        
  28.         return sb.ToString();
  29.     }
  30.    
  31.     public static void ExtractCommand(ref string currCommand)
  32.     {
  33.         switch (currCommand[0])
  34.         {
  35.             case 'u': currCommand = "up"; break;
  36.             case 'd': currCommand = "down"; break;
  37.             case 'f': currCommand = "forward"; break;
  38.             case 'b': currCommand = "backward"; break;
  39.             case 'l': currCommand = "left"; break;
  40.             case 'r': currCommand = "right"; break;
  41.             default: currCommand = "end"; break;
  42.         }
  43.     }
  44.    
  45.     public static void HandleSnakeMovement(short cubeSize, ref PositionInCube snakePos, ref bool snakeStatus, string currCommand)
  46.     {
  47.         bool snakeIsDead = false;
  48.  
  49.         if (currCommand == "up")
  50.         {
  51.             if (snakePos.currTable == 0) snakeStatus = snakeIsDead;
  52.             else snakePos.currTable--;
  53.         }
  54.  
  55.         else if (currCommand == "down")
  56.         {
  57.             if (snakePos.currTable == cubeSize - 1) snakeStatus = snakeIsDead;
  58.             else snakePos.currTable++;
  59.         }
  60.  
  61.         else if (currCommand == "forward")
  62.         {
  63.             if (snakePos.currRow == 0) snakeStatus = snakeIsDead;
  64.             else snakePos.currRow--;
  65.         }
  66.  
  67.         else if (currCommand == "backward")
  68.         {
  69.             if (snakePos.currRow == cubeSize - 1) snakeStatus = snakeIsDead;
  70.             else snakePos.currRow++;
  71.         }
  72.  
  73.         else if (currCommand == "left")
  74.         {
  75.             if (snakePos.currCol == 0) snakeStatus = snakeIsDead;
  76.             else snakePos.currCol--;
  77.         }
  78.  
  79.         else
  80.         {
  81.             if (snakePos.currCol == cubeSize - 1) snakeStatus = snakeIsDead;
  82.             else snakePos.currCol++;
  83.         }
  84.     }
  85.    
  86.     static void Main()
  87.     {  
  88.         byte cubeSize = byte.Parse(Console.ReadLine());
  89.        
  90.         char[][,] cube = new char[cubeSize][,];
  91.        
  92.         for (short layer = 0; layer < cube.Length; ++layer)
  93.             cube[layer] = new char[cubeSize, cubeSize];
  94.          
  95.         PositionInCube snakePos = new PositionInCube(0, 0, 0);
  96.        
  97.         short c, row = -1;
  98.         bool snakeIsAlive = true;
  99.        
  100.         for (byte fields = 0; fields < cubeSize; ++fields)
  101.         {
  102.             string cubeField = Console.ReadLine();
  103.             cubeField = ExtractCubeLayers(ref cubeField);
  104.             c = 0;
  105.             row++;
  106.             for (byte table = 0; table < cubeSize; ++table)
  107.                 for (byte col = 0; col < cubeSize; ++col, ++c)
  108.                 {
  109.                     cube[row][table, col] = cubeField[c];
  110.  
  111.                     if (cubeField[c] == 's')
  112.                     {
  113.                         snakePos.currTable = table;
  114.                         snakePos.currRow = row;
  115.                         snakePos.currCol = col;
  116.                     }
  117.             }
  118.         }
  119.        
  120.         short applesEatenBySnake = 0;
  121.         string prevCommand, currCommand = "";
  122.         prevCommand = Console.ReadLine();
  123.        
  124.         while (snakeIsAlive)
  125.         {
  126.             currCommand = Console.ReadLine();
  127.             short steps = short.Parse(Regex.Match(currCommand, @"\d+").Value);
  128.             ExtractCommand(ref currCommand);
  129.            
  130.             for (short repeatCommand = 0; repeatCommand < steps; ++repeatCommand)
  131.             {
  132.                 HandleSnakeMovement(cubeSize, ref snakePos, ref snakeIsAlive, prevCommand);
  133.                
  134.                 if (cube[snakePos.currRow][snakePos.currTable, snakePos.currCol] == 'a')
  135.                 {
  136.                     cube[snakePos.currRow][snakePos.currTable, snakePos.currCol] = ' ';
  137.                     applesEatenBySnake++;
  138.                 }
  139.             }
  140.            
  141.             if (currCommand == "end") break;
  142.            
  143.             prevCommand = currCommand;         
  144.         }
  145.  
  146.         Console.WriteLine("Points collected: {0}", applesEatenBySnake);
  147.         if (!snakeIsAlive) Console.WriteLine("The snake dies.");       
  148.     }
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement