如何在本地计算机上运行 c++ 和 javascript 客户端代码(hackerrank 样式)

How to run c++ and javascript client code (hackerrank style) on local machine

提问人:tsm 提问时间:2/23/2020 最后编辑:Chong Onn Keattsm 更新时间:3/21/2022 访问量:250

问:

我正在努力通过解决黑客问题来学习C++和Javascript。现在C++编译,但是当我运行它时会停滞不前。我的 JavaScript 也是如此。我想学习为测试用例输入数据,就像他们在平台上所做的那样。例如: 如果我在 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;
}

我将如何“喂养”它的输入。

同样,对于 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);
}

我知道我可以手动执行此操作 - 通过将局部变量硬编码为 main(),但我想了解 C++ - getline() 函数以及 JavaScript - process.stdin。

提前感谢您的帮助。

JavaScript C++ 节点 .js stdin eof

评论

3赞 ChrisMM 2/23/2020
不要试图通过hackerrank学习编程。使用一本书。
0赞 vonbrand 2/24/2020
查看有关C++的教程,例如cplusplus。如何调用你的程序并为其提供输入和参数在很大程度上取决于操作系统,如果你不说出你使用什么,我们根本帮不上忙。顺便说一句,发布一个程序要求提供与程序细节完全无关的东西是没有用的。Javascript 也是如此,我几乎一无所知,所以没有建议。

答:

2赞 tsm 2/24/2020 #1

我弄清楚了C++,您必须添加输入:例如。

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

它必须是确切的行数,因为有变量,或者从文件重定向输入,即。

$ ./a.out < input.txt

对于 JavaScript,您必须: 重定向输入:

$ node program.js < input.txt

或添加行并按以表示输入流的结束。

0赞 Chong Onn Keat 3/20/2022 #2

可以使用管道从文件馈送输入operator

$ cat input.txt | node main.js


[ 仅适用于基于 Unix 的机器,如 MacBook、Linux、Ubuntu... ]

对于 JavaScript,在 shell 中键入输入后,可以按 Ctrl + D 发送(文件末尾)以触发 中的事件处理程序。EOFprocess.stdin.on("end", ...)

本文所述,在 Microsoft Windows 中,readline 界面默认不支持 (Ctrl + D)^D