diff --git a/.gitignore b/.gitignore index 888e1f5..e2c6df4 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ *~ *.DotSettings.user +*.html diff --git a/HolidayTrip/Proficiencies/museum_restoration/debug b/HolidayTrip/Proficiencies/museum_restoration/debug deleted file mode 100755 index 0649aa5..0000000 Binary files a/HolidayTrip/Proficiencies/museum_restoration/debug and /dev/null differ diff --git a/HolidayTrip/Proficiencies/museum_restoration/fossils.c b/HolidayTrip/Proficiencies/museum_restoration/fossils.c index 7accbc7..7b287b8 100644 --- a/HolidayTrip/Proficiencies/museum_restoration/fossils.c +++ b/HolidayTrip/Proficiencies/museum_restoration/fossils.c @@ -1,8 +1,13 @@ #include "fossils.h" +#include #include #include #include +//############################################### +//# CE QUI ARRIVE EST MOCHE ATTENTION LES YEUX # +//############################################### + struct fossil *init_fossil(char *species, enum body_part body_part, size_t age, char has_wings){ if(species == NULL) return NULL; @@ -27,6 +32,17 @@ struct fossil *init_fossil(char *species, enum body_part body_part, size_t age, return fossil; } +int contain(enum body_part part, enum body_part parts[], int size){ + //cahr required_part[4] = {SKULL, TORSO, TAIL, LEGS}; + //on compte le nombre de part + int is_in = 0; + + for(int i = 0; i < size; i++){ + if(part == parts[i]) is_in ++; + } + return is_in; +} + struct fossil *assemble_wingless(struct fossil *fossils[4]){ if(fossils == NULL) return NULL; @@ -35,15 +51,69 @@ struct fossil *assemble_wingless(struct fossil *fossils[4]){ if(fossils[i] == NULL) return NULL; } - if() - /* - char *sp = fossils[0]->species; + char *specie = fossils[0]->species; int age = fossils[0]->age; - int req = 0; + int parts[4] = {}; + enum body_part required_part[4] = { SKULL, TORSO, TAIL, LEGS}; + + //on test tt for(int i = 0; i < 4; i++){ if(fossils[i]->has_wings != 0) return NULL; - if(fossils[i]->species != sp && fossils[i]->age == age) return NULL; - if((fossils[i]->part != SKULL || fossils[i]->part != ) || req != 1;){} - }*/ + + if(fossils[i]->species != specie && fossils[i]->age == age) return NULL; + + parts[i] = fossils[i]->part; + } + + //on test pour tt les parties + // SI une part est en double alors on sort + for (int part = 0; part < 4; part ++){ + if(contain(parts[part], required_part, 4) != 1) return NULL; + } + + //ON FREE EN MASSE GRRR + + for(int foss = 0; foss < 4; foss ++){ + free(fossils[foss]->species); + free(fossils[foss]); + + //on set a NULL + fossils[foss] = NULL; + } + + return init_fossil(specie, COMPLETE, age, 0); +} + +struct fossil *assemble_with_wings(struct fossil *fossils[5]){ + + size_t age = fossils[0]->age; + char* specie = fossils[0]->species; + + enum body_part required_part[5] = {SKULL, TORSO, TAIL, LEGS, WINGS}; + enum body_part parts[5] = {}; + + for (int i = 0; i < 5; i++){ + + if(fossils[i]->has_wings != 0) return NULL; + + if(fossils[i]->species != specie && fossils[i]->age != age) return NULL; + + parts[i] = fossils[i]->part; + } + + for(int part = 0; part < 5; part ++){ + if(contain(parts[part], required_part, 5) != 1) return NULL; + } + + // ON FREE EN MASSE ENCORE + + for(int foss = 0; foss < 5; foss++){ + + free(fossils[foss]->species); + free(fossils[foss]); + fossils[foss] = NULL; + } + + return init_fossil(specie, COMPLETE, age, 1); }