fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <list>
  4. #include <cassert>
  5. using namespace std;
  6.  
  7. struct node
  8. {
  9. int x,y;
  10. node(int x1,int y1)
  11. {
  12. x=x1;
  13. y=y1;
  14. }
  15. };
  16.  
  17.  
  18. class SnakeGame
  19. {
  20. private:
  21. int current;
  22. int width;
  23. int height;
  24. vector<node*> food;
  25. list<node*> snake;
  26.  
  27.  
  28. public:
  29. SnakeGame(int width,int height,vector<node*> food)
  30. {
  31. this->current = 0;
  32. this->height = height;
  33. this->width = width;
  34. this->food = food;
  35. this->snake.clear();
  36. this->snake.push_back(new node(0,0));
  37. }
  38.  
  39. int move(string direction)
  40. {
  41. int snake_length = snake.size();
  42. if(snake_length > this->width*this->height)
  43. {
  44. return -1;
  45. }
  46.  
  47. node*snake_head = this->snake.front();
  48. int snake_head_x = snake_head->x;
  49. int snake_head_y = snake_head->y;
  50.  
  51. int new_snake_head_x = (direction == "U")?snake_head_x-1:(direction=="D")?snake_head_x+1:snake_head_x;
  52. int new_snake_head_y = (direction == "L")?snake_head_y-1:(direction == "R")?snake_head_y+1:snake_head_y;
  53.  
  54. if(new_snake_head_x < 0 || new_snake_head_x > this->height)
  55. {
  56. return -1;
  57. }
  58. if(new_snake_head_y < 0 || new_snake_head_y > this->width)
  59. {
  60. return -1;
  61. }
  62.  
  63. node*new_snake_head = new node(new_snake_head_x,new_snake_head_y);
  64.  
  65. if(this->current < this->food.size() && new_snake_head->x == food[this->current]->x && new_snake_head->y == food[this->current]->y)
  66. {
  67. this->current++;
  68. }
  69. else
  70. {
  71. this->snake.pop_back();
  72. }
  73.  
  74. for(auto it=this->snake.begin();it!=this->snake.end();it++)
  75. {
  76. node*val = *(it);
  77. if(val->x == new_snake_head->x && val->y == new_snake_head->y)
  78. {
  79. return -1;
  80. }
  81. }
  82. this->snake.push_front(new_snake_head);
  83. return this->current;
  84. }
  85.  
  86.  
  87. };
  88.  
  89.  
  90.  
  91.  
  92. int main() {
  93. vector<node*> food;
  94. food.push_back(new node(1,2));
  95. food.push_back(new node(0,1));
  96. //food = {{1, 2}, {0, 1}};
  97. SnakeGame snakeGame(3, 2, food);
  98. assert(0 == snakeGame.move("R"));
  99. assert(0 == snakeGame.move("D"));
  100. assert(1 == snakeGame.move("R"));
  101. assert(1 == snakeGame.move("U"));
  102. assert(2 == snakeGame.move("L"));
  103. assert(-1 == snakeGame.move("U"));
  104.  
  105. //food = {{1, 1}, {1, 0}, {0, 0}};
  106. food.clear();
  107. food.push_back(new node(1,1));
  108. food.push_back(new node(1,0));
  109. food.push_back(new node(0,0));
  110. snakeGame = SnakeGame(2, 2, food);
  111. assert(0 == snakeGame.move("R"));
  112. assert(1 == snakeGame.move("D"));
  113. assert(2 == snakeGame.move("L"));
  114. assert(3 == snakeGame.move("U"));
  115. assert(3 == snakeGame.move("R"));
  116. assert(3 == snakeGame.move("D"));
  117. assert(3 == snakeGame.move("L"));
  118. assert(-1 == snakeGame.move("L"));
  119.  
  120. cout << "\nPassed All\n";
  121. return 0;
  122. }
Success #stdin #stdout 0s 5304KB
stdin
Standard input is empty
stdout
Passed All