Для размещения тяжелых грузовиков вы можете случайным образом выбирать целое число в интервале длины, большей 4. Если оно примет значения 1, 2, 3 или 4, то вы помещаете грузовик в соответствующий ряд, а если оно примет большее значение, то препятствия нет. Чем больше выбранный исходный интервал, тем меньше шансов для появления грузовика. Подберите этот параметр экспериментально.
Игра 12.
Итак, мы покончили с «маленькими играми». Все предыдущие требовали лишь немного умения программировать и немного ловкости. С другой стороны, они требовали большой тщательности, и только хорошие программисты могли сделать из них что-нибудь красивое и приятное. Ну, а в этой игре, по моему мнению, нужно действовать более мощными методами.
Тщательно проанализируйте способ создания комбинации, исходя из 6 шашек. Начало всегда одно и то же.
Вы выбираете две шашки, скажем a и b, и соединяете их одной из операций:
a + b, a − b, a * b, a : b.
Сложение возможно всегда. Что касается вычитания, то с ним дела обстоят так же, если договориться, что мы всегда вычитаем меньшее из большего (это относится к правильному наименованию чисел, или — что то же — к взятию той из двух операций a − b или b — a, которая дает положительный результат). Заметим, однако, что если a = b, то знак «−» выбирать нельзя.
a * b можно вычислять только тогда, когда ни один из двух сомножителей не равен 1.
a : b ориентировано (как и вычитание). Число b не должно быть равно 1. Остаток при делении должен быть нулевым.
Все это не очень трудно запрограммировать. Вы случайным образом выбираете две шашки. Затем вы случайным образом выбираете знак операции, а если его нельзя использовать — вы повторяете розыгрыш знака. В конце концов вы всегда получите хороший знак…
Теперь вы получили промежуточный результат. Вы можете решить остановиться, а затем выбрать случайным образом недостающие шашки, которые не участвовали в счете:
7 * 75 = 525 8 3 1 10;
вы выводите на экран
1 3 7 8 10 75 найдено: 525.
Вы можете выбрать новую шашку и скомбинировать ее с предыдущим результатом
525 − 8 = 517,
Вы снова получите промежуточный результат.
Вы можете выбрать две шашки и скомбинировать их:
3 * 7 = 21.
Тогда вы получите два промежуточных результата:
7 * 75 = 525; 3 * 7 = 21
Если у вас два промежуточных результата, то появляется много возможностей:
— все 6 шашек уже выбраны. Вы комбинируете между собой два промежуточных результата и получаете вашу окончательную комбинацию;
— даже если не все 6 шашек использованы, вы можете скомбинировать между собой два промежуточных результата и снова получить один-единственный результат.
Но вы можете также выбрать новую шашку и скомбинировать ее с одним из двух промежуточных результатов. Вы снова получите два промежуточных результата.
Таким образом, вы получаете то, что называется конечным автоматом. Есть четыре возможных состояния:
начальное состояние, состояние ОДИН, в котором у вас есть один (и притом единственный) промежуточный результат.
состояние ДВА, в котором у вас есть два промежуточных результата,
конечное состояние, в котором у вас есть результат, который вы рассматриваете как достигнутую цель. В вычислениях участвуют три операции.
Т2: выбрать случайным образом две шашки и соединить их случайным образом выбранным знаком, чтобы получить промежуточный результат;
Т1: случайным образом выбрать шашку и соединить ее случайным знаком с промежуточным результатом;
Т0: соединить два промежуточных результата между собой случайным образом выбранным знаком.
Рисунок 35 дает граф этого автомата, где стрелки показывают операции, которые нужно выполнить, чтобы перейти от одного состояния к другому. Ваша программа должна реализовать этот автомат, причем переходы должны выбираться случайным образом, если это возможно.
Вы теперь знаете все. Конечные автоматы часто встречаются в программировании. Запомните этот пример, он имеет очень широкую область применения…
Игра 13.
Проблема наиболее длинного пути взятия является типичной возвратной задачей. Когда лиса находится в некотором положении, нужно испытать 4 возможных направления и для каждого из них увидеть, есть ли курица и свободно ли следующее за ней поле. Это легко!