Отвечу на первую часть вопроса
Одно из условий остановки игры, если поле зацикливается.
Но как это реализовать? Знаю способ, с запуском "скрытой" игры, которая будет течь в 2 раза быстрее, и сравнивать поле этой игры с полем оригинальной каждый ход. Затем на каком то моменте поля совпадут и с этого момента запустить сравнение по ходам со стартовым первоначальным полем. Когда совпадут, получается зациклилось.
Но можно ли как-то попроще это реализовать?...
Я не программировал Convay-s Life т.к. было не особо интересно. Но я наблюдал работу приложения Golly. Там можно было проводить сутки напролет в экспериментах, задавая различные конфигурации клеток и вот к чему я пришел.
Невозможно докзать завершение игры просто так. Поле, даже небольшого размера может состоять из
осцилляторов или
ружей и пожирателей которые имеют разные периоды и могут сейчас не взаимодействовать друг с другом но внезапно пересечся через 10 000 эпох. Поэтому чтобы доказать что имеет место устойчивый период надо физически воспроизвести все эпохи.
Короче клеточный автомат имеет свойства которые невыводимы из начальной конфигурации в общем случае.
В частных случаях например когда вы знаете что такое глайдер и куда он полетит - то пожалуй можно. Но таких случаев будет мало.
Нерешенные вопросы:
1) Поле
бесконечное? Как быть с конечными ресурсами оперативной памяти?
2) Поле
конечное? Уничтожаем клетки (глайдеры) которые вылетают за границу поля?
3) Поле
завернутое в тор (бублик)? Будем ли считать линейные трансформации поля - эквивалентными к исходному?
Данные вопросы вобщем-то тоже влияют на проблему завершения жизни Конвея.
По поводу идеи автора с удвоением времени. Может не сработать если период повтора не будет кратен двойке.
По сути надо не сравнивать x и 2x эпоху. А записывать в базу данных все x - 1 эпох и проверять все-с-последней.
Но такая сверх-задача невыполнима например с растущим
бесконечным полем.
Вторая часть вопроса не так интересна. Ее можно задать отдельным вопросом в habr.