#include <iostream>
#include <vector>
#include <unordered_set>
#include <string>
using namespace std;
const int N = 100; // Rozmiar ekranu 100x100
vector<vector<int>> screen(N, vector<int>(N, 0)); // 100x100 pikseli, wszystkie początkowo wyłączone
// Funkcja konwertująca grid (ekran) na ciąg znaków
string to_string(const vector<vector<int>>& grid) {
string result = "";
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
result += (grid[i][j] == 1 ? '1' : '0');
}
}
return result;
}
// Funkcja do wykrywania złych 2x2 kwadratów i zmiany stanu pikseli
void update_screen(vector<vector<int>>& grid) {
vector<vector<int>> temp = grid; // Kopia ekranu, na którym będziemy wykonywać zmiany
for (int i = 0; i < N - 1; ++i) {
for (int j = 0; j < N - 1; ++j) {
// Sprawdzamy, czy mamy "zły" 2x2 kwadrat (dwa przeciwległe piksele zapalone)
int sum = grid[i][j] + grid[i+1][j] + grid[i][j+1] + grid[i+1][j+1];
if (sum == 2) {
// Jeśli tak, zmieniamy stany pikseli w tym kwadracie
temp[i][j] = 1 - grid[i][j];
temp[i+1][j] = 1 - grid[i+1][j];
temp[i][j+1] = 1 - grid[i][j+1];
temp[i+1][j+1] = 1 - grid[i+1][j+1];
}
}
}
grid = temp; // Zaktualizuj ekran
}
int main() {
// Inicjalizacja ekranu z losową konfiguracją (dla uproszczenia)
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
screen[i][j] = rand() % 2; // Losowy stan pikseli
}
}
unordered_set<string> seen_configurations; // Zbiór do śledzenia unikalnych konfiguracji
int seconds = 0;
// Symulacja zmiany konfiguracji ekranu
while (true) {
string config = to_string(screen); // Konwertuj ekran na ciąg znaków
if (seen_configurations.count(config)) {
break; // Zatrzymaj, jeśli konfiguracja się powtarza
}
seen_configurations.insert(config); // Dodaj nową konfigurację do zbioru
update_screen(screen); // Zaktualizuj ekran
seconds++;
}
// Wyświetlenie początkowej konfiguracji ekranu
cout << "Początkowa konfiguracja:" << endl;
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
cout << screen[i][j];
}
cout << endl;
}
cout << "Liczba sekund, po których konfiguracja się powtórzyła: " << seconds << endl;
return 0;
}
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 | #include <iostream> #include <vector> #include <unordered_set> #include <string> using namespace std; const int N = 100; // Rozmiar ekranu 100x100 vector<vector<int>> screen(N, vector<int>(N, 0)); // 100x100 pikseli, wszystkie początkowo wyłączone // Funkcja konwertująca grid (ekran) na ciąg znaków string to_string(const vector<vector<int>>& grid) { string result = ""; for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { result += (grid[i][j] == 1 ? '1' : '0'); } } return result; } // Funkcja do wykrywania złych 2x2 kwadratów i zmiany stanu pikseli void update_screen(vector<vector<int>>& grid) { vector<vector<int>> temp = grid; // Kopia ekranu, na którym będziemy wykonywać zmiany for (int i = 0; i < N - 1; ++i) { for (int j = 0; j < N - 1; ++j) { // Sprawdzamy, czy mamy "zły" 2x2 kwadrat (dwa przeciwległe piksele zapalone) int sum = grid[i][j] + grid[i+1][j] + grid[i][j+1] + grid[i+1][j+1]; if (sum == 2) { // Jeśli tak, zmieniamy stany pikseli w tym kwadracie temp[i][j] = 1 - grid[i][j]; temp[i+1][j] = 1 - grid[i+1][j]; temp[i][j+1] = 1 - grid[i][j+1]; temp[i+1][j+1] = 1 - grid[i+1][j+1]; } } } grid = temp; // Zaktualizuj ekran } int main() { // Inicjalizacja ekranu z losową konfiguracją (dla uproszczenia) for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { screen[i][j] = rand() % 2; // Losowy stan pikseli } } unordered_set<string> seen_configurations; // Zbiór do śledzenia unikalnych konfiguracji int seconds = 0; // Symulacja zmiany konfiguracji ekranu while (true) { string config = to_string(screen); // Konwertuj ekran na ciąg znaków if (seen_configurations.count(config)) { break; // Zatrzymaj, jeśli konfiguracja się powtarza } seen_configurations.insert(config); // Dodaj nową konfigurację do zbioru update_screen(screen); // Zaktualizuj ekran seconds++; } // Wyświetlenie początkowej konfiguracji ekranu cout << "Początkowa konfiguracja:" << endl; for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { cout << screen[i][j]; } cout << endl; } cout << "Liczba sekund, po których konfiguracja się powtórzyła: " << seconds << endl; return 0; } |
English