#include using namespace std; using Coords = pair; void moveTail(const Coords& head, Coords& tail){ if(abs(head.first - tail.first) <= 1 && abs(head.second - tail.second) <= 1){ return; } if(head.first == tail.first){ if(head.second > tail.second){ tail.second++; } else{ tail.second--; } } else if(head.second == tail.second){ if(head.first > tail.first){ tail.first++; } else{ tail.first--; } } else if(head.first > tail.first && head.second > tail.second){ tail.first++; tail.second++; } else if(head.first < tail.first && head.second > tail.second){ tail.first--; tail.second++; } else if(head.first > tail.first && head.second < tail.second){ tail.first++; tail.second--; } else if(head.first < tail.first && head.second < tail.second){ tail.first--; tail.second--; } } int main(){ ifstream input_file("input.txt"); string line; Coords head(0, 0), tail(0, 0); set visited_by_tail; visited_by_tail.insert(tail); while(getline(input_file, line)){ stringstream ss(line); char direction; int steps; ss >> direction >> steps; while(steps > 0){ if(direction == 'R'){ head.first++; } else if(direction == 'L'){ head.first--; } else if(direction == 'U'){ head.second++; } else if(direction == 'D'){ head.second--; } moveTail(head, tail); visited_by_tail.insert(tail); steps--; // cout << head.first << " " << head.second << " " << tail.first << " " << tail.second << '\n'; } } cout << "Number of positions visited by the tail: " << visited_by_tail.size() << endl; return 0; }