--- processmail/process.tex 2002/02/04 16:53:15 2.4 +++ processmail/process.tex 2013/10/11 15:39:35 3.2 @@ -1,5 +1,20 @@ -%$Id: process.tex,v 2.4 2002/02/04 16:53:15 boris Exp $ +%$Id: process.tex,v 3.2 2013/10/11 15:39:35 boris Exp $ %$Log: process.tex,v $ +%Revision 3.2 2013/10/11 15:39:35 boris +%Lev's changes +% +%Revision 3.1 2008-03-23 18:04:51 boris +%documentation update +% +%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 %Added numletters % @@ -41,7 +56,7 @@ % \usepackage[koi8-r]{inputenc} \usepackage[russian]{babel} -\usepackage{pscyr} +\usepackage{t1enc} \usepackage{amsmath} \newcommand{\prog}[1]{\ensuremath{\text{{\textsl{#1}}}}} @@ -49,9 +64,9 @@ \begin{document} -\title{Программа для обработки писем в IGP} +\title{Программа для обработки писем в ИГП и ИЧБ} \author{Boris Veytsman, \texttt{borisv@lk.net}} -\date{Февраль 2002} +\date{Март 2008} \maketitle \thispagestyle{empty} \tableofcontents @@ -63,7 +78,9 @@ команды. Прочесть невероятное количество писем, извлечь ответы, составить таблицу, да еще Собрание Сочинений\dots{} На это вполне может уйти целиком рабочий день. Именно с этой целью по предложению Якова -Зайдельмана написана эта программа. +Зайдельмана написана эта программа. Позднее эта программа +переписывалась при изменении регламента соревнований, добавлении ИЧБ и +т.д. Идея состоит в следующем. Самый важный этап в деятельности дежурной команды---решить, заслуживает ли данный ответ плюса или минуса. Это мы @@ -79,7 +96,7 @@ \item Время от времени создавать список команд, чьи ответы уже получены, и слать на информационный лист. \end{enumerate} -Необходимо учесть еще два важных обстоятельства: +Необходимо учесть еще несколько важных обстоятельств: \begin{enumerate} \item Команда может прислать несколько писем. В этом случае более позднее письмо считается более авторитетным, чем более раннее. Мы @@ -89,6 +106,14 @@ корректируя взбрыки e-mailа). \item Дежурная команда может оценивать ответы параллельно их получению. Поэтому нельзя ``забывать'' старые оценки, читая новые. +\item В последнее время в ИГП и ИЧБ принято два зачёта: спринт и + стайер. При этом соблюдаются следующеи правила: + \begin{enumerate} + \item Если команда сдала ответ в спринте и не сдала ответ в стайере, + учитывается ответ, сданный в спринте. + \item При равенстве количества ответов в стайере победу в стайере + одерживает команда, показавшая лучший результат в спринте. + \end{enumerate} \end{enumerate} @@ -187,20 +212,33 @@ Subject: Otvety komandy "Stop", 222 \subsection{Формат таблицы результатов} -У таблицы результатов есть два формата. +У таблицы результатов есть три формата. \begin{enumerate} \item Длинный формат \begin{verbatim} - N 1 2 3 4 5 6 7 8 9 10 11 12 О Р КОМАНДА - 111 + + + + + + + + + + + + 12 359 Марсиане - 436 + + + + + + + + + + + + 12 359 Venera II + N 1 2 3 4 5 6 7 8 9 10 11 12 О Р КОМАНДА + 111 + + + + + + + + + + + + 12.04 359 Марсиане + 436 + + + + + + + + + + + + 12.02 359 Venera II [...] \end{verbatim} + +\item Промежуточный формат +\begin{verbatim} + N 12345 67890 12 О Р КОМАНДА + 111 +++++ +++++ ++ 12.04 359 Марсиане + 436 +++++ +++++ ++ 12.04 359 Venera II +[...] +Рейтинг + 1 2 3 4 5 6 7 8 9 10 11 12 +24 21 34 24 41 43 18 31 26 32 36 29 +\end{verbatim} + + \item Короткий формат \begin{verbatim} - N 123456789012 О Р КОМАНДА - 111 ++++++++++++ 12 359 Марсиане - 436 ++++++++++++ 12 359 Venera II + N 123456789012 О Р КОМАНДА + 111 ++++++++++++ 12.04 359 Марсиане + 436 ++++++++++++ 12.04 359 Venera II [...] Рейтинг 1 2 3 4 5 6 7 8 9 10 11 12 @@ -210,7 +248,11 @@ Subject: Otvety komandy "Stop", 222 В последних графах стоит полное число взятых вопросов и суммарный рейтинг соответственно. В последней строке таблицы---рейтинги вопросов. В коротком формате вместо строки с рейтингом отдельная -таблица ``Рейтинг''. +таблица ``Рейтинг''. В графе ``О'' стоят набранные командой очки в +данном зачёте (до десятичной точки) и в предыдущем (после точки). + +При печати незачетных вопросов взятый вопрос помечается буквой +\prog{X}, а невзятый, как обычно, \prog{-}. \subsection{Формат собрания сочинений} @@ -220,13 +262,17 @@ Subject: Otvety komandy "Stop", 222 \begin{verbatim} ВОПРОС NN: \end{verbatim} -\item По два заголовка подразделов: +\item По три заголовка подразделов: \begin{verbatim} -ЗАСЧИТАНЫ ОТВЕТЫ: +ЗАСЧИТАНО: +\end{verbatim} + +\begin{verbatim} +НЕ ЗАСЧИТАНО: \end{verbatim} и \begin{verbatim} -НЕ ЗАСЧИТАНЫ ОТВЕТЫ: +НЕ ЯСНО: \end{verbatim} \item Каждый ответ имеет формат: \begin{verbatim} @@ -234,28 +280,181 @@ s Текст ответа Текст ответа ... [f] \end{verbatim} -Здесь \prog{s}---один из символов \prog{+} или \prog{-}, +Здесь \prog{s}---один из символов \prog{+}, \prog{-}, или \prog{?}, \prog{f}---частота ответа, которая печатается только если она не равна единице. \end{enumerate} +По умолчанию, заголовки всех подразделов выводятся даже если для данного +вопроса нет ответов, попадающих в какой-либо подраздел (подраздел пуст). +Это предсказуемо и удобно, но не всегда удобочитаемо с точки зрения +читателя-человека, поэтому по желанию возможна генерация промежуточного +или короткого вариантов собрания сочинений. От описанного выше полного +формата они отличаются режимом печати пустых подразделов: +\begin{enumerate} +\item В промежуточном формате подразделы \prog{ЗАСЧИТАНО} и + \prog{НЕ ЗАСЧИТАНО} показываются всегда (даже пустые), а подраздел + \prog{НЕ ЯСНО}---только если он не пуст. +\item В коротком формате все подразделы выводятся только если они + не пусты (исключения для \prog{ЗАСЧИТАНО} и \prog{НЕ ЗАСЧИТАНО} + не делаются). +\end{enumerate} + +По мнению автора, промежуточный формат представляет собой оптимальный +компромисс между читаемостью и полнотой (и действительно, зачем +печатать пару десятков пустых \prog{НЕ ЯСНО} в официальной сводке, +в которой уже давно все ясно?) + + \section{Пользовательский интерфейс} +\subsection{Файл настроек} +\label{sec:conf} + +Настройки программы хранятся в файле \prog{parameters.pl}. Пример +этого файла приведен ниже: +\begin{verbatim} +# В этом файле собраны ЛОКАЛЬНЫЕ параметры -- "настройки" +# +# Количество зачётов +$ROUNDS=2; + +############################################################### +# Следующие настройки индивидуальны для каждого раунда, начиная +# с первого +############################################################### + +# Первый раунд + +# Название раунда + +$NAME[1]="Спринт"; + +# Вопросы раунда + +$MINQUEST[1]=1; +$MAXQUEST[1]=12; + +# Файлы раунда. Следующий перекрывает предыдущий. +# Список заключён в квадратные скобки, отдельные файлы разделены ЗАПЯТЫМИ. +# $FILES[1] = [ "sprint.mail", "sprint-extra.mail" ]; +# +# ВНИМАНИЕ: формат этого параметра изменился с предыдущей версии! + +$FILES[1]= [ 'sprint.mail' ]; + +# Внезачётные вопросы раунда. В квадратных скобках, номера разделены ЗАПЯТЫМИ. +# Во втором раунде эти вопросы тоже будут вне зачёта (но можно будет и +# учесть, см. ниже описание $NOCOUNT[2]). +# $NOCOUNT[1] = []; +# $NOCOUNT[1] = [ 2, 3, 4 ]; + +$NOCOUNT[1]= []; + + +# Второй раунд + +# Название раунда + +$NAME[2]="Стайер"; + +# Вопросы раунда + +$MINQUEST[2]=1; +$MAXQUEST[2]=18; + +# Список заключён в квадратные скобки, отдельные файлы разделены ЗАПЯТЫМИ. +# $FILES[2] = [ 'predvarit.mail', 'osnovn.mail' ]; +# +# ВНИМАНИЕ: формат этого параметра изменился с предыдущей версии! + +$FILES[2]= [ 'stayer.mail' ]; + +# Внезачётные вопросы в этом раунде. В квадратных скобках, через ЗАПЯТУЮ. +# Этот список ДОБАВЛЯЕТСЯ к уже перечисленным в $NOCOUNT[1]. Однако +# если вы хотите исключить какой-то из ранее указанных вопросов (например, +# в гипотетической ситуации "вопрос номер 5 был исправлен слишком поздно, +# поэтому в Спринте не учитывается, а для Стайера используется"), то +# укажите его номер со знаком минус: "3 -5 6" +# $NOCOUNT[2] = []; +# $NOCOUNT[2] = [ 3, -5, 6 ]; + +$NOCOUNT[2]= []; + + +######################################################### +# Теперь общие настройки +######################################################### + + +# +# Адрес листа z-info +# +$address = 'z-info@chgk.info'; +#$address="boris"; +# +# Обратный адрес дежурной команды и ее название +# +$fromaddress = 'Boris Veytsman '; +$DK = '"Дракоша"'; +# +# $date -- системная процедура, которая вычисляет МОСКОВСКОЕ +# время. В Линуксе zdump это делает хорошо. В других операционных +# системах надо как-то исхитряться... На самый худой конец, используйте +# $date=''; +# +$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 <