mstoyanov7

Space

Jun 13th, 2021 (edited)
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.73 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <string>
  4. #include <sstream>
  5. #include <vector>
  6.  
  7. std::vector<std::vector<char>> readMatrix(int& size) {
  8.     std::vector<std::vector<char>> space;
  9.     for (int i = 0; i < size; ++i) {
  10.         std::vector<char> row;
  11.         for (int j = 0; j < size; ++j) {
  12.             char c; std::cin >> c;
  13.             row.push_back(c);
  14.         }
  15.         space.push_back(row);
  16.     }
  17.     return space;
  18. }
  19.  
  20. void findStartingPoint(std::vector<std::vector<char>>& space, int& size, int& row, int& col) {
  21.     bool isFound = false;
  22.     for (int i = 0; i < size; ++i) {
  23.         for (int j = 0; j < size; ++j) {
  24.             if (space[i][j] == 'K') {
  25.                 row = i;
  26.                 col = j;
  27.                 isFound = true;
  28.                 break;
  29.             }
  30.         }
  31.         if (isFound) {
  32.             break;
  33.         }
  34.     }
  35. }
  36.  
  37. void toLeft(std::vector<std::vector<char>>& space, int& row, int& col, int& initialDust) {
  38.     if (col - 1 < 0) {
  39.         initialDust -= initialDust * 4;
  40.     }
  41.     else if (space[row][col-1] != 'V' && space[row][col - 1] != 'S' && space[row][col - 1] != 'U' && space[row][col - 1] != 'N') {
  42.         initialDust /= 2;
  43.         space[row][col] = '-';
  44.         space[row][col - 1] = 'K';
  45.         col -= 1;
  46.     }
  47.     else {
  48.         initialDust += int(space[row][col-1]);
  49.         space[row][col] = '-';
  50.         space[row][col - 1] = 'K';
  51.         col -= 1;
  52.     }
  53.    
  54. }
  55.  
  56. void toRight(std::vector<std::vector<char>>& space, int& row, int& col, int& initialDust) {
  57.     if (col + 1 > space[row].size()) {
  58.         initialDust -= initialDust * 4;
  59.     }
  60.     else if (space[row][col + 1] != 'V' && space[row][col + 1] != 'S' && space[row][col + 1] != 'U' && space[row][col + 1] != 'N') {
  61.         initialDust /= 2;
  62.         space[row][col] = '-';
  63.         space[row][col + 1] = 'K';
  64.         col += 1;
  65.     }
  66.     else {
  67.         initialDust += int(space[row][col + 1]);
  68.         space[row][col] = '-';
  69.         space[row][col + 1] = 'K';
  70.         col += 1;
  71.     }
  72. }
  73.  
  74. void goUp(std::vector<std::vector<char>>& space, int& row, int& col, int& initialDust) {
  75.     if (row - 1 < 0) {
  76.         initialDust -= initialDust * 4;
  77.     }
  78.     else if (space[row - 1][col] != 'V' && space[row - 1][col] != 'S' && space[row - 1][col] != 'U' && space[row - 1][col] != 'N') {
  79.         initialDust /= 2;
  80.         space[row][col] = '-';
  81.         space[row - 1][col] = 'K';
  82.         row -= 1;
  83.     }
  84.     else {
  85.         initialDust += int(space[row-1][col]);
  86.         space[row][col] = '-';
  87.         space[row - 1][col] = 'K';
  88.         row -= 1;
  89.     }
  90. }
  91.  
  92. void goDown(std::vector<std::vector<char>>& space, int& row, int& col, int& initialDust) {
  93.     if (row + 1 > space.size()) {
  94.         initialDust -= initialDust * 4;
  95.     }
  96.     else if (space[row + 1][col] != 'V' && space[row + 1][col] != 'S' && space[row + 1][col] != 'U' && space[row + 1][col] != 'N') {
  97.         initialDust /= 2;
  98.         space[row][col] = '-';
  99.         space[row + 1][col] = 'K';
  100.         row += 1;
  101.     }
  102.     else {
  103.         initialDust += int(space[row + 1][col]);
  104.         space[row][col] = '-';
  105.         space[row + 1][col] = 'K';
  106.         row += 1;
  107.     }
  108. }
  109.  
  110. void processSpace(std::vector<std::vector<char>>& space, int& initialDust, int& size, int& row, int& col) {
  111.     char command; std::cin >> command;
  112.     while (command != 'S') {
  113.         switch (command) {
  114.         case 'L':
  115.             toLeft(space, row, col, initialDust);
  116.             break;
  117.         case 'R':
  118.             toRight(space, row, col, initialDust);
  119.             break;
  120.         case 'U':
  121.             goUp(space, row, col, initialDust);
  122.             break;
  123.         case 'D':
  124.             goDown(space, row, col, initialDust);
  125.         }
  126.         std::cin >> command;
  127.     }
  128.     std::cout << "Space Dust Collected: " << initialDust << std::endl;
  129. }
  130.  
  131. void printSpace(std::vector<std::vector<char>>& space) {
  132.     for (auto& row : space) {
  133.         for (auto& elem : row) {
  134.             std::cout << elem << ' ';
  135.         }
  136.         std::cout << std::endl;
  137.     }
  138. }
  139.  
  140. int main() {
  141.     int size = 0;
  142.     std::cin >> size;
  143.  
  144.     std::vector<std::vector<char>> space = readMatrix(size);
  145.  
  146.     int initialDust; std::cin >> initialDust;
  147.  
  148.     int row, col;
  149.     findStartingPoint(space, size, row, col);
  150.     processSpace(space, initialDust, size, row, col);
  151.     printSpace(space);
  152. }
Add Comment
Please, Sign In to add comment