Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <map>
- #include <string>
- #include <sstream>
- #include <vector>
- std::vector<std::vector<char>> readMatrix(int& size) {
- std::vector<std::vector<char>> space;
- for (int i = 0; i < size; ++i) {
- std::vector<char> row;
- for (int j = 0; j < size; ++j) {
- char c; std::cin >> c;
- row.push_back(c);
- }
- space.push_back(row);
- }
- return space;
- }
- void findStartingPoint(std::vector<std::vector<char>>& space, int& size, int& row, int& col) {
- bool isFound = false;
- for (int i = 0; i < size; ++i) {
- for (int j = 0; j < size; ++j) {
- if (space[i][j] == 'K') {
- row = i;
- col = j;
- isFound = true;
- break;
- }
- }
- if (isFound) {
- break;
- }
- }
- }
- void toLeft(std::vector<std::vector<char>>& space, int& row, int& col, int& initialDust) {
- if (col - 1 < 0) {
- initialDust -= initialDust * 4;
- }
- else if (space[row][col-1] != 'V' && space[row][col - 1] != 'S' && space[row][col - 1] != 'U' && space[row][col - 1] != 'N') {
- initialDust /= 2;
- space[row][col] = '-';
- space[row][col - 1] = 'K';
- col -= 1;
- }
- else {
- initialDust += int(space[row][col-1]);
- space[row][col] = '-';
- space[row][col - 1] = 'K';
- col -= 1;
- }
- }
- void toRight(std::vector<std::vector<char>>& space, int& row, int& col, int& initialDust) {
- if (col + 1 > space[row].size()) {
- initialDust -= initialDust * 4;
- }
- else if (space[row][col + 1] != 'V' && space[row][col + 1] != 'S' && space[row][col + 1] != 'U' && space[row][col + 1] != 'N') {
- initialDust /= 2;
- space[row][col] = '-';
- space[row][col + 1] = 'K';
- col += 1;
- }
- else {
- initialDust += int(space[row][col + 1]);
- space[row][col] = '-';
- space[row][col + 1] = 'K';
- col += 1;
- }
- }
- void goUp(std::vector<std::vector<char>>& space, int& row, int& col, int& initialDust) {
- if (row - 1 < 0) {
- initialDust -= initialDust * 4;
- }
- else if (space[row - 1][col] != 'V' && space[row - 1][col] != 'S' && space[row - 1][col] != 'U' && space[row - 1][col] != 'N') {
- initialDust /= 2;
- space[row][col] = '-';
- space[row - 1][col] = 'K';
- row -= 1;
- }
- else {
- initialDust += int(space[row-1][col]);
- space[row][col] = '-';
- space[row - 1][col] = 'K';
- row -= 1;
- }
- }
- void goDown(std::vector<std::vector<char>>& space, int& row, int& col, int& initialDust) {
- if (row + 1 > space.size()) {
- initialDust -= initialDust * 4;
- }
- else if (space[row + 1][col] != 'V' && space[row + 1][col] != 'S' && space[row + 1][col] != 'U' && space[row + 1][col] != 'N') {
- initialDust /= 2;
- space[row][col] = '-';
- space[row + 1][col] = 'K';
- row += 1;
- }
- else {
- initialDust += int(space[row + 1][col]);
- space[row][col] = '-';
- space[row + 1][col] = 'K';
- row += 1;
- }
- }
- void processSpace(std::vector<std::vector<char>>& space, int& initialDust, int& size, int& row, int& col) {
- char command; std::cin >> command;
- while (command != 'S') {
- switch (command) {
- case 'L':
- toLeft(space, row, col, initialDust);
- break;
- case 'R':
- toRight(space, row, col, initialDust);
- break;
- case 'U':
- goUp(space, row, col, initialDust);
- break;
- case 'D':
- goDown(space, row, col, initialDust);
- }
- std::cin >> command;
- }
- std::cout << "Space Dust Collected: " << initialDust << std::endl;
- }
- void printSpace(std::vector<std::vector<char>>& space) {
- for (auto& row : space) {
- for (auto& elem : row) {
- std::cout << elem << ' ';
- }
- std::cout << std::endl;
- }
- }
- int main() {
- int size = 0;
- std::cin >> size;
- std::vector<std::vector<char>> space = readMatrix(size);
- int initialDust; std::cin >> initialDust;
- int row, col;
- findStartingPoint(space, size, row, col);
- processSpace(space, initialDust, size, row, col);
- printSpace(space);
- }
Add Comment
Please, Sign In to add comment