Как стать автором
Обновить

Поиграем в жизнь

Время на прочтение 4 мин
Количество просмотров 25K
Игры и игровые консоли
Представьте себе листок бумаги в клетку. Подозреваю, что уже на этом этапе некоторые хабралюди догадались, о чем пойдет речь. Что ж, моё почтение им. Остальные же продолжают представлять себе листок бумаги в клетку. Во всех подробностях. В мельчайших деталях.

А теперь представьте, что на этом простом листочке мы создадим простой, но оттого не менее впечатляющий симулятор жизни. Ни больше, ни меньше. Конечно, он будет очень упрощенный, но ведь чтобы понять что-то сложное надо начать с простого, не так ли? Этот симулятор можно применить ко множеству наук и с каждой из них он будет иметь множество достаточно интересных точек соприкосновения. От социологии до астрономии, от биологии до электротехники.

Ладно, хватит завлекалок. Пора удариться в математику.


Включить мозги
Всего голосов 154: ↑135 и ↓19 +116
Комментарии 109

В игре «Жизнь» создали самый сложный организм, способный размножаться

Время на прочтение 1 мин
Количество просмотров 5.3K
Дизайн игр *Игры и игровые консоли
На Хабре уже обсуждалась уникальная двухмерная математическая вселенная Game of Life — пространство для создания клеточных автоматов.

Так вот, месяц назад там произошла настоящая революция. Никому не известный канадский программист Эндрю Уэйд (Andrew Wade) опубликовал на игровом форуме исходники организма Gemini, способного размножаться и перемещаться, уничтожая предыдущие копии (видео).
Читать дальше →
Всего голосов 166: ↑156 и ↓10 +146
Комментарии 131

Игра Жизнь на языке программирования Mercury

Время на прочтение 7 мин
Количество просмотров 4.3K
Программирование *
В рамках экспериментов с языком программирования Mercury а также под впечатлением уже неоднократно поднимавшейся в последнее время здесь темы игры Жизнь (1, 2, 3) захотелось написать свою реализацию на этом интересном языке программирования.

В двух словах о Mercury. Этот язык функционально-логического программирования замышлялся как усовершенствование prolog'а. Усовершенствование заключается в введении в пролог статической типизации (а так же декларирование режима детерминизма). Как результат — больше возможностей у компилятора создать эффективный исполнимый код, больший контроль на этапе компиляции. Любителям пролога, наверняка знаком анекдот:
Q: How many Prolog programmers does it take to change a light bulb?
A: False.

В царстве прологов нишу типизированных прочно занимает Visual Prolog. Но, стоит отметить, что подходы Visual Prolog и Mercury весьма отличны.
Читать дальше →
Всего голосов 30: ↑27 и ↓3 +24
Комментарии 12

3D Life — в поисках планеров

Время на прочтение 5 мин
Количество просмотров 19K
Игры и игровые консоли


Многим известна игра «Жизнь», изобретенная Дж.Конвеем еще в 1970 г. Еще шире известен один из объектов этой игры – планер (или глайдер) – движуееся образование из 5 клеток:

.

В 1987 г. Были найдены первые планеры в трехмерных версиях «жизни» ( www.complex-systems.com/pdf/16-4-7.pdf ). К сожалению, из случайных конфигураций они возникают очень редко (в отличие от двумерной версии). Я решил поискать правила игры, в которых планеров было бы побольше.
Много видеороликов
Всего голосов 71: ↑66 и ↓5 +61
Комментарии 19

HashLife на коленке

Время на прочтение 5 мин
Количество просмотров 8.2K
Алгоритмы *
После возни с трехмерной игрой «Жизнь» я вспомнил о том, что для обычной, конвеевской версии этой игры существует алгоритм под названием «Hashlife». Он несколькими фразами описан в Википедии, и приведенной там картинки с комментарием («конфигурация через 6 октиллионов поколений») для меня было достаточно, чтобы держаться от этой идеи подальше: сколько же ресурсов нужно этому алгоритму? Стоит ли за него браться вообще?

Общая идея алгоритма такая.

Допустим, что у нас есть квадрат поля размером N*N (N>=4 – степень двойки). Тогда мы можем однозначно определить состояние его центральной области размером (N/2)*(N/2) через T=N/4 шага. Если мы запомним состояние исходного квадрата и результат его эволюции в словаре, то сможем в следующий раз, встретив такой квадрат, сразу определить, что с ним станет.

Предположим, что для квадратов N*N эволюцию на N/4 шага мы считать умеем. Пусть у нас есть квадрат 2N*2N. Чтобы просчитать его развитие на N/2 шагов, можно сделать следующее.

Разобьем квадрат на 16 квадратиков со стороной N/2. Составим из них 9 квадратов со стороной N, для каждого из них найдем результат эволюции на N/4 шага. Получится 9 квадратов со стороной N/2. В свою очередь, из них составим уже 4 квадрата со стороной N, и для каждого из них найдем результат эволюции на N/4 шага. Полученные 4 квадрата со стороной N/2 объединим в квадрат со стороной N – он и будет ответом.



Читать дальше →
Всего голосов 60: ↑59 и ↓1 +58
Комментарии 7

Life3D – в поисках планеров. Часть 2

Время на прочтение 2 мин
Количество просмотров 1.2K
Игры и игровые консоли
В первой части публикации я рассказывал про поиски планеров в 3-мерной игре «Жизнь» (с 26 соседями у клетки). Там было несколько примеров того, что удалось найти. Но оказалось, что правил с планерами несколько больше, чем я ожидал вначале. Хотя и ненамного…

Программа, которая искала планеры, выдала довольно много «подозрительных» стартовых конфигураций. Но планеры были далеко не во всех. Во многих случаях возмутителями спокойствия оказывались пульсары – периодические конструкции с периодами, не являющимися делителями 60.

Чаще всего, период таких пульсаров равнялся 8:

Правило B5/S2,3:


Читать дальше →
Всего голосов 38: ↑37 и ↓1 +36
Комментарии 11

Жизнь на плоскости Лобачевского

Время на прочтение 10 мин
Количество просмотров 85K
Разработка игр *Алгоритмы *Математика *
Различные реализации игры «Жизнь» описывались на Хабре уже неоднократно. В этой статье, в качестве продолжения этой темы, рассматривается ещё один её вариант: в качестве игрового поля используется регулярная решётка на плоскости Лобаческого. Описываются общие методы использования плоскости Лобачевского в программах и необходимые для этого математические приёмы.
Как возникла плоскость Лобачевского, достаточно известно. В позапрошлом веке господа Гаусс, Лобачевский и Бойяи, проживавшие примерно в одно время в разных странах тогдашней Европы, задумались, что будет, если отменить пятый постулат Евклида и заменить его на противоположную аксиому. Оказалось, что не случится ничего плохого, и никаких противоречий не возникнет. Заметная часть последующего изучения неевклидовой геометрии была посвящена выяснению того, кто из них у кого украл идею этой самой геометрии.
Менее известно, что несмотря на «отрицательный» способ определения неевклидовой геометрии (вместо того, чтобы сказать, что через точку проходит ровно одна прямая, не пересекающая данную, мы говорим, что таких прямых может быть сколько угодно), мы, тем не менее, получаем систему теорем и формул, не менее стройную, чем та, что есть в евклидовой геометрии. И одновременно, у нас есть гораздо большее разнообразие геометрических фигур, в том числе, разбиений плоскости на правильные многоугольники.

Осторожно, много математики!
Всего голосов 255: ↑253 и ↓2 +251
Комментарии 64

Игра Жизнь на LiveScript в 30 строк

Время на прочтение 3 мин
Количество просмотров 8.1K
Ненормальное программирование *Разработка веб-сайтов *JavaScript *
В продолжение 30-ти строчного мема, выкладываю реализацию известной игры Жизнь на LiveScript (язык, транслируемый в Javascript).
Читать дальше →
Всего голосов 43: ↑14 и ↓29 -15
Комментарии 9

Клеточные автоматы с помощью комонад

Время на прочтение 5 мин
Количество просмотров 14K
Haskell *Функциональное программирование *
Из песочницы
Одним вечером я наткнулся на статью о реализации одномерного клеточного автомата с помощью комонад, однако материал неполон и немного устарел, в связи с чем решил написать русскоязычную адаптацию (заодно рассмотрев двумерные клеточные автоматы на примере Game of Life):

life_anim
Читать дальше →
Всего голосов 33: ↑31 и ↓2 +29
Комментарии 5

На грани безумия

Время на прочтение 7 мин
Количество просмотров 29K
Ненормальное программирование *Разработка игр *Forth *
Туториал
Рэндзю — удел простолюдинов,
в шахматы играют герои,
Го — игра богов

       Японская пословица.

Против глупости сами боги бороться бессильны.

       Айзек Азимов.


 
С приходом осени, хочется странного. Я задумался о том, какой должна быть игра, играть в которую максимально сложно? Меня интересует своего рода аналог Brainfuck-а из мира настольных игр. Хочется, чтобы правила игры были максимально простыми (Ритмомахия под это определение явно не подходит). Го — хорошая кандидатура на эту роль, но в неё люди играют довольно массово (хоть это и непросто). Если Го — игра богов, то хочется увидеть игру, играть в которую самим богам было бы затруднительно. Мощи богов я решил противопоставить своё безумие. В хорошем смысле…
Читать дальше →
Всего голосов 53: ↑51 и ↓2 +49
Комментарии 21

$mol_app_life: симулятор бога своими руками

Время на прочтение 9 мин
Количество просмотров 11K
JavaScript *Разработка игр *$mol *
Recovery mode

Здравствуйте, меня зовут Дмитрий Карловский. Недавно я оказался при смерти и понял как сильно я люблю Жизнь. Это идеальная игра для социопатов, где вы выступаете в роли бога, своею дланью единоправно решающего кому жить, кому умереть, а кому фаллоформировать. Новая клетка появляется как результат соития трёх других однополых соседей и умирает будучи затоптанной толпой из более чем трёх, оставшись наедине с собой или в компании всего одного. Кто бы мог подумать, что столь простые законы породят настолько огромное разнообразие игрового опыта, что играть в Жизнь будут и спустя 50 лет после их формулировки.


Планер


Если вы ещё не работали со $mol, то перед чтением рекомендуется прочитать более дружелюбное к новичкам руководство "$mol_app_calc: вечеринка электронных таблиц". А если его уже осилили, то далее вы узнаете:


  1. Как работать с бесконечным жизненным полем.
  2. Как рисовать быструю векторную графику.
  3. Как в $mol легко и просто соединить управление пальцем и рисование графики.
Читать дальше →
Всего голосов 27: ↑17 и ↓10 +7
Комментарии 22

Жизнь на частицах

Время на прочтение 4 мин
Количество просмотров 58K
Программирование *Разработка игр *Алгоритмы *Математика *
Из песочницы
Всем привет! Сегодня я расскажу о своих экспериментах с системами частиц. Основной целью было нахождение простых правил, которые бы порождали интересное поведение.

Классический пример системы с простыми правилами и сложным поведением — клеточные автоматы, именно на них я и ориентировался, пытаясь подобрать правила. Конечно же, для клеточных автоматов правила будут в большинстве случаев проще. Но частицы могут быть красивее!

Под катом много мегабайт гифок.

Читать дальше →
Всего голосов 269: ↑267 и ↓2 +265
Комментарии 67

Жизнь на частицах 3D

Время на прочтение 4 мин
Количество просмотров 9.3K
Программирование *Разработка игр *Алгоритмы *Математика *Параллельное программирование *

ПривеТ! Решил поделиться с читателями своими небольшими экспериментами с системами частиц в трехмерном пространстве. За основу взял публикацию на Хабре об экспериментах с частицами в 2D пространстве.


Всего голосов 57: ↑53 и ↓4 +49
Комментарии 21

Python или не Python

Время на прочтение 3 мин
Количество просмотров 4.4K
Python *JavaScript *Lua *Изучение языков
Я расскажу о проблемах с которыми столкнулся, выбрав Python3 первым языком.
Я не изучал программирование в университете.
Я не хочу начинать holywar.

В 2016 Google советовал учить Python3 если нужен:

1. Легкий для старта язык.
2. Язык для машинного обучения.
3. Язык для простых 2d игр.

1. Я посмотрел первую лекцию курса Harvard CS50 на сайте JavaRush и понял, что не хочу:

#include <stdio.h>
int main(int argc, const char *argv[]) {
    printf("Hello world\n");
    return 0;
}

Когда можно так:

print('Monty Python')

JavaScript испугал комбинацией из трех систем: JS/HTML/CSS.

2. Машинное обучение вдохновляло тем, что все статьи и примеры напоминали киберпанк и научную-фантастику.

