diff --git a/travail_individuel/Belkhiri/GameOfLife/run b/travail_individuel/Belkhiri/GameOfLife/run index af69540990706f8de4044047d08508fde45a9b9b..822be8dad667a5b253701b229c6da36d40433f68 100755 Binary files a/travail_individuel/Belkhiri/GameOfLife/run and b/travail_individuel/Belkhiri/GameOfLife/run differ diff --git a/travail_individuel/Belkhiri/GameOfLife/src/map.c b/travail_individuel/Belkhiri/GameOfLife/src/map.c index e49cf5f029b491fa508497c27ad5d084ca795168..18514b06d526f8d0a3e783b87d0ece07e298756b 100644 --- a/travail_individuel/Belkhiri/GameOfLife/src/map.c +++ b/travail_individuel/Belkhiri/GameOfLife/src/map.c @@ -4,9 +4,6 @@ int MAPSIZE = 20; int **map; -int ***mapList; -int mapListSize = 0; - void allocateMap() { map = malloc(MAPSIZE * sizeof(int *)); @@ -16,15 +13,9 @@ 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++) @@ -60,8 +51,15 @@ void writeMap(char *filename) fclose(f); } -void addMapToList(int **map) +int MapToBinary(int ** map) { - mapList[mapListSize] = map; - mapListSize++; + int binary = 0; + for (int i = 0; i < MAPSIZE; i++) + { + for (int j = 0; j < MAPSIZE; j++) + { + binary += map[i][j] * pow(2, (i * MAPSIZE + j)); + } + } + return binary; } \ 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 cb95414889e3110ee70e5807314a2dcd9436e8e4..72d03795076a8132352aff014dee2cc93ace2a33 100644 --- a/travail_individuel/Belkhiri/GameOfLife/src/map.h +++ b/travail_individuel/Belkhiri/GameOfLife/src/map.h @@ -5,13 +5,10 @@ extern int MAPSIZE; extern int ** map; -extern int *** mapList; -extern int mapListSize; void printMap(); void initMap(); void writeMap(char* filename); -void addMapToList(int ** map); -int ** saveMapState(); +int MapToBinary(int ** map); #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 ebb1630d6d0bdf29cf7514338cf137d2d2e71a22..309a771c82d7dd3f4b33f56ea7b02072b48f2784 100644 --- a/travail_individuel/Belkhiri/GameOfLife/src/utility.c +++ b/travail_individuel/Belkhiri/GameOfLife/src/utility.c @@ -4,6 +4,9 @@ int surviveRule[NB_RULES] = {0, 0, 1, 1, 0, 0, 0, 0, 0}; int bornRule[NB_RULES] = {0, 0, 0, 1, 0, 0, 0, 0, 0}; int stable; +int BinaryList[LIST_SIZE]; +int BinaryListSize; + int survivingNeighbors(int x, int y){ int count = 0; for(int i = -1; i <= 1; i++){ @@ -15,10 +18,31 @@ int survivingNeighbors(int x, int y){ return count; } +void addBinaryToList(int binary){ + if (BinaryListSize == LIST_SIZE) return; + BinaryList[BinaryListSize] = binary; + BinaryListSize++; +} + +void checkForCycle(){ + int i = 0; + while (i < BinaryListSize){ + if (BinaryList[i] == BinaryList[BinaryListSize - 1]){ + printf("Cycle detected!\n"); + return; + } + i++; + } +} + void updateMap(){ int newMap[MAPSIZE][MAPSIZE]; stable = 1; + + int binary = MapToBinary(map); + addBinaryToList(binary); + for (int i=0; i<MAPSIZE; i++){ for (int j=0; j<MAPSIZE; j++){ int count = survivingNeighbors(j, i); @@ -44,5 +68,7 @@ void updateMap(){ map[i][j] = newMap[i][j]; } } + + checkForCycle(); } diff --git a/travail_individuel/Belkhiri/GameOfLife/src/utility.h b/travail_individuel/Belkhiri/GameOfLife/src/utility.h index f781d11ca1e8175e6b4f8740c227e5b70a78fb92..3e872d45d65b22378da463920ab104a56a0fd818 100644 --- a/travail_individuel/Belkhiri/GameOfLife/src/utility.h +++ b/travail_individuel/Belkhiri/GameOfLife/src/utility.h @@ -6,6 +6,7 @@ #define NB_RULES 9 +#define LIST_SIZE 100 extern int stable; void updateMap();