bobrovskyserg:
Не знаю. Може перевести список в множество? Но не факт, что сам перевод займет меньше времени.
А так, думаю что нет. На сколько я помню, то метод in для проверки вхождения для списка самый быстрый.
bobrovskyserg:
Тогда это если у пустой клетки 4 соседя? Она также станет живой? И у вас там в конце стоит (...and xy in gen) оно будет ложью для пустой клетки.
Нет это не обязательно. Может быть любая структура данных, которая поддерживает итерацию(так это називаеться, по моему). То есть создана на основе генератора.
bobrovskyserg:
Я сейчас просто стараюсь делать много таких разных(по сути чисто теоретических) задачек. А потом уже перейду к более практичному программированию.
Здесь тоже все просто. ху - это живая клетка(точнее ее координаты). Если она в gen(все живые клетки на этой генерации) и ее количество соседов == 3 или 4(на один больше 2 и 3, потому что сама клетка тоже считаеться для себя соседом в Вашей реализации) то в следующей генерации эта клетка будет живой. В противном случае - нет.
Меня вот что интересует, если клетка не жива иу нее ровто три соседа, то на следующую генерацию она станет живой. Где у Вас это реализовано?
bobrovskyserg:
То есть, все генераторы заменить на циклы с аппенд?
Так проще, нет? Цыкло занимают больше места и медленнее генераторов. Я стараюсь писать с помощью генераторов, если они не очень сложные.
bobrovskyserg:
Спасибо, за помощь) Мир не без добрых людей.
Вы использовали словарь и множество. Во множестве Вы храните координаты живых клеток. А во словаре - количество соседей.
Ага, я понял)) Вы не строите матрицу, а просто записываете индексы. И тогда не нужно хранить все эти нули, и добавлять место для роста популяции.
bobrovskyserg:
Посмотрел, как говорят, сделали "на скиле". Я еще так не могу, не умею)
К стати, мое решение тож работает, просто один метод(def find_matrix(matrix)) немножко не то возвращал. Он должен был возвращать вот такую структуру [[1, 0, ...], [0, 1, ...], ... ,[1, 1, ...]](матрицу), а возвращал [[[1, 0, ...]], [[0, 1, ...]], ... , [[1, 1, ...]]]. Все решило коректировка строки:
return [[row[min_col:max_col + 1]] for row in matrix[min_row:max_row + 1]] на строку
return [row[min_col:max_col + 1] for row in matrix[min_row:max_row + 1]].
bobrovskyserg: Оно и должно расти, нет? По условию, вселенная безграничная. Просто, если не нежно было этого, то оно будет уменьшено потом, до минимального размера(где заполнены клетки).
Oxoron:
def neighbors(row, col, matrix) - выдает список соседей для клетки
def add_zero_frame(matrix) - добавляет "рамку" из нулей вокруг поля. Это нужно для того, что бы было место для роста популяции. Так как "вселенная" - неограниченная.
def find_matrix(matrix) - выбирает наименьшую заполненную матрицу, то есть обрезает нулевые строки и столбцы. Это нужно для предотвращение роста поля на каждом шагу.
Я изменяю ячейку не в матрице по которой веду подсчет(start), а в другой(end).
def find_matrix(matrix) - все так должно быть.
Там просто сначала создается матрица на два размера больше изначальной из нулей. А потом в середину ее переношу изначальную.
Ну это так, как дополнительный канал ответа. Я прекрасно понимаю структуру Тостера, извините если это показалось, будто я жадный и ответы хочу только себе))
Кирилл Пензин: Что просять и какие вопросы задают - я это уже видел. Мне вот интиресно, какие именно задания на роботе джоуниром в какой-то команде/фирме/конторе/компании.
Я что-то не могу понять какого типа систему уравнений составить?