Barquitos (1) X12847


Statement
 

pdf   zip

html

El juego de los barquitos se juega sobre un tablero de 10× 10 , donde las filas se identifican con letras (de la a a la j) y las columnas se numeran con números del 1 al 10.


Cada uno de los dos jugadores que participan tiene un tablero. Sobre las casillas del tablero cada jugador dispone un total de 10 barcos, que ocupan 2, 3, 4 o 5 casillas contiguas en línea recta. En concreto, cada jugador dispone de una flota formada por: 1 barco de longitud 5, 2 de longitud 4, 3 de longitud 3, y 4 de longitud 2.


Los barcos no se pueden tocar entre ellos ni se pueden posicionar de cualquier forma: siempre han de definir una línea continua horizontal o vertical, pero nunca diagonal. Siempre que se cumplan estas restricciones, los jugador pueden disponer sus barcos en cualquier lugar del tablero. Después, cada jugador intentará hundir los barcos del otro jugador mediante ’disparos’ directos a una coordenada del tablero contrario.

Entrada

La entrada tiene dos partes:

  • Las primeras 10 líneas definen el tablero del jugador 1, que cumple las condiciones estipuladas en el juego. Cada línea define la posición de un barco en el tablero. Cada barco se define por una coordenada inicial del tablero, una longitud y una orientación: la coordenada está formada por una letra {a .. j} y un número de {1 .. 10} , la longitud es un entero en {2 .. 5} , y la orientación es una letra h (horizontal) o una letra v (vertical). El barco se situará en el tablero a partir de la coordenada inicial, siguiendo la orientación indicada, a lo largo de tantas casillas como indica la longitud del barco. Cuando la orientación es horizontal, la coordenada inicial indica la de la casilla más a la izquierda, y cuando es vertical, la casilla superior.

    Por ejemplo, el barco definido por a1 3 h ocupa las casillas a1 , a2 , a3, mientras que el barco definido por a1 3 v ocupa las casillas a1, b1, c1.

  • La segunda parte consiste en una secuencia de coordenadas que representa los disparos del jugador 2 sobre el tablero del jugador 1. Cada coordenada está formada por una letra {a .. j} y un número {1 .. 10 }.

Salida

  • Dibujad el tablero del jugador 1 tras posicionarse los 10 barcos definidos en la entrada.
  • A continuación indicad, para cada coordenada de la secuencia de disparos del jugador 2, si hay barco en esa posición en el tablero del jugador 1. Si no lo hay, indicad también la distancia de la posición del disparo al barco más cercano.

Seguid el formato indicado en los ejemplos.

Observación

  • Los tableros de los juegos de pruebas son tableros que cumplen las condiciones del juego. No es necesario que el programa las compruebe.
  • Utilizad la siguiente definición:
    typedef vector< vector<bool> > Tablero;
  • La distancia entre dos casillas (i,j) i (i′,j′) del tablero se define como la máxima diferència entre sus coordenadas, es decir,
    distancia((i,j), (i′,j′)) = max{|ii′|, |jj′|}
    Fijaos que, según esto, las posiciones a distancia 1 son todas las posiciones contiguas (horizontalmente, verticalmente o en diagonal), las posiciones a distancia 2 son las contiguas a las de distancia 1, etc.
  • Se valorará la eficiencia del algoritmo utilizado para calcular el barco más próximo.


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 tocado!
    a5 tocado!
    a6 agua! barco mas cercano a distancia 1
    d8 agua! barco mas cercano a distancia 2
    e8 agua! barco mas cercano a distancia 2
    f8 agua! barco mas cercano a distancia 2
    e6 agua! barco mas cercano a distancia 2
    e7 agua! barco mas cercano a distancia 3
    
  • Information
    Author
    Maria J. Blesa i Maria J. Serna
    Language
    Spanish
    Translator
    Maria Serna
    Original language
    Catalan
    Other languages
    Catalan English
    Official solutions
    Unknown.
    User solutions
    C++