На главную

Сборник занимательных задач по языку программирования C
Часть III

Нечеловеческие эксперименты над C и C++.

Палиндромы

Палиндромами называют слова или предложения, которые одинаково читаются как слева направо, так и справа налево:

А роза упала на лапу Азора

На C мы можем написать палиндром с помощью макросов:

#define rof     break

void main(void)
{
  ;for(;;)rof;
}

Строка читается одинакого в обе стороны и программа компилируется без единой ошибки.

Вот другой пример, где симметричность строки устанавливается не на уровне отдельных символов, а на уровне лексических единиц:

; return ; return ;

Компилятор предупредит нас о недостежимом коде, но программу откомпилирует.

Существует палиндромы в виде квадрата:

S A T O R
A R E P O
T E N E T
O P E R A
R O T A S

«Sator Arepo tenet opera rotas» в переводе с латыни означает «Пахарь Арепо плугом направляет пашню». Эту фразу можно прочитать по вертикали и горизонтали из верхнего левого и из правого нижнего углов.

Вот квадратный палиндром на C:

;    A    /**/ ++  +
A    *    B    +   ++
/**/ B    -    B   /**/
++   +    B    *   A
+    ++   /**/ A   ;

А это он же в одну строку без комментариев:

;A++ + A * B + ++B - B++ + B * A + ++A;