Сначала правила:
"Каждая клетка на плоскости может находиться в двух состояниях: быть живой или быть мёртвой. Клетка имеет восемь соседей. Распределение живых клеток в начале игры называется первым поколением. Каждое следующее поколение рассчитывается на основе предыдущего по таким правилам:
Игрок не принимает прямого участия в игре, а лишь расставляет начальную конфигурацию «живых» клеток, которые затем взаимодействуют согласно правилам уже без его участия."
Более подробно можно прочитать на Википедии (ссылка).
Попробуем реализовать эту игру в Excel без использования VBA.
Так как вычисления производятся поэтапно, необходимо отключить автоматический пересчет таблиц. Заходим в пункт меню "Сервис" - "Параметры", переходим на вкладку "Вычисления".
Дальше выбираем пункт вычисления "вручную", ставим галочку "итерации", указываем "предельное число итераций" равным 1. Щелкаем ОК.
Для начала делаем ширину столбцов и высоту строк одинаковой, к примеру 20 пикселей. Как это сделать описано в заметке Квадратные ячейки в Excel.
Нам нужно будет 2 таблицы. Выделяем область B2:AA27, обводим ее границей, затем копируем и вставляем на область B35:AA60. Пусть Таблица 1 - сверху, а Таблица 2 - снизу.
Живая клетка будет содержать значение 1, мертвая - пустая.
Создаем именованную формулу, которая суммирует 8 ячеек, расположенных вокруг данной:
Теперь если мы в ячейке B2 напишем =Суммавокруг, то получим сумму вокруг ячейки B35, если в ячейке B3 напишем =Суммавокруг, то получим сумму вокруг ячейки B36 и т.д.
Вычисление будут проходить так. В Таблицу 2 забиваем исходное положение, щелкаем F9 (вычислить) и Excel производит расчет в Таблице 1 на основании Таблицы 2 и копирует Таблицу 1 в Таблицу 2.
Чтобы определить, когда в Таблице 2 выводятся исходные данные, а когда копируются из Таблицы 1, присвоим ячейке B31 имя флаг. Если там 1, то выводим исходные данные, если 0, то копируем из Табл. 1.
Приступим к заполнению таблиц.
Выделяем Таблицу 1 и в строке формул пишем (на основании правил игры)
=ЕСЛИ(ИЛИ(Суммавокруг<2;Суммавокруг>3);0;ЕСЛИ(Суммавокруг=3;1;B35))
и щелкаем Ctrl + Enter, чтобы заполнить сразу все ячейки.
Выделяем Таблицу 2 и в строке формул пишем =ЕСЛИ(флаг;0;A2) и щелкаем Ctrl + Enter, чтобы заполнить сразу все ячейки.
Чтобы нули не выводились заходим в пункт меню "Сервис" - "Параметры", переходим на вкладку "Вид" и снимаем галочку с пункта "нулевые значения".
Но пока у нас исходное положение не содержит "живых" клеток. Чтобы "оживить" клетку, необходимо в формуле, которая в ячейке поменять 0 на 1, но делать это нужно только в Таблице 2. Можно выбрать сразу несколько клеток (выбираем их, удерживая клавишу Ctrl), затем в строке формул меняем 0 на 1 и щелкаем Ctrl + Enter.
Как с этим работать:
Выделяем все ячейки Таблицы 2. Переходим в пункт меню "Формат" - "Условное форматирование". Задаем условие равно 1 и выбираем "Формат" красный шрифт и красная заливка.
Теперь Таблицу 1 можно скрыть и работать только с Таблицей 2.
Результат
"Каждая клетка на плоскости может находиться в двух состояниях: быть живой или быть мёртвой. Клетка имеет восемь соседей. Распределение живых клеток в начале игры называется первым поколением. Каждое следующее поколение рассчитывается на основе предыдущего по таким правилам:
- пустая (мёртвая) клетка, рядом с которой ровно три живые клетки, оживает;
- если у живой клетки есть две или три живые соседки, то эта клетка продолжает жить; в противном случае (если соседей меньше двух или больше трёх) клетка умирает (от «одиночества» или от «перенаселённости»).
Игрок не принимает прямого участия в игре, а лишь расставляет начальную конфигурацию «живых» клеток, которые затем взаимодействуют согласно правилам уже без его участия."
Более подробно можно прочитать на Википедии (ссылка).
Попробуем реализовать эту игру в Excel без использования VBA.
Так как вычисления производятся поэтапно, необходимо отключить автоматический пересчет таблиц. Заходим в пункт меню "Сервис" - "Параметры", переходим на вкладку "Вычисления".
Дальше выбираем пункт вычисления "вручную", ставим галочку "итерации", указываем "предельное число итераций" равным 1. Щелкаем ОК.
Для начала делаем ширину столбцов и высоту строк одинаковой, к примеру 20 пикселей. Как это сделать описано в заметке Квадратные ячейки в Excel.
Нам нужно будет 2 таблицы. Выделяем область B2:AA27, обводим ее границей, затем копируем и вставляем на область B35:AA60. Пусть Таблица 1 - сверху, а Таблица 2 - снизу.
Живая клетка будет содержать значение 1, мертвая - пустая.
Создаем именованную формулу, которая суммирует 8 ячеек, расположенных вокруг данной:
- Активизируем ячейку B2.
- Выбираем меню "Вставка" - "Имя" - "Присвоить".
- В поле Имя пишем Суммавокруг.
- В поле Формула пишем =!A34+!B34+!C34+!C35+!C36+!B36+!A36+!A35
Теперь если мы в ячейке B2 напишем =Суммавокруг, то получим сумму вокруг ячейки B35, если в ячейке B3 напишем =Суммавокруг, то получим сумму вокруг ячейки B36 и т.д.
Вычисление будут проходить так. В Таблицу 2 забиваем исходное положение, щелкаем F9 (вычислить) и Excel производит расчет в Таблице 1 на основании Таблицы 2 и копирует Таблицу 1 в Таблицу 2.
Чтобы определить, когда в Таблице 2 выводятся исходные данные, а когда копируются из Таблицы 1, присвоим ячейке B31 имя флаг. Если там 1, то выводим исходные данные, если 0, то копируем из Табл. 1.
Приступим к заполнению таблиц.
Выделяем Таблицу 1 и в строке формул пишем (на основании правил игры)
=ЕСЛИ(ИЛИ(Суммавокруг<2;Суммавокруг>3);0;ЕСЛИ(Суммавокруг=3;1;B35))
и щелкаем Ctrl + Enter, чтобы заполнить сразу все ячейки.
Выделяем Таблицу 2 и в строке формул пишем =ЕСЛИ(флаг;0;A2) и щелкаем Ctrl + Enter, чтобы заполнить сразу все ячейки.
Чтобы нули не выводились заходим в пункт меню "Сервис" - "Параметры", переходим на вкладку "Вид" и снимаем галочку с пункта "нулевые значения".
Но пока у нас исходное положение не содержит "живых" клеток. Чтобы "оживить" клетку, необходимо в формуле, которая в ячейке поменять 0 на 1, но делать это нужно только в Таблице 2. Можно выбрать сразу несколько клеток (выбираем их, удерживая клавишу Ctrl), затем в строке формул меняем 0 на 1 и щелкаем Ctrl + Enter.
Как с этим работать:
- Пишем в ячейке флаг значение 1, т.е. переходим к исходному положению.
- Выделяем Таблицу 2 и в строке формул пишем =ЕСЛИ(флаг;0;A2) и щелкаем Ctrl + Enter. Таким образом мы обнуляем исходные данные.
- Выделяем нужные нам ячейки в Таблице 2 и в строке формул меняем 0 на 1 и щелкаем Ctrl + Enter. Таким образом мы формируем первоначальную позицию.
- Пишем в ячейке флаг значение 0, т.е. запускаем эволюцию.
- Щелкаем F9 (вычислить), чтобы переходить к следующему поколению.
Выделяем все ячейки Таблицы 2. Переходим в пункт меню "Формат" - "Условное форматирование". Задаем условие равно 1 и выбираем "Формат" красный шрифт и красная заливка.
Теперь Таблицу 1 можно скрыть и работать только с Таблицей 2.
Результат
НЕТОЧНОСТЬ.
ОтветитьУдалитьВыделяем Таблицу 2 и в строке формул пишем =ЕСЛИ(флаг;0;A2) и щелкаем Ctrl + Enter, чтобы заполнить сразу все ячейки. НЕТОЧНОСТЬ. Вместо =ЕСЛИ(флаг;0;A2) надо =ЕСЛИ(флаг;0;B2)