Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/29: Рейтинг темы: голосов - 29, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 15.07.2019
Сообщений: 69

Жизнь в квадрате

07.04.2020, 15:45. Показов 6710. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В некоторых клетках квадрата N x N живут микроорганизмы (не более одного в одной клетке). Каждую секунду происходит следующее:
– все микроорганизмы, у которых менее 2-х соседей, умирают от скуки (соседями называются микроорганизмы, живущие в клетках, имеющих общую сторону или вершину);
– все микроорганизмы, у которых более 3-х соседей, умирают от перенаселенности;
– на всех пустых клетках, у которых ровно в трех соседних клетках жили микроорганизмы, появляются новые микроорганизмы.
Все изменения происходят одновременно, то есть для каждой клетки сначала выясняется ее судьба, а затем происходят изменения сразу во всех клетках.
Требуется по данной конфигурации определить, во что она превратится через T секунд.

Входные данные
В первой строке вводятся два натуральных числа – N (1 ≤ N ≤ 10) и T (1 ≤ T ≤ 100). Далее записано N строчек по N чисел, описывающих начальную конфигурацию (0 – пустая клетка, 1 – микроорганизм). Числа в строках разделены пробелами.

Выходные данные
Требуется вывести N строк по N чисел – описание конфигурации через T секунд (в том же формате, как и во входных данных).

входные данные
3 1
1 0 1
1 0 1
1 0 1
выходные данные
0 0 0
1 0 1
0 0 0

входные данные
5 10
1 0 1 1 0
0 1 0 0 0
0 0 0 1 0
0 0 0 0 0
0 1 0 1 0

выходные данные
0 1 1 0 0
0 1 1 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

Можете пояснить почему ответ вторых входных данных такой? По моему там не должно остаться живых клеток
Вот мой код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
n,t = map(int,input().split())
a = []
for _ in range(n):
    a.append([int(x) for x in input().split()])
#0 - dead
#1 - alive
#2 - dead(future alive)
#3 - alive(future dead)
 
#ind - i-ное мертвых,inj - j-ное мертвых (в будущем)
#indk - i-ное живых,injk - j-ное живых (в будущем)
ind = []
inj = []
indk = []
injk = []
#t - кол-во раз будет повторяться цикл
for _ in range(t):
    #Превращаем будущих живых или мертвых в настоящих живых или мертвых
    for k in range(len(ind)):
        a[ind[k]][inj[k]] = 0
    for k in range(len(indk)):
        a[indk[k]][injk[k]] = 1
    #обнуляем
    ind = []
    inj = []
    indk = []
    injk = []
    for i in range(n):
        for j in range(n):
            #count - считает кол-во живых соседей
            count = 0
            #проверяем жива ли клетка
            if a[i][j] == 1:
                #проверяем подходит ли условию a[i-1][j]
                if i == 0:
                    #проверяем соседей
                    if a[i+1][j] == 1:
                        count+=1
                    if j+1 <= n-1:
                        if a[i][j+1] == 1:
                            count+=1
                    if j-1 > -1:
                        if a[i][j-1] == 1:
                            count+=1
                    if count < 2 or count > 3:
                        #в случае соотвествии условияем добавляем их к будущим мертвых
                        ind.append(i)
                        inj.append(j)
                #дальше также
                elif i == n-1:
                    if a[i-1][j] == 1:
                        count+=1
                    if j+1 <= n-1:
                        if a[i][j+1] == 1:
                            count+=1
                    if j-1 > -1:
                        if a[i][j-1] == 1:
                            count+=1
                    if count < 2 or count > 3:
                        ind.append(i)
                        inj.append(j)
                else:
                    if a[i+1][j] == 1:
                        count+=1
                    if a[i-1][j] == 1:
                        count+=1
                    if j+1 <= n-1:
                        if a[i][j+1] == 1:
                            count+=1
                    if j-1 > -1:
                        if a[i][j-1] == 1:
                            count+=1
                    if count < 2 or count > 3:
                        ind.append(i)
                        inj.append(j)
            #в случае если клетка мертва
            else:
                if i == 0:
                    if a[i+1][j] == 1:
                        count+=1
                    if j+1 <= n-1:
                        if a[i][j+1] == 1:
                            count+=1
                    if j-1 > -1:
                        if a[i][j-1] == 1:
                            count+=1
                    if count == 3:
                        indk.append(i)
                        injk.append(j)
                elif i == n-1:
                    if a[i-1][j] == 1:
                        count+=1
                    if j+1 <= n-1:
                        if a[i][j+1] == 1:
                            count+=1
                    if j-1 > -1:
                        if a[i][j-1] == 1:
                            count+=1
                    if count == 3:
                        indk.append(i)
                        injk.append(j)
                else:
                    if a[i+1][j] == 1:
                        count+=1
                    if a[i-1][j] == 1:
                        count+=1
                    if j+1 <= n-1:
                        if a[i][j+1] == 1:
                            count+=1
                    if j-1 > -1:
                        if a[i][j-1] == 1:
                            count+=1
                    if count == 3:
                        indk.append(i)
                        injk.append(j)
