Техника - молодёжи 1987-01, страница 51

Техника - молодёжи 1987-01, страница 51

в с

На индикаторе тут же загораются цифры 55 — координаты чудовища (первая — по горизонтали, вторая — по вертикали). В регистре Y — 11, координаты охотника. Пора ему выступать в рискованное путешествие. Ход человека задается наглядно: БП XY (стрелка вверх) + ( —) 1 С/П. Команда XY нужна для перемещения по горизонтальной координате, стрелка вверх — по вертикальной; «плюс» соответствует положительному перемещению, «минус» — отрицательному; единичка показывает, что переход совершается на соседнюю клеточку. А что будет, если попытаться выйти за пределы лабиринта? БП XY — 1 С/П. На экранчике ЕГГОГ, сюда путь закрыт. Точно так же среагирует ПМК и на любое другое недозволенное перемещение — охотник может ходить только по единичкам. Сейчас, например, лишь вверх или вправо. Попробуем вправо: БП XY+1 С/П. ПМК принимается за работу: регистрирует ход охотника и задает случайным образом ответ его предполагаемой жертвы. На индикаторе загорается 65 — зверь тоже пошел вправо. Посмотрим, как выглядит теперь тоннель, в котором он находится: ИП5 (11111211). Проход частично пришел в негодность — цифра 2 (а также 3 и т. д.) означает обвал, здесь теперь не пробраться. А вот если бы животное двинулось вверх (или вниз), оно проделало бы новый тоннель в скальной породе — на маршруте скалоеда нули превращаются в единицы, те — в двойки и т. д.

Оставим охотника в размышлениях над следующим ходом — сейчас, очевидно, он может либо пойти дальше, на поле 31, либо вернуться на И. А чем ответит чудовище, предсказать вообще невозможно. Задача охотника — оказаться со скалоедом в одной клеточке, на индикаторе при этом загорится 00 — сигнал победы. Если же лабиринт в конце концов окажется «перелопаченным» до такой степени, что на любую попытку хода ПМК будет реагировать сообщением ЕГГОГ, то останется лишь уповать на мастерство спасателей.

В программе «Охота на скалоеда» ис-

1

1

1

1

1

1

1

1

1

0

0

0

0

0

0

1

1

1

1

1

I

1

1

1

1

0

0

0

0

0

0

1

1

1

1

1

ш

1

1

1

1

0

0

0

0

0

0

1

1

1

1

1

1

I

\

1

1

0

0

0

0

0

0

I

1

1

1

I

1

1

1

I

2 3 4 5 6 7

пользованы некоторые особенности команд сложения, вычитания, ввода в стек и обмена XY, а также 160-шагового цикла. Делая ход по горизонтали, мы оказываемся на адресах 40 или 41; ход по вертикали передает управление на адреса ЕО или Е1 «темной зоны»: здесь за-дубМированы команды /—/, записанные по адресам 28 и 29 главной ветви, затем управление командой БП (39—31) передается на адрес 46. После адреса 97 управление переходит на короткую побочную ветвь, но это не приводит ни к каким неприятностям: в крайнем случае (при победе охотника) программа останавливается на адресе А7, на котором продублирована команда С/П с адреса 09. Предварительно команда по адресу 08 (А6) превращает ноль в сообщение 00. Фрагмент 49—51 «срезает» первую цифру числа — нестандартно используется команда ВП. Наконец, на адресах 10—19 записана довольно удобная подпрограмма случайного задания ±1; она-то и управляет движениями скалоеда. Вот и все сложности.

Счастливой охоты!

Михаил ПУХОВ

НЕ БЫЛО БЫ СЧАСТЬЯ...

Чемпионат редакции «ТМ» по нардам подходил к концу. Оставалась несыгранной решающая партия «Администрация КЭИ — автор», и вдруг... исчезли оба игральных кубика. Просто затерялись куда-то. Куда именно — не столь важно, для нас сейчас интереснее другое. Как известно, безвыходных ситуаций не бывает. Нельзя ли с помощью ПМК выбраться из затруднительного положения? Вот об этом-то и пойдет речь.

Прежде всего, что такое игральный

кубик, с точки зрения математика? Это простейший датчик, или генератор случайных целых чисел от I до 6. (Причем распределены эти числа равномерно, то есть вероятность выпадения каждого из них одна и та же—'/б ) Значит, чтобы ПМК смог заменить игральный кубик, надо реализовать на нем алгоритм генерации случайных чисел.

Таких алгоритмов известно очень много. Поэтому мы не стали «изобретать велосипед», а воспользовались одним из известных методов. Суть его в

следующем — к числу л прибавляют произвольную десятичную дробь. (Желательно, чтобы в ней не было одинаковых цифр.) Затем сумму возводят в пятую степень и берут дробную часть результата. Это и есть первое случайное число. Но любой генератор случайных чисел должен выдавать целую последовательность их. Поэтому, чтобы найти второе случайное число, первое снова прибавляют к л, возводят полученную сумму в пятую степень и выделяют дробную часть. Повторяя этот процесс многократно, мы получаем последовательность случайных чисел, равномерно распределенных в интервале от 0 до 1.

Надеемся, что читатели без труда справятся с программированием этого алгоритма. Но зачем нам при игре в нарды последовательность каких-то там дробей? Ведь на кубике обозначены только целые числа, они и определяют, какой ход можно сделать. Не можем же мы продвинуть шашку на 0,5 позиции. Поэтому надо дополнить алгоритм преобразованием, превращающим последовательность дробных случайных чисел в последовательность целых. Сделать это очень просто. Разделим интервал (0; 1) на шесть равных частей 0—0,166..., 0,166...—0333... и т. д.

Теперь, если полученная от датчика случайная дробь попадает в первый интервал, то это значит, что на нашем электронном «кубике» выпала единица. Второму интервалу соответствует двойка, третьему — тройка и т. д. Естественно, определение номера интервала должен проводить сам ПМК, а на индикатор выводится лишь окончательный результат — число «выпавших» очков.

Такой алгоритм и был использован в решающей партии, которая все же, несмотря на пропажу, была сыграна, естественно, на «электронном» уровне. Исходной дробью послужило число 0,785693. После возведения в пятую степень и выделения дробной части осталось 0,248596 — «двойка». Второй «бросок» — дело в том, что в нардах одновременно кидают два кубика, поэтому надо либо использовать пару калькуляторов, либо на одном находить два числа подряд — дал пятерку. Да, 2—5 не лучшее начало автора. Неудивительно, что администрация КЭИ одержала убедительную победу.

Конечно, генераторы случайных чисел пригодны не только для моделирования игрального кубика. С помощью несложных преобразований (формулы можно найти в любом учебнике теории вероятностей) равномерное распределение трансформируется в нормальное, пуассоново и т. п. А раз так, то появляется возможность создания различных игр, главным «действующим лицом» которых будет «его величество случай». Таких, например, как игра Г. Горового «Морской бой», опубликованная в № 10.

Сергей ВОЛКОВ, инженер

48