Advertisement
Boris-Stavrev92

Untitled

Aug 20th, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.50 KB | None | 0 0
  1. using System;
  2.  
  3. class HorsePath
  4. {
  5. static void Main()
  6. {
  7. int[] board = new int[8];
  8. // 0 1 2 3 4 5 6 7 <----- позиции в board масива
  9.  
  10. board[0] = 1;
  11. //
  12.  
  13.  
  14. int rowPos = 0;
  15. int bitPos = 0;
  16.  
  17.  
  18.  
  19. string command = Console.ReadLine();
  20.  
  21.  
  22. while (command != "stop") // докато команда стринга е различен от стоп // нека се изпълнява
  23. {
  24.  
  25. // проверка //left down //8 // 0 // 0
  26. if (CheckValidPosition(command, board, rowPos, bitPos)) // метода проверява дали позицията е валидна
  27. {
  28.  
  29. //left down
  30. switch (command)
  31.  
  32. {
  33. case "left up":
  34. bitPos += 2; // bitPos = bitPos + 2
  35. rowPos -= 1; // rowPos = rowPos - 1
  36.  
  37. //
  38. board[rowPos] = board[rowPos] ^ (1 << bitPos);
  39.  
  40. //
  41.  
  42.  
  43.  
  44. break;
  45.  
  46.  
  47. case "left down":
  48. bitPos += 2; // bitPos = bitPos + 2
  49. rowPos += 1; // rowPos = rowPos + 1
  50.  
  51. // // 1 // 1 // 8 бит инт
  52. board[rowPos] = board[rowPos] ^ (1 << bitPos);
  53.  
  54. // ^ - оператор за изключващо ИЛИ
  55. // (1 << bitPos) - избутва бита на ляво 2 пъти
  56.  
  57. // 7 6 5 4 3 2 1 0
  58. // row // 0 // 0 0 0 0 0 0 0 1 // 0 0 0 0 0 0 0 1 = 1
  59. // row // 1 // 0 0 0 0 0 1 0 0 // 0 0 0 0 0 1 0 0 = 4 ^ 1 = >
  60. // row // 2 // 0 0 0 0 0 0 0 0
  61. // row // 3 // 0 0 0 0 0 0 0 0
  62. // row // 4 // 0 0 0 0 0 0 0 0
  63. // row // 5 // 0 0 0 0 0 0 0 0
  64. // row // 6 // 0 0 0 0 0 0 0 0
  65. // row // 7 // 0 0 0 0 0 0 0 0
  66.  
  67. break;
  68.  
  69.  
  70.  
  71.  
  72.  
  73. case "right up":
  74. bitPos -= 2; // bitPos = bitPos - 2
  75. rowPos -= 1; // rowPos = rowPos - 1
  76.  
  77. board[rowPos] = board[rowPos] ^ (1 << bitPos);
  78. break;
  79.  
  80. case "right down":
  81. bitPos -= 2; // bitPos = bitPos - 2
  82. rowPos += 1; // rowPos = rowPos + 1
  83.  
  84. board[rowPos] = board[rowPos] ^ (1 << bitPos);
  85. break;
  86.  
  87. case "up left":
  88. bitPos += 1; // bitPos = bitPos + 1
  89. rowPos -= 2; // rowPos = rowPos - 2
  90.  
  91. board[rowPos] = board[rowPos] ^ (1 << bitPos);
  92. break;
  93.  
  94. case "up right":
  95. bitPos -= 1; // bitPos = bitPos - 1
  96. rowPos -= 2; // rowPos = rowPos - 2
  97.  
  98. board[rowPos] = board[rowPos] ^ (1 << bitPos);
  99. break;
  100.  
  101. case "down left":
  102. bitPos += 1; // bitPos = bitPos + 1
  103. rowPos += 2; // rowPos = rowPos + 2
  104.  
  105. board[rowPos] = board[rowPos] ^ (1 << bitPos);
  106. break;
  107.  
  108. case "down right":
  109. bitPos -= 1; // bitPos = bitPos - 1
  110. rowPos += 2; // rowPos = rowPos + 2
  111.  
  112. board[rowPos] = board[rowPos] ^ (1 << bitPos);
  113. break;
  114.  
  115. // ^ - оператор за изключващо ИЛИ
  116. // (1 << bitPos) - избутва бита на ляво 2 пъти
  117.  
  118. // 7 6 5 4 3 2 1 0
  119. // row // 0 // 0 0 0 0 0 0 0 1 // 0 0 0 0 0 0 0 1 = 1
  120. // row // 1 // 0 0 0 0 0 1 0 0 // 0 0 0 0 0 1 0 0 = 4
  121. // row // 2 // 0 0 0 0 0 0 0 0 // 0 0 0 0 0 0 0 0 = 0
  122. // row // 3 // 0 0 0 0 0 0 1 0 // 0 0 0 0 0 0 1 0 = 2
  123. // row // 4 // 0 0 0 0 0 0 0 0
  124. // row // 5 // 0 0 0 0 0 0 0 0
  125. // row // 6 // 0 0 0 0 0 0 0 0
  126. // row // 7 // 0 0 0 0 0 0 0 0
  127. }
  128. }
  129. command = Console.ReadLine(); // за въвеждане на нова команда
  130. }
  131.  
  132.  
  133.  
  134. bool wholeZeroMap = true; //
  135.  
  136.  
  137.  
  138. foreach (var i in board)
  139. {
  140. if (i != 0)
  141. {
  142. wholeZeroMap = false;
  143. Console.WriteLine(i);
  144. }
  145. }
  146.  
  147.  
  148.  
  149.  
  150. if (wholeZeroMap)
  151. {
  152. Console.WriteLine("[Board is empty]");
  153. }
  154.  
  155.  
  156. }
  157.  
  158.  
  159.  
  160.  
  161. private static bool CheckValidPosition(string directions, int[] board, int rowPos, int bitIndex)
  162. {
  163.  
  164.  
  165.  
  166. switch (directions)
  167. {
  168.  
  169.  
  170. case "left up":
  171. if (rowPos - 1 < 0 || bitIndex + 2 >= 8) return false;
  172. break;
  173.  
  174. case "left down":
  175. if (rowPos + 1 >= board.Length || bitIndex + 2 >= 8) return false;
  176. break;
  177.  
  178. case "right up":
  179. if (rowPos - 1 < 0 || bitIndex - 2 < 0) return false;
  180. break;
  181.  
  182. case "right down":
  183. if (rowPos + 1 >= board.Length || bitIndex - 2 < 0) return false;
  184. break;
  185.  
  186. case "up left":
  187. if (rowPos - 2 < 0 || bitIndex + 1 >= 8) return false;
  188. break;
  189.  
  190. case "up right":
  191. if (rowPos - 2 < 0 || bitIndex - 1 < 0) return false;
  192. break;
  193.  
  194. case "down left":
  195. if (rowPos + 2 >= board.Length || bitIndex + 1 >= 8) return false;
  196. break;
  197.  
  198. case "down right":
  199. if (rowPos + 2 >= board.Length || bitIndex - 1 < 0) return false;
  200. break;
  201.  
  202.  
  203. }
  204.  
  205.  
  206. return true;
  207.  
  208.  
  209.  
  210.  
  211. }
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement