Проект ЖИЗНЬ

Цель проекта:

Основная цель проекта заключается в изучении игры жизни на примере программы life32.exe. Как альтернативные пути развития рассматривались идеи модернизации правил, создание ячейки памяти, использование игры "жизнь" для очистки шумов (очистка картинки после сканирования от случайно возникших там точек).

Программа "Жизнь" существует во множестве ипостасей; версия, использовавшаяся на данном проекте, лежит, например, здесь.

Подборка паттернов, составленных в ходе работы проекта, находится здесь.

Как жить?!

А вот так:

Если у клетки два или три живых соседа, то она может жить спокойно, иначе она погибает. Если клетка мертвая и у неё три живых соседа, то она реинкарнирует.

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

ЭТО стандартные правила (обычные условия).

В нестандартном варианте можно самому задавать условия выживания и рождения.

Например (выживание/рождение):
1/1, 134/23, 1357/1357, 12345678/12345678

Особые структуры

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

Стабильные структуры

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

Движущиеся структуры

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

Пушки

Пушки - структуры, способные генерить движущиеся структуры. (выше показаны GUN30 и АК-47).


Кроме того, существуют структуры, способные отражать или поглощать движущиеся структуры. Существует универсальный поглотитель движущихся структур, основанный на добавлении приближающейся структуре лишней клетки, в результате структура гибнет. Минусом этой конструкции является её цикличность, то есть она стреляет каждые 5 шагов. Также существует крыло и полу-крыло - конструкции, способные поглощать глайдеры в любых количествах, но попадать глайдеры должны в определенную точку.

Также имеются конструкции, способные отражать глайдеры. Существует два типа отражателей - первые отражают глайдеры под углом 180 градусов (пример такого отражателя можно видеть в файле HOTEL.lif). Принцип действия этого отражателя заключается в том, что он "выбрасывает" перед глайдером стенку из пяти (5) точек, расставленных по диагонали, при попадании в которые глайдер разрушается, но через два поколения из остатков этой стенки и глайдера образуется другой глайдер, летящий в обратном направлении относительно направления исходного глайдера), другие под 90 (пример такого отражателя можно видеть ниже, в ячейке памяти) .

Существуют структуры, называемые ячейками памяти. Они обладают одним общим свойством: хранят информацию. Во время работы проекта нами была создана ячейка памяти. Её основой являются два ружья, отражатель (90) и отражатель (90), который при попадании в него глайдера выпускает ещё один в том же направлении. Принцип работы: постоянный поток глайдеров (с интервалом 12, 11 и 46 фаз) из ружья №1 нейтрализует поток глайдеров из ружья №2. Внешний фактор уничтожает один из глайдеров ружья №1. В результате не нейтрализованный глайдер из ружья №2 пролетает в отражатель №2, который направляет один из глайдеров в отражатель №1, а второй в бесконечность (он является началом аналога перфоленты). Глайдер, отраженный от отражателя №1, направляется в поток глайдеров из ружья №1, прерывает (уничтожает один из глайдеров потока) и все начинается с начала.


Несимметричные правила

Помимо обычных правил существуют правила несимметричные. Так называются правила в которых важно не количество соседей, а их расположение. Например: если клетка жива, левый, правый верхний и нижний соседи живы, а остальные мертвы, то клетка умирает. Если при тех же условиях центральная клетка мертва, то она оживает. Итого мы описываем положение клетки для каждого положения девяти клеток: соседи и она сама. Мы получаем 29=512 наборов правил.
234
915
876

Мы располагаем их по порядку в порядке возрастания номера и для каждого записываем следующее положение центральной клетки: 1 - жива, 0 - мертва. Номер правила - число в двоичном коде с теми же обозначениями, что и в самом правиле. Пример: первое правило под номером 0 - все клетки включая центральную мертвы. Если первым символом в правилах является единица, то при таком расположении клетка оживает. При таком описании мы получаем 512 единичек или нулей.

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

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

Теперь - о том, для чего нужны несимметричные правила. С их помощью, вероятно, возможно очищать шумы (помехи при сканировании). Это происходит за счёт малого размера помех, аннигилирующих при определённых правилах. Буквы должны при этом оставаться.

Для решения этой и других проблем можно заняться скрещиванием жизней, вернее их правил. Вначале мы вручную находим несколько правил наиболее подходящих для наших целей. Затем мы сопоставляем эти правила. Если у двух законов жизни с одним номером одинаковые значения, то значение остаётся. Если значения разные - можно идти разными путями:
1) Применять побитовые операции и результат записывать в новый файл правил.
2) Ставить случайное число

Для каждого "потомка" нужно проверять, насколько он подходит нашим целям. Так мы воплощаем закон джунглей. Пусть "выживет" сильнейший... алгоритм.


Хроники ЖИЗНИ

День 1

Прибыли на проект. Узнали в общем, куда попали и зачем. Сидели и строчили устойчивые фигуры. Зачем? Узнаем позже. Увидели глайдер и поняли, как он живёт. Разделились на две равные группы : первая состоит из Ильи, вторая из Алексея, Макса, Андрея.

День 2

Увидели компьютер. Каково же было наше удивление, когда обнаружили рядом ещё один. Так на них ещё стояли кое-какие программы, помимо калькулятора!

Увидели жизнь. Точнее life. Ещё точнее программу life32, с которой нам предстоит работать всё оставшееся время. Вторую часть проекта изучали её содержание. Поняли, что там равноправие. Илья принялся устранять эту проблему.

День 3

Приехал Данила и поступил на наш проект. Теперь группы абсолютно уравновешены по соотношению 1:4. До конца проекта изучали пушки, а также то, что с ними может сделать один глайдер. Результат потрясает воображение: вот это побоище! Решили об этом рассказать остальным. На лекции. Посовещавшись, решили сделать её крутой.

День 4

Продолжаем изучение папки Misc. Файл АК-47, обещавший по названию что-то интересное, на деле оказался простой двухсторонней пушкой. Нашли файл с коллекцией устойчивых фигур. Поинтересовались: "А зачем мы их рисовали в первый день?" Ответа не получили. Обиженные, начали готовить отчёт. Припёрлись психи. Долго от них отбивались. Пришлось скормить им Даню.

День 5

Выходной. Делать нечего. К компам не подпускают. Пришлось изучать жизнь на примере участников дальнего похода. Удивились тому, что некоторые живут и более чем при трёх соседях.

Исследовали смерть центральной клетки в игре "Картошка".

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

День 6

Ура! Нас снова подпустили к компам! Забили на отчёт. Даня вернулся весь измученный, но психи от нас отстали.

Продолжаем исследование жизни и содержимого ноутбука Вадима. Когда-то там было много игр, но сейчас там только танки.

Во время бомбардировки жабы глайдерами увидели уть. Оказалось, что они ещё и летать умеют.

День 7

Кромсали жабу на части. Обнаружили там четыре (4!) ути и какую-то дополнительною фтуковину. Оказалось, что фтуковина без уть дохнет. Пришлось опять скормить Даню психам.

День 8

Опровергаем закон сохранения. Из 6-ти глайдеров получили две ути. А из них только два глайдера. Закон обиделся и ушел. Мы рады, что научились перерабатывать глайдеры. Узнали, что глайдеры называются планерами. Теперь их называем только так.

День 9

Планеры не приЖились. Решили переименовать их в глайдеры. Вспомнили, что у нас скоро лекция. Решили сделать что-то умное. Не получилось. Продолжаем издеваться над утями и глайдерами. Даня так и не вернулся.

День 10

Второй выходной день!!! К компам опять не пускают. Наверное, это такая традиция - не пускать к компам в выходные. Обиделись. Заставили разделиться на команды и проходить Альпэстафету. Обиделись ещё сильнее.

Интересно, то, что у каждого оказалось по 3 соседа, гарантирует нам выживание в любых условиях? Освоили Путь Жизни: грязь - бревно - песчаный склон. И обратно под гору. Вернулись все живые, но смертельно уставшие и так же смертельно избитые.

День 11

Сегодня лекция!!!

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

Экстренные меры по созданию ячейки памяти что-то дали. С одной стороны, она у нас появилась. С другой стороны, её создатель прогулял лекцию, унеся с собой инструкцию по эксплуатации. Великолепный план рассказа лекции был не только создан нами утром, но и забыт перед самой лекцией. Также был обнаружен один минус ноутбука: не любит он проектор.

В общем, лекция удалась. Особое спасибо проектору, чья кривизна создавала из обычных картинок шедевры жизненного искусства.

День 12

Всё! Лекция прошла, может, даже успешно. Решили отдохнуть. Как ни странно, эта идея пришла не только нам, но и другим проектам, но если у нас народ отдыхает вполне мирно (читаем хроники лаборатории и спим), то психи гоняют в Half-Life 1 и Quake, а фрактальщики режутся в StarCraft и WarCraft 2: Hidden Hazard

День 13

Продолжаем отходить от лекции, попутно отражая атаки психов (со стороны двери) и папарацци (ОТОВСЮДУ!!!). Пока всё получается. Добили ячейку памяти. Теперь она работает, хоть и хромает. Решили вернуться к отчёту.

Забили на отчёт и начали писать хроники.

День 14

Опять принялись за отчёт. Скучно, но приходиться описывать наш жизненный путь. Кончились мысли. Писать отчёт надо, но идей нет. Короче - полный ступор.

День 15

Третий выходной!!! Уже не пытаемся подобраться к компам. Всё равно не пустят. Пришлось Максу и Лёхе входить в роль друида и паладина. Остальные маялись дурью. Ближе к вечеру стало скучно.

День 16

Макс и Леха с трудом вышли из роли. На отдых уже нет времени, так что приходится работать. Пишем отчёт. Думаем о конференции. Долго думаем. Дописываем черновой вариант отчёта...