diff options
Delete pract KN/week7/solution directory
1 files changed, 0 insertions, 154 deletions
| -rw-r--r-- | pract KN/week7/solution/game.cpp | 154 |
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<iostream>
-#include<time.h>
-#include<cmath>
-
-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 |
