From 991f3db6745173122818d383dc8b808bc91e1d92 Mon Sep 17 00:00:00 2001
From: Taha Belkhiri <belkhiri.taha53@gmail.com>
Date: Tue, 21 Jun 2022 11:40:08 +0200
Subject: [PATCH] =?UTF-8?q?d=C3=A9but=20detection=20de=20cycles?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 travail_individuel/Belkhiri/GameOfLife/run    | Bin 23672 -> 23856 bytes
 .../Belkhiri/GameOfLife/src/map.c             |  39 ++++++++++++++++++
 .../Belkhiri/GameOfLife/src/map.h             |   4 ++
 .../Belkhiri/GameOfLife/src/utility.c         |  15 +++++++
 4 files changed, 58 insertions(+)

diff --git a/travail_individuel/Belkhiri/GameOfLife/run b/travail_individuel/Belkhiri/GameOfLife/run
index b4c3dc621abb0fa478779fdf9a4734e610cf775a..87257857f689c489c5941519e96c548f7a7f12f9 100755
GIT binary patch
delta 5438
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

delta 4513
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
Znk#hcC6PQhJC+RGA0g~qNP-?n`9IW(tpfl6

diff --git a/travail_individuel/Belkhiri/GameOfLife/src/map.c b/travail_individuel/Belkhiri/GameOfLife/src/map.c
index 0250446..3d66af1 100644
--- a/travail_individuel/Belkhiri/GameOfLife/src/map.c
+++ b/travail_individuel/Belkhiri/GameOfLife/src/map.c
@@ -4,6 +4,8 @@ int MAPSIZE = 20;
 
 int ** map;
 
+int *** mapList;
+
 void allocateMap(){
     map = malloc(MAPSIZE * sizeof(int*));
     for(int i = 0; i < MAPSIZE; i++){
@@ -11,9 +13,14 @@ void allocateMap(){
     }
 }
 
+void allocateMapList(int SIZE){
+    mapList = malloc(SIZE * sizeof(int**));
+}
+
 
 void initMap() {
     allocateMap();
+    allocateMapList(100);
     for(int i = 0; i < MAPSIZE; i++){
         for(int j = 0; j < MAPSIZE; j++){
             map[i][j] = 0;
@@ -41,4 +48,36 @@ void writeMap(char* filename){
         fprintf(f, "\n");
     }
     fclose(f);
+}
+
+int ** saveMapState(){
+    int ** mapCopy = malloc(MAPSIZE * sizeof(int*));
+    for(int i = 0; i < MAPSIZE; i++){
+        mapCopy[i] = malloc(MAPSIZE * sizeof(int));
+    }
+    for(int i = 0; i < MAPSIZE; i++){
+        for(int j = 0; j < MAPSIZE; j++){
+            mapCopy[i][j] = map[i][j];
+        }
+    }
+    return mapCopy;
+}
+
+void addMapToList(int ** map){
+    int i = 0;
+    while(mapList[i] != NULL){
+        i++;
+    }
+    mapList[i] = map;
+}
+
+void checkForCycle(){
+    int i = 0;
+    while(mapList[i] != NULL){
+        if(mapList[i] == map){
+            printf("Cycle detected at iteration: %d\n", i);
+            return;
+        }
+        i++;
+    }
 }
\ No newline at end of file
diff --git a/travail_individuel/Belkhiri/GameOfLife/src/map.h b/travail_individuel/Belkhiri/GameOfLife/src/map.h
index 6ba8681..ec0e592 100644
--- a/travail_individuel/Belkhiri/GameOfLife/src/map.h
+++ b/travail_individuel/Belkhiri/GameOfLife/src/map.h
@@ -5,9 +5,13 @@
 
 extern int MAPSIZE;
 extern int ** map;
+extern int *** mapList;
 
 void printMap();
 void initMap();
 void writeMap(char* filename);
+void checkForCycle();
+void addMapToList(int ** map);
+int ** saveMapState();
 
 #endif
\ No newline at end of file
diff --git a/travail_individuel/Belkhiri/GameOfLife/src/utility.c b/travail_individuel/Belkhiri/GameOfLife/src/utility.c
index 0fd5618..2eab021 100644
--- a/travail_individuel/Belkhiri/GameOfLife/src/utility.c
+++ b/travail_individuel/Belkhiri/GameOfLife/src/utility.c
@@ -17,6 +17,7 @@ int survivingNeighbors(int x, int y){
 
 void updateMap(){
     int newMap[MAPSIZE][MAPSIZE];
+    int stable = 1;
     for (int i=0; i<MAPSIZE; i++){
         for (int j=0; j<MAPSIZE; j++){
             int count = survivingNeighbors(j, i);
@@ -30,10 +31,24 @@ void updateMap(){
             }
         }
     }
+
+    for (int i=0; i<MAPSIZE; i++){
+        for (int j=0; j<MAPSIZE; j++){
+            if (newMap[j][i] != map[j][i]) stable = 0;
+        }
+    }
+
+    if (stable){
+        printf("Stable state reached.\n");
+    }
+
     for (int i=0; i<MAPSIZE; i++){
         for (int j=0; j<MAPSIZE; j++){
             map[i][j] = newMap[i][j];
         }
     }
+
+    addMapToList(map);
+    checkForCycle();
 }
 
-- 
GitLab