X-Puzzle

Иван Скляров

Xakep, номер #049, стр. 110-111

Sklyarov@real.xakep.ru

«ПРОЙДИСЬ ДЕБАГГЕРОМ ПО СВОИМ МОЗГАМ!»

Не стесняйся присылать мне свои ответы, даже если ты смог ответить всего на один пазл, я с интересом почитаю твои оригинальные решения. Ну, а имена героев, которые первыми правильно ответят на все вопросы, конечно же, будут опубликованы в журнале, прославятся на всю Россию (и не только) и навечно войдут в историю Х. Приз тоже за нами не заржавеет ;).

Но помни: в большинстве случаев вариант ответа засчитывается как правильный, только если к нему приложено подробное и ВЕРНОЕ объяснение, почему выбран именно этот вариант, а не какой-либо другой.

ОТВЕТЫ К ПРЕДЫДУЩЕМУ ВЫПУСКУ X-PUZZLE

Ответ на пазл #1 «Эффективный снифинг»

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

Ответ на пазл #2 «Дедушкин подарок»

Диск является лицензионным, т.к. присутствуют файлы ioslink.sys и ioslink.vxd, явно свидетельствующие о том, что установлена защита от копирования DiscGuard (подробнее о защитах CD читай на нашем сайте http://www.xakep.ru/post/14861/default.htm). Маловероятно, что пираты станут выпускать защищенные компакт-диски.

Ответ на пазл #3 «C vs. C++»

Сразу видно, что первый приведенный кусок кода является описанием функции. Такое описание корректно только для синтаксиса языка Си, в Си++ необходимо явно указывать тип каждого параметра в функции, а также тип возвращаемого значения.

Второй кусок кода принадлежит языку Си++, т. к. используется комментарий, свойственный только этому языку.

Инструкция в третьем куске кода может относиться только к синтаксису языка Си++, т. к. только в нем переменную можно объявлять в любой точке блока перед ее использованием.

Четвертый кусок также принадлежит языку Си++, только в нем можно определять переменные как битовые поля.

Ответ на пазл #4 «Что? Где? Когда?»

Ответы на вопросы (по порядку):

  1. Название программного продукта – Delphi. Дельфи – это древнегреческий город, в котором жил знаменитый дельфийский оракул.
  2. Ошибка в программе названа жучком (bug), потому что во времена больших ЭВМ они часто выходили из строя из-за мотыльков, которые слетались на свет и тепло от электронных ламп. Если бы в те времена причиной выхода ЭВМ из строя были бобры, то сейчас ошибки в программе называли бы бобриками :).
  3. Тип BOOLEAN назван в честь английского математика Джорджа Буля, создателя булевой алгебры, который к тому же приходится отцом писательнице Этель Лилиан Войнич (Войнич – фамилия мужа).
  4. В черном ящике лежит журнал «Хакер». А ты что думал? ;)

ПЕРВЫЙ ПАЗЛ «Кривая Клава»

Хакер подрабатывал тем, что выполнял задания по программированию для некоторых студентов-разгильдяев. Как обычно, в 4 часа утра, хакер взялся за решение очередной задачи для одного балбеса-первокурсника (к 7 утра он обещал предоставить задание уже в готовом виде). Лениво зевнув, хакер начал читать условие задачи, в котором говорилось следующее: составить программу на языке С++ для нахождения значений уравнения вида y=10*x^2+7*x-4, где x меняется в интервале [–n; n] с шагом 1 (n - задается пользователем). Усмехнувшись, хакер быстренько обыграл задачу в уме, представив ее примерно в таком виде:

#include <iostream.h>
#include <math.h>
main ()
{
int n;
cout << "Введите предел:n";
cin >> n;
cout << "Результаты расчета уравнения:n";
for (int x = -n; x <= n; x++) {
int y = 10 * pow(x,2) + 7*x - 4;
cout << y << endl; }
retu 0;
}

Он уже начал вводить программу в компьютер, как неожиданно выяснилось, что на клаве отказали некоторые кнопки. А именно - все цифры от 1 до 8 и все знаки, расположенные на этих же кнопках: !, @, #, $, %, ^, &, * (дополнительная клавиатура, естественно, также не работала). То есть из кнопок с цифрами на клаве остались только 0 и 9 (а также правая и левая круглые скобки). «Твою мать!» – вышел из себя хакер. Но, вспомнив, что преподаватели в университете не проверяют тексты программ, им важен только готовый работающий exe-файл, хакер решил обойтись без неработающих кнопок. Недолго мучаясь, он написал программу, которая выдавала верные результаты, воспользовавшись при этом только оставшейся работающей частью клавиатуры. Интересно, а ты сможешь проделать то же самое?

Внимание! Программу хакер писал в среде Borland C++, но это не принципиально, и полученный код должен исправно работать и с большинством других компиляторов C++. Кроме того, у хакера уже был заготовлен шаблон, с которого он всегда начинает писать свои программы на С++, следующего вида (с которого ты также можешь начать свой код):

#include <iostream.h>
main ()
{
retu 0;
}

