Life> | Описание программы Особенности программирования Библиотека образов | Скачать |
К программе Life прилагается небольшая библиотека конфигураций. Файлы этой библиотеки имеют расширение .lif. В библиотеку входит несколько стандартных паттернов, такие, как r-пентамино (RPENTAMI), желудь (ACORN) и др., а также образы авторского изготовления, показавшиеся чем-то интересными. Ясно, что каждый из пользователей программы пополнит свой экземпляр библиотеки собственными находками. Но здесь мне бы хотелось ознакомить вас с тем составом библиотеки образов, который вы получаете вместе с программой.
Напомним, что r-пентамино (RPENTAMI) и желудь (ACORN) являются примерами долгожителей, т.е. конфигураций, которые при малом числе исходных организмов обладают временем жизни, измеряемом сотнями и тысячами поколений. К классическим конфигурациям следует отнести также космические корабли различного "водоизмещения" (SHIP, SHIP5, SHIP6) и сверхбольшой космический корабль, эскортируемый двумя малыми кораблями (ESCORT). Принцип эскортирования крупных движущихся объектов, неустойчивых без сопровождающих кораблей, последовательно применяется для создания множества движущихся паттернов, и подобные конфигурации содержатся во многих общеизвестных коллекциях (см. страницу "Ссылки").
Самые красивые классические мигалки содержатся в нашей библиотеке под именами P-D-TLON (пентадекатлон) и KRAB (пульсар).
К общеизвестным конфигурациям относятся также генераторы глайдеров: глайдерное ружье (GLIDRGUN) и автомат Калашникова (AKM). Последний представлен в двух вариантах, во втором варианте (AKM1) продемонстрирована поглощающая способность рыболовных крючков.
Из классических примеров можете посмотреть также CLASH - столкновение трех глайдеров, приводящее к рождению космического корабля легкого типа. Я сохранил также вариацию на ту же тему: последовательное четырехкратное столкновение в одной точке, организованное так, что возникшие космические корабли разлетаются на все 4 стороны (CLASH4).
Под именами SERPENTA и SERPE110 скрываются фитили, т.е. протяженные фигуры, имеющие периодическую структуру и неустойчивые на концах, благодаря чему они могут "гореть" подобно фитилю. В отличие от классического фитиля, представляющего собой диагональную прямую линию, предлагаемые вам конфигурации вытянуты вдоль горизонтальной прямой и при этом изогнуты подобно змее, от которой и получили свое название. Естественно, они могут иметь произвольную длину, но я выбрал два варианта, развитие которых показалось мне интересным. Первая змея после бурного горения с обеих концов совершенно неожиданно сгорает совсем, не оставляя после себя даже пепла. Горение второй змеи начинается аналогично, затем "пламя" концентрируется вдоль вертикальной прямой, постепенно перемещаясь к верхнему и нижнему концам и затухая. Но перед тем, как совсем погаснуть, огонь испускает две "искорки" (глайдера), и именно эти две искорки начинают пожар в новом месте, и оказывается, что пламя еще может жить очень долго (общее время жизни около 1950 поколений). Как и диагональный фитиль, конец змеи тоже можно снабдить специальной "головкой", сделав его устойчивым. Под именем KILLSERP вы можете увидеть, как глайдер нарушает устойчивость такой головки и тем самым инициирует начало разрушения стационарной формы змеи (на странице "Мир, который построил Конуэй" это интерпретировалось, как заражение жизнью трупа змеи).
Я рассматривал развитие колоний из заполненных квадратов различной величины. Самые интересные экземпляры таких конфигураций сохранены в библиотеке под именами, начинающимися с QRT. Последующие две цифры - это размер квадрата. QRT16 живет всего 11 поколений, но практически каждое из них - это маленький шедевр. Жизнь квадрата 25х25 не менее эффектна и заканчивается восемью мигалками, разбросанными вокруг бадьи. QRT27 живет почти 300 поколений, сперва превращаясь в сказочную снежинку, которая меняет свой облик и, постепненно сбрасывая с себя оболочки, становится все меньше и меньше. Затем одна из оболочек начинает расти и развиваться, тогда как в центре все останавливается... Квадрат со стороной 32 живет немногим дольше, но вся его жизнь протекает на периферии, причем добрая ее половина на очень ограниченных участках пространства. QRT39 также, в основном, "окраинная" конфигурация, но ее развитие богато бурными всплесками. Особенно красивы расцветшие одновременно 8 роз (около 165 поколения) и отделившиеся диагональные "лепестки" (440 поколение). Все заканчиваетсяоколо 650 поколения красивой фигурой, составленной из блоков, мигалок и караваев. Жизнь QRT42 несколько раз почти сходит на нет, но опять возникает почти из ничего, пока не заканчивается стремительным полетом восьми глайдеров в направлении центра. Всего 216 поколений живет квадрат-43, но эта жизнь более регулярна, чем у на единицу меньшего квадрата, а в конце ее ждет почти стационарная ситуация (из периодических объектов только 4 бакена в центре). Конечная стадия квадрата-48 состоит из лодок, ульев, блоков и мигалок, но на процесс перехода тоже стоит посмотреть, ведь длится этот переход более 400 поколений.
Еще один вид рассматриваемых объектов - это решетки различной величины. В нашей библиотеке они имеют названия, начинающиеся с RESH, а цифры в конце названия означают размер решетки. Решетка из одной ячейки (ее имя просто RESH без цифры) - периодический объект с периодом 5. Решетка 2х2 живет 71 поколение, причем в их обличье постоянно прослеживается образ квадрата: он то прямой, то косой, то в позитиве, то в негативе, то побольше, то поменьше. А заканчивается эта "квадратура" полной пустотой - ни одного организма не остается на поле. К тому же результату приходит и RESH3, только значительно раньше (25 поколений). RESH4 в самом конце эволюции превращается в 8 глайдеров, которые, сталкиваясь, превращаются в 8 блоков. Такие же 8 блоков, но по-другому расположенные - результат развития решетки-5. Решетки со стороной 6, 7, 8 ячеек также живут недолго, только RESH9 удается перешагнуть через рубеж в 100 поколений (она живет 132 поколения). Причем бурное течение жизни наблюдается по всей площади колонии. Только что установленные "стационары" вновь и вновь сметаются новым наплывом "протоплазмы". Результат - красивая фигура из ульев и длинных барж. Решетка-10 живет сравнительно недолго, но тоже достаточно интессивно. Процесс заканчивается отделением живой оболочки от стационарной центральной части, распаданием ее на 8 островков, которые превращаются в 8 глайдеров, а после попарного столкновения - в 8 блоков. Добавление к решетке-10 всего четырех организмов по углам (RESH10A) совершенно меняет характер развития. В данной конфигурации можно наблюдать редкую ситуацию, когда на сравнительно малой площади одновременно присутствуют 16 глайдеров (около 50 поколения). Жизнь RESH11 продолжается целых 219 поколений и заканчивается стационарным положением. В возрасте около 150 поколений на короткое время наблюдается почти правильная окружность, составленная из ульев. Вариант RESH11RO сделан из RESH11 путем добавления в каждом из углов двух организмов. При этом отражательная симметрия фигуры исчезает, остается только вращательная симметрия. Естественно, и развитие колонии целиком подчинено этому типу симметрии - в формах можно видеть косые поворачивающиеся кресты, иногда свастикообразные образования. Жизнь полностью останавливается на 460 ходу , причем на поле остаются только стационарные объекты, выложенные в красивый 4-листник.
Подобная же пара двух близких с виду фигур, обладающих разными типами симметрии, - это розетки. ROZETKA (поворотная симметрия) развивается 264 поколения, то уменьшаясь, то снова увеличиваясь в размерах, поворачиваясь то направо, то налево, и, наконец, 4 глайдера сталкиваются с четырьмя караваями, оставляя чистое поле. ROZET~S - очень похожая с виду, но совершенно симметричная фигура, и в ее развитии преобладают косые квадраты, а конец более традиционен: мигалки и стационары.
Два вентилятора в силу своей поворотной симметрии имеют много общего с первой из розеток. Один из них (VENT) обладает запасом жизни более 500 поколений, другой (VENT1) - 420. У этих фигур, как ни у каких других, заметны вращательные тенденции (особенно на больших скоростях просмотра). Заметна также склонность к древнеиндийской (или, может, нацистской?) символике - слишком много поколений этих конфигураций напоминают свастику. Впрочем, о свастиках ниже. Хочется обратить внимание на момент в жизни второго из вентиляторов, когда на поле появляются 8 глайдеров, устремленные к центру, причем после столкновения с центральными объектами 4 из них меняют курс и начинают удаляться от центра.
Другие образы, обладающие поворотной симметрией - это свастики. Первая из них (SWASTIKA) практически умирает к 60-му поколению, когда на поле остаются только 4 блока, 4 каравая и 4 глайдера, но эти 4 глайдера, сталкиваясь с блоками, возрождают жизнь из пепла, и колония вновь наполняется организмами, и жизнь продолжается вплоть до 300-го поколения. SWASTIK1 - долгожитель (почти 1000 поколений), причем около 300-го поколения ситуация аналогична предыдущей: из "живых" на поле остается только 4 глайдера (а до этого можно наблюдать, как глайдеры проходят мимо друг друга встречными курсами), и именно эти 4 глайдера дают новый толчок к развитию. Впрочем, не всегда глайдеры спасают эволюцию: колония SWASTIK5 развивается очень похоже на SWASTIK1: те же 8 глайдеров, идущих встречными курсами по сторонам квадрата между 100-м и 300-м поколениями, то же самое угасание жизни в остальной колонии, но здесь все напрасно, и последние столкновения ничего не дают - колония умирает. Остальные свастики не столь драматичны, но понаблюдать над их эволюцией любопытно.
Несколько елочек (название начинается с ELKA) особого интереса не представляют. Мне они дороги, как первые собственные паттерны, которые были созданы еще в самом начале работы над программой.
Вы можете увидеть также линии (LIN9, LIN10, LIN160, LIN250). Впрочем, большое разнообразие в развитии наблюдается только для коротких линий (которые нетрудно ввести вручную). Из них, например, LIN9 превращается в два набора навигационных огней, а LIN10 - в пентадекатлон. Развитие длинных линий более однотипно. Т.к. длинные линии в некоторых поколениях рождают огромное число организмов, я использовал их, как тестовые образы для определения граничных возможностей программы в смысле наибольшего числа обрабатываемых организмов.
Интересно было также посмотреть, как неумолимые законы "Жизни" разъедают некоторые осмысленные образы, например, буквы. Начав с ординарных случаев (см., например, LIFE), я постепенно искал, во-первых, более представительно выглядящие в нулевом поколении "этикетки" для программы, а во-вторых, их жизненный цикл должен был быть достаточно продолжительным. Мне удалось найти два таких паттерна: GOL1075 и GOL2747 (цифры означают время жизни). Второй из них загружен по умолчанию в файл work.lif, т.е. вызывается на экран при первом запуске программы по кнопке "Восстановить" или клавише "Insert".
Вообще же, файл work.lif содержит последнюю конфигурацию, запускавшуюся на просмотр, т.е. из всех разрешенным DOSом имен для файлов библиотеки нежелательно использовать имя WORK, т.к. оно зарезервировано программой для временного файла, и сохраненная под этим именем конфигурация будет уничтожена при запуске следующего образа.
Несколько интересных паттернов мне прислал Алексей Бирюков. Он создавал на поле своеобразную дуэль, разместив в углах экрана два глайдерных ружья, нацеленных друг на друга. Вблизи каждого из них создается защитное поле из блоков (если глайдеры - это летательные аппараты, то блоки в данном случае выполняют роль аэростатов ПВО). Кроме того, в центральной части поля размещается какая-нибудь бурно развивающаяся колония (автор использовал желудь или несколько r-пентамино), что делает развитие событий на поле практически непредсказуемым. В предлагаемых ситуациях победа одной из сторон наступает не ранее, чем через 5...20 тысяч поколений, а общее время жизни колонии (т.е. время установления полностью предсказуемой ситуации, когда на поле остаются только стационарные, периодические комбинации и движущиеся в пустоту глайдеры), в несколько раз больше. Так, для GLDRWAR2 оно составляет около 91 тыс. поколений. Конечно, такое долгожительство возможно только благодаря постоянной подпитке "эликсиром жизни" в виде новых глайдеров. Наблюдение за процессом пробивания канала в "пылевом облаке", состоящем из стационарных и периодических "пылинок", потоком глайдеров ставит интересные и очень непростые вопросы чисто математического плана: как зависит среднее время пробивания канала от толщины облака? существует ли предельная средняя толщина облака, при превышении которой облако становится непробиваемым? если такой толщины нет, то как зависит средняя длина канала от времени?