Barquets (1) X12847


Statement
 

pdf   zip

html

El joc dels barquets es juga sobre un tauler de 10x10, on les files es numeren amb lletres (de l’a a la j), i les columnes es numeren amb números de l’1 al 10.


Cadascun dels dos jugadors que hi participen té un tauler. Sobre les caselles del tauler cada jugador disposa un total de 10 vaixells, que ocupen 2, 3, 4 o 5 caselles contigües en línia recta. En concret, cada jugador disposa d’una flota formada per: 1 vaixell de longitud 5, 2 de longitud 4, 3 de longitud 3, i 4 de longitud 2.


Els vaixells no es poden tocar entre ells ni es poden posicionar de qualsevol forma: sempre han de definir una línia contínua horitzontal o vertical, però mai diagonal. Sempre que es compleixin aquestes restriccions, els jugadors poden disposar els seus vaixells en qualsevol lloc del tauler. Després, cada jugador intentaà enfonsar els vaixells de l’altre jugador mitjançant ’trets’ directes a una coordenada del tauler contrari.

Entrada

  • Les primeres 10 línies defineixen el taulervàlid pel jugador 1. Cada línia defineix la posició d’un vaixell al tauler. Cada vaixell es defineix per una coordenada inicial del tauler, una mida i una orientació: la coordenada està formada per una lletra de {a..j} i un número de {1..10}, la mida és un enter entre 2 i 5, i l’orientació és una lletra h (horitzontal) una v (vertical). El vaixell es posarà al tauler a partir de la coordenada inicial, seguint l’orientació indicada, al llarg de tantes caselles com indica la llargada. Quan l’orientació és horitzontal, la coordenada inicial indica la de la casella més a l’esquerra, i quan és vertical, la casella superior.

    Per exemple, el vaixell definit per a1 3 h ocupa les caselles a1, a2, a3, mentre que el vaixell definit per a1 3 v ocupa les caselles a1, b1, c1.

  • A continuació hi ha una seqüència (sense repeticions) de coordenades vàlides que representen els trets del jugador 2 sobre el tauler del jugador 1.

Sortida

  • Dibuixeu el tauler del jugador 1 després de posicionar-hi els 10 vaixells definits a l’entrada.
  • A continuació indiqueu, per a cada coordenada de la seqüència de trets del jugador 2, si hi ha vaixell en aquella posició al tauler del jugador 1. En cas que no n’hi hagi, indiqueu quina és la distància al vaixell més proper.

Seguiu el format indicat als exemples.

Observació

  • Els taulers i les coordenades dels tirs dels jocs de proves compleixen les condicions del joc. No cal que les comproveu, doncs.
  • Feu servir la definició següent:
    typedef vector< vector<bool> > Tauler;
  • La distància entre dues caselles (i,j) i (i′,j′) del tauler es defineix com la màxima diferència entre les seves coordenades, és a dir,
    distancia((i,j), (i′,j′)) = max{|  ii′|, |jj′|}
    Fixeu-vos que, segons això, les posicions a distància 1 són totes les posicions contigües (horitzontalment, verticalment o en diagonal), les posicions a distància 2 són les contigües a les de distància 1, etc.
  • Es valorarà l’eficiència de l’algorisme utilitzat per a calcular el vaixell més pròxim.


Public test cases
  • Input

    a1 5 h
    a10 4 v
    g10 4 v
    j5 3 h
    j1 3 h
    f1 3 v
    c2 2 h
    e4 2 v
    h5 2 h
    a7 2 h
    
    a1
    a5
    a6
    d8
    e8
    f8
    e6
    e7
    

    Output

      12345678910
    a XXXXX.XX.X
    b .........X
    c .XX......X
    d .........X
    e ...X......
    f X..X......
    g X........X
    h X...XX...X
    i .........X
    j XXX.XXX..X
    
    a1 tocat!
    a5 tocat!
    a6 aigua! vaixell mes proper a distancia 1
    d8 aigua! vaixell mes proper a distancia 2
    e8 aigua! vaixell mes proper a distancia 2
    f8 aigua! vaixell mes proper a distancia 2
    e6 aigua! vaixell mes proper a distancia 2
    e7 aigua! vaixell mes proper a distancia 3
    
  • Information
    Author
    Maria J. Blesa i Maria J. Serna
    Language
    Catalan
    Other languages
    English Spanish
    Official solutions
    Unknown.
    User solutions
    C++