— Давай ищи. Но ты помни, что я тебе про книжечку Набокова рассказывал. Положи ее рядом с машиной и поглядывай иногда.
60
В процессе выбора инструментов разработки произошли серьезные сдвиги. Сорочкин устал играть в хоккей и взялся осваивать трехмерный «Тетрис». Игрушку каким-то непростым образом утянули прямо у разработчиков где-то в Долине месяца за три до релиза. Недоделанная немного, но у нас уже была. Результаты росли на глазах.
После трех-четырех часов упорного труда Сорочкин вдруг спохватывался и куда-то быстро уходил. Впрочем, куда он уходил, догадаться было несложно — либо за пивом, либо к товарищам-коллегам, обсуждать последние натыренные не пойми где игрушки.
Возвращался с целой кипой дискет и садился осваивать. Вдруг прямо перед носом у Сорочкина сначала одна буковка, потом вторая, третья и прочие другие посыпались вниз и образовали в нижней строке экрана что-то вроде братской могилы. Сорочкин некоторое время ошарашенно смотрел на пустой экран и наконец, прервав тяжелое молчание, разразился водопадом мата.
Заглянув по чистой случайности в родную контору, я стал свидетелем этого события: «А-а, подцепил-таки заразу. Теперь чисти давай».
Сорочкин почернел лицом, как квадрат, и стал чистить. На следующий день у нас появился антивирус Лозинского — со всякими скачущими, как блохи, буковками и прочими тринадцатыми пятницами он управлялся без проблем.
Нельзя сказать, что я сачковал. Напротив, я давно так интенсивно не работал. Задача меня захватила. Сначала я ее обобщил, поскольку слышал от людей знающих, что обобщенная задача иногда решается проще, чем частный случай, а если найти общее решение, его потом можно конкретизировать для своих скромных нужд. Но после моих обобщений задача превратилась во что-то абсолютно неудобоваримое: что-то вроде «для любого графа провести оптимизацию всего чего угодно». Это никуда не годилось, поскольку стала проглядывать какая-то нездоровая NP-полнота. Замаячил коммивояжер, которого по российским нетвердым дорогам мотает нелегкая.
Количество изрисованных листочков стремительно росло. А Женя уже начинал серьезно беспокоиться. Месяц прошел, а мы еще ни байта не сдвинули.
Радиус моего хождения вокруг проблемы постоянно увеличивался. Я бродил вдоль Царицынских прудов, сидел на бетонной трубе, по непонятным причинам залетевшей на вершину холма, и размышлял. Иногда закрадывалась и вовсе шальная мысль — пойти в ГПНТБ[5]полистать журналы. Может, все давно решено? Но эту предательскую мысль я отметал с мефистофельским смехом. Настоящий мужчина принимает вызов и бьется о стенку лбом, пока что-нибудь не треснет.
61
Сорочкин принес новую игру — «Пираты Карибского моря». Тут я тоже не выдержал. Поднялся на капитанский мостик звонкой, как мандолина, шхуны и занялся серьезным мужским делом: нападать на испанский Treasure Fleet, топить галионы и фрегаты, собирать денежки и искать сокровища майя. Игрушка затянула всех. Женя хоть сам и не играл, поскольку у него на такую хренотень времени ну совершенно не было, часами сидел рядом и давал советы. Иногда вполне дельные. Например, он первый заметил, что в нашей игрушке роза ветров вполне реальная. Тут же была найдена толстая сугубо научная книга по гидрографии Карибского моря и тщательнейшим образом проштудированы все ветра и течения. Это, конечно, очень продвинуло нас в выполнении заказа терпеливого Моргстроя.
Мы с гиканьем и свистом бороздили Наветренный пролив, женились на дочках губернаторов то Ямайки, то Провиденса, пили ром на Кюрасао, ходили на Тортугу добирать побитую команду, брали штурмом Панаму и чувствовали себя превосходно.
Тут в нашей жизни произошло крайне приятное событие. Наш кооператив во главе с председателем Колей приобрел два настоящих 286-х компьютера с цветными мониторами. За них отдали подержанный грузовик вполне на ходу. Играть стало еще интереснее. Ветер над Карибами крепчал, сокровища майя в руки не давались.
Наконец Женя оторвался от созерцания наших веселых роджеров: «Мне сдается, что вам 500 тысяч нарисованных дороже, чем 500 настоящих».
Так ведь и было! Но мы, как крайне ответственные люди, все-таки оторвались от захватывающей игрушки и вернулись к трудовым будням: Сорочкин — играть в «Тетрис», а я — изводить бумагу.
62
Я разложил свои бумажки и понял, что решение давно найдено, просто в целом ворохе макулатуры я его не сразу увидел. Я вычеркнул всякую дребедень, взял чистый лист и написал алгоритм обхода графа и распределения ресурсов. Насколько это еще далеко от программной реализации, я даже не представлял, но первый шаг был сделан уверенно.
Коля пригласил двух математиков из ИПУ[6]. Одного — очень крупного, второго — поскромнее.
За полчаса с перекуром я рассказал свой алгоритм. Очень крупный сказал: «Ранг — он и в Африке ранг». Второй подтвердил: «Я ведь почему предлагал линейное программирование? Исключительно из общих соображений. Но если у вас есть такое элегантное решение, конечно, я не настаиваю. И поздравляю».
Я исполнился гордости, а Коля предложил написать статью в математический журнал. Я сразу как-то заскучал и спустил это дело на тормозах: чтобы писать статью, как раз надо идти в библиотеку, а это и в лом, да и некогда.
Сорочкин нашел золото майя. Но оказалось, что «Пиратов» наших писали законченные ламеры: когда главный герой Карибского моря засыпал золото майя в трюма, у него оказалась запредельная с точки зрения игрушки сумма наличности — программа хрюкнула, поморгала и обнулила весь его золотой запас, добытый тяжелейшим трудом. Вот это был мат! Игрушка была с гневом убита насмерть.
Вернувшийся в действительность Сорочкин хмуро заметил, что хватит мне страдать фигней и пора разбираться с библиотекой, в которой он уже замечательно разобрался, так что, если я вдруг чего не пойму, — он объяснит. Библиотека по объему кода была не то чтобы очень большая — на «Войну и мир» не тянула, максимум — «Анна Каренина» пополам. Объяснял Сорочкин так: «Да блин, вот. Ясно же, как на ладони. Короче, иди в отладчик и стучи».
Отладчик в Турбо Pascal 5.0 был замечательный. Всякий раз, когда мне случалось им пользоваться (а случалось это почти каждый день), я думал о его разработчиках почти с нежностью.
Я сел писать алгоритмическое ядро, а Сорочкин — интерфейсы и управление данными.
Женя немного успокоился:
— Мои программисты — ребята увлекающиеся, вот сейчас они увлеклись программированием.
63
Долгими осенними ночами, когда ветер воет в щель над фрамугой, а дождь захлестывает пространство, в нашей комнате кипела работа, согретая светом разума и страсти. Тишина прерывалась только короткими емкими репликами.