Рубрика X-Puzzle#14

Иван Скляров

Xakep, номер #060, стр. 060-110-1


Sklyarov@real.xakep.ru

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

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

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

Ответ на пазл №1 «Хакерский криптарифм»

Ответом на хакерский криптарифм может стать следующая комбинация:

19683 + 19683 + 19683 = 59049

Ниже приведена программа на Си, которая решает эту головоломку.

#include <stdio.h>

int main() {

int x, a, k, e, p;

int b, a2, n, d, a3;

int sum=0;

for (x=1; x<=3; x++){

for (a=0; a<=9; a++){

if (a!=x){

for (k=0; k<=9; k++){

if (k!=x && k!=a){

for (e=0; e<=9; e++){

if (e!=x && e!=a && e!=k){

for (p=1; p<=9; p++){

if (p!=x && p!=a && p!=k && p!=e){

sum=3*(x*10000+a*1000+k*100+e*10+p);

b=((sum/10000)%10);

a2=((sum/1000)%10);

n=((sum/100)%10);

d=((sum/10)%10);

a3=sum%10;

if(a==a2 && a2==a3 && b!=x && b!=a

&& b!=k && b!=e && b!=p && b!=n

&& b!=d && n!=x && n!=a && n!=k

&& n!=e && n!=p && n!=d && d!=x

&& d!=a && d!=k && d!=e && d!=p)

{

printf("XAKEP=%d\n", sum/3);

printf("BANDA=%d\n", sum);

exit(0);}

}

}

}

}

}

}

}

}

}

return 0;

}

Возможно, это не самый изящный вариант, но зато быстрый. Для уменьшения времени перебора предприняты следующие шаги:

1) Первая цифра (буква "Х") определяется в промежутке от 1 до 3, т.к., во-первых, она не может быть нулем (т.к. первая цифра), а во-вторых, в случае если X>3, то БАНДА становится шестизначной (например, 4*3=12), чего быть не может!

2) Последняя цифра (буква "Р") рассматривается в промежутке от 1 до 9, т.к. она не может быть нулем. Если она будет ноль, то А тоже должно стать нулем, однако они должны отличаться!

Ответ на пазл №2 «Самая сложная шифровка в мире»

Зашифрованная фраза была следующая:

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ СРОДНИ ЛЮБВИ - ЛУЧШЕ, КОГДА ОНО БЕСПЛАТНОЕ.

Копирайт принадлежит Линусу Торвальдсу.

Шифровка очень простая - каждые две соседние буквы в предложении меняются местами (надеюсь, что тот, кто испугался рассказов про BLOWFISH, IDEA и пр. сейчас не рвут на себе волосы от досады :)). Вот пример "шифрующей" программы:

#include <stdio.h>

int main() {

char str[]="ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ СРОДНИ ЛЮБВИ - ЛУЧШЕ, КОГДА ОНО БЕСПЛАТНОЕ. ";

int i;

for (i=0; str[i] !='\0'; i++) {

printf("%c", str[++i]);

printf("%c", str[i-1]);

}

printf("\n");

return 0;

}

Ответ на пазл №3 «Блиц»

1. По проводам, по воздуху...

2. С++, т.к. «++» означает операцию инкремента (увеличение на 1).

3. Букву «р» (прогРамма).

4. Ошибка (bug) - жучок;

Знак @ - собачка;

Вредоносные программы - вирусы, черви.

Содержание  Вперед на стр. 060-110-2