Также хочу заметить, что хакер НЕ занимался глупостями, типа копирования и вставки каких бы то ни было значений в код из других мест.

ВТОРОЙ ПАЗЛ «Голубая кровь»

В один прекрасный день Даниил Шеповалов сидел во дворе на лавочке и старался понять смысл таинственного послания, которое он обнаружил в своем почтовом ящике (не электронном). Послание представляло собой три столбца по 8 чисел в двоичном виде (по 11 разрядов) с таинственной подписью «Matrix». В это время, откуда ни возьмись, сзади подбежали несколько скинхедов и начали бить Даню топором (!) по голове! После того, как Даня упал на землю, один из нападающих нанес контрольный удар сапогом в лицо. Когда враги скрылись, Даня встал с земли, вытащил из головы топор и заклеил щели скотчем, чтобы в них не надуло. Скинхеды не знали, что бить Даню по голове бесполезно, т.к. голова у Дани выполняет всего две основные функции – пережевывание пищи и ношение шапки (дам на будущее один совет: если ты действительно хочешь убить Даню, то перерубай в первую очередь позвоночник, т.к. мозг, а точнее единственная прямая извилина находится у него там). Даня хотел уж было забыть об этом неприятном инциденте, да вот беда, несколько капель крови из его черепной коробки капнули на листок с посланием, замазав часть текста (см. скриншот). Не обращай внимания, что кровь у Дани голубого цвета - это из-за частого применения голубых галлюциногенных поганок. (А ты думал, Дане легко даются его произведения?!) Если ты тоже хочешь отведать этих поганок (кстати, рекомендую с кетчупом чили), то обращайся в редакцию – тебе их вышлют бандеролью за небольшую плату. В редакции голубые поганки (а также розовые, зеленые, бледные...) выращивают в достаточном количестве, чтобы удовлетворить спрос ВСЕХ наших читателей. Ну не будем отвлекаться. В общем, задание такое: попытайся найти хоть какую-нибудь логику в таинственном послании и помоги Дане восстановить замазанные кровью числа.

ТРЕТИЙ ПАЗЛ «Unreal’ные шахматы»

Как известно, Остап Бендер в Нью-Васюках (это где-то в Калмыкии) проводил сеанс одновременной игры в шахматы на нескольких досках. Когда шахматисты поняли, что Ося никакой не гроссмейстер, они бросились за ним в погоню, чтобы начистить ему функель. В это время в зале, где проводилась игра, остались шесть досок с недоигранными партиями (см. скриншоты). Посмотри внимательно на диаграммы и скажи: могут ли возникнуть эти шесть позиций в реальной шахматной партии по существующим шахматным правилам? Если нет, то это, естественно, нужно как-то обосновать!

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

Правильные ответы смотри в следующем выпуске «X-Puzzle». Да, и чуть не забыл, ответы я принимаю к рассмотрению до 1 числа каждого месяца, т. е. в данном случае до 1 февраля. Хочешь получить приз – включайся в активную мозговую деятельность! ;) Удачи!

Опять ни один читатель не дал ВСЕ правильные ответы. Поэтому будем награждать тех, кто был ближе всего к ним в процентном отношении. Итак, первый приз получает Yuri Matveyev (spc@lianet.ru). Он дал ПОЧТИ все правильные ответы, но почему-то решил, что вместо журнала Хакер, десятки тысяч любителей компьютера используют телефон Nokia финского производства (кто-то даже написал, что в ящике банка с краской Тиккурилла). :) А программный продукт, который имеет косвенное отношение к древнегреческому оракулу, решил, что это СУБД Oracle. :) Очевидно, он думает, что все оракулы жили только в Древней Греции?! :)

Второй приз получает чел под ником Rogrog (rogrog@mail.ru). Он дал ПОЧТИ все правильные ответы, но почему-то решил, что дедушкин подарок является пиратским, прислав мне целую страницу объяснений по каждому файлу на данном CD. Но файлы ioslink.sys и ioslink.vxd так и не понял зачем. :) Замечу, что это сугубо личное дело кодеров, как им называть папки и файлы, и что помещать на свой диск.

Третий приз получает Костя (deadwolf@r66.ru), в принципе у него болезни в ответах почти те же, но мне понравилось как он их комментировал. Вот, например, один из его ответов на пазл "Что? Где? Когда?": "На счёт предмета в ящике думал полчаса, если не больше. Вот ход

рассуждений: из вопроса дельных фактов только 1999г, Финляндия, Россия и СНГ, компьютеры. Немного. Компьютеры и только Россия, СНГ. Не сходятся, значит общее пересечение русский язык. Финляндия что там есть кроме финов, бань, ножей? Точно, полиграфия. Значит журнал на русском про компьютеры, но какой? А 1999, а такой пафос в вопросе, а столько саморекламы. Точно, это журнал Хакер."

Вот именно такие развернутые ответы я и люблю больше всего! ;)

Четвертый приз получает Garik (qstart@narod.ru). Он уже получил недавно 100$ за Tips&Tricks, очевидно он решил оставить нас без штанов. :)

Содержание
ttfb: 5.0680637359619 ms