| |||||
| Главная События О нас Учебная часть Студенты Преподаватели [Школа 1189] | |||||
| Учебные материалы Текущий учебный год [Курчатовская Олимпиада] |
Курчатовская Олимпиада по информатике состоит из двух туров: заочного и очного. Очный тур будет происходить в Москве, в конце января -- начале февраля 2005 года. Отбор участников очного тура происходит по результатам заочного тура. В олимпиаде может принимать участие любой школьник, обучающийся в 1-11 классе любой школы России.
Правила проведения заочного тура таковы: желающим предлагается две задачи, которые решаются дома, и не позднее 22 января решения отсылаются по электронной почте нам: olymp05@inse.ru. Решения, присланные позднее 22 января, не рассматриваются ни при каких обстоятельствах. Дата поступления решений определяется днём получения нами вашего электронного письма. В присланных решениях должно содержаться следующее:
Важное замечание: не обязательно делать обе программы. Если вы сделали только одну, или даже половину программы -- присылайте получившееся нам, мы разберемся.
Очный тур будет проходить на территории РНЦ "Курчатовский Институт" в начале февраля. Участники, допущенные до очного тура, будут извещены об этом по электронному адресу, с которого было отослано решение. Также, список участников будет опубликован на этой странице после окончания заочного тура.
Победители и лауреаты будут награждены ценными призами и красивыми грамотами.
Для передачи данных по синхронным каналам связи часто используется HDLC-подобная структура пересылаемых пакетов, называемых кадрами. Поток кадров является битовым потоком, поскольку передаваемые данные интерпретируются на уровне отдельных битов.
Условимся о следующих терминах: данные - это информация, предназначенная для передачи между двумя точками и разделённая на логические блоки, размер которых кратен восьми битам; кадр - совокупность блока данных и его контрольной суммы; пакет - кадр, над которым произведена операция стаффинга.
HDLC-поток устроен следующим образом:
, правда, с некоторой модификацией,
которую мы рассмотрим ниже.
На передатчике сначала производится расчёт контрольной суммы потока данных, затем она дописывается к потоку данных. В результате этого из блока данных образуется кадр. Над кадром происходит операция стаффинга: кадр превращается в пакет. В линии пакеты отделяются друг от друга одним или более байтами 0x7E.
Приёмник делит битовый поток из линии на пакеты, производит операцию дестаффинга, получая кадры. Затем разделяет кадр на блок данных и переданную контрольную сумму, расчитывает контрольную сумму блока данных и осуществляет сравнение двух контрольных сумм.
.
Подсчёт контрольной суммы (CRC, Cyclical Redundancy Code) основан на нахождении
остатка от деления полинома данных на порождающий полином. Остаток - это
полином, который, будучи рассмотрен как битовая последовательность, и является
контрольной суммой. Деление полиномов происходит по модулю два, то есть
обычная операция вычитания заменяется двоичным вычитанием (или сложением -
это всё равно) без переноса или заёма.
Контрольная сумма данных получается так:
, и делим получившийся полином на порождающий.
Получаем первый остаток от деления.
0000 1100 0000 0000 0000 0000
1000 1000 0001 0000 1
100 0100 0000 1000 01
10 0010 0000 0100 001
1 0001 0000 0010 0001
1000 1000 0001 0000 1
0000 0100 1000 0001 0000 1000
100 0100 0000 1000 01
0000 0000 1100 0001 1000 1100
10 0010 0000 0100 001
1 0001 0000 0010 0001
-----------------------------
0000 0000 1100 0001 1000 1100
Остаток от деления равен 1100 0001 1000 1100. Теперь возьмём 16 единиц и 8 нулей (длина данных) - 1111 1111 1111 1111 0000 0000. Второй остаток равен 1110 0001 1111 0000. Результат сложения по модулю два остатков и числа 0xFFFF равен 1101 1111 1000 0011. Это и есть контрольная сумма, которая равна 0xC1FB, если вернуться к привычному порядку битов.
С учётом контрольной суммы кадр получается следующим: 0x30, 0xFB, 0xC1. Или в двоичном виде (самый первый передаваемый бит слева): 0000 1100 1101 1111 1000 0011. Жирным выделена последовательность из пяти единичных битов, к которой после проведения стаффинга добавится нулевой бит. Следовательно, пакет выглядит так: 0000 1100 1101 1111 0100 0001 1. Полностью оформленный битовый поток будет иметь следующий вид: 0111 1110 0000 1100 1101 1111 0100 0001 1011 1111 0. Это пример ещё раз демонстрирует, что размер передаваемых данных не кратен одному байту.
Дефреймер принимает битовый поток, состоящий из HDLC-пакетов, и превращает его в пакеты данных. Битовый поток читается из одного файла; данные записываются в другой файл. Битовый поток не обязательно начинается с последовательности 0111 1110 - её ещё необходимо найти (синхронизоваться с потоком); в потоке может находиться произвольное количество пакетов; никаких предположений о длине каждого пакета не делается. Необходимо выделить из потока каждый пакет, подсчитать его контрольную сумму, сравнить её с передаваемой вместе с самим пакетом. Если сумма правильная и размер пакета кратен одному байту, то содержимое пакета добавляется к выходному файлу. если же сумма неправильная или размер пакета не кратен байту, то печатаем сообщение об ошибке и содержимое неправильного пакета. Затем переходим к обработке следующего пакета.
Эмулятор физической линии читает из одного файла HDLC-поток, с некоторой вероятностью инвертирует произвольные биты потока (симулирует помехи в линиях передачи), и записывает получившийся поток в выходной файл. Эмулятор портит биты, выбранные случайным образом; процент инвертированных битов является вещественным числом, находящимся на отрезке [0;100], и задаётся параметром командной строки эмулятора.
Замечание: в реальных линиях процент инвертированных битов, при котором ещё возможна синхронизация, - это величина порядка одного процента. Поэтому не следует ожидать, что при более высоком проценте ошибок в линии вы сможете синхронизироваться с потоком и восстановить данные. Однако, это не означает что эмулятору всегда будут передаваться числа меньше единицы.
Существует множество различных типов кроссвордов: обыкновенные, финские, японские и т.д. В отличие от обычных кроссвордов, где требуется отгадывать слова, в японском кроссворде зашифровано изображение. Вам предлагается реализовать программу, строящую по известному изображению японский кроссворд.
Сам кроссворд представляет из себя прямоугольную область, состоящую из квадратов (клеточек), которые могут быть закрашены различными цветами. Сверху каждого столбца и слева от каждой строки расположены по порядку несколько чисел. Возможно, что эти числа выкрашены в разные цвета, тогда кроссворд называется цветным. Если цвет чисел один, то кроссворд чёрно-белый. Сами числа являются длинами горизонтальных (для чисел слева от строки) и вертикальных (для чисел сверху от столбца) блоков из квадратов, закрашеных в соответствующий цвет. Среди всех цветов, присутствующих в кроссворде, один называется цветом фона; вертикальные или горизонтальные блоки данного цвета не учитываются при составлении кроссворда. Суть кроссворда состоит в том, чтобы угадать где находятся блоки цвета фона и какой у них размер.
Для чёрно-белого кроссворда между блоков чёрного цвета всегда присутствует блок цвета фона. Для цветных кроссвордов такого ограничения нет. Тем не менее, между блоками одного цвета всегда должен находиться блок другого цвета (быть может цвета фона). Блоки разного цвета могут примыкать друг к другу вплотную.
Числа, находящиеся в строках и столбцах, не должны противоречить друг другу, то есть картинка должны восстанавливаться из этих чисел некоторым образом.
В случае невозможности построения непротиворечивого решаемого кроссворда программа должна информировать об этом пользователя. Если кроссворд строится, то он должен быть визуализирован.
Ещё раз обращаем ваше внимание: кроссворд должен решаться.
| Главная События О нас Учебная часть Студенты Преподаватели Школа 1189 | |
| INSE WWW team | Обновлено: |