Saturday, 29 April 2017

Hacker Rank Cats and a Mouse Problem Solution.

Two cats named  and  are standing at integral points on the x-axis. Cat  is standing at point  and cat  is standing at point . Both cats run at the same speed, and they want to catch a mouse named  that's hiding at integral point  on the x-axis. Can you determine who will catch the mouse?
You are given  queries in the form of , and . For each query, print the appropriate answer on a new line:
  • If cat  catches the mouse first, print Cat A.
  • If cat  catches the mouse first, print Cat B.
  • If both cats reach the mouse at the same time, print Mouse C as the two cats fight and mouse escapes.
Input Format
The first line contains a single integer, , denoting the number of queries. 
Each of the  subsequent lines contains three space-separated integers describing the respective values of  (cat 's location),  (cat 's location), and  (mouse 's location).
Output Format
On a new line for each query, print Cat A if cat  catches the mouse first, Cat B if cat  catches the mouse first, or Mouse C if the mouse escapes.
Sample Input 0
1 2 3
1 3 2
2 1 3
Sample Output 0
Cat B
Mouse C
Cat A
Explanation 0
Query 0: The positions of the cats and mouse are shown below:image
Cat  will catch the mouse first, so we print Cat B on a new line.
Query 1: In this query, cats  and  reach mouse  at the exact same time:image
Because the mouse escapes, we print Mouse C on a new line.

using namespace std;
    * Prosen Ghosh
    * American International University - Bangladesh (AIUB)
int main(){

    int q;

    cin >> q;
    for(int i = 0; i < q; i++){
        int a,b,c;
        cin >> a >> b >> c;
        abs(a-c) < abs(b-c) ? cout << "Cat A" : abs(b-c) < abs(a-c) ? cout << "Cat B" : cout << "Mouse C";
        cout << endl;
    return 0;


  1. this is wrong

    output is
    1 2 3
    Cat B
    1 3 2
    Mouse C
    2 1 3
    Cat A

  2. using my code:

    using namespace std;

    vector split_string(string);
    int q;
    // Complete the catAndMouse function below.
    string catAndMouse(int x, int y, int z) {
    string res;
    for(int i=0;ifabs((y-z))){
    res="Cat B";
    if(fabs((x-z)) rslt;

    ofstream fout(getenv("OUTPUT_PATH"));

    cin >> q;
    cin.ignore(numeric_limits::max(), '\n');

    for (int j = 0; j < q; j++) {

    string xyz_temp;
    getline(cin, xyz_temp);

    vector xyz = split_string(xyz_temp);

    int x = stoi(xyz[0]);

    int y = stoi(xyz[1]);

    int z = stoi(xyz[2]);

    string result = catAndMouse(x, y, z);


    for (int i=0; i split_string(string input_string) {
    string::iterator new_end = unique(input_string.begin(), input_string.end(), [] (const char &x, const char &y) {
    return x == y and x == ' ';

    input_string.erase(new_end, input_string.end());

    while (input_string[input_string.length() - 1] == ' ') {

    vector splits;
    char delimiter = ' ';

    size_t i = 0;
    size_t pos = input_string.find(delimiter);

    while (pos != string::npos) {
    splits.push_back(input_string.substr(i, pos - i));

    i = pos + 1;
    pos = input_string.find(delimiter, i);

    splits.push_back(input_string.substr(i, min(pos, input_string.length()) - i + 1));

    return splits;

    WE get output as shown by them
    however i am still getting fail message