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