Необычная игра
Добавлено: 26.09.2008 (Пт) 16:50
Одна из ее необычностей — место, где я ее нашел.
Код подчистил, чтобы был похож на VB, но пример не трогал, ибо не понял
Код подчистил, чтобы был похож на 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). [ ! - факториал, ^ - степень].
А. Ермаков (Москва)