version 2.4, 2002/02/04 16:53:15
|
version 3.0, 2008/03/23 17:50:50
|
Line 1
|
Line 1
|
%$Id$ |
%$Id$ |
%$Log$ |
%$Log$ |
|
%Revision 3.0 2008/03/23 17:50:50 boris |
|
%Added Lev's corrections |
|
% |
|
%Revision 2.7 2005/02/20 03:24:43 boris |
|
%Wrote readme |
|
% |
|
%Revision 2.6 2005/01/24 03:28:53 boris |
|
%Re-added |
|
% |
%Revision 2.4 2002/02/04 16:53:15 boris |
%Revision 2.4 2002/02/04 16:53:15 boris |
%Added numletters |
%Added numletters |
% |
% |
Line 41
|
Line 50
|
% |
% |
\usepackage[koi8-r]{inputenc} |
\usepackage[koi8-r]{inputenc} |
\usepackage[russian]{babel} |
\usepackage[russian]{babel} |
\usepackage{pscyr} |
\usepackage{t1enc} |
\usepackage{amsmath} |
\usepackage{amsmath} |
\newcommand{\prog}[1]{\ensuremath{\text{{\textsl{#1}}}}} |
\newcommand{\prog}[1]{\ensuremath{\text{{\textsl{#1}}}}} |
|
|
Line 49
|
Line 58
|
|
|
\begin{document} |
\begin{document} |
|
|
\title{Программа для обработки писем в IGP} |
\title{Программа для обработки писем в ИГП и ИЧБ} |
\author{Boris Veytsman, \texttt{borisv@lk.net}} |
\author{Boris Veytsman, \texttt{borisv@lk.net}} |
\date{Февраль 2002} |
\date{Февраль 2005} |
\maketitle |
\maketitle |
\thispagestyle{empty} |
\thispagestyle{empty} |
\tableofcontents |
\tableofcontents |
Line 63
|
Line 72
|
команды. Прочесть невероятное количество писем, извлечь ответы, |
команды. Прочесть невероятное количество писем, извлечь ответы, |
составить таблицу, да еще Собрание Сочинений\dots{} На это вполне может |
составить таблицу, да еще Собрание Сочинений\dots{} На это вполне может |
уйти целиком рабочий день. Именно с этой целью по предложению Якова |
уйти целиком рабочий день. Именно с этой целью по предложению Якова |
Зайдельмана написана эта программа. |
Зайдельмана написана эта программа. Позднее эта программа |
|
переписывалась при изменении регламента соревнований, добавлении ИЧБ и |
|
т.д. |
|
|
Идея состоит в следующем. Самый важный этап в деятельности дежурной |
Идея состоит в следующем. Самый важный этап в деятельности дежурной |
команды---решить, заслуживает ли данный ответ плюса или минуса. Это мы |
команды---решить, заслуживает ли данный ответ плюса или минуса. Это мы |
Line 79
|
Line 90
|
\item Время от времени создавать список команд, чьи ответы уже |
\item Время от времени создавать список команд, чьи ответы уже |
получены, и слать на информационный лист. |
получены, и слать на информационный лист. |
\end{enumerate} |
\end{enumerate} |
Необходимо учесть еще два важных обстоятельства: |
Необходимо учесть еще несколько важных обстоятельств: |
\begin{enumerate} |
\begin{enumerate} |
\item Команда может прислать несколько писем. В этом случае более |
\item Команда может прислать несколько писем. В этом случае более |
позднее письмо считается более авторитетным, чем более раннее. Мы |
позднее письмо считается более авторитетным, чем более раннее. Мы |
Line 89
|
Line 100
|
корректируя взбрыки e-mailа). |
корректируя взбрыки e-mailа). |
\item Дежурная команда может оценивать ответы параллельно их |
\item Дежурная команда может оценивать ответы параллельно их |
получению. Поэтому нельзя ``забывать'' старые оценки, читая новые. |
получению. Поэтому нельзя ``забывать'' старые оценки, читая новые. |
|
\item В последнее время в ИГП и ИЧБ принято два зачёта: спринт и |
|
стайер. При этом соблюдаются следующеи правила: |
|
\begin{enumerate} |
|
\item Если команда сдала ответ в спринте и не сдала ответ в стайере, |
|
учитывается ответ, сданный в спринте. |
|
\item При равенстве количества ответов в стайере победу в стайере |
|
одерживает команда, показавшая лучший результат в спринте. |
|
\end{enumerate} |
\end{enumerate} |
\end{enumerate} |
|
|
|
|
Line 191 Subject: Otvety komandy "Stop", 222
|
Line 210 Subject: Otvety komandy "Stop", 222
|
\begin{enumerate} |
\begin{enumerate} |
\item Длинный формат |
\item Длинный формат |
\begin{verbatim} |
\begin{verbatim} |
N 1 2 3 4 5 6 7 8 9 10 11 12 О Р КОМАНДА |
N 1 2 3 4 5 6 7 8 9 10 11 12 О Р КОМАНДА |
111 + + + + + + + + + + + + 12 359 Марсиане |
111 + + + + + + + + + + + + 12.04 359 Марсиане |
436 + + + + + + + + + + + + 12 359 Venera II |
436 + + + + + + + + + + + + 12.02 359 Venera II |
[...] |
[...] |
\end{verbatim} |
\end{verbatim} |
\item Короткий формат |
\item Короткий формат |
\begin{verbatim} |
\begin{verbatim} |
N 123456789012 О Р КОМАНДА |
N 123456789012 О Р КОМАНДА |
111 ++++++++++++ 12 359 Марсиане |
111 ++++++++++++ 12.04 359 Марсиане |
436 ++++++++++++ 12 359 Venera II |
436 ++++++++++++ 12.04 359 Venera II |
[...] |
[...] |
Рейтинг |
Рейтинг |
1 2 3 4 5 6 7 8 9 10 11 12 |
1 2 3 4 5 6 7 8 9 10 11 12 |
Line 210 Subject: Otvety komandy "Stop", 222
|
Line 229 Subject: Otvety komandy "Stop", 222
|
В последних графах стоит полное число взятых вопросов и суммарный |
В последних графах стоит полное число взятых вопросов и суммарный |
рейтинг соответственно. В последней строке таблицы---рейтинги |
рейтинг соответственно. В последней строке таблицы---рейтинги |
вопросов. В коротком формате вместо строки с рейтингом отдельная |
вопросов. В коротком формате вместо строки с рейтингом отдельная |
таблица ``Рейтинг''. |
таблица ``Рейтинг''. В графе ``О'' стоят набранные командой очки в |
|
данном зачёте (до десятичной точки) и в предыдущем (после точки). |
|
|
\subsection{Формат собрания сочинений} |
\subsection{Формат собрания сочинений} |
|
|
Line 244 s Текст ответа
|
Line 264 s Текст ответа
|
\section{Пользовательский интерфейс} |
\section{Пользовательский интерфейс} |
|
|
|
|
|
\subsection{Файл настроек} |
|
\label{sec:conf} |
|
|
|
Настройки программы хранятся в файле \prog{parameters.pl}. Пример |
|
этого файла приведен ниже: |
|
\begin{verbatim} |
|
# Количество зачётов |
|
$ROUNDS=2; |
|
|
|
############################################################### |
|
# Следующие настройки индивидуальны для каждого раунда, начиная |
|
# с первого |
|
############################################################### |
|
|
|
# Первый раунд |
|
|
|
# Название раунда |
|
|
|
$NAME[1]="Спринт"; |
|
|
|
# Вопросы раунда |
|
|
|
$MINQUEST[1]=1; |
|
$MAXQUEST[1]=12; |
|
|
|
# Файлы раунда. Следующий перекрывает предыдущий: |
|
|
|
$FILES[1]='sprint.mail'; |
|
|
|
|
|
# Второй раунд |
|
|
|
# Название раунда |
|
|
|
$NAME[2]="Стайер"; |
|
|
|
# Вопросы раунда |
|
|
|
$MINQUEST[2]=1; |
|
$MAXQUEST[2]=18; |
|
|
|
# Файлы раунда. Следующий перекрывает предыдущий. Файлы разделены |
|
# ПРОБЕЛАМИ |
|
|
|
$FILES[2]='stayer.mail'; |
|
|
|
######################################################### |
|
# Теперь общие настройки |
|
######################################################### |
|
|
|
|
|
# |
|
# Адрес листа z-info |
|
# |
|
$address = 'z-info@chgk.info'; |
|
#$address="boris"; |
|
# |
|
# Обратный адрес дежурной команды и ее название |
|
# |
|
$fromaddress = 'borisv@lk.net'; |
|
$DK = '"Дракоша"'; |
|
# |
|
# $date -- системная процедура, которая вычисляет МОСКОВСКОЕ |
|
# время. В Линуксе zdump это делает хорошо. В других операционных |
|
# системах надо как-то исхитряться... |
|
# |
|
$date = "export TZ='Europe/Moscow'; date"; |
|
|
|
# |
|
# Процедуры, которые печатают заголовок и конец мейла-напоминания |
|
# |
|
sub printheader |
|
{ |
|
print <<"END"; |
|
To: $address |
|
From: $fromaddress |
|
Subject: Svodka |
|
MIME-Version: 1.0 |
|
Content-type: text/plain; charset=koi8-r |
|
Content-Transfer-Encoding: 8bit\n |
|
|
|
Уважаемые знатоки! |
|
|
|
С вами говорит робот команды $DK |
|
|
|
END |
|
print "На момент ", `$date`, "в зачёте '$NAME[$round]' сданы ответы от команд:\n\n"; |
|
} |
|
|
|
|
|
sub printfooter |
|
{ |
|
print <<END; |
|
|
|
-- |
|
Good luck |
|
|
|
-Robot |
|
END |
|
|
|
} |
|
|
|
\end{verbatim} |
|
|
|
|
\subsection{Основная программа} |
\subsection{Основная программа} |
|
|
Дежурный по туру складывает все письма в файл. Время от времени он |
Дежурный по туру складывает все письма в файл. Время от времени он |
запускает команду |
запускает команду |
\begin{verbatim} |
\begin{verbatim} |
processmail.pl [-d] [-t table_file] [-m mail_file] [-o results] |
processmail.pl [-d] [-t table_file] [-o results] |
\end{verbatim} |
\end{verbatim} |
где |
где |
\begin{description} |
\begin{description} |
\item[table\_file] файл с предыдущими оценками (по умолчанию |
\item[table\_file] файл с предыдущими оценками (по умолчанию |
отсутствует), |
отсутствует), |
\item[mail\_file] файл с письмами (по умолчанию---стандартный вход), |
|
\item[results] файл с результатами (по умолчанию---стандартный |
\item[results] файл с результатами (по умолчанию---стандартный |
выход). |
выход). |
\end{description} |
\end{description} |
Line 269 processmail.pl [-d] [-t table_file] [-m
|
Line 393 processmail.pl [-d] [-t table_file] [-m
|
|
|
Время от времени дежурный запускает программу |
Время от времени дежурный запускает программу |
\begin{verbatim} |
\begin{verbatim} |
reminder.pl [-t table_file] |
reminder.pl [-r номер_раунда] |
\end{verbatim} |
\end{verbatim} |
Она генерирует список команд, которые имеются в файле с таблицей (по |
Она генерирует список команд, которые имеются в файле с таблицей (по |
умолчанию---стандартный вход), и посылает его на z-info. |
умолчанию---стандартный вход), и посылает его на z-info. |
Line 279 reminder.pl [-t table_file]
|
Line 403 reminder.pl [-t table_file]
|
|
|
Итоговая таблица и собрание сочинений генерируются программами |
Итоговая таблица и собрание сочинений генерируются программами |
\begin{verbatim} |
\begin{verbatim} |
createtable.pl [-d] [-s] [-t table_file] [-m mail_file] [-o results] |
createtable.pl [-d] [-s] [-t table_file] [-o results] |
collection.pl [-d] [-t table_file] [-m mail_file] [-o results] |
collection.pl [-d] [-t table_file] [-o results] |
\end{verbatim} |
\end{verbatim} |
Ее ключи имеют то же смысл, что и у программы \prog{processmail.pl}. |
Ее ключи имеют то же смысл, что и у программы \prog{processmail.pl}. |
Флаг \prog{-s} означает выбор короткой формы таблицы. |
Флаг \prog{-s} означает выбор короткой формы таблицы. |
Line 310 collection.pl [-d] [-t table_file] [-m
|
Line 434 collection.pl [-d] [-t table_file] [-m
|
а элементы---опять таки ссылки на хэши следующего содержания: |
а элементы---опять таки ссылки на хэши следующего содержания: |
\begin{description} |
\begin{description} |
\item[\prog{score}] \prog{+}, \prog{-} или \prog{?} |
\item[\prog{score}] \prog{+}, \prog{-} или \prog{?} |
\item[\prog{teams}] массив команд, давших этот ответ |
\item[\prog{teams}] хэш команд, давших этот ответ |
\end{description} |
|
|
|
\subsection{Глобальные переменные} |
|
|
|
Мы используем следующие глобальные переменные: |
|
\begin{description} |
|
\item[\prog{\$MAXQUEST}] максимальное число вопросов |
|
\item[\prog{\$DEBUG}] флаг, показывающий, задана ли debugging mode. |
|
\end{description} |
\end{description} |
|
|
|
|