                Алгоритмическая игра

     Здесь алгоритм - не средство, а объект игры.
     ПРАВИЛА. Два участника  игры (A и  B) должны написать  программу на
BASIC (можно и на другом языке)  из N пронумерованных строк, причем N  -
четное.
     В распоряжении итграющих по одной  булевой переменной A и B;  обе в
начале игры равны логическому нулю (FALSE).
     Играющие  поочередно  каждым  своим  ходом  должны  заполнить любую
строку одним из двух возможных операторов:

     - для играющего А:
               A = not(A)
          или
               if A goto K

     - для играющего B:
               B = not(B)
          или
               if B goto K

     Здесь K - номер строки в пределах от 1 до N.
     На  других  версиях  BASIC  булевы  переменные  можно  заменить  на
числовые:
               if A = 0 then A = 1 else A = 0
          и 
               if A = 1 then K

     Если в результате прогонки написанной программы A будет равно B, то
выигрывает участник  A, если  A <>  B, то  участник B.  Поэтому в  целях
судейства программу следует замкнуть оператором:

          N+1 print "Выиграл "; : if A = B then print "A" tlse print "b"

     Предлагаемая игра способна не только скрашивать досуг. Дело в  том,
что  программы,  где  много  операторов  перехода,  таят  в  себе   риск
зацикливания. Мастерство программиста  заключается, в частности,  в том,
что он вовремя замечает  "предрасположение" составляемой им программы  к
зацикливанию  и  изменяет  ее,  чтобы  избежать  этого недостатка. Такую
зоркость и помогает воспитывать предлагаемая игра. Ввоспитательных целях
в число ее  правил введены такие.  Если после очередного  хода соперника
второй  игрок  заявит  о  "зацикленности"  написанной  к  этому  моменту
программы и это подтвердится, то  заявивший выигрывает. Если это не  под
тверждается (при большой программе  и неповоротливой машине время  такой
проверки можно ограничить), то заявившему засчитывается поражение. После
своих ответных ходов  игроки теряют право  на заявку о  зацикливании. Но
если в конце игры программка все-таки зацикливается, то выигрывает  тот,
кто делал первый ход.
     Вот пример партии для игры в 4 строки, где выиграл B.

   1 rem    1 A = not(A)    1 A = not(A)   1 A = not(A)    1 A = not(A) 
   2 rem    2 rem           2 rem          2 rem           2 if B goto 4 
   3 rem    3 rem           3 B = not(B)   3 B = not(B)    3 B = not(B) 
   4 rem    4 rem           4 rem          4 if A goto 1   4 if A goto 1

     Игра не  требует компьютера,  хотя он  может существенно  упростить
судейство.
     Предлагается  также  реализовать  программу,  преврващающую  ЭВМ  в
партнера. Следует помнить, что число вариантов игры для фиксированного N
составляет N! * (N^N). [ ! - факториал, ^ - степень].

                                   А. Ермаков (Москва)
