Как создавать реактивные задания для соревнований по программированию? - PullRequest
1 голос
/ 22 апреля 2010

Реагирующее задание иногда встречается на соревнованиях по программированию IOI. В отличие от пакетных задач, реактивные решения принимают входные данные из другой программы, а также выводят ее. Программа обычно «запрашивает» программу судьи определенное количество раз, а затем выводит окончательный ответ.

Пример

Программа client принимает строки одну за другой и просто возвращает их обратно. Когда он встретил строку с «готово», он существует сразу.

Клиентская программа на Java выглядит следующим образом:

import java.util.*;
class Main{
  public static void main (String[] args){
     Scanner in = new Scanner(System.in);
     String s;
     while (!(s=in.nextLine()).equals("done"))
        System.out.println(s);
  }
}

Программа судья предоставляет входные данные и обрабатывает выходные данные клиентской программы. В этом примере он передает предопределенный ввод и проверяет, правильно ли программа-клиент вернула его обратно.

Сессия может проходить так:

Judge       Client
------------------
Hello
            Hello
World
            World
done

У меня проблемы с написанием программы судьи и с тем, чтобы она судила программу клиента. Буду признателен, если кто-нибудь напишет программу для моего примера.

1 Ответ

0 голосов
/ 22 апреля 2010

Вы получаете программы для общения друг с другом через командную строку.

В Windows вы написали бы:

java judge | java client

Таким образом, он передает вывод judge на вход client.

То есть, пока judge пишет в стандартный поток вывода (что он будет), а клиент читает из стандартного потока ввода (который у вас), он будет работать.

...