Программируем жизнь
Представьте себе двумерную вселенную, состоящую из клеток (как в школьной тетради). Некоторые клетки закрашены — тогда мы говорим, что в них есть жизнь. У каждой клетки есть 8 клеток-соседей
Введём некоторые правила для нашей жизни:
1. Если у живой клетки меньше 2 соседей, она умирает от одиночества
2. Если у живой клетки 2 или 3 соседа, она продолжает жить
3. Если у клетки более 3 соседей, она умирает от перенаселения
4. Если у неживой клетки ровно 3 соседа, происходит размножение и клетка становится живой
Может ли в такой простой системе возникнуть что-то похожее на столь сложный процесс, как жизнь? Оказывается, может
Cистема поражает своей непредсказуемостью. Клетки постоянно рождаются и умирают, количество живых клеток то возрастает, то убывает. Иногда через какое-то количество шагов поле остаётся пустым, иногда на нём остаются стабильные структуры, а порой нечто «живое» остаётся в игре очень долго или навсегда
Примеры «существ»
Представьте, квадрат из 4 клеток на поле
У каждой клетки квадрата ровно 3 соседа. У клеток по краям — максимум по 2. Это значит, что каждая клетка квадрата будет продолжать жить, а рядом не будут рождаться новые. Такая структура будет существовать на поле вечно!
Но это совсем неинтересно, жизнь ведёт себя не так. У нас получилось что-то вроде окаменелости. Интереснее себя ведёт палка 1 на 3
У её центрального элемента 2 соседа, поэтому он остаётся живым. Элементы на краях погибают от одиночества, соседствуя лишь с центром. Зато с другой стороны от центра у мёртвых клеток имеется 3 соседа, поэтому они становятся живыми! Так это существо продолжает жить, переворачиваясь с боку на бок каждый ход
Существуют ещё более крутые конструкции, например, пульсар:
Но больше всего впечатляют движущиеся элементы! Они повторяют себя, но уже не на том же месте, а немного смещаясь. Например, планер:
Или даже космический корабль:
Если вас это ещё недостаточно впечатляет, то посмотрите на планерное ружьё Госпера:
Это стабильная структура, которая постоянно порождает новые двигающиеся планеры! И это уже действительно напоминает что-то живое. Построить ружьё Госпера можно так:
Зачем?
Эта модель называется Игра «Жизнь» Конвея. Её изобрёл британский математик Джон Конвей в 1970 году. До этого известнейший физик Джон фон Нейман предложил нечто похожее. Во времена космической гонки он думал, как колонизировать Марс. Поверхность красной планеты состоит из оксида железа — соединения кислорода и металла!
Фон Нейман предложил создать роботов, которые бы высадились на поверхность планеты и начали расщеплять материал у себя под ногами на кислород и железо. Кислород бы заполнил атмосферу для будущих колонизаторов, а из железа роботы бы делали свои собственные копии!
Взгляните на такую ситуацию сверху: робот занимает какую-то площадь и производит свои копии, распространяющиеся по бокам. Очень напоминает двумерную Вселенную из нашей модели! Но модель фон Неймана была гораздо сложнее: каждый робот там имел до 20 состояний. Предсказать поведение такой системы невероятно сложно
Конвей упростил модель фон Неймана до той, что описана в начале поста. Тем не менее, из таких простых правил всё равно рождаются очень сложные, непредсказуемые структуры. Почти никогда нельзя предсказать, вымрет ли система или стабилизируется и за сколько шагов это произойдёт. Эта простая модель очень помогла развитию таких наук, как математика и программирование, и даже биология с химией
Но что будет если всё же добавить сложности в эту модель? Может быть, сделать клеткам возраст, чтобы они умирали, если долго не изменяются, или сделать клетки шестиугольными, а не квадратными? Пишите свои идеи в комментариях, а я попробую их реализовать :)
Также можете поиграть с моделью самостоятельно. Можно заполнить поле случайным образом, изменить масштаб или нарисовать какую-либо фигуру самостоятельно. Пишите, что интересного у вас получилось!
О, жизнь с шестиугольными клетками я делал. Там немножко более сложные правила и три состояния у клеток, а не два. Запустить можно тут: https://alexfsmirnov.github.io/hex-gol/
А подробнее почитать правила тут: https://www.gamedev.net/blogs/entry/2261919-is-there-a-hexag...
https://youtu.be/xP5-iIeKXE8
у меня глайдер на руке
Мое ружьё Госпера само себя застрелило =(