Rambler's Top100
 
 
  05 декабря 2008 года Компьюлента
CIO
Терралаб
Бизнес-журнал
в поле зрения | обзоры и тесты | своя игра | интерактив
Тьюрмиты
Автор: Константин Кноп
Опубликовано в журнале "Компьютерра" №18 от 11 мая 1998 года

Совмещать приятное с полезным, хоть и не всегда, но порой удается. Например, совсем недавно я совместил подготовку статьи в "Досуги" с участием в замечательном конкурсе тьюрмитных рисунков. Что из этого вышло - судить не мне.

"Тьюрмит - это существо, вылезшее из разбитой машины Тьюринга, после того как Грегори Тэрк уронил ее со своего стола. С тех пор тьюрмиты распространились довольно широко, однако по-прежнему остаются мало исследованными созданиями. Живут тьюрмиты на бесконечной плоскости, разделенной на квадратные клетки. Чем они питаются, неизвестно. Живой тьюрмит постоянно движется по плоскости, он не может оставаться в покое".

Это вовсе не цитата из фантастического романа, а отрывок из учебного пособия по занимательной тьюрмитологии. Само это пособие, а также все остальные материалы, относящиеся к уже упомянутому конкурсу рисунков, помещены на сервере Университета города Переславля (http://up.botik.ru/~inform/thurmits/index.html). Автор текста (а также главный организатор конкурса) - программист и преподаватель этого университета Евгений Лилитко (crgames@ks.botik.ru). К слову, увлечение подобными вещами у Евгения очень давнее: еще десять лет тому назад он написал программу, которая стала чемпионом мира по "Бою в памяти". (Для тех, кто никогда не слышал о "Бое в памяти", могу сказать только, что это борьба двух программ-вирусов на ограниченном участке машинной памяти по заранее оговоренным правилам. Игра эта очень интересна и требует более подробного рассказа. Возможно, когда-нибудь в другой раз…)

Я возвращаюсь к тьюрмитам. Если попытаться кратко изложить суть, то она сводится вот к чему: тьюрмит всегда работает по программе, заложенной в его "мозг". Входной язык этой программы - не процедурный (как C++), а скорее декларативный (как, например, Пролог). В каждый момент времени выполняется одна из строк программы, а какая именно - зависит от "ситуации". Точнее - от цвета клетки, в которой тьюрмит находится, и от той строки, которая выполнялась перед этим. Результатом выполнения этой строки будет следующее:

  1. тьюрмит покрасит ту клетку, на которой он стоит, в некоторый (заданный в этой строке) цвет;
  2. затем он либо сдвинется прямо относительно своего текущего направления движения, либо свернет налево, либо повернет направо;
  3. тьюрмит узнает, какую строку программы он должен выполнить следующей.

Если такой строки в тексте не обнаружится, тьюрмит "умирает".

Пока такие строки находятся, тьюрмит живет вечно - а точнее, до тех пор, когда хозяин компьютера не прервет выполнение программы.

На экране при этом появляются замысловатые рисунки, красота и сложность которых зависят только от фантазии (и умения программировать!) автора тьюрмитной программы.

Кстати, синтаксис всех строк таких программ очень прост:

буква; текущий цвет; новый цвет; код поворота; новая буква.

Под буквой здесь понимается любая буква, а также цифра или другой символ, цвета кодируются числами от 0 до 15, а поворотов бывает всего три: -1="налево", 0="прямо", 1="направо".

Например, строка

A 0 15 1 A

означает, что после попадания на черное (цвет 0) поле в строке, обозначенной буквой A, тьюрмит перекрасит его в белый цвет (15), повернет направо и будет искать следующую строку для выполнения. Эта строка должна начинаться буквой A, а следом за этой буквой должен стоять цвет клетки, на которую тьюрмит попал.

Отмечу, что начальный цвет всего поля - черный, а тьюрмит при рождении находится "в состоянии A". Таким образом, первой будет выполнена та строка программы, которая начинается с "A 0".

Задача 1

Определите, что будет нарисовано тьюрмитом, если вся его программа состоит из одной приведенной выше строки - "A 0 15 1 A". А если эта программа будет иметь вид "A 0 15 0 A"?

Задача 2

А теперь разберитесь в чуть более сложной программе:

A 0 2 0 B

B 0 2 0 C

C 0 2 1 A

Задача 3

И, наконец, последнее упражнение на освоение тьюрмитной азбуки: определите, что будет рисовать тьюрмит с программой

A 0 15 1 A

A 15 15 0 A

Ответы к задачам

  1. Тьюрмит обойдет и закрасит белым цветом четыре соседние клетки, стоящие в вершинах квадрата. После этого он попадет на исходную клетку и умрет: ведь у него в программе нет строки для действий в ситуации "A 15".

    А во втором случае тьюрмит начнет бесконечно двигаться по прямой, оставляя за собой белый след - и так будет до тех пор, пока его не остановят извне (либо он не выйдет за границы экрана, но об этом программном ограничении я еще, кажется, не упоминал).

  2. Будет нарисован зеленый (цвет 2) квадрат со стороной 3.

  3. Тьюрмит станет рисовать белую линию (точнее, двойную линию), которая будет постепенно удлиняться - по очереди то в одну, то в другую сторону.

Ну, а теперь пару слов о конкурсе. Участником его (а также членом жюри) мог стать любой житель Сети. Достаточно было зайти на соответствующую страничку, зарегистрироваться (совершенно бесплатно), скачать программу-тьюрмитник, после чего можно было садиться и писать своих тьюрмитов.

Я так и сделал.

Одной из первых моих удач была красивая "вертушка":picture

Ее программа совсем простая и довольно короткая:

A 0 2 0 C

A 2 0 0 B

B 2 2 1 A

B 15 2 1 A

C 2 0 -1 A

C 0 15 -1 A

C 15 2 -1 A

Хотя, конечно, эта простота обманчива - тьюрмит, рисуя вертушку, бегает по очень хитрой траектории, периодически возвращаясь от ее краев к центру, а затем убегая обратно.

Вообще, нарисовать что-либо при помощи тьюрмита не так сложно, как кажется с первого взгляда. Насколько я понял, есть два пути: либо пытаться тщательно запрограммировать поведение тьюрмита, либо действовать наобум, методом тыка. Второй путь гораздо проще и не требует от "программиста" почти никаких усилий.

Из простых программок, полученных, скорее всего, именно таким путем, я приведу здесь только одну. Автор назвал ее "желтый дом".

A 0 14 0 B

A 14 13 -1 A

A 13 0 1 B

B 0 13 1 A

B 13 14 -1 A

B 14 0 0 Apicture

Но кроме написания таких простеньких программок, можно попытаться действительно придумать что-нибудь нетривиальное. Например, я долго бился над такой задачей: как обучить тьюрмита "красиво" обходить всевозможные изогнутые препятствия. Когда это наконец получилось, я не поверил сам себе: тьюрмит нарисовал почти правильную архимедову спираль!picture

Когда я пишу этот текст, результаты конкурса рисунков подведены, но еще не опубликованы, поэтому авторы многих красивых тьюрмитов мне пока неизвестны. Например, я пришел в восторг от такой картинки:picture

По-видимому (я сужу по использованию тех же 13-го и 14-го цветов), ее и "желтый дом" делал один и тот же автор. А программка и здесь очень проста:

A 0 14 0 B

B 0 14 0 C

C 0 14 0 E

E 0 14 0 F

F 0 14 0 J

J 0 13 -1 A

A 14 13 0 A

A 13 14 0 A

J 14 13 0 A

J 13 14 1 A

Для тех, кто еще не совсем разобрался: первые шесть строк рисуют квадратик, а дальше… остается всего четыре строки, и вот они-то и определяют весь остальной рисунок!

Но все эти рисуночки - просто детские забавы по сравнению с той гигантской работой, которую проделал Дмитрий Папичев. Дима просто взял и написал игру "Жизнь", о которой я недавно рассказывал (см. "Компьютерру" #243). "Жизнь" на одном-единственном тьюрмите! Я не поверил своим глазам и не верю до сих пор, но вот оно - работает, смотрите:picture  picture  picture

Здесь в качестве начальной конфигурации выбрано "планерное ружье" (см. первый из трех рисунков). Из него каждые 30 тактов вправо и вверх вылетает планер. Долетает до границы поля и там исчезает, потому что граница поля жестко задана рамкой, внутри которой все и происходит. Весь рисунок - ружье, планер, смена поколений - рисуется одним крошечным тьюрмитом, который обегает все поле внутри рамки. На втором рисунке показано состояние ружья после пары тактов жизни (это десятки тысяч команд тьюрмита, но на экране все происходит очень быстро). А на третьем - то же ружье, уже почти готовое выстрелить (еще примерно через 20 тактов "жизни").

Чтобы рисунки были хорошо видны, мне пришлось увеличивать их в восемь раз по сравнению с остальными, так что не удивляйтесь, что все точки оказались такими крупными.

Программу для "Жизни" и, в частности, для планерного ружья я уже никак не смог бы привести здесь: она занимает около 400 строк.

Кстати, это тоже превосходный результат. Попробуйте-ка уместить программу для этой игры, написанную на любом из процедурных языков, кроме ассемблера, в 400 строк и в 5 килобайт!

Ну и напоследок еще одна задача для тех, кто заинтересовался.

Задача 4

Разберитесь, что получается на экране во время работы вот такой тьюрмитной программы:

A 0 15 1 B

A 15 1 0 B

A 1 15 1 B

B 0 0 0 A

B 15 15 0 A

B 1 1 0 A

Пишите и заходите в гости на мою страничку.

ТАКЖЕ В РАЗДЕЛЕ
28 декабря 2001 года
Приятные билеты 
10 августа 1998 года
Фортуна в колесе  
13 июля 1998 года
Данетки-4  
29 июня 1998 года
Словесный бой 
08 июня 1998 года
Вдоль или поперек? 
01 июня 1998 года
Все врут календари? 
 
САМОЕ ПОПУЛЯРНОЕ
Много лучше воровства
Куда деть домашнюю видеоколлекцию? Покупать винчестеры - как самые дешевые, самые быстрые, и, возможно, самые надежные хранители информации. Но тут возникает следующий вопрос: купил, а что дальше?
Большой обман на маленьких носителях
Подобно сотовым телефонам, флэшка из элитарного продукта в конце концов стала массовым. Но только ли стремительным научно-техническим прогрессом объясняется дешевизна современных флэшек?
Ноутбучные отчеты
Никакого повидла - Сергей Голубицкий отчитывается по ноутбукам, с которыми провел последние три года. Как сломать ASUS, чем хороша Toshiba и сколько стоит Sony.  
Самый быстрый на планете
Пока продажи процессоров Core i7 только начинаются, мы подводим итоги знакомства, ибо работаем на новой платформе без малого месяц. Действительно, ничего быстрее Intel еще не делала. Но как почувствовать эту скорость?
/  бумажный номер

Тема номера: Кризис в ИТ Читайте на сайте тему номера "Кризис в ИТ" и другие статьи из журнала "Компьютерра" от 04 ноября 2008 года
  Архив номеров журнала

О проекте | Реклама на сайте | Рассылки сайта | КПК–версия | RSS-трансляция

© ООО «Компьютерра–Онлайн», 1997 — 2008.
При цитировании и использовании любых материалов ссылка на портал «Компьютерра–Онлайн» обязательна (для Интернет–изданий — www.computerra.ru)
Редакция сайта: site@computerra.ru
Техподдержка сайта: websupport@computerra.ru
Редакция журнала: inform@computerra.ru
Отдел рекламы: reklama@computerra.ru
Телефон: (495) 232–22–61, (495) 232–22–63
Работает на «Битрикс: Управление сайтом»
Почта защищена сервером «СПАМОРЕЗ»
Трилан — продвижение сайта,
поисковая оптимизация сайта

Сайт работает на сервере DEPO Computers
Rambler's Top100