HackerEarth:如何从STDIN读取并写入到STDOUT?

5

有人在HackerEarth上解决问题吗?我对他们提供输入数据的方式感到困惑。

迄今为止,我一直在使用Leetcode来解决问题,我对它们感到非常满意,但不幸的是,有些人更喜欢使用HackerEarth来举办编码挑战赛,而我在尝试正确读取输入测试用例方面遇到了问题。

以这个为例 https://www.hackerearth.com/practice/algorithms/searching/ternary-search/practice-problems/algorithm/small-factorials/submissions/

我进行了调查,并找到了他们的“解决方案指南”,其中包含错误的信息:https://www.hackerearth.com/docs/wiki/developers/solution-guide/

我该如何在JS(Node v10)裁判中读取单独的行并输出结果?

谢谢。

3个回答

3
  • 刚刚登录并在这里查看了一下。

  • 它似乎类似于我不喜欢的HackerRank。(LeetCode的用户界面很有趣,使用起来也更加容易。)

  • 在LeetCode上,我们不需要将结果打印出来,但在这里,我们似乎需要打印输出(例如,在JavaScript中,我们会使用console.log,更不用说在方法内打印通常是一种不好的编码习惯)。

这个解决方案(从这些活动中复制)似乎是通过的, 根据此你可以弄清楚事情:


/*
// Sample code to perform I/O:

process.stdin.resume();
process.stdin.setEncoding("utf-8");
var stdin_input = "";

process.stdin.on("data", function (input) {
    stdin_input += input;                               // Reading input from STDIN
});

process.stdin.on("end", function () {
   main(stdin_input);
});

function main(input) {
    process.stdout.write("Hi, " + input + ".\n");       // Writing output to STDOUT
}

// Warning: Printing unwanted or ill-formatted data to output will cause the test cases to fail
*/

// Write your code here


process.stdin.resume();
process.stdin.setEncoding("utf-8");
var stdin_input = "";
process.stdin.on("data", function (input) {
    stdin_input += input;
});
process.stdin.on("end", function () {
   main(stdin_input);
});
function main(input) {
    input = input.split('\n');
    input.shift();
    input.forEach(n => {
        n = parseInt(n);
        let fact = BigInt(1);
        while(n){
            fact = BigInt(fact) * BigInt(n);
            n--;
        }
        console.log(String(fact).replace('n',''));
    });
}

1
谢谢,艾玛。这很有帮助。在我的JS之旅中,我到目前为止从未使用过BigInt,所以我可能需要进行研究。 - Naser Mohd Baig
感谢您的发布,这个HERE链接似乎有问题,但是这对我帮助很大!您是真正的MVP。 - akili Sosa

2

在访问输入方面,HackerEarth与LeetCode和Hacker Rank有些不同。在这里,您将需要通过行号从标准输入(STDIN)中提取输入。您可以在此处找到更多详细信息。

例如,如果输入的格式如下所示:
输入格式:
第一行包含整数N。
第二行包含字符串S。

那么,您将按新行(“\n”)拆分STDIN并逐行访问每个输入。

以下是JavaScript中如何访问输入的示例:

var input1 = 0;
var input2 = "";
var stdin_input = ""
process.stdin.on("data", function (input) {
    // Reading input from STDIN
    stdin_input += input;  
    input1 = stdin_input.split("\n")[0] 
    input2 = stdin_input.split("\n")[1]

    console.log("input1 = ", input1)
    console.log("input2 = ", input2)
                       
                             
});

0

第一步 --> 使用正则表达式 \d+(无需添加全局标志,因为问题说明第一行始终包含一个数字,因此我们正在寻找第一个数字)来查找第一个数字的第一次出现+标志是为了始终匹配多个数字的出现,例如2、12、21、234等。

第二步 --> 将匹配的字符串转换为数字乘以2(加倍),然后将其转换回字符串并使用正则表达式替换方法进行替换。 有关该方法的更多信息,请访问此处:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

process.stdin.resume();
process.stdin.setEncoding("utf-8");
var stdin_input = "";

process.stdin.on("data", function (input) {
    stdin_input += input;                             
});

process.stdin.on("end", function () {
   main(stdin_input);
});

function main(input) {
    const regex = /(\d+)/g;
    let expr = input.replace(regex,(match) => {
        return String(Number(match) * 2);
    });
    process.stdout.write(expr);    
}


请为您的答案添加一些描述 - Goutham J.M
描述已添加! - Eddy Agossou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接