Advertisement
juanjo12x

UVA_162_Beggar_My_Neighbour

Jul 16th, 2014
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.33 KB | None | 0 0
  1. #include <list>
  2. #include <cstdio>
  3. using namespace std;
  4.  
  5. int face_card(char c)
  6. {
  7.   switch (c) {
  8.   case 'J':
  9.     return 1;
  10.   case 'Q':
  11.     return 2;
  12.   case 'K':
  13.     return 3;
  14.   case 'A':
  15.     return 4;
  16.   default:
  17.     return 0;
  18.   }
  19. }
  20.  
  21. int play(int nc, list<char>& jugador, list<char>& jugadas)
  22. {
  23.     /*nc es el numero de cartas*/
  24.   if (!nc)
  25.     nc = 1;
  26.   while (nc--) {
  27.     /*si uno de los jugadores ya no puede jugar, termina*/
  28.     if (jugador.empty())
  29.       return -1;
  30.       /*saco la primera carta del jugador*/
  31.     char c = jugador.front();
  32.      jugador.pop_front();
  33.      /*aumento la lista de jugadas*/
  34.     jugadas.push_back(c);
  35.     /*reviso la carta*/
  36.     int fc = face_card(c);
  37.     /*si es alguna carta especial, retornamos el numero de
  38.     cartas que el siguiente jugador tendra que poner*/
  39.     if (fc)
  40.       return fc;
  41.   }
  42.   return 0;
  43. }
  44.  
  45. int main()
  46. {
  47.   const int nr_cards = 52;
  48.   while (true) {
  49.     list<char> jugadores[2], jugadas;
  50.       // jugador[0] es el non dealer, jugador 1 es el  dealer
  51.       char carta[2 + 1];
  52.       scanf("%s", carta);
  53.     if (carta[0] == '#')
  54.       break;
  55.       /*ponemos al inicio la primera carta en el non-dealer*/
  56.     jugadores[0].push_front(carta[1]);
  57.     /*pasamos al proceso de llenado*/
  58.     for (int i = 1; i < nr_cards; i++) {
  59.       scanf("%s", carta);
  60.       /*de acuerdo al jugador , ponemos las cartas*/
  61.       jugadores[i % 2].push_front(carta[1]);
  62.     }
  63.  
  64.     int pi = 0, nc = 0;
  65.     /*comenzamos el proceso de simulación*/
  66.     while (true) {
  67.         /*procedemos a identificar como se jugará
  68.         play recibe un booleano, la lista de jugadores y las jugadas comenzando
  69.         */
  70.       int fc = play(nc, jugadores[pi], jugadas);
  71.       /*ahora pasamos al siguiente jugador*/
  72.       pi = (pi + 1) % 2;
  73.       /*si devolvio -1 significa que el juego termino y dicho jugador gana*/
  74.       if (fc == -1)
  75.         break;
  76.       if (!fc && nc)
  77.         /*una vez terminada la secuencia 2 , entonces el jugador correspodiente
  78.         aumenta todo lo jugado y lo pone al fondo de su deck
  79.         para ello se usa la funcion splice cuyo parametro es desde donde se
  80.         agregará y qué se agregará*/
  81.         jugadores[pi].splice(jugadores[pi].end(), jugadas);
  82.       nc = fc;
  83.     }
  84.     printf("%d%3d\n", 2 - pi, static_cast<int>(jugadores[pi].size()));
  85.   }
  86.   return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement