Connecta 4 T38801


Statement
 

pdf   zip   main.cc

El Connecta 4 és un joc de tauler per a dos jugadors. El tauler té un nombre de files i columnes (típicament 6 files i 7 columnes). Cada jugador té fitxes d’un color (representades per 1 i 2). Els jugadors van tirant fitxes alternativament a una columna, i la fitxa cau fins a la posició més baixa disponible d’aquella columna (com si hi hagués gravetat).

Per exemple, si tenim un tauler buit de 6 files i 7 columnes i els jugadors fan les tirades següents:

Columna 0, Jugador 1
Columna 1, Jugador 2
Columna 2, Jugador 1
Columna 0, Jugador 2
Columna 1, Jugador 1
Columna 1, Jugador 2
Columna 0, Jugador 1

El tauler resultant seria:

0000000
0000000
0000000
1000000
2120000
1210000

A on 0 indica una casella buida, 1 indica una fitxa del jugador 1, i 2 indica una fitxa del jugador 2.

Disposem dels tipus següents:

#include <vector>
using namespace std;

typedef vector<int> Fila;
typedef vector<Fila> Taulell;

struct Tirada {
    int col;
    int fitxa;  // 1 o 2
};

/**
 * @brief Executa una seqüència de tirades sobre un taulell.
 *        Cada tirada consisteix en deixar caure una fitxa a una columna.
 *        La fitxa cau fins a la posició més baixa disponible.
 *        Si la columna està plena, la tirada s'ignora.
 *
 * @param T El taulell de joc (es modifica)
 * @param tirades El vector de tirades a executar
 * @pre Per a cada tirada t en tirades: 0 <= t.col < T[0].size() i t.fitxa és 1 o 2.
 */
void executa_tirades(Taulell& T, const vector<Tirada>& tirades);

Implementa la funció executa_tirades amb la declaració de dalt.

Observació

El centre d’interès d’aquest problema és la correctesa. Els jocs de prova comproven que la majoria de casos possibles produeixin la sortida correcta.

IMPORTANT: Quan envieu aquest problema, cal posar en el fitxer .cc només la funció executa_tirades (i les funcions auxiliars que necessiteu) amb els includes necessaris i els typedef i struct donats. Cal esborrar (o comentar amb /* i */) la funció main i les altres funcions del main.cc proporcionat.

Entrada

L’entrada ja la fa el programa principal proporcionat. Consisteix en un seguit de casos. Cada cas comença amb tres enters: el nombre de files, el nombre de columnes, i el nombre de tirades. Després venen les tirades, cadascuna amb dos enters: la columna i el número de fitxa (1 o 2).

Sortida

La sortida també la produeix el programa principal proporcionat. Per a cada cas, es mostra el taulell resultant, amb una línia per fila, on cada casella és 0 (buida), 1 (fitxa del jugador 1) o 2 (fitxa del jugador 2). Entre cada taulell hi ha una línia en blanc.

Public test cases
  • Input

    6 7 7
    0 1
    1 2
    2 1
    0 2
    1 1
    1 2
    0 1
    
    4 5 5
    0 1
    1 2
    2 1
    2 2
    2 1
    
    3 3 9
    0 1
    1 2
    2 1
    0 2
    1 1
    2 2
    0 1
    1 2
    2 1
    

    Output

    0000000
    0000000
    0000000
    1200000
    2100000
    1210000
    
    00000
    00100
    00200
    12100
    
    121
    212
    121
    
    
  • Information
    Author
    Pau Fernández
    Language
    Catalan
    Other languages
    Spanish
    Official solutions
    C++
    User solutions
    C++