3. Можно программировать игры? Супер!
Читать дальше →
Всего голосов 10: ↑6 и ↓4 +2
Комментарии 14

Пишем игру «Жизнь» для NES на Rust

Время на прочтение 12 мин
Количество просмотров 5.4K
Разработка игр *Rust *Игры и игровые консоли
Перевод
image

Этот пост — о программе на Rust…

$ cargo install conway-nes

…выводящей двоичный файл NES…

$ conway-nes > life.nes

…в котором выполняется конвеевская игра «Жизнь»!

$ fceux life.nes    # fceux is a NES emulator

Запустив игру на эмуляторе, нажмите любую кнопку контроллера, чтобы начать заново с рандомизированного состояния.
Читать дальше →
Всего голосов 28: ↑28 и ↓0 +28
Комментарии 4

Создание образа Мона Лизы в Игре «Жизнь»

Время на прочтение 10 мин
Количество просмотров 10K
Блог компании RUVDS.com Ненормальное программирование *Python *Алгоритмы *
Перевод

Клеточные автоматы представляют большой интерес и являются предметом исследования во многих областях, включая математику, физику, биологию, программирование и прочие. В статье мы разберем базовую реализацию и оптимизацию алгоритма для поиска состояния Жизни, из которого в течение нескольких поколений будет генерироваться образ Мона Лизы.
Всего голосов 79: ↑79 и ↓0 +79
Комментарии 11

Эволюция бесконечной случайной конфигурации в игре «Жизнь»

Время на прочтение 4 мин
Количество просмотров 17K
Математика *Научно-популярное Логические игры

Эту вещь я хотел сделать с детства, но тяжело такое имплементировать, когда у тебя что на ЕС-1022, что на СМ-4 не хватает памяти. Сейчас такие вещи делаются играючи.

Итак, засеем бесконечное поле в игре "Жизнь" клеточками с вероятностью p от 0 до 1. Какова будет плотность популяции клеток после N ходов?

В статье я рассматриваю эволющию в течение первых ходов, после десятков ходов, в течение тысяч ходов, и после Гугола ходов. Вывод очень вас удивит.

Читать далее
Всего голосов 58: ↑58 и ↓0 +58
Комментарии 71

Игра Жизнь и Julia

Время на прочтение 5 мин
Количество просмотров 4.8K
Python *Математика *Julia *Научно-популярное

В одной из своих прошлых статей по эволюции случайной конфигурации в игре жизнь я выдвинул гипотезу: Первая гипотеза касается окончания 'движухи' - в широком диапазоне изначальных плотностей p от 0.1 до 0.7, после окончания 'движухи' 'пепел' имеет одну и ту же плотность, около 0.27

Рассчитывая фрактал Римана, я был вынужден пересесть с Python на Julia из-за скорости, и не пожалел об этом. Однако теперь я мог на Julia быстро обрабатывать огромные конфигурации, например, 10k x 10k, и я решил повторить численные эксперименты на новом уровне. Как всегда, вас ждет и видео.

Читать далее
Всего голосов 30: ↑29 и ↓1 +28
Комментарии 5

Glider guns vs случайная конфигурация в игре «Жизнь»

Время на прочтение 2 мин
Количество просмотров 3K
Математика *Julia *Научно-популярное

И снова к старой теме. В старой статье я сделал два предположения:

Гипотезы

Первая гипотеза касается окончания 'движухи' - в широком диапазоне изначальных плотностей p от 0.1 до 0.7, после окончания 'движухи' 'пепел' имеет одну и ту же плотность, около 0.27

Так как ружья накачают 'вселенную' глайдерами при сколь угодно малой изначальной плотности, и снова начнется 'движуха', то вторая гипотеза сильнее:

В пределе при любой плотности p (кроме вырожденных случаев p=0, p=1) получается 'пепел' плотности 0.027

На Julia, имея теперь огромные мощности, я решил проверить обе. Вас ждет красивое видео

Читать далее
Всего голосов 24: ↑24 и ↓0 +24
Комментарии 15

Максимальная оптимизация игры «Жизнь» на Julia

Время на прочтение 10 мин
Количество просмотров 8.4K
Высокая производительность *Математика *Julia *

Это очень хорошой case для оптимизации. Алгоритм крайне прост и его знают все. Но сколько можно сделать!

Читать далее
Всего голосов 64: ↑63 и ↓1 +62
Комментарии 25
1