Как разделить линию в решении проблем Каттис?
В настоящее время я делаю некоторые тесты в Kattis, и я застрял с этим. Код, который я написал до сих пор, дает мне последнее утверждение else, когда console.logging в коде Visual Studio. Если я наберу число ниже 100, это даст мне первое утверждение if, однако Каттис только выдаст мне ошибки. Где здесь проблема?
Я использую 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");
}
}
});
2 ответа
Вы можете взять флаг для получения первой строки, и если вы получили номер строки, просто разделите строку для получения значений.
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");
}
})
);
Каттис автоматически отправит EOF, поэтому нет необходимости отслеживать
n
.
См. Получение ввода в задачах Kattis - readline js для получения справки в общем случае, когда вам нужно собрать данные из первой строки и / или вы хотите распечатать один результат после того, как все строки будут использованы.