From 13be537d1cc394b70ed5736db358053fb359edee Mon Sep 17 00:00:00 2001 From: LeottaAlberto Date: Tue, 4 Nov 2025 17:16:43 +0100 Subject: [PATCH 1/4] feat: git commit -m feat: I use maps to simplify use --- exercises/ex4.cpp | 95 +++++++++++++++++++++++------------------------ 1 file changed, 47 insertions(+), 48 deletions(-) diff --git a/exercises/ex4.cpp b/exercises/ex4.cpp index 9d93d8ac..95d3b672 100644 --- a/exercises/ex4.cpp +++ b/exercises/ex4.cpp @@ -1,56 +1,55 @@ /* Surprise me. */ -#include +#include +#include +#include -int main() -{ - int month; +const int ZERO = 48; +const int NINE = 57; +const int MAX_NUMBER = 10; +const int MINUS = 45; - /* Input month number from user */ - printf("Enter month number(1-12): "); - scanf("%d", &month); +const std::string ERROR_COLOR = "\033[31m"; +const std::string NORMAL_COLOR = "\033[0m"; - switch (month) - { - case 1: - printf("31 days"); - break; - case 2: - printf("28/29 days"); - break; - case 3: - printf("31 days"); - break; - case 4: - printf("30 days"); - break; - case 5: - printf("31 days"); - break; - case 6: - printf("30 days"); - break; - case 7: - printf("31 days"); - break; - case 8: - printf("31 days"); - break; - case 9: - printf("30 days"); - break; - case 10: - printf("31 days"); - break; - case 11: - printf("30 days"); - break; - case 12: - printf("31 days"); - break; - default: - printf("Invalid input! Please enter month number between 1-12"); - } +int insertNumber(); +bool checkStringIsNumber(std::string in); +int main(){ + int month = insertNumber(); + std::map calendary = { + {1, "31"}, + {2, "28/29"}, + {3, "31"}, + {4, "30"}, + {5, "31"}, + {6, "30"}, + {7, "31"}, + {8, "31"}, + {9, "30"}, + {10, "31"}, + {11, "30"}, + {12, "31"}, + }; + std::cout << calendary[month] << " days"; return 0; +} + +int insertNumber(){ + std::string insert; + bool isCorrect = true; + do { + if(!isCorrect) std::cout << ERROR_COLOR+("[Insert a valid input] ")+NORMAL_COLOR; + std::cout << "Insert Mounth: "; + getline(std::cin, insert); + } while(!(isCorrect = checkStringIsNumber(insert))); + return std::stoi(insert); +} + +bool checkStringIsNumber(std::string in){ + if(in.empty()) return false; + for(int i = 0; i < in.size(); i++) + if((in.at(i) < ZERO || in.at(i) > NINE) && in.at(i) != MINUS) return false; + if(stoi(in) > MAX_NUMBER) return false; + return true; } \ No newline at end of file From 04e4e68a96ec4d6c5dac813dbfeb64f55d2db548 Mon Sep 17 00:00:00 2001 From: LeottaAlberto Date: Tue, 4 Nov 2025 17:18:11 +0100 Subject: [PATCH 2/4] refactor: load old code --- exercises/ex4.cpp | 95 ++++++++++++++++++++++++----------------------- 1 file changed, 48 insertions(+), 47 deletions(-) diff --git a/exercises/ex4.cpp b/exercises/ex4.cpp index 95d3b672..9d93d8ac 100644 --- a/exercises/ex4.cpp +++ b/exercises/ex4.cpp @@ -1,55 +1,56 @@ /* Surprise me. */ -#include -#include -#include +#include -const int ZERO = 48; -const int NINE = 57; -const int MAX_NUMBER = 10; -const int MINUS = 45; +int main() +{ + int month; -const std::string ERROR_COLOR = "\033[31m"; -const std::string NORMAL_COLOR = "\033[0m"; + /* Input month number from user */ + printf("Enter month number(1-12): "); + scanf("%d", &month); -int insertNumber(); -bool checkStringIsNumber(std::string in); + switch (month) + { + case 1: + printf("31 days"); + break; + case 2: + printf("28/29 days"); + break; + case 3: + printf("31 days"); + break; + case 4: + printf("30 days"); + break; + case 5: + printf("31 days"); + break; + case 6: + printf("30 days"); + break; + case 7: + printf("31 days"); + break; + case 8: + printf("31 days"); + break; + case 9: + printf("30 days"); + break; + case 10: + printf("31 days"); + break; + case 11: + printf("30 days"); + break; + case 12: + printf("31 days"); + break; + default: + printf("Invalid input! Please enter month number between 1-12"); + } -int main(){ - int month = insertNumber(); - std::map calendary = { - {1, "31"}, - {2, "28/29"}, - {3, "31"}, - {4, "30"}, - {5, "31"}, - {6, "30"}, - {7, "31"}, - {8, "31"}, - {9, "30"}, - {10, "31"}, - {11, "30"}, - {12, "31"}, - }; - std::cout << calendary[month] << " days"; return 0; -} - -int insertNumber(){ - std::string insert; - bool isCorrect = true; - do { - if(!isCorrect) std::cout << ERROR_COLOR+("[Insert a valid input] ")+NORMAL_COLOR; - std::cout << "Insert Mounth: "; - getline(std::cin, insert); - } while(!(isCorrect = checkStringIsNumber(insert))); - return std::stoi(insert); -} - -bool checkStringIsNumber(std::string in){ - if(in.empty()) return false; - for(int i = 0; i < in.size(); i++) - if((in.at(i) < ZERO || in.at(i) > NINE) && in.at(i) != MINUS) return false; - if(stoi(in) > MAX_NUMBER) return false; - return true; } \ No newline at end of file From 703ae68b71007973a29c940f4f6b927cf9e0ef74 Mon Sep 17 00:00:00 2001 From: LeottaAlberto Date: Tue, 4 Nov 2025 19:00:55 +0100 Subject: [PATCH 3/4] feat: implement sort and binary search to reseach a value in a vector --- exercises/verify.cpp | 67 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 4 deletions(-) diff --git a/exercises/verify.cpp b/exercises/verify.cpp index 23356789..2dc03a29 100644 --- a/exercises/verify.cpp +++ b/exercises/verify.cpp @@ -7,12 +7,71 @@ The number 3 is [not] present in the array. */ #include +#include +#include using namespace std; -int main() -{ - // placeholder - int N[10] = {3, 4, 5, 1, 2, 3, 4, 9, 13, 0}; +const int ZERO = 48; +const int NINE = 57; +const int MAX_DIGIT = 10; +const int MINUS = 45; + +const std::string ERROR_COLOR = "\033[31m"; +const std::string NORMAL_COLOR = "\033[0m"; + +double insertNumber(const std::string& msg); +bool checkStringIsNumber(std::string in); +template +int binarySearch(T item, vector&collection); + +int main(){ + vector collection = {3, 4, 5, 1, 2, 3, 4, 9, 13, 0}; + sort(collection.begin(), collection.end()); + + auto n = insertNumber("Insert number: "); + + int pos; + if(pos = binarySearch(n, collection) == -1) cout << "Value Not Found"; + else cout << "Value found at " << pos << " position"; return 0; } + +template +int binarySearch(T item, vector&collection) { + int start = 0; + int end = collection.size()-1; + int center; + do { + center = (start + end) / 2; + if(collection[center] == item) return center; + if(item > collection[center]) start = center+1; + else end = center-1; + } while(start <= end); + return -1; +} + + +double insertNumber(const std::string& msg){ + std::string insert; + bool isCorrect = true; + do { + if(!isCorrect) std::cout << ERROR_COLOR << "[Insert a valid input] " << NORMAL_COLOR; + std::cout << msg; + getline(std::cin, insert); + } while(!(isCorrect = checkStringIsNumber(insert))); + + return std::stod(insert); +} + +bool checkStringIsNumber(std::string in){ + if(in.empty()) return false; + if(in.size() > MAX_DIGIT) return false; + for (std::size_t i = 0; i < in.size(); ++i){ + if ((in[i] < ZERO || in[i] > NINE)){ + if (i == 0 && in[i] == MINUS) continue; + return false; + } + } + return true; +} \ No newline at end of file From 97b173e1bfe88c8a19c82b3f221c16142df93f4c Mon Sep 17 00:00:00 2001 From: LeottaAlberto Date: Wed, 5 Nov 2025 18:14:42 +0100 Subject: [PATCH 4/4] style(verify.cpp): remove whitespaces --- exercises/verify.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/verify.cpp b/exercises/verify.cpp index 2dc03a29..7331af6d 100644 --- a/exercises/verify.cpp +++ b/exercises/verify.cpp @@ -46,7 +46,7 @@ int binarySearch(T item, vector&collection) { center = (start + end) / 2; if(collection[center] == item) return center; if(item > collection[center]) start = center+1; - else end = center-1; + else end = center-1; } while(start <= end); return -1; }