1: %$Id: process.tex,v 1.1 2002/02/04 15:04:07 boris Exp $
2: %$Log: process.tex,v $
3: %Revision 1.1 2002/02/04 15:04:07 boris
4: %Initial revision
5: %
6: %Revision 1.9 1998/11/29 21:56:12 boris
7: %Добавил благодарности
8: %
9: %Revision 1.8 1998/11/29 21:50:48 boris
10: %Добавил изменения в формате.
11: %
12: %Revision 1.7 1998/11/17 22:48:33 boris
13: %Отказался от попытки включить программу в файл -- не совместимы с кои-8
14: %:(
15: %
16: % Revision 1.6 1998/11/17 17:02:51 boris
17: % Добавил регистрационные номера в формат.
18: %
19: % Revision 1.5 1998/11/15 04:52:25 boris
20: % Написал интерфейс.
21: %
22: %Revision 1.4 1998/11/15 03:38:25 boris
23: %Написал раздел "Форматы"
24: %
25: %Revision 1.3 1998/11/15 02:35:43 boris
26: %Исправил заголовки
27: %
28: \documentclass{article}
29: %
30: % Руссификация. Бывает и новее...
31: %
32: \usepackage{lh,russian,koi8}
33: \usepackage{amsmath}
34: \newcommand{\prog}[1]{\ensuremath{\text{{\textsl{#1}}}}}
35:
36:
37:
38: \begin{document}
39:
40: \title{Программа для обработки писем в IGP}
41: \author{Boris Veytsman, \texttt{boris@plmsc.psu.edu}}
42: \date{November 1998}
43: \maketitle
44: \thispagestyle{empty}
45: \tableofcontents
46:
47: \section{Введение}
48:
49: С тех пор, как количество команд в IGP превысило первый десяток,
50: подведение итогов тура стало тяжким бременем для дежурной
51: команды. Прочесть невероятное количество писем, извлечь ответы,
52: составить таблицу, да еще Собрание Сочинений\dots{} На это вполне может
53: уйти целиком рабочий день. Именно с этой целью по предложению Якова
54: Зайдельмана написана эта программа.
55:
56: Идея состоит в следующем. Самый важный этап в деятельности дежурной
57: команды---решить, заслуживает ли данный ответ плюса или минуса. Это мы
58: автоматизировать не можем. Но это автоматизировать и не надо. А вот
59: все остальное автоматизировать можно и нужно. Значит, программа должна
60: делать следующее:
61: \begin{enumerate}
62: \item Извлекать ответы из файла с письмами команд
63: \item Записывать их в файл, где все ответы были бы рядом, и было бы
64: оставлено место для оценки
65: \item Читать этот файл \emph{после} того, как дежурная команда
66: проставит оценки и составлять таблицу и собрание сочинений.
67: \item Время от времени создавать список команд, чьи ответы уже
68: получены, и слать на информационный лист.
69: \end{enumerate}
70: Необходимо учесть еще два важных обстоятельства:
71: \begin{enumerate}
72: \item Команда может прислать несколько писем. В этом случае более
73: позднее письмо считается более авторитетным, чем более раннее. Мы
74: будем предполагать для простоты, что более поздние письма находятся
75: в файле с письмами позже более ранних. Дело дежурной
76: команды---обеспечить такой порядок писем (может быть, вручную
77: корректируя взбрыки e-mailа).
78: \item Дежурная команда может оценивать ответы параллельно их
79: получению. Поэтому нельзя ``забывать'' старые оценки, читая новые.
80: \end{enumerate}
81:
82:
83: \section{Форматы}
84:
85:
86: \subsection{Письма с ответами}
87:
88: \begin{enumerate}
89: \item Каждое письмо содержит в строке Subject: строку в латиннице:
90: \begin{verbatim}
91: Subject: Otvety komandy "Nazvanie_komandy", NNN
92: \end{verbatim}
93: При этом название команды не должно содержать кавычек, а
94: \prog{NNN}---регистрационный номер команды. Если у команды еще нет
95: регистрационного номера, допускается его НЕ указывать
96: \item В теле письма может быть все, что угодно, вплоть до строки
97: \begin{verbatim}
98: *** "Название_команды", NNN
99: \end{verbatim}
100: При этом название команды может быть как в латиннице, так и в
101: кириллице, но быть \emph{одинаковым} для всех писем от данной команды
102: \item Каждый ответ имеет следующую структуру:
103: \begin{verbatim}
104: #NN. Текст ответа
105: Текст ответа
106: ...
107: \end{verbatim}
108: Здесь \prog{NN}---номер вопроса, а за ним следует текст ответа
109: (возможно, из нескольких строк)
110: \item Ответы заканчиваются строкой
111: \begin{verbatim}
112: ***
113: \end{verbatim}
114: После этой строки может следовать все, что угодно.
115: \item В тексте письма не рекомендуется употребление символов
116: ``\prog{\#}'' и ``\prog{*}'' и \emph{запрещается} их
117: употребление первыми в строке (или после пробелов).
118: \end{enumerate}
119:
120: \paragraph{Пример:}
121: \begin{verbatim}
122: Date: 12 Nov 98 18:31:53 MSK
123: From: Aleksandr Ivanov <ivanov@boga.net>
124: To: catamaran@hal.plmsc.psu.edu
125: Subject: Otvety komandy "Stop", 222
126:
127: Здравствуйте, уважаемые игроки Катамарана!
128:
129: Большое спасибо за вопросы.
130:
131: *** "Стоп", 222
132: #1. Сид
133: #2. Мышка-наружка
134: #3. Ллойд-Джордж
135: #4. В жирафа
136: #5. Шалтай-Болтай, Барклай де Толлли
137: #6. У Геркулесовых столпов.
138: #7. В коров
139: #8. Глокая куздра
140: #9. Александр Македонский и Гордий I
141: #10. Поставить точку над i.
142: #11. Кольцо Нибелунгов, Вагнер, Мефистофель
143: #12. Венера
144: ***
145:
146: Капитан команды "Стоп"
147: Александр Иванов
148: \end{verbatim}
149:
150:
151: \subsection{Формат файла с результатами}
152:
153: Файл с результатами состоит из ответов. Каждый ответ имеет следующую
154: структуру:
155: \begin{enumerate}
156: \item Заголовок
157: \begin{verbatim}
158: #NN. Frequency: f. Score: s
159: \end{verbatim}
160: Здесь \prog{NN}---номер вопроса, а \prog{s}---оценка, один из
161: трех символов: \prog{+}, \prog{-} или \prog{?}.
162: \item Собственно текст ответа:
163: \begin{verbatim}
164: Текст ответа
165: Текст ответа
166: ...
167: \end{verbatim}
168: При этом каждая строка текста начинается с двух пробелов.
169: \item В конце всех ответов идет строка из трех звездочек:
170: \begin{verbatim}
171: ***
172: \end{verbatim}
173: \end{enumerate}
174:
175:
176: \subsection{Формат таблицы результатов}
177:
178: Таблица результатов имеет следующий формат:
179: \begin{verbatim}
180: N 1 2 3 4 5 6 7 8 9 10 11 12 О Р КОМАНДА
181: 111 + + + + + + + + + + + + 12 359 Марсиане
182: 436 + + + + + + + + + + + + 12 359 Venera II
183: [...]
184: Р 24 21 34 24 41 43 18 31 26 32 36 29
185: \end{verbatim}
186: В последних графах стоит полное число взятых вопросов и суммарный
187: рейтинг соответственно. В последней строке таблицы---рейтинги
188: вопросов.
189:
190: \subsection{Формат собрания сочинений}
191:
192: Собрание ответов на каждый вопрос имеет следующую структуру:
193: \begin{enumerate}
194: \item Заголовок раздела
195: \begin{verbatim}
196: ВОПРОС NN:
197: \end{verbatim}
198: \item По два заголовка подразделов:
199: \begin{verbatim}
200: ЗАСЧИТАНЫ ОТВЕТЫ:
201: \end{verbatim}
202: и
203: \begin{verbatim}
204: НЕ ЗАСЧИТАНЫ ОТВЕТЫ:
205: \end{verbatim}
206: \item Каждый ответ имеет формат:
207: \begin{verbatim}
208: s Текст ответа
209: Текст ответа
210: ... [f]
211: \end{verbatim}
212: Здесь \prog{s}---один из символов \prog{+} или \prog{-},
213: \prog{f}---частота ответа, которая печатается только если она не равна
214: единице.
215: \end{enumerate}
216:
217:
218:
219: \section{Пользовательский интерфейс}
220:
221:
222: \subsection{Основная программа}
223:
224: Дежурный по туру складывает все письма в файл. Время от времени он
225: запускает команду
226: \begin{verbatim}
227: processmail.pl [-d] [-t table_file] [-m mail_file] [-o results]
228: \end{verbatim}
229: где
230: \begin{description}
231: \item[table\_file] файл с предыдущими оценками (по умолчанию
232: отсутствует),
233: \item[mail\_file] файл с письмами (по умолчанию---стандартный вход),
234: \item[results] файл с результатами (по умолчанию---стандартный
235: выход).
236: \end{description}
237:
238: В этом файле вручную расставляются плюсы и минусы.
239:
240: Флаг \prog{-d} означает ``Debigging mode''. В этом режиме программа
241: печатает массу дополнительной информации.
242:
243: \subsection{Сводка}
244:
245: Время от времени дежурный запускает программу
246: \begin{verbatim}
247: reminder.pl [-t table_file]
248: \end{verbatim}
249: Она генерирует список команд, которые имеются в файле с таблицей (по
250: умолчанию---стандартный выход), и посылает его на z-info.
251:
252:
253: \subsection{Результаты}
254:
255: Итоговая таблица и собрание сочинений генерируются программами
256: \begin{verbatim}
257: createtable.pl [-d] [-t table_file] [-m mail_file] [-o results]
258: collection.pl [-d] [-t table_file] [-m mail_file] [-o results]
259: \end{verbatim}
260: Ее ключи имеют то же смысл, что и у программы \prog{processmail.pl}.
261:
262: \section{Программа}
263:
264:
265: \subsection{Внутреннее представление данных}
266:
267: Сведения о командах хранятся в хэше \prog{\%teams} со следующими
268: полями:
269: \begin{description}
270: \item[ключ] название команды
271: \item[элемент] ссылка на анонимный хэш \prog{\%teams\{\$team\}} с
272: полями:
273: \begin{description}
274: \item[\prog{regnum}] регистрационный номер
275: \item[\prog{answers}] ссылка на массив из ответов
276: \item[\prog{score}] общий итог
277: \item[\prog{rating}] общий рейтинг
278: \end{description}
279: \end{description}
280:
281: Сведения о вопросах хранятся в массиве \prog{\%answers}. Его
282: элементы---ссылки на анонимные хэши. Ключи в хэшах---тексты ответов,
283: а элементы---опять таки ссылки на хэши следующего содержания:
284: \begin{description}
285: \item[\prog{score}] \prog{+}, \prog{-} или \prog{?}
286: \item[\prog{teams}] массив команд, давших этот ответ
287: \end{description}
288:
289: \subsection{Глобальные переменные}
290:
291: Мы используем следующие глобальные переменные:
292: \begin{description}
293: \item[\prog{\$MAXQUEST}] максимальное число вопросов
294: \item[\prog{\$DEBUG}] флаг, показывающий, задана ли debugging mode.
295: \end{description}
296:
297:
298:
299: \section{Благодарности}
300:
301: Я благодарен Якову Зайдельману, Льву Горенштейну, Алексу Покрасу и
302: Дмитрию Рубинштейну за помощь в разработке этой программы.
303:
304: \end{document}
305:
306: %%% Local Variables:
307: %%% mode: latex
308: %%% TeX-master: t
309: %%% End:
310:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>