Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- class HorsePath
- {
- static void Main()
- {
- int[] board = new int[8];
- // 0 1 2 3 4 5 6 7 <----- позиции в board масива
- board[0] = 1;
- //
- int rowPos = 0;
- int bitPos = 0;
- string command = Console.ReadLine();
- while (command != "stop") // докато команда стринга е различен от стоп // нека се изпълнява
- {
- // проверка //left down //8 // 0 // 0
- if (CheckValidPosition(command, board, rowPos, bitPos)) // метода проверява дали позицията е валидна
- {
- //left down
- switch (command)
- {
- case "left up":
- bitPos += 2; // bitPos = bitPos + 2
- rowPos -= 1; // rowPos = rowPos - 1
- //
- board[rowPos] = board[rowPos] ^ (1 << bitPos);
- //
- break;
- case "left down":
- bitPos += 2; // bitPos = bitPos + 2
- rowPos += 1; // rowPos = rowPos + 1
- // // 1 // 1 // 8 бит инт
- board[rowPos] = board[rowPos] ^ (1 << bitPos);
- // ^ - оператор за изключващо ИЛИ
- // (1 << bitPos) - избутва бита на ляво 2 пъти
- // 7 6 5 4 3 2 1 0
- // row // 0 // 0 0 0 0 0 0 0 1 // 0 0 0 0 0 0 0 1 = 1
- // row // 1 // 0 0 0 0 0 1 0 0 // 0 0 0 0 0 1 0 0 = 4 ^ 1 = >
- // row // 2 // 0 0 0 0 0 0 0 0
- // row // 3 // 0 0 0 0 0 0 0 0
- // row // 4 // 0 0 0 0 0 0 0 0
- // row // 5 // 0 0 0 0 0 0 0 0
- // row // 6 // 0 0 0 0 0 0 0 0
- // row // 7 // 0 0 0 0 0 0 0 0
- break;
- case "right up":
- bitPos -= 2; // bitPos = bitPos - 2
- rowPos -= 1; // rowPos = rowPos - 1
- board[rowPos] = board[rowPos] ^ (1 << bitPos);
- break;
- case "right down":
- bitPos -= 2; // bitPos = bitPos - 2
- rowPos += 1; // rowPos = rowPos + 1
- board[rowPos] = board[rowPos] ^ (1 << bitPos);
- break;
- case "up left":
- bitPos += 1; // bitPos = bitPos + 1
- rowPos -= 2; // rowPos = rowPos - 2
- board[rowPos] = board[rowPos] ^ (1 << bitPos);
- break;
- case "up right":
- bitPos -= 1; // bitPos = bitPos - 1
- rowPos -= 2; // rowPos = rowPos - 2
- board[rowPos] = board[rowPos] ^ (1 << bitPos);
- break;
- case "down left":
- bitPos += 1; // bitPos = bitPos + 1
- rowPos += 2; // rowPos = rowPos + 2
- board[rowPos] = board[rowPos] ^ (1 << bitPos);
- break;
- case "down right":
- bitPos -= 1; // bitPos = bitPos - 1
- rowPos += 2; // rowPos = rowPos + 2
- board[rowPos] = board[rowPos] ^ (1 << bitPos);
- break;
- // ^ - оператор за изключващо ИЛИ
- // (1 << bitPos) - избутва бита на ляво 2 пъти
- // 7 6 5 4 3 2 1 0
- // row // 0 // 0 0 0 0 0 0 0 1 // 0 0 0 0 0 0 0 1 = 1
- // row // 1 // 0 0 0 0 0 1 0 0 // 0 0 0 0 0 1 0 0 = 4
- // row // 2 // 0 0 0 0 0 0 0 0 // 0 0 0 0 0 0 0 0 = 0
- // row // 3 // 0 0 0 0 0 0 1 0 // 0 0 0 0 0 0 1 0 = 2
- // row // 4 // 0 0 0 0 0 0 0 0
- // row // 5 // 0 0 0 0 0 0 0 0
- // row // 6 // 0 0 0 0 0 0 0 0
- // row // 7 // 0 0 0 0 0 0 0 0
- }
- }
- command = Console.ReadLine(); // за въвеждане на нова команда
- }
- bool wholeZeroMap = true; //
- foreach (var i in board)
- {
- if (i != 0)
- {
- wholeZeroMap = false;
- Console.WriteLine(i);
- }
- }
- if (wholeZeroMap)
- {
- Console.WriteLine("[Board is empty]");
- }
- }
- private static bool CheckValidPosition(string directions, int[] board, int rowPos, int bitIndex)
- {
- switch (directions)
- {
- case "left up":
- if (rowPos - 1 < 0 || bitIndex + 2 >= 8) return false;
- break;
- case "left down":
- if (rowPos + 1 >= board.Length || bitIndex + 2 >= 8) return false;
- break;
- case "right up":
- if (rowPos - 1 < 0 || bitIndex - 2 < 0) return false;
- break;
- case "right down":
- if (rowPos + 1 >= board.Length || bitIndex - 2 < 0) return false;
- break;
- case "up left":
- if (rowPos - 2 < 0 || bitIndex + 1 >= 8) return false;
- break;
- case "up right":
- if (rowPos - 2 < 0 || bitIndex - 1 < 0) return false;
- break;
- case "down left":
- if (rowPos + 2 >= board.Length || bitIndex + 1 >= 8) return false;
- break;
- case "down right":
- if (rowPos + 2 >= board.Length || bitIndex - 1 < 0) return false;
- break;
- }
- return true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement