Рубрика 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) - жучок;
Знак @ - собачка;
Вредоносные программы - вирусы, черви.