如何在 Kattis 问题解决中分割线?

How to line split in Kattis problem-solving?

我目前正在 Kattis 进行一些测试,但遇到了困难 with this one。到目前为止,我编写的代码在 Visual Studio 代码中给出了最后一个 else 语句 when console.logging 。如果我输入一个低于 100 的数字,它会给我第一个 if 语句,但是 Kattis 只会给我错误。问题出在哪里?

我正在使用 JavaScript (Nodejs)。

下面是我正在处理的代码:

const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.on('line', (line) => {
    var n = line.split(' ');
    for (var i = 0; i < n.length; i++) {
        var r = parseInt(n[i][0]);
        var e = parseInt(n[i][1]);
        var c = parseInt(n[i][2]);
        if (r > e - c) {
            console.log("do not advertise");
        }
        else if (r < e - c) {
            console.log("advertise");
        } else {
            console.log("does not matter");
        }
    }
}); 

你可以拿一个标志来获取第一行,如果你有行号,只需拆分行来获取值。

const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

var first = true;

rl.on('line', (line) => {
    if (first) {
        n = +line;
        first = false;
        return;
    }
    if (!n || !n--) return; // exit early for not needed lines

    var [r, e, c] = line.split(' ').map(Number); // take numbers

    if (r > e - c) {
        console.log("do not advertise");
    } else if (r < e - c) {
        console.log("advertise");
    } else {
        console.log("does not matter");
    }
}); 

这里有一个比 稍微简单的选项,使用 .once("line", ...) 跳过第一行:

const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.once("line", line => // collect the first line; in this case, discard it
  rl.on("line", line => { // register another listener to handle the rest
    const [r, e, c] = line.split(/ +/).map(Number);

    if (e - c > r) {
      console.log("advertise");
    }
    else if (e - c < r) {
      console.log("do not advertise");
    }
    else {
      console.log("does not matter");
    }
  })
);

Kattis 将自动发送 EOF,因此无需跟踪 n

当您需要从第一行收集数据时,请参阅 Getting input in Kattis challenges - readline js 以获取有关一般情况的帮助,and/or 想要在所有行都被消耗后打印单个结果。