1

I am working on learning C++ and Javascript by solving Hackerrank problems. Right now C++ compiles but when I run it stalls. The same with my JavaScript. I would like to learn to feed in data for test cases like they do on the platform. For example: If I have this code in C++:

#include <string>
#include <cstdio>
#include <iostream>
using namespace std;
vector<string> split_string(string);

// Complete the countApplesAndOranges function below.
void countApplesAndOranges(int s, int t, int a, int b, vector<int> apples, vector<int> oranges) {
    int count_a = 0;
    int count_b = 0;
    for (int i = 0; i < apples.size(); i++){
        // apples[i] += a;
        apples[i] += a;
        if (s <= apples[i] && apples[i] <= t )
            count_a +=1;

        // cout << apples[i] << ;
    }
    // for (auto i: apples)
    //     // cout << i << ' ';

    // cout << endl;    
    for (int i = 0; i < oranges.size(); i++){

        // apples[i] += a;
        oranges[i] += b;
        if (s <= oranges[i] && oranges[i] <= t )
            count_b +=1;
        // cout << oranges[i] << "";
    }
    // for (auto i: oranges)
    //     // cout << i << ' ';

    cout << count_a << endl;
    cout << count_b;



}

int main()
{
    string st_temp;
    getline(cin, st_temp);

    vector<string> st = split_string(st_temp);

    int s = stoi(st[0]);

    int t = stoi(st[1]);

    string ab_temp;
    getline(cin, ab_temp);

    vector<string> ab = split_string(ab_temp);

    int a = stoi(ab[0]);

    int b = stoi(ab[1]);

    string mn_temp;
    getline(cin, mn_temp);

    vector<string> mn = split_string(mn_temp);

    int m = stoi(mn[0]);

    int n = stoi(mn[1]);

    string apples_temp_temp;
    getline(cin, apples_temp_temp);

    vector<string> apples_temp = split_string(apples_temp_temp);

    vector<int> apples(m);

    for (int i = 0; i < m; i++) {
        int apples_item = stoi(apples_temp[i]);

        apples[i] = apples_item;
    }

    string oranges_temp_temp;
    getline(cin, oranges_temp_temp);

    vector<string> oranges_temp = split_string(oranges_temp_temp);

    vector<int> oranges(n);

    for (int i = 0; i < n; i++) {
        int oranges_item = stoi(oranges_temp[i]);

        oranges[i] = oranges_item;
    }

    countApplesAndOranges(s, t, a, b, apples, oranges);

    return 0;
}

vector<string> 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] == ' ') {
        input_string.pop_back();
    }

    vector<string> 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;
}

How would I go about "feeding" it inputs.

Similarly, for the JavaScript:

'use strict';

process.stdin.resume();
process.stdin.setEncoding('utf-8');

let inputString = '';
let currentLine = 0;

process.stdin.on('data', inputStdin => {
    inputString += inputStdin;
});

process.stdin.on('end', _ => {
    inputString = inputString.replace(/\s*$/, '')
        .split('\n')
        .map(str => str.replace(/\s*$/, ''));

    main();
});

function readLine() {
    return inputString[currentLine++];
}

// Complete the countApplesAndOranges function below.
function countApplesAndOranges(s, t, a, b, apples, oranges) {
    let count_a = 0
    let count_b = 0

    for (let i = 0; i < apples.length; i++){
        apples[i] += a

        if (s <= apples[i] && apples[i] <= t)
            count_a += 1

    }
    for (let i = 0; i < oranges.length; i++){
        oranges[i] += b
        if (s <= oranges[i] && oranges[i] <= t)
            count_b += 1

    }


    console.log(count_a)
    console.log(count_b)
}

function main() {
    const st = readLine().split(' ');

    const s = parseInt(st[0], 10);

    const t = parseInt(st[1], 10);

    const ab = readLine().split(' ');

    const a = parseInt(ab[0], 10);

    const b = parseInt(ab[1], 10);

    const mn = readLine().split(' ');

    const m = parseInt(mn[0], 10);

    const n = parseInt(mn[1], 10);

    const apples = readLine().split(' ').map(applesTemp => parseInt(applesTemp, 10));

    const oranges = readLine().split(' ').map(orangesTemp => parseInt(orangesTemp, 10));

    countApplesAndOranges(s, t, a, b, apples, oranges);
}

I understand I could do this manually - by hardcoding local-variables to main() but I would like to learn about C++ - getline() function as well as JavaScript - process.stdin.

Thank you in advance for the help.

2
  • 3
    Do not try to learn to program through hackerrank. Use a book. Commented Feb 23, 2020 at 15:06
  • Check out a tutorial on C++, e.g. the cplusplus one. How to call your program and give it input and arguments is very much operating system dependent, if you don't say what you use, we can't help at all. Posting a program asking for something completely unrelated to the program details is of no use, by the way. Same goes for Javascript, of which I know next to nothing, so no recommendations. Commented Feb 23, 2020 at 17:54

2 Answers 2

2

I figured out the C++, you have to add the input: eg.

7 11 
5 15
3 2
-2 2 1
5 -6

It must be the exact number of lines as there are variables, or redirect the input from a file ie.

$ ./a.out < input.txt

For the JavaScript you must either: Redirect the input:

$ node program.js < input.txt

or add lines and press to signify the end of input stream.

Sign up to request clarification or add additional context in comments.

Comments

0

You can use pipeoperator to feed the input from a file

$ cat input.txt | node main.js


[ only works in Unix-based machine like MacBook, Linux, Ubuntu... ]

For the JavaScript, after typing the input into shell, you can press Ctrl + D to sends EOF(end-of-file) to trigger the event handler in process.stdin.on("end", ...) .

As mentioned in this post, in Microsoft Windows, the readline interface does not support ^D(Ctrl + D) by default

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.