#Превращаем будущих живых или мертвых в настоящих живых или мертвых
for k in range(len(ind)):
    a[ind[k]][inj[k]] = 0
for k in range(len(indk)):
    a[indk[k]][injk[k]] = 1
#вывод
for i in range(n):
    print(*a[i])
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.04.2020, 15:45
Ответы с готовыми решениями:

Жизнь в квадрате
В некоторых клетках квадрата N∗N живут микроорганизмы (не более одного в одной клетке). Каждую секунду происходит следующее: все...

Жизнь в квадрате
В некоторых клетках квадрата N x N живут микроорганизмы (не более одного в одной клетке). Каждую секунду происходит следующее: – все...

Жизнь в квадрате
В некоторых клетках квадрата N x N живут микроорганизмы (не более одного в одной клетке). Каждую секунду происходит следующее: – все...

8
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
07.04.2020, 16:19
а разве у клетки не до 8 соседей может быть?
0
0 / 0 / 0
Регистрация: 15.07.2019
Сообщений: 69
08.04.2020, 06:09  [ТС]
С чего бы?
0
 Аватар для codcw
815 / 527 / 214
Регистрация: 22.12.2017
Сообщений: 1,495
08.04.2020, 07:53
Bluestick,
Цитата Сообщение от Bluestick Посмотреть сообщение
имеющих общую сторону или вершину
мб под вершинами углы имеются ввиду
0
0 / 0 / 0
Регистрация: 01.03.2020
Сообщений: 26
08.04.2020, 08:50
Python
1
2
3
4
5
6
7
8
9
10
11
n, t = map(int, input().split())
tbl = [[0] * (n + 2)] + [[0] + list(map(int, input().split())) + [0] for _ in range(n)] + [[0] * (n + 2)]
for _ in range(t):
  tmp = [[0 for _ in range(n + 2)] for _ in range(n + 2)]
  for i in range(1, n + 1):
    for j in range(1, n + 1):
      s = sum([sum(k[j - 1 : j + 2]) for k in tbl[i - 1 : i + 2]]) - tbl[i][j]
      if s == 3 : tmp[i][j] = 1
      elif s == 2: tmp[i][j] = tbl[i][j]
  tbl = tmp
for i in range(1, n + 1): print(*tbl[i][1 : n + 1])
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
08.04.2020, 09:03
Bluestick, т.к. ты старался, держи, даже комментарии есть!

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# Ввод данных
n, t = map(int, input().split())
# Расширяем матрицу во все стороны, чтобы избавиться от многих условий.
matrix = [[0] * n]  + [[0] + list(map(int, input().split())) + [0] for _ in range(n)] + [[0] * n]
# Создаем копию матрицы
temp_matrix = matrix.copy()
 
# Временной цикл
for _ in range(t):
    # Передвижение по строкам
    for i in range(1, n + 1):
        # Передвижение по коллонкам
        for j in range(1, n + 1):
            # Переменная для соседей
            neighbors = 0
            # Смещение по строку
            for i_offset in range(-1, 2):
                # Смещение по колонке
                for j_offset in range(-1, 2):
                    # Проверка на центральную ячейку
                    if i_offset == 0 and j_offset == 0:
                        # Пропускаем проверку
                        continue
                    # Проверка соседа
                    neighbors += 1 if matrix[i + i_offset][j + j_offset] == 1 else 0
 
            # Проверка условий
            if matrix[i][j] == 1 and not (2 <= neighbors <= 3):
                temp_matrix[i][j] = 0
            elif matrix[i][j] == 0 and neighbors == 3:
                temp_matrix[i][j] = 1
            else:
                temp_matrix[i][j] = matrix[i][j]
    # Копируем временную в постоянную
    matrix = temp_matrix.copy()
 
# Вывод
for line in matrix[1: -1]:
    print(*line[1: -1])
1
0 / 0 / 0
Регистрация: 15.03.2020
Сообщений: 31
08.04.2020, 15:48
Цитата Сообщение от DmFat Посмотреть сообщение
Bluestick, т.к. ты старался, держи, даже комментарии есть!

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# Ввод данных
n, t = map(int, input().split())
# Расширяем матрицу во все стороны, чтобы избавиться от многих условий.
matrix = [[0] * n]  + [[0] + list(map(int, input().split())) + [0] for _ in range(n)] + [[0] * n]
# Создаем копию матрицы
temp_matrix = matrix.copy()
 
# Временной цикл
for _ in range(t):
    # Передвижение по строкам
    for i in range(1, n + 1):
        # Передвижение по коллонкам
        for j in range(1, n + 1):
            # Переменная для соседей
            neighbors = 0
            # Смещение по строку
            for i_offset in range(-1, 2):
                # Смещение по колонке
                for j_offset in range(-1, 2):
                    # Проверка на центральную ячейку
                    if i_offset == 0 and j_offset == 0:
                        # Пропускаем проверку
                        continue
                    # Проверка соседа
                    neighbors += 1 if matrix[i + i_offset][j + j_offset] == 1 else 0
 
            # Проверка условий
            if matrix[i][j] == 1 and not (2 <= neighbors <= 3):
                temp_matrix[i][j] = 0
            elif matrix[i][j] == 0 and neighbors == 3:
                temp_matrix[i][j] = 1
            else:
                temp_matrix[i][j] = matrix[i][j]
    # Копируем временную в постоянную
    matrix = temp_matrix.copy()
 
# Вывод
for line in matrix[1: -1]:
    print(*line[1: -1])

Не по теме:

Только программа-то нерабочая:):):):):):)

0
Сижу думаю
 Аватар для derwes
3 / 3 / 0
Регистрация: 11.08.2019
Сообщений: 70
09.04.2020, 00:34
Довольно веселая задача)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <bits/stdc++.h>
using namespace std;
int arr1[13][13];
int arr2[13][13];
int main()
{
    int a,t;
    cin >> a >> t;
    for(int i = 1; i < a + 1; i++)
    {
        for(int j = 1; j < a + 1; j++)
        {
            cin >> arr1[i][j];
        }
    }
    bool flag = true;
    for(; t > 0; t--)
    {
        if(flag == true)
        {
            flag = false;
            for(int i = 1;i < a + 1;i++) {
                for(int j = 1;j < a + 1;j++) {
            int f = arr1[i - 1][j] + arr1[i + 1][j] + arr1[i][j + 1] + arr1[i][j - 1];
            int s = arr1[i - 1][j - 1] + arr1[i + 1][j + 1] + arr1[i - 1][j + 1] + arr1[i + 1][j - 1];
            if(arr1[i][j] == 0) {
                if(f+s == 3) {
                    arr2[i][j] = 1;
                } else {
                    arr2[i][j] = 0;
                }
            }
            if(arr1[i][j] == 1) {
                if(s+f==3||s+f==2) {
                    arr2[i][j]=1;
                }else{
                    arr2[i][j]=0;
                }
            }
                }
            }  
        }
        else
        {
           flag = true;
           for(int i = 1;i < a + 1;i++) {
                for(int j = 1;j < a + 1;j++) {
            int f = arr2[i - 1][j] + arr2[i + 1][j] + arr2[i][j + 1] + arr2[i][j - 1];
            int s = arr2[i - 1][j - 1] + arr2[i + 1][j + 1] + arr2[i - 1][j + 1] + arr2[i + 1][j - 1];
            if(arr2[i][j] == 0) {
                if(f+s== 3) {
                    arr1[i][j] = 1;
                } else {
                    arr1[i][j] = 0;
                }
            }
            if(arr2[i][j] == 1) {
                if(s+f==3||s+f==2) {
                    arr1[i][j]=1;
                }else{
                    arr1[i][j]=0;
                }
            }
                }
            }
        }
    }
    for(int i = 1;i < a + 1;i++) {
        for(int j = 1;j < a + 1;j++) {
            if(flag == true) {
                cout << arr1[i][j] << " ";
            } else {
                cout << arr2[i][j] << " ";
            }
        }
        cout << endl;
    }
 
}
Вначале создаём 2 матрицы с барьером из нулей а потом считаем сумму соседей для arr1(2)[i][j] и узнаем судьбу так для каждой клетки и записываем в arr2(1)[i][j]. И так далее, а в конце выводим матрицу в которую записывали последнее.

UPD: вначале я недопонял условия поэтому обьявил 2 переменные f и s хотя можно обойтись одной - их суммой.

Добавлено через 15 минут
У меня это на c++ но достаточно легко переписать на python
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
09.04.2020, 10:29
Hunter_Lesha, когда говорят что не рабочая, обычно пишут что вводили и что выводили.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.04.2020, 10:29
Помогаю со студенческими работами здесь

Жизнь в квадрате
В некоторых клетках квадрата N∗N живут микроорганизмы (не более одного в одной клетке). Каждую секунду происходит следующее: все...

Вычислить точное значение суммы 1 в квадрате + 2 в квадрате + 3 в квадрате + ... + n в квадрате
Нужно решить задачу, желательно с объяснением, мучаюсь 2 дня

Задача "Жизнь в квадрате"
В некоторых клетках квадрата N∗N живут микроорганизмы (не более одного в одной клетке). Каждую секунду происходит следующее: все...

Написать программу определяющую сумму ряда /1+1/1 в квадрате+(1+1/2в кварате)+...(1+1/N в квадрате).
Всем привет! Помогите пожалуйста написать программу определяющую сумму ряда /1+1/1 в квадрате+(1+1/2в кварате)+...(1+1/N в квадрате). ...

Написать программу определяющую сумму ряда /1+1/1 в квадрате+(Х+1/2в кварате)+...(1+1/N в квадрате).
Помогите пожалуйста написать программу определяющую сумму ряда /1+1/1 в квадрате+(Х+1/2в кварате)+...(1+1/N в квадрате). Число N ввести...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru