Gra w życie: k pokoleń
Treść zadania
Gra w życie Conwaya to plansza komórek, z których każda jest żywa (#) albo martwa (.). Sąsiadami komórki jest 8 komórek stykających się z nią bokiem lub rogiem. W każdym kroku (pokoleniu) wszystkie komórki zmieniają się jednocześnie według reguł:
- żywa komórka z 2 lub 3 żywymi sąsiadami przeżywa, w przeciwnym razie umiera,
- martwa komórka z dokładnie 3 żywymi sąsiadami ożywa, w przeciwnym razie pozostaje martwa.
Komórki poza planszą są zawsze martwe. Wczytaj planszę i liczbę k, a następnie wypisz stan planszy po k krokach.
Dane wejściowe
- 1. linia:
n m k— liczba wierszy, liczba kolumn i liczba kroków - następnie
nlinii pomznaków.lub#
Dane wyjściowe
n linii po m znaków . lub # — plansza po k krokach (bez spacji między znakami).
Ograniczenia
1 ≤ n, m ≤ 200 ≤ k ≤ 10
Uwagi
- W każdym kroku buduj nową macierz i wypełniaj ją na podstawie starej. Jeśli zmieniasz komórki w miejscu, kolejne komórki policzą sąsiadów z już zmienionej planszy i wynik będzie błędny.
- Przy liczeniu sąsiadów sprawdzaj, czy indeksy mieszczą się w planszy (pamiętaj, że w Pythonie indeks
-1oznacza ostatni element, a nie „poza planszą”). - Dla
k = 0wypisz planszę bez zmian.
Przykład
5 5 1 ..... ..#.. ..#.. ..#.. .....
..... ..... .###. ..... .....
Środkowa komórka ma 2 żywych sąsiadów, więc przeżywa; skrajne komórki pionowej kreski mają po 1 sąsiedzie i umierają, a komórki obok środka mają po 3 żywych sąsiadów i ożywają.
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 13
Zadania w tym rozdziale ćwiczą pracę z listami dwuwymiarowymi (macierzami): tworzenie, wczytywanie, przechodzenie po wierszach i kolumnach oraz przekształcanie.
Każde zadanie (oraz każdy podpunkt) jest osobnym, niezależnym programem: czyta standardowe wejście (stdin) i wypisuje wynik na standardowe wyjście (stdout).
Konwencje wspólne:
- Dane wczytuj dokładnie w kolejności podanej w sekcji Wejście.
- Wiersz macierzy na wejściu to jedna linia z liczbami oddzielonymi spacjami — wczytaj całą linię i rozbij ją po spacjach (
input().split()). - W wyjściu macierzy: każdy wiersz w osobnej linii, elementy oddzielone pojedynczą spacją.
- Program nie wypisuje komunikatów typu „Podaj liczbę:”.
Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.
Przywrócono Twój zapisany kod.
Python uruchomi się w przeglądarce przy pierwszym teście.
Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.
Testy
Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.
Test 1
Nie uruchomiono4 4 3 .... .##. .##. ....
.... .##. .##. ....
Test 2
Nie uruchomiono5 5 2 ..... ..#.. ..#.. ..#.. .....
..... ..#.. ..#.. ..#.. .....
Test 3
Nie uruchomiono3 3 1 ... .#. ...
... ... ...
Test 4
Nie uruchomiono3 4 0 #..# .##. #..#
#..# .##. #..#
Test 5
Nie uruchomiono6 6 4 ...... .#.... ..#... ###... ...... ......
...... ...... ..#... ...#.. .###.. ......
Test 6
Nie uruchomiono1 1 1 #
.
Test 7
Nie uruchomiono3 3 1 ##. #.. ...
##. ##. ...
Test 8
Nie uruchomiono5 6 3 #..#.# .##..# #...#. ..##.. #.#..#
...... ....## ....## ....## ......