|
Бесплатный проезд в электричках
Xakep, номер #048, стр. 048-058-3 Оно было их секретом. Прелюдия Все началось в марте 2001-го... На большинстве лекций было скучно, дома печально, а в аквариуме (наш компьютерный класс) грустно. И вдруг, как гром среди ясного неба, Миша предложил новый увлекательный проект... И мы, почти всей группой, стали ходить на вокзал, собирать билетики и анализировать их. Наш аквариум был сразу же перепрофилирован из места, в котором происходят великие битвы в Starcraft и поля для сражения в шахматы по интернету с сокурсниками из соседней части аквы, в центр обработки билетов. Треть людей вносила их в базу данных, треть рядом писала различные программки для их анализа, а другая треть сидела на лекциях, вглядываясь в бесконечные потоки цифр и аббревиатур. Постепенно начала выявляться некая логическая структура. И вдруг, на одной из лекций, наш чемпион Александр Штучкин уловил определенную закономерность (вспомните фильм "Игры разума" со сценой в Пентагоне :)). Это был поворотный момент, после которого наши исследования перешли на новый качественный уровень. Однако вскоре наступила сессия, и приоритеты сдвинулись. Летом '01 была написана программа, которая по известным нескольким билетам одной даты выдавала все варианты масок, отбрасывая те, которые не подчиняются парному закону. О них будет сказано чуть позже. Вскоре был сделан новый (и на данный момент последний) качественный скачек, и в программу была добавлена функция, по которой стало достаточно лишь одного билета для каждой даты. Четыре константы Константы так названы потому, что их значение не изменяется в течение дня. Возникает даже здоровое подозрение, что это дата... Однако самое смешное, что одна из констант все-таки меняется. Но мы заметили это слишком поздно, и потому поле сохранило свое название. В науке, а особенно в физике, существует масса примеров, когда первоначальное неправильное представление о чем-либо приводило к неправильной терминологии, которая продолжает использоваться в силу привычки. Мы же, подобно физикам-экспериментаторам, следуя их дурному примеру (а он, как известно, заразителен), сохранили за этим полем название константа. Повторим константы: CZ0, CN0, CK0 и та самая заблудившаяся потеряшка, псевдоконстанта CN1. Как корабль назовешь, так он и поплывет. Внимательный читатель обратит внимание на то, что в названия констант входят имена других полей. Почему так, будет объяснено дальше, в следующем абзаце... Танец Датского короля или "Закон пар" Изучая первые полученные маски, мы обнаружили, что расположение полей день изо дня "скачет". И вскоре, изучая эти "скачки", заметили, что все перестановки осуществляются только парами. То есть существуют 8 неразлучных пар, которые и переставляются. Чем руководствовались разработчики, нам непонятно. Вряд ли у них была цель нас запутать, потому что так нам стало гораздо легче - мы смогли различать константы. Просто назвали константу именем поля, которое находится с ней в одной связке. Далее мы призадумались над тем, как осуществляются перестановки пар. Искали период, но безуспешно. Казалось бы, вот расположение пар повторяется на девятый день. Ждем еще "9 дней, 9 ночей", ожидая ту же маску... как бы не так - другая. И только много месяцев спустя мы нашли период. Он оказался равным 16 дням. Притом, что масок всего 10. То есть внутри периода тоже бывают совпадения масок. Это и вводило нас в заблуждение. Разработчики же добились своего - выиграли некоторое время. |