Вечером явилась Марина Вадимовна. Она была весьма довольна проделанной за день работой. А я нет! Она выдала мне копии заданий с олимпиады, чтоб я «не опозорился». Разругались в пух и в прах. Она меня заставляет сжульничать, а я её убеждал, что «нахрен мне это надо».
— Да ты знаешь, на что мне пришлось пойти, чтоб достать задания?! — Кричала она на меня.
— И знать не хочу?! — Кричал я в ответ. О самом плохом я даже думать не хотел. Как представлю толстого, очкастого профессора информатики целующего Машу, и своими жидкими седыми кудряшками щекочущего её носик, так прибить всех вокруг охота. И ведь ясно представляю, что у неё есть и деньги и связи, но в голову лезет только самое ценное, что она может предложить. Но как бы я себя не накручивал, но способ получения заданий через постель я даже не смею озвучить. Обидится и не простит. А если вправду так, то я обижусь. Пусть уж лучше молчит.
— Чёрт с тобой, отдам мелким, пусть готовятся! — Будто я не мельче их! — Может они оценят мои старания!
— Я тогда ни одного задания не сделаю. Уравняю шансы. — Возражаю я против нечестного соревнования. Ладно бы нам это очень надо было. Победителю кроме грамоты ничего не дадут.
— И откуда ты такой честный? Честный и глупый! — Возмущалась она.
В споре я, конечно, победил. Можно сказать, что «девочку включил». Топая ножками по полу, кричал: «Не хочу, не буду!». Выбросили задания в мусор, и обиженные сидели на разных сторонах кровати. Вечером она сама пришла мириться. И что бы ни говорили, но примирительный секс не так уж и хорош. Лучше не ссориться, или спать после на разных кроватях.
Настали выходные, которые мы пробегали по городу. Марине Вадимовне прямо необходимо было всё посмотреть и нам показать. Театр! Я за всю жизнь столько по театрам не ходил. Зато обедали в приличных ресторанах. Наш руководитель не соглашалась на обычный общепит.
Наконец началась олимпиада. Согнали кучу ботанов-студентов в актовый зал. Рассадили всех за парты и выдали задание. В первый день выдали задания по математике: сложение, вычитание, умножение и деление. Вроде бы просто, но числа в двоичной, восьмиричной и шестнадцатиричной системе исчисления. Ещё и в 64 разряда, чтоб калькуляторами не пользовались. Даже в самых крутых калькуляторах цифр не хватит число ввести.
Не зная метода решения таких математических примеров, даже компьютер не поможет. А если знаешь, как решать, то всё сводиться к умению оперировать в нестандартной системе исчисления. Не можешь F прибавить к A в уме, то переводи в десятичную систему, прибавляй и переводи обратно. Ничего сложного, только время уходит уйма.
Я две третьи задания решил «на ура». А вот с восьмиричной системой исчисления пришлось повозиться — не используется она в программировании.
После того как собрали листки с решениями, в актовом зале устроили выступления коллективов творческой самодеятельности. Целый час мы смотрели песни и пляски, а также зачитывания стихов местных детишек.
Только после того как сцену покинул мальчик, рассказавший стих про родину, нам огласили результаты олимпиады. Как и ожидалось, первое место мы не заняли. Хотя в пятёрку вошли. Всё-таки кучка гиков и задротов понаехала. Как я вообще здесь оказался? Неужели я такой же?!
Дальше всё было так, как распланировала Марина Вадимовна. Обед. Экскурсия по городу. Ужин. Секс, но только в моем личном расписании. Сколько бы студенты не слушали наши стоны и скрип кровати, сами оставались равнодушны друг к другу. До сих пор общаются как незнакомые люди.
В следующий день испытаний нам выдали набор логических задач. Для составления программ требовались только стандартные операторы условного перехода и циклы. Всё в рамках программы обучения. Смотрели только правильность построения логики, а по времени только формально ограничивали. Так-то все закончили раньше времени.
Для работы на каждом столе стояло по компьютеру, с установленным на нем «борланд С». Вот такие вот древности!
Как ни странно, но в этом конкурсе были свои аутсайдеры. Некоторые не смогли распознать необходимость использования цикла с проверкой условия в конце цикла. Такой цикл все изучают, но применять его практически негде. И на этой хитрой задаче половина и завалилась. Хоть их программы и работали, но уже не так как требовалось. Вдобавок у некоторых вылезли ошибки по невнимательности. И как результат наша команда была в лидерах, наряду с ещё двумя группами.
Третий день был посвящён работе с массивами. И тут уже проверялась скорость работы программы. Необходимо было отсортировать все элементы базы данных, и как оказалось способов сортировки несколько десятков. Вот сам бы никогда не подумал! И побеждала та команда, которая составит самый скоростной код программы. Вот тут и пригодились мои познания в ассемблере. Так как язык С позволяет делать фрагменты кода на низкоуровневом языке, то и правила при этом не нарушаются. Но вот только немногие знают об этой лазейке, а кто знает, тот не умеет. В состязании счет идет на миллисекунды, и моя программа оказалась самой скоростной. Ну почти… Только один хитрец меня обогнал, но только за счет того, что его программа обрабатывала только половину массива. Как результат, она быстрей в два раза среднего показателя. Но читер и не подумал, что будут сверять правильность результатов работы программы. На этом он и запоролся. Похлопал невинно глазками, сказал «Ой, ошибся!». Мне хотелось его убить за такую наглость, а его только пожалели. Сказали «Ошибся? С кем не бывает!». Ну, хоть в хвост рейтинга скинули мошенника. И я красовался в лидерах общего соревнования. Так же наша команда была первой по среднему времени. Хоть и наши студенты были в середине рейтинга. Но я — молодец. Я нас всех вытянул.
В тот вечер меня ещё и Маша наградила за заслуги. Чуть не сломали кровать!
Следующее задание было на вычисление числа ПИ до миллионного знака. Я сразу заявил, что это бред. Так как этим занимаются, только чтоб крутость компьютера проверить. Алгоритм давно отработан, оптимизирован и выложен в интернет. А нормальные программисты не в курсе, по каким хитрым формулам это всё рассчитывать.
Моё возмущение многие подержали, и мы дружно сломали систему. Организаторы разрешили пользоваться интернетом. Но только для поиска формулы. Нажатием одной кнопочки у всех появился интернет.
Писать код никто не стал, просто скачали. Победила дружба! Все были рады, ну кроме организаторов. Программу тестировали на скорость, но она (и скорость, и программа) оказалась у всех одинакова.
Последний день был уже более продуманный. На стенде были написаны формулы из геометрии. Уравнение прямой, круга и кривой Безье. Каждое уравнение было с пояснительным рисунком, и кратким описанием.
Задание подразумевало коллективную работу. И, похоже, это наше слабое место. Так как коллектив из нас никакой. Нам выдали данные записанные в массив, а из него мы должны получить картинку. Если с кругом ещё понятно: центр и радиус. То с кривой Безье пришлось поломать голову.
Я как лидер группы распределил обязанности. Девочка-мышь (так и не запомнил, как зовут) делала модуль отрисовки круга по данным из массива. Мальчику отдал кривую Безье. Сам же взял себе прямую и общий алгоритм обработки. Накидал им формат входящих данных и исходящих. И мы дружно взялись за работу.
Первой закончила работу мышь. Так как у меня ещё не был готов главный модуль, чтоб проверить работу, то отправил её помогать мальчику. Ну, или стоять над душой — как получится. Сам же мучился с прямой. То ещё занятие! Прямую горизонтальную или вертикальную линию нарисовать легко. Чуть сложней произвольную в пространстве. И совсем сложно по математическим формулам, и неизвестным данным. Нарисовалась одна линия — а я не знаю, так она должна выглядеть или нет.
Вроде сделал, и какой-то рисунок получил из прямых. Но стоило прилепить модуль мыши, как всё пошло к чёрту. Наши рисунки не стыковались. Проверил её — всё верно! Проверил себя — не учёл минус в формуле, и все оказалось зеркально. Поправил и подоспели кривые Безье. Прилепил, и опять не сходится. Этот черт входящие точки местами перепутал! И это «перепутал» мы втроём пятнадцать минут искали. Когда нашли, я ему зарядил подзатыльник за невнимательность, а хотелось дать в глаз.