Необычная игра

Описания не будет. И так, все ясно.

Модератор: Sebas

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Необычная игра

Сообщение Antonariy » 26.09.2008 (Пт) 16:50

Одна из ее необычностей — место, где я ее нашел.
Код подчистил, чтобы был похож на VB, но пример не трогал, ибо не понял :scratch:

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

Здесь алгоритм - не средство, а объект игры.

ПРАВИЛА.
Два участника игры (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). [ ! - факториал, ^ - степень].

А. Ермаков (Москва)
Лучший способ понять что-то самому — объяснить это другому.

Вернуться в Народные б@йаны

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

    TopList