Описание: Клеточный автомат Джона Конвея |
Поиск в теме | Версия для печати |
Admin |
Отправлено: 06 Июля, 2011 - 20:23:16
|
Администратор
Сообщений всего: 899
Дата рег-ции: Май 2006
|
Клеточный автомат на примере игры "Жизнь", придуманной английским математиком Джоном Конвеем.
Правила, сформулированные Конвеем, из книги Мартина Гарднера:
Цитата:Генетические законы Конуэя удивительно просты. Прежде чем мы их сформулируем, обратим внимание на то, что каждую клетку доски (которая, вообще говоря, считается бесконечной) окружают восемь соседних клеток: четыре имеют с ней общие стороны, а четыре другие - общие вершины. Правила игры (генетические законы) сводятся к следующему:
выживание. Каждая фишка, у которой имеются две или три соседние фишки, выживает и переходит в следующее поколение;
гибель. Каждая фишка, у которой оказывается больше трех соседей, погибает, т. е. снимается с доски, из-за перенаселенности. Каждая фишка, вокруг которой свободны все соседние клетки или же занята только одна клетка, погибает от одиночества;
рождение. Если число фишек, с которыми граничит какая-нибудь пустая клетка, в точности равно трем (не больше и не меньше), то на этой клетке происходит рождение нового "организма", т. е. следующим ходом на нее ставится одна фишка.
Важно понять, что гибель и рождение всех "организмов" происходят одновременно. Вместе взятые, они образуют одно поколение или, как мы будем говорить, один "ход" в эволюции начальной конфигурации. Ходы Конуэй рекомендует делать следующим образом:
начать с конфигурации, целиком состоящей из черных фишек;
определить, какие фишки должны погибнуть, и положить на каждую из обреченных фишек по одной черной фишке;
найти все свободные клетки, на которых должны произойти акты рождения, и на каждую из них поставить по одной фишке белого цвета;
выполнив все эти указания, еще раз внимательно проверить, не сделано ли каких-либо ошибок, затем снять с доски все погибшие фишки "(т. е. столбики из двух фишек), а всех новорожденных (белые фишки) заменить черными фишками.
Проделав все операции, вы получите первое поколение в эволюции первоначальной конфигурации. Аналогичным образом получаются и все последующие поколения.
Подробнее о "Жизни" Конвея можно прочитать в замечательной книге Мартина Гарднера
"Математические досуги" ; .
И еще одна цитата из Гарднера:
Цитата:Конуэй высказал гипотезу, согласно которой не существует ни одной начальной конфигурации, способной беспредельно расти. Иначе говоря, любая конфигурация, состоящая из конечного числа фишек, не может перейти в конфигурацию, у которой число фишек превосходило бы некий конечный верхний предел. Это, наверное, наиболее глубокая и самая сложная задача, возникающая в игре "Жизнь".
Эти слова, скорее всего, были написаны еще до изобретения Планерного ружья Госпера.
Статья о Жизни Конвея в Википедии
http://ru.wikipedia.org/wiki/Жизнь_(игра)
В данном примере используется тороидальное представление поверхности, наиболее характерное для многих реализаций.
массив M [10,10]
массив M1 [10,10]
переменная x
переменная y
переменная хл
переменная хп
переменная ув
переменная ун
переменная n
переменная count
спрятать черепаху
кисть 50
ручка 7
загрузи в M
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 1 1 0 0 0 0
0 0 0 1 1 1 0 0 0 0
0 0 0 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
конец загрузки
копировать M в M1
повторять пока 1 = 1 {
заменить в M1 1 на 7
точка# M1, 150, 50
повторить для y от 1 до 10 {
если y - 1 < 1 то ув = 10 иначе ув = y - 1
если y + 1 > 10 то ун = 1 иначе ун = y + 1
повторить для x от 1 до 10 {
если x - 1< 1 то хл = 10 иначе хл = x - 1
если x + 1 > 10 то хп = 1 иначе хп = x + 1
n = M[y,хл] + M[ув,хл] + M[ув,x] + M[ун,хл] + M[ун,x] + M[ун,хп] + M[y,хп] + M[ув,хп]
если n > 3 то M1[y,x] = 0
если n < 2 то M1[y,x] = 0
если n = 2 то M1[y,x] = M[y,x]
если n = 3 то M1[y,x] = 1
}
}
копировать M1 в M
count = count + 1
пиши count
}
В качестве начальной конфигурации взята эмблема CNews Forum 2011
Эмблема "живет" 11 поколений |
|
|
cjA |
Отправлено: 06 Сентября, 2011 - 14:27:56
|
Генерал
Сообщений всего: 3291
Дата рег-ции: Янв. 2010
|
забыл уже где спрашивал, не найти.
CODE:
переменные а, в, р=30, с
'и
массив ф1 [p,p]
когда появиться? это же интерпритируемый язык? какая ему разница откуда размер массива брать? И когда какое число в переменную сунуть?
(По поводу гексоганального Конвея вылезли траблы с теорией чисел, (четности) но на уровне GL вроде решаются (писанины правда много, но принципиальный отказ от процедур- я поддерживаю, если не умеешь писать код машины без процедур- не НУЖНО СОВСЕМ садится думать код машины. (в жабамашине нет процедур тоже, вроде, однако полИнета на ней работает)))
(Вашему лингботу нужно попу начесать- что за многоточия? Это из Гоголя была цитата, малороссийский язык..)
(и замените догда уж "п...й" на АБСОЛЮТНО БЕЗРАЗЛИЧНО КАК СУЩЕСТВУ ДУМАЮЩЕМУ И ЧУВСТВУЮЩЕМУ, так будет прикольней )(Отредактировано автором: 06 Сентября, 2011 - 14:34:49) |
|
|
Vadim_prog |
Отправлено: 26 Февраля, 2014 - 22:15:18
|
Рядовой
Сообщений всего: 5
Дата рег-ции: Нояб. 2010
|
'Немного переделал программку:
массив M [21,21]
массив M1 [21,21]
переменная x
переменная y
переменная xl
переменная xr
переменная yt
переменная yd
переменная n
переменная count
спрятать черепаху
перо 28
ручка 7
загрузи в M
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0
0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0
0 0 1 1 0 1 1 0 0 0 1 0 0 0 1 1 0 1 1 0 0
0 1 1 0 0 1 0 0 0 1 1 1 0 0 0 1 0 0 1 1 0
0 0 1 1 0 1 1 0 0 0 1 0 0 0 1 1 0 1 1 0 0
0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0
0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
конец загрузки
копировать M в M1
повторять пока 1 = 1 {
заменить в M1 1 на int(случайный*7)+9
точка# M1, 50, 0
повторить для y = 1 до 21 {
если y - 1 < 1 то yt = 21 иначе yt = y - 1
если y + 1 > 21 то yd = 1 иначе yd = y + 1
повторить для x = 1 до 21 {
если x - 1< 1 то xl = 21 иначе xl = x - 1
если x + 1 > 21 то xr = 1 иначе xr = x + 1
n = M[xl,y] + M[xl,yt] + M[x,yt] + M[xl,yd] + M[x,yd] + M[xr,yd] + M[xr,y] + M[xr,yt]
если n > 3 то M1[x,y] = 0
если n < 2 то M1[x,y] = 0
если n = 2 то если M[x,y] = 1 то M1[x,y] = 1
если n = 2 то если M[x,y] = 0 то M1[x,y] = 0
если n = 3 то M1[x,y] = 1
}
}
копировать M1 в M
count = count + 1
пиши count
}
'И еще один вариант:
'***********************************************************************
'***********************************************************************
'***********************************************************************
массив S [75,100] '*** ЭКРАН ***
массив P[48] '*** ПРАВИЛО ***
переменная x
переменная y
переменная l
переменная r
переменная n
переменная count
перо 8
спрятать черепаху
загрузи в P '*** ЗАДАТЬ ПРАВИЛО ***
0 0 2 1 2 0 3 4 2 1 2 0 4
конец загрузки
S[1,50]=int(случайный*5)+10 '*** ЗАДАТЬ КОЛОНИЮ ***
'повторить для x = 1 до 100 {
'S[1,x]=int(случайный*5)+10
'}
'пиши S[1,50]
заменить в S 0 на 8
повторить для y = 1 до 74 {
точка# S, 0, 0 '*** ВЫВОД ЭКРАНА ***
повторить для x = 1 до 100
{
если x - 1 < 1 то l = 100 иначе l = x - 1
если x + 1 > 100 то r = 1 иначе r = x + 1
n = S[y,l] + S[y,x] + S[y,r]-24
S[y+1,x]=P[ n+1 ]+8 '*** ПРИМЕНИТЬ ПРАВИЛО ***
}
count = count + 1
'пиши count
}(Отредактировано автором: 26 Февраля, 2014 - 22:26:02) |
|
|
|
Поиск в теме | Версия для печати |
Страниц (2): [1] 2 » |
« Проекты для GameLogo » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|
|
|