Код подчистил, чтобы был похож на VB, но пример не трогал, ибо не понял
Алгоритмическая игра
Здесь алгоритм - не средство, а объект игры.
ПРАВИЛА.
Два участника игры (A и B) должны написать программу на BASIC (можно и на другом языке) из N пронумерованных строк, причем N — четное. В распоряжении играющих по одной булевой переменной A и B; обе в начале игры равны логическому нулю (FALSE). Играющие поочередно каждым своим ходом должны заполнить любую строку одним из двух возможных операторов:
- для играющего А:
A = Not A
или
If A Then Goto K
- для играющего B:
B = Not B
или
If B Then Goto K
Если в результате прогонки написанной программы A будет равно B, то выигрывает участник A, если A <> B, то участник B. Поэтому в целях судейства программу следует замкнуть оператором:
N+1 Debug.Print "Выиграл "; IIf(A = B, "A", "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). [ ! - факториал, ^ - степень].
А. Ермаков (Москва)