Как разделить линию в решении проблем Kattis?

В настоящее время я делаю некоторые тесты в Kattis, и у меня застрял с этим. Код, который я написал до сих пор, дает мне последний оператор else, когда console.infoging в коде 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.info("do not advertise");
        }
        else if (r < e - c) {
            console.info("advertise");
        } else {
            console.info("does not matter");
        }
    }
}); 
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
864
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.info("do not advertise");
    } else if (r < e - c) {
        console.info("advertise");
    } else {
        console.info("does not matter");
    }
}); 

Я не в курсе своего JS, но должна ли первая строка иметь разделитель строки с запятой?

halfer 06.05.2019 23:41

Спасибо, я думал, что это может быть так. Я задавался вопросом, можно ли это исправить из-за очевидного несоответствия - мое ОКР вызвало большую красную тревогу :-D

halfer 07.05.2019 09:54

@NinaScholz Привет, Нина! Итак, в этой задаче у меня была только одна первая строка, которая была n.. но если у меня есть две первые строки. Как бы я это сделал? open.kattis.com/problems/muddyhike это немного сложнее, и я пытаюсь использовать вложенный цикл for, но не уверен, что делаю это правильно. const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }) rl.on('line', (line) => { var r, c; for (var i = 0; i < r ; i++) { for (var j = 0; j <= c; j++) { console.info([i][j]) } } })

Vicky 09.05.2019 19:35

у вас есть еще одна строка для измерения следующих данных, и ее можно использовать в следующем блоке, как указано выше.

Nina Scholz 09.05.2019 19:44

@NinaScholz, о, хорошо, как код из прошлой проблемы? разница здесь в том, что в этой задаче три входа и три выхода. С тем немного, что я написал до сих пор. Вы бы сказали, что я приближаюсь? Извините за беспокойство. Я только начал несколько месяцев назад. Очень мало знаете об алгоритмах в программировании. Пытаюсь изучить процесс.

Vicky 09.05.2019 19:52

для Грязный поход вам нужно взять первую строку, разделить ее и получить значения для искомых строк и ширины следующих данных. эта часть, кроме разделения первой строки, в основном такая же, как и душа выше. чтение следующих строк, вышеприведенное решение работает и для него, несмотря на другую цель.

Nina Scholz 09.05.2019 20:07

возможно, вы зададите новый вопрос и представите код там. раздел комментариев не очень подходит для проблем другой проблемы.

Nina Scholz 09.05.2019 20:19

@Vicky: я создал суть, которая будет читать тестовые примеры с внутренними ограничениями на узле gist.github.com/tonythomas01/9aa6bf46fe0eaaef1d7fb846f8b73ec‌​2.

tonythomas01 25.05.2020 11:42

Вот немного более простой вариант, чем принятый ответ с использованием .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.info("advertise");
    }
    else if (e - c < r) {
      console.info("do not advertise");
    }
    else {
      console.info("does not matter");
    }
  })
);

Kattis автоматически отправит EOF, поэтому нет необходимости отслеживать n.

См. Получение информации о вызовах Kattis — readline js для помощи в общем случае, когда вам нужно собрать данные из первой строки и/или вы хотите напечатать один результат после того, как все строки будут использованы.

Другие вопросы по теме