From af6df8ee13421602442ede2cfab52dd70788b588 Mon Sep 17 00:00:00 2001 From: Stoycho Kyosev <68247567+stoychoX@users.noreply.github.com> Date: Wed, 6 Apr 2022 16:38:07 +0300 Subject: Delete pract KN/week7/solution directory --- pract KN/week7/solution/game.cpp | 154 --------------------------------------- 1 file changed, 154 deletions(-) delete mode 100644 pract KN/week7/solution/game.cpp (limited to 'pract KN/week7/solution/game.cpp') diff --git a/pract KN/week7/solution/game.cpp b/pract KN/week7/solution/game.cpp deleted file mode 100644 index 7adc45c..0000000 --- a/pract KN/week7/solution/game.cpp +++ /dev/null @@ -1,154 +0,0 @@ -#include "game.h" -#include -#include -#include - -void game::generateNumber() { - srand(time(NULL)); - - number = rand() % 100 + 1; -} - -void game::validateBet(double& bet, double currentMoney) const { - std::cout << "How much money would you like to bet? " << std::endl - << "Your money now: " << currentMoney << std::endl; - - bool fail = false; - - do { - if (fail) - std::cout << "Invalid input" << std::endl; - - std::cin >> bet; - - fail = true; - - // Проверява дали сме въвели текстов низ вместо число - // и поправя потока. - if (!(bool)(std::cin)) { - std::cin.clear(); - std::cin.ignore(255, '\n'); - } - - } while (bet > currentMoney || bet < 0); -} - -void game::validateNumber(int& num) const { - std::cout << "Enter your number: "; - - bool fail = false; - - do { - if (fail) - std::cout << "Try again" << std::endl; - - std::cin >> num; - - if (!(bool)(std::cin)) { - std::cin.clear(); - std::cin.ignore(255, '\n'); - } - - fail = true; - - } while (num < 20 || num > 60); -} - -double game::getRate(betType currentBet) const { - double rate = 0; - int myNumber = 0; - - switch (currentBet) { - case betType::isEven: - rate = !(number % 2) ? 0.2 : -1; - break; - case betType::isNotEven: - rate = !(number % 2) ? -1 : 0.2; - break; - case betType::isPrime: - rate = isPrime(number) ? 0.5 : -1; - break; - case betType::isPowerOfTwo: - rate = isPowerOfTwo(number) ? 1 : -1; - break; - case betType::isBiggerThan: - validateNumber(myNumber); - rate = (myNumber > number) ? 0.25 : -1; - break; - case betType::isSmallerThan: - validateNumber(myNumber); - rate = (myNumber < number) ? 0.25 : -1; - break; - case betType::isTheSameAs: - validateNumber(myNumber); - rate = (myNumber == number) ? 10 : -1; - break; - } - - return rate; -} - -void game::play(player& p) { - if (p.getAge() < 18) { - std::cout << "You are too young" << std::endl; - return; - } - - char buff[20]; - std::cout << "Enter your password, " << p.getName() << ": "; - std::cin.getline(buff, 20, '\n'); - - if (!p.comparePassword(buff)) { - std::cout << "Wrong password. Goodbye."; - return; - } - - while (!p.isBroke()) { - double myBet = 0; - - betType currentBet = p.makeBet(); - - generateNumber(); - - validateBet(myBet, p.getMoney()); - - p.updateMoney(myBet, getRate(currentBet)); - - std::cout << "The number was: " << number << std::endl; - } - - std::cout << "You lost all your money!" << std::endl; -} - -// Bonus -> Newton's method for finding square root -// https://math.mit.edu/~stevenj/18.335/newton-sqrt.pdf -// Formula: a_n = 0.5 * (a_{n-1} + number / a_{n-1}) -double newtonSquareRoot(double num, int l = 100) { - double result = 1; - double temp = 1; - - for (int i = 0; i < l; i++) { - temp = 0.5 * (result + num / result); - - if (temp == result && result != 1) - return result; - - result = temp; - } - - return result; -} - -bool isPrime(int num) { - // int border = sqrt(num); is perfectly fine! - int border = newtonSquareRoot(num); - - for (int i = 2; i <= border; i++) - if (num % i == 0) - return false; - return true; -} - -bool isPowerOfTwo(int num) { - return num != 0 && ((num & (num - 1)) == 0); -} \ No newline at end of file -- cgit v1.3.1-23-gd82d