Вызов:
Учитывая матрицу (или 2-мерный массив) 0 и 1, выведите количество шагов, которое необходимо, чтобы игра жизни Конвея достигла стабильного состояния, или -1, если оно никогда не достигнет единицы. Стабильное состояние - это состояние, в котором ячейки не включаются и не выключаются на каждом этапе. Игра должна проходить в заданной матрице, с подключенной верхней и нижней частью, а также с соединенными сторонами. (т.е. с учетом матрицы 4x3 она должна работать на торе 4x3) Входная матрица не будет больше 15x15.
Примечание. Если матрица запускается в стабильном состоянии, выходное значение должно быть равно 0.
Образцы:
Входные данные:
[[0,0,0],
[0,1,1],
[0,1,0]]
Выход:
2
Процесс: (это не нужно отображать)
[[0,0,0],
[0,1,1],
[0,1,0]]
[[1,1,1],
[1,1,1],
[1,1,1]]
[[0,0,0],
[0,0,0],
[0,0,0]]
Входные данные:
[[0,0,1,1],
[0,1,1,1],
[0,1,0,0],
[0,1,1,1]]
Выход:
2
Процесс:
[[0,0,1,1],
[0,1,1,1],
[0,1,0,0],
[0,1,1,1]]
[[0,0,0,0],
[0,1,0,1],
[0,0,0,0],
[0,1,0,1]]
[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
Входные данные:
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
Выход:
-1
Процесс:
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
[[0,0,0,0],
[1,1,1,0],
[0,0,0,0],
[0,0,0,0]]
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
повторять вечно
Входные данные:
[[0,0,0,0],
[0,0,0,1],
[0,1,1,1],
[0,0,1,0]]
Выход:
4
Процесс:
[[0,0,0,0],
[0,0,0,1],
[0,1,1,1],
[0,0,1,0]]
[[0,0,0,0],
[1,0,0,1],
[1,1,0,1],
[0,1,1,1]]
[[0,1,0,0],
[0,1,1,1],
[0,0,0,0],
[0,1,0,1]]
[[0,1,0,1],
[1,1,1,0],
[0,1,0,1],
[1,0,1,0]]
[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
Входные данные:
[[0,0,0,0],
[0,1,1,0],
[0,1,1,0],
[0,0,0,0]]
Выход:
0
Процесс:
Начальное состояние стабильно.
Правила игры жизни
Если ячейка с выключенным (0) находится рядом с ровно тремя включенными (1) ячейками, она включается. В противном случае, это прекращено. Если ячейка находится рядом с 2 или 3 на квадратах, это говорит о. В противном случае он выключен.
Ответы:
Mathematica,
130129 байтовЯ не рекомендовал бы пробовать более 4х4 входов, потому что это займет вечность (и много памяти).
объяснение
Это просто имитирует игру в течение 2 N шагов, где N - количество ячеек на входе. Это гарантирует, что если система придет в стабильное состояние, мы ее достигнем. После этого мы находим первую пару последовательных идентичных состояний в моделируемой истории.
Давайте пройдемся по коду:
Это вычисляет 2 N , так
Join@@
как используется для выравнивания 2D-списка.Это имитирует игру жизни для 2 N поколений. Матрица 3x3 определяет окрестность тоталистического 2D-автомата и
224
является номером правила стандартной игры жизни. Я написал о том, как вычислить это число здесь, на Mathematica.SE .Это получает все последовательные (перекрывающиеся) пары поколений.
Это находит первую пару идентичных поколений, по умолчанию,
0
если ничего не найдено, и ограничивает поиск до глубины1
. Если такая пара будет найдена, то результат возвращается в виде списка , хотя. Поэтому мы используем:Извлечь первый элемент из этого списка (значение по умолчанию
0
, будучи атомарным, не затрагивается этим).Наконец, мы вычитаем один, потому что задача ожидает
0
индексы-1
на основе и для неудачи.источник
Lua,
531509488487464424405404 байтаКто хочет массовое подчинение? \ О /
Редактировать: Улучшено, но я не знаю, как играть в гольф, так что ... добавлены
пояснения ккомментариям :)Сохранено ~ 60 байт с помощью @ KennyLau
Небольшой гольф резка еще один байты пути переименования
a
в ,Y
чтобы предотвратить превращение встраиваемого шестнадцатеричногоUngolfed
Контрольные примеры
Вот несколько тестов
источник
Желе,
2625 байтПопробуйте онлайн! или проверьте все контрольные примеры .
Большие тесты (из ответа @ Katenkyo ): 15 × 15 стабильный | 15 × 14 планер
Как это устроено
источник
Perl,
154151144140137133129 байтВключает +3 для
-ap0
Запустить с вводом в виде строки групп цифр, разделенных пробелом
Это действительно нужно только в том случае, если входной сигнал сразу стабилен. Во всех остальных случаях вы также можете более удобно указывать его в виде отдельных цифр:
Однако, если вы введете данные таким образом, вы получите 1 вместо 0 для немедленной стабильной конфигурации.
life.pl
:Почти победил Mathematica в этом ...
Это решение для 126 байтов работает только в старых версиях Perl (где вы можете использовать константу в качестве переменной):
Если определенно должно быть не менее 2 строк, это 123-байтовое решение работает на всех версиях Perl:
источник
рубин, 207 байт
Я веду историю каждой доски, поэтому, если я получу доску, которую видел раньше, я знаю, что произошло одно из двух. Во-первых, возможно, мы нашли устойчивую позицию, и в этом случае она станет самой последней в нашей истории. Другая возможность заключается в том, что у нас есть цикл.
источник
15*15*4*1000
-> 900 КБ, что достаточно для случаев, когда нам нужно 10k + gens :).Юлия,
9288 байтверификация
источник