Жизнеподобные клеточные автоматы - это клеточные автоматы, которые похожи на игру жизни Конвея в том, что они действуют на (теоретически) бесконечно большой квадратной сетке, где каждая клетка имеет ровно 8 соседей и является одним из 2 состояний, а именно живым и мертвым ,
Тем не менее, эти версии, подобные «Лайк», принципиально отличаются друг от друга: правила оживления данной клетки и правила выживания данной клетки для следующего поколения.
Например, классическая Игра Жизни использует правило B3/S23
, означающее, что для рождения новой требуется 3 живых клетки, а для выживания 2 или 3 живых соседа. Для этой задачи мы будем предполагать, что соседи не включают себя, поэтому каждая ячейка имеет ровно 8 соседей.
Ваша задача, учитывая исходную конфигурацию, правило рождения, правило выживания и положительное целое число (количество поколений, которое нужно запустить), имитировать Life-like автомат с использованием этих правил для числа поколений, указанных в кратчайшем из возможных кодов. , Начальной конфигурацией будет квадратная матрица / двумерный массив или многострочная строка, которую вы можете выбрать. Другие могут быть предоставлены в любом разумном формате и метод.
Например, если правило рождения было 12345678
(любые живые соседи), правило выживания было, 2357
и начальная конфигурация была
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
следующие два поколения будут
Generation 1: Generation 2:
0 0 0 0 0 1 1 1 1 1
0 1 1 1 0 1 1 0 1 1
0 1 0 1 0 1 0 1 0 1
0 1 1 1 0 1 1 0 1 1
0 0 0 0 0 1 1 1 1 1
Если бы число приведенных поколений было 10, на выходе было бы что-то вроде
0 1 1 1 0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 1 1 1 0
Вам не нужно обрабатывать изменения, которые происходят за пределами границ, заданных входной матрицей, однако все ячейки за пределами матрицы начинаются мертвыми. Поэтому матрица ввода может быть любого размера, вплоть до максимального значения, которое может поддерживать ваш язык. Вам не нужно выводить доску между поколениями.
Это код-гольф, поэтому выигрывает самый короткий код.
Контрольные примеры
Они используют B/S
обозначение, чтобы указать используемые правила
B2/S2
, generations = 100
Конфигурация:
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
Выход:
0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 0
1 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 0
0 0 0 0 0 0 0 0
B1357/S2468
, generations = 12
Конфигурация:
1 0 1 0 1 0
0 1 1 0 1 0
1 0 0 0 0 0
0 0 0 0 0 1
1 1 1 1 1 0
0 1 1 0 0 1
Выход:
0 1 0 0 0 0
0 1 1 1 1 0
0 1 0 1 1 0
1 1 1 0 0 0
0 0 1 1 1 0
0 1 1 0 0 0
Если вам нужно создать больше тестовых случаев, вы можете использовать этот замечательный симулятор. Пожалуйста, не забудьте ограничить размер доски