I Командный чемпионат Санкт-Петербурга по программированию

Санкт-Петербург, 1993 год

Задачи

Задача 1. Шахматные фигуры

Имеется условная шахматная доска в виде матрицы 8×8 элементов. "белые" элементы матрицы имеют значение 0, "черные" - 1.

На эту доску выставляются три белые шахматные фигуры. Элементы матрицы имеющие значение 1 или "черные" клетки шахматной доски, находящиеся под боем этих фигур, обнуляются, т.е. элементам матрицы присваивается значение 0. Ваша программа должна подсчитать и вывести на экран дисплея общее количество оставшихся элементов матрицы, имеющих значение 1. Исходные данные находятся в ASCII-файле z1.dat в следующем формате:

Для обозначения фигур используется кириллица: Кр - король, Ф - ферзь, Л - ладья, С - слон, К - конь, п. - пешка. Поле обозначается маленькой латинской буквой и цифрой. Количество одноименных фигур не ограничено, может быть, например, и три ферзя. Все фигуры "бьют" по шахматным правилам. Исходные данные корректны, и их проверка не требуется.

Результаты выводятся на экран дисплея. Для каждого набора исходных данных выводится сам набор и ответ.

Пример

z1.datвывод программы
2
п.c2 п.a2 п.b2
п.c2 п.a2 п.e2
п.c2 п.a2 п.b2  ответ: 30
п.c2 п.a2 п.e2  ответ: 32

Задача 2. Распознаватель АнTOX

Имеется "экран" 10×10 элементов. На "экране" может быть изображена буква Т или буква О или буква Х. Ваша программа должна распознать образ буквы. Определение букв:
Буква Озаполненный прямоугольник с прямоугольным вырезом внутри.
Буква Тдва прямоугольника, причем один лежит на другом и верхний выступает относительно нижнего вправо и влево.
Буква Хлюбое другое состояние экрана.

ПРИМЕЧАНИЕ. При состоянии "экрана", изображающим буквы О или Т, незанятые изображением элементы "экрана" - пустые.

ПРИМЕРЫ букв:
Буква ОБуква ТБуква Х
0000111111
0000110111
0000111111
0000111111
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0111111100
0111111100
0000010000
0000010000
0000000000
0000000000
0000001111
0000001101
0000001111
0000000000
0000000000
0001111100
0000010000
0000010000
0000000000

Исходные данные находятся в ASCII-файле Z2.DAT в следующем формате:

Вывод результатов производится на экран дисплея в виде последовательности букв.

Пример

z2.datвывод программы
2
0000000000
0000000000
0001111110
0001100110
0001111110
0000000000
0000000000
0000000000
0000000000
0000000000

0000000000
0000000000
0000000000
0011111000
0000100000
0000100000
0000100000
0000000000
0000001000
0000000000
Ответ: ОХ

Задача 3. Форматирование программы

Декларативная часть (описание переменных) во многих языках программирования высокого уровня выглядит красивее, если текст специальным образом отформатирован по колонкам. Ваша задача написать программу, которая форматирует декларативную часть, написанную на некотором языке программирования.

Исходные данные состоят не более чем из 50 строк, каждая из которых содержит (в указанном порядке):

Пробелы между любыми двумя пунктами могут как отсутствовать, так и присутствовать в любом количестве. Идентификатор может состоять из больших и маленьких латинских букв, цифр и символа подчеркивания (_). Текст комментария содержит по крайней мере один символ.

Программа должна отформатировать заданный текст описания по следующим правилам:

Исходные данные программа должна считывать из файла PRINT.DAT, а отформатированный текст помещать в файл PRINT.SOL.

Пример

print.dat
code: codeblock;
ident:type;
 lines : integer;
 linenum :  integer ; -- line number counter for loop
                                       maxidentlen : integer ;
 dummy:                                              integer;
list     :   array_of_real    ;  --This is a big list of things;
print.sol
  code        : codeblock;
  ident       : type;
  lines       : integer;
  linenum     : integer;       -- line number counter for loop
  maxidentlen : integer;
  dummy       : integer;
  list        : array_of_real; -- This is a big list of things;