Простейший клеточный автомат, симулирующий конкуренцию
Правило одно - каждый ход, клетка перенимает цвет случайной клетки вокруг себя.
Результат напоминает борьбу (наций, идей, культур, языков и т.п.) за территорию.
Если в симуляцию добавить границы, то цвета будут устойчиво занимать географические ниши. Как и в жизни.
Со временем, цветов становится всё меньше, а их борьба затягивается. Это похоже на сокращение числа живых языков в мире. В итоге, в симуляции останется только 1 цвет. Может, и в будущем, весь мир заговорит одинаково?
Клеточный автомат простой, но мне хотелось поделиться результатом. Если у вас есть идеи для экспериментов, пишите в комменты. Буду рад!
"Непоследовательный" обход массивов
Совсем недавно увлекшись идеей написания своего варианта реализации алгоритма "Клеточных автоматов" Life заметил следующий нюанс:
При последовательном обходе массивов в первую очередь обрабатыватся "элементы-автоматы" с наименьшими координатами в массиве.
В частности при перечении Орестности Мура двух близлежащий автоматов, указанных на рисунке, сначала будет произведены действия Автомата I, а затем действия Автомата II.
Мне удалось реализовать алгоритм "нелинейного" обхода массива, идея заключается в использовании генератора псевдослучайных чисел для выбора элементов массива.
Однако этот метод создает избыточность итераций цикла обработки массива.
from random import randint
SomeData = [[i for i in range(10)] for j in range(5)]
Cols = len(SomeData[0])
Rows = len(SomeData);PunchCard = [[True for i in range(Cols)] for j in range(Rows)]
while sum(map(sum, PunchCard)) > 0 :
rndCols = randint(0, Cols-1)
rndRows = randint(0, Rows-1)
if PunchCard[rndRows][rndCols]: ## "Punch"
##Do some action
SomeData[rndRows][rndCols] += 1
##*****************************
PunchCard[rndRows][rndCols] = False ## Mark as "Space"
##Show result
for i in range(Rows):
print(SomeData[i])
Клеточный автомат "Камень, ножницы, бумага"
Наверняка вы слышали о клеточном автомате Игра «Жизнь». Подобные клеточные автоматы позволяют получить весьма красивые и необычные фигуры, основываясь на простых правилах. Ниже представлен пример работы такого автомата. Его правила напоминают игру "камень, ножницы, бумага" и в общих чертах таковы: красные клетки поглощаются синими, зеленые поглощаются красными, синие поглощаются зелеными. Взгляните, что из этого получается:
Волны на Global Game Jam
Привет, дорогие подписчики! Во-первых, не беспокойтесь, с мобильной цивой всё в порядке. Я осмысливаю тонны фидбека и делаю управление и сам процесс удобнее, не забывая о всём списке заявленных фич.
А это - клеточный автомат, который я сделал 7 лет назад. Вспомнил я о нём потому, что мы второй год подряд организовываем Global Game Jam Ukraine. Вообще Global Game Jam - это уникальное действо. Во всём мире 30-40 тысяч человек собираются на разных площадках и двое суток делают игры. Тема для игр объявляется в 17:00 местного времени. У нас - 135 человек (в прошлом году было 78).
Тема в этом году - "Waves". Её можно понимать как "волны" или, например, как глагол "махать" в третьем лице. Тема очень хорошая, в первую же ночь народ зарегистрировал несколько заготовок проектов. Через 31 час они должны быть готовы. Твичим круглосуточно тут: https://www.twitch.tv/ggjua На презентации перенесём камеру, чтобы смотрела в зал - будет интересно.
Ну и вкратце о том, как работает этот клеточный автомат. Вообще, клеточные автоматы это очень интересная штука. Представьте себе лист в клетку. В каждой клетке стоит число. Затем берём чистый лист в клетку, и начинаем заполнять его числами по определённым правилам. Правила эти учитывают, какие числа стояли в клетках на предыдущем листе. Когда новый лист заполнили полностью, старый выбрасываем и берём следующий чистый лист.
Изменяющиеся узоры из чисел создают очень красивые структуры. Здесь правила такие:
Лист заполняем числами от 0 до 27.
Чётные и нечётные числа съедают друг друга по цепочкам 0-2-4-...26-0 и 1-3-5-...-25-27-1
То есть если на старом листе в клетке было число 2, а среди 8-ми её соседей было число 4, то на новом листе ставим в клетку число 4.
И такое, казалось бы, простоей правило, позволяет генерировать эту красивую анимацию. Причём на старте поле засевается случайным образом - волны рождаются в результате самоорганизации хаоса :)
