SKREFI

Coco-LabPOOvFinal

Jan 31st, 2021
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.03 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ui uint8_t
  5.  
  6. class Player {
  7.    public:
  8.     bool continua = 1;
  9.     int puncte = 0;
  10.     string nume;
  11.     uint32_t bani;
  12.  
  13.     Player(string nume, uint32_t bani) : bani(bani), nume(nume) {}
  14.  
  15.     friend ostream& operator<<(ostream& os, const Player& player) {
  16.         os << player.nume << " " << player.bani;
  17.         return os;
  18.     }
  19. };
  20.  
  21. class Card {
  22.    public:
  23.     int numar;  // nu stiu ce ce dar nu mergea cu uint8_t
  24.     string stema;
  25.  
  26.     Card(ui nr, string stema) : numar(nr), stema(stema) {}
  27.  
  28.     friend ostream& operator<<(ostream& os, const Card& card) {
  29.         os << card.numar << "," << card.stema;
  30.         return os;
  31.     }
  32.  
  33.     friend bool operator==(const Card& a, const Card& b) {
  34.         return a.numar == b.numar && a.stema == b.stema;
  35.     }
  36.  
  37.     // bool operator==(const Card& c) const {
  38.     //     return this->numar == c.numar && this->stema == c.stema;
  39.     // }
  40.  
  41.     // pentru set, dar nu merge :/
  42.     // struct HashFunction {
  43.     //     size_t operator()(const Card& c) const {
  44.     //         size_t xHash = std::hash<int>()(c.numar);
  45.     //         size_t yHash;
  46.  
  47.     //         if (c.stema == "rosu") {
  48.     //             yHash = std::hash<int>()(1);
  49.     //         } else if (c.stema == "romb") {
  50.     //             yHash = std::hash<int>()(2);
  51.     //         } else if (c.stema == "negru") {
  52.     //             yHash = std::hash<int>()(3);
  53.     //         } else if (c.stema == "trefla") {
  54.     //             yHash = std::hash<int>()(4);
  55.     //         }
  56.     //         return xHash ^ yHash;
  57.     //     }
  58.     // };
  59. };
  60.  
  61. int main() {
  62.     srand(time(NULL));
  63.  
  64.     string subiect;
  65.     ifstream citire_fisier("blackjack.in");
  66.     // cout << "Subiect: ";
  67.     cin >> subiect;
  68.  
  69.     vector<Card> play_deck;
  70.  
  71.     for (int i = 2; i < 15; i++) {
  72.         if (i == 11) continue;
  73.         play_deck.push_back(Card(i, "rosu"));
  74.     }
  75.     for (int i = 2; i < 15; i++) {
  76.         if (i == 11) continue;
  77.         play_deck.push_back(Card(i, "negru"));
  78.     }
  79.     for (int i = 2; i < 15; i++) {
  80.         if (i == 11) continue;
  81.         play_deck.push_back(Card(i, "romb"));
  82.     }
  83.     for (int i = 2; i < 15; i++) {
  84.         if (i == 11) continue;
  85.         play_deck.push_back(Card(i, "trefla"));
  86.     }
  87.  
  88.     if (subiect == "check_cards") {
  89.         string temp;
  90.  
  91.         int no_cards = 0;
  92.         vector<Card> deck;
  93.  
  94.         while (cin >> temp) {
  95.             if (no_cards > 52) {
  96.                 // chiar daca nu trebuie sa verific pentru ca 13 * 4 = 52 si verificam daca bagi aceleasi carti, adica nu exista 53 de carti, daca exista
  97.                 // ori s-au bagat duplicate ori carti care nu exista.
  98.                 cout << "Pachet masluit" << endl;
  99.                 return -1;
  100.             }
  101.  
  102.             int card_num = stoi(temp.substr(0, temp.find(",")));
  103.             string card_stema = temp.substr(temp.find(",") + 1, temp.length());
  104.  
  105.             if (card_num < 2 || card_num > 14) {
  106.                 cout << "Pachet masluit" << endl;
  107.                 return -1;
  108.             }
  109.             if (card_stema == "romb" || card_stema == "rosu" || card_stema == "negru" || card_stema == "trefla") {
  110.                 // all good
  111.                 Card c(card_num, card_stema);
  112.  
  113.                 // if (find(deck.begin(), deck.end(), c) != deck.end()) {
  114.                 //     cout << "Pachet masluit" << endl;
  115.                 //     return -1;
  116.                 // }
  117.  
  118.                 deck.push_back(c);
  119.                 no_cards++;
  120.  
  121.                 // cout << "Card number " << no_cards << ": " << c << endl;
  122.                 continue;
  123.             } else {
  124.                 cout << "Pachet masluit" << endl;
  125.                 return -1;
  126.             }
  127.         }
  128.         if (no_cards == 52)
  129.             cout << "Pachet OK" << endl;
  130.         else
  131.             cout << "Pachet pentru Backjack" << endl;
  132.     } else if (subiect == "shuffle_cards") {  // imi asum ca deckul a fost verificat
  133.         string temp;
  134.  
  135.         vector<Card> deck;
  136.  
  137.         int a1, c1, x1;
  138.         int a2, c2, x2;
  139.  
  140.         //     1    5    4     2     2     3
  141.         cin >> a1 >> c1 >> x1 >> a2 >> c2 >> x2;
  142.  
  143.         while (cin >> temp) {
  144.             int card_num = stoi(temp.substr(0, temp.find(",")));
  145.             string card_stema = temp.substr(temp.find(",") + 1, temp.length());
  146.             deck.push_back(Card(card_num, card_stema));
  147.         }
  148.  
  149.         for (int i = 0; i < 50; i++) {
  150.             x1 = (a1 * x1 + c1) % deck.size();
  151.             x2 = (a2 * x2 + c2) % deck.size();
  152.  
  153.             swap(deck[x1], deck[x2]);
  154.         }
  155.  
  156.         for (auto card : deck) {
  157.             cout << card << endl;
  158.         }
  159.  
  160.     } else if (subiect == "play_game") {
  161.         int n;
  162.         cin >> n;
  163.  
  164.         vector<Player> players;
  165.  
  166.         for (int i = 0; i < n; i++) {
  167.             string nume;
  168.             uint32_t bani;
  169.             cin >> nume >> bani;
  170.  
  171.             players.push_back(Player(nume, bani));
  172.         }
  173.  
  174.         int a1, c1, x1;
  175.         int a2, c2, x2;
  176.  
  177.         //                      10
  178.         while (cin >> a1) {
  179.             //               26    33    34    37    45
  180.             cin >> c1 >> x1 >> a2 >> c2 >> x2;
  181.  
  182.             for (int i = 0; i < 50; i++) {
  183.                 x1 = (a1 * x1 + c1) % play_deck.size();
  184.                 x2 = (a2 * x2 + c2) % play_deck.size();
  185.  
  186.                 swap(play_deck[x1], play_deck[x2]);
  187.             }
  188.  
  189.             for (int i = 0; i < players.size(); i++) {
  190.                 if (players[i].bani < 10) {
  191.                     players.erase(players.begin() + i);
  192.                 }
  193.             }
  194.  
  195.             Player dealer("Dealer", 10000);
  196.  
  197.             dealer.puncte = 0;
  198.             for (int i = 0; i < players.size(); i++) {
  199.                 players[i].puncte = 0;
  200.             }
  201.  
  202.             int carte = 0;
  203.             dealer.puncte += play_deck[carte++].numar;
  204.             dealer.puncte += play_deck[carte++].numar;
  205.  
  206.             for (int i = 0; i < players.size(); i++) {
  207.                 players[i].puncte += play_deck[carte++].numar;
  208.                 players[i].puncte += play_deck[carte++].numar;
  209.             }
  210.  
  211.             bool stop = 0;
  212.             vector<int> stoped_playing;
  213.  
  214.             while (dealer.puncte <= 21) {
  215.                 if (stop == 1) break;
  216.                 for (int i = 0; i < players.size(); i++) {
  217.                     if (find(stoped_playing.begin(), stoped_playing.end(), i) == stoped_playing.end()) {
  218.                         if (players[i].puncte < 17) {
  219.                             players[i].puncte += play_deck[carte++].numar;
  220.                         } else {
  221.                             stoped_playing.push_back(i);
  222.                         }
  223.                     }
  224.                     if (stoped_playing.size() == players.size()) {
  225.                         stop = 1;
  226.                     }
  227.                 }
  228.             }
  229.  
  230.             for (int i = 0; i < players.size(); i++) {
  231.                 if (players[i].puncte > 21) {
  232.                     players[i].bani -= 10;
  233.                     continue;
  234.                 }
  235.                 if (players[i].puncte < dealer.puncte) {
  236.                     players[i].bani -= 10;
  237.                 } else {
  238.                     players[i].bani += 10;
  239.                 }
  240.             }
  241.         }
  242.         for (auto player : players) {
  243.             cout << player.nume << ": " << player.bani << endl;
  244.         }
  245.     }
  246. }
  247.  
  248. // check_cards
  249. // 4,romb
  250. // 3,rosu
  251. // 12,trefla
  252. // 10,negru
  253. // 7,rosu
  254. // 9,romb
  255. // 7,negru
  256. // 3,rosu
  257.  
  258. // shuffle_cards
  259. // 1 5 4
  260. // 2 2 3
  261. // 4,romb
  262. // 3,rosu
  263. // 12,trefla
  264. // 10,negru
  265. // 7,rosu
  266. // 9,romb
  267. // 7,negru
  268. // 4,rosu
  269.  
  270. // Test 5: Test #1.5
  271. // Incorrect program output
  272. // --- Input ---
  273. // check_cards
  274. // 4,romb
  275. // 3,rosu
  276. // 3,negru
  277. // 4,negru
  278. // 5,romb
  279. // 6,rosu
  280. // 7,negru
  281. // 8,negru
  282. // 9,negru
  283. // 9,negru
  284. // 9,negru
  285. // 7,negru
  286. // 3,rosu
  287. // 12,trefla
  288. // 10,negru
  289. // 7,rosu
  290. // 9,romb
  291. // 7,negru
  292. // 3,rosu
  293.  
  294. // --- Program output ---
  295. // Pachet masluit
  296.  
  297. // --- Expected output (exact text)---
  298. // Pregatit pentru Blackjack
Add Comment
Please, Sign In to add comment