• Publicidad

[RETO][ACM 10189] El buscaminas

Aprende Perl

[RETO][ACM 10189] El buscaminas

Notapor explorer » 2014-03-30 09:35 @441

El problema

¿Has jugado alguna vez al Buscaminas? Es un pequeño juego que viene con cierto sistema operativo cuyo nombre no podemos recordar. Bien, la meta del juego es el de encontrar todas las minas en un campo MxN. Para ayudarte, el juego muestra un número en las casillas indicando cuántas minas existen adyacentes a esa casilla. Por ejemplo, supón un campo de 4x4 con 2 minas (que están representadas por el carácter *):
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
*...
....
.*..
....
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Si quisiéramos representar el mismo campo colocando las pistas descritas antes, podríamos terminar con:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
*100
2210
1*10
1110
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Como ya habrás notado, cada casilla puede tener hasta 8 casillas adyacentes.

La entrada

La entrada consistirá en un número arbitrario de campos. La primera línea de cada campo contiene dos enteros n y m (0 < n,m <= 100) que indican respectivamente el número de filas y columnas del campo. Las siguientes n líneas contienen exactamente m caracteres y representan el campo. Cada casilla segura está representada por el carácter "." (sin las comillas) y cada casilla con mina está representada por un carácter "*" (también sin las comillas). La primera línea de campo donde aparezca n = m = 0, representa el final de la entrada y no debe ser procesada.

La salida

Por cada campo, debes imprimir en una única línea el siguiente mensaje:

Campo #x:

donde x indica el número de campo (empezando en 1). Las siguientes n líneas deberán contener el campo con los caracteres "." reemplazados por el número de minas adyacentes a esa casilla. Debe haber una línea vacía entre dos salidas de campos.

Ejemplo de entrada
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
4 4
*...
....
.*..
....
3 5
**...
.....
.*...
0 0
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Ejemplo de salida
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Campo #1:
*100
2210
1*10
1110

Campo #2:
**100
33200
1*100
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


© 2001 Universidade do Brasil (UFRJ). Internal Contest Warmup 2001.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: [RETO][ACM 10189] El buscaminas

Notapor Aceitunas » 2014-04-05 10:02 @460

Lo más simple que se me ha ocurrido.

Imagen

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #[RETO][ACM 10189] El buscaminas
  2. # perlenespanol.com
  3. # Aceitunas
  4.  
  5. use v5.16;
  6.  
  7. say "Introduce el numero de filas: ";
  8. my $NumFilas = <STDIN>;
  9. chop($NumFilas);
  10.  
  11. say "Introduce el numero de columnas: ";
  12. my $NumColum = <STDIN>;
  13. chop($NumColum);
  14.  
  15. my @MapaIni;
  16. my @MapaFin;
  17.  
  18. say;
  19.  
  20. for my $i (1.. $NumFilas) #Relleno el array
  21. {
  22.     my $CadFila = <STDIN>;
  23.         chop($CadFila);
  24.        
  25.         for my $a (0..$NumColum)
  26.         {
  27.                 $MapaIni [$i] [$a] = substr $CadFila, $a ,1;;
  28.         }
  29. }
  30.  
  31. say;
  32.  
  33. for my $i (1..$NumFilas) # Genero la nueva tabla
  34. {
  35.     for my $a (0..$NumColum)
  36.         {
  37.             my $num = 0;
  38.                
  39.                 if ($MapaIni [$i] [$a] eq '*')
  40.                 {
  41.                     $MapaFin [$i] [$a] = '*';
  42.                 }else{
  43.                
  44.                         if ($MapaIni[$i-1] [$a] eq '*') {$num++;} # arriba
  45.                         if ($MapaIni[$i-1] [$a+1] eq '*') {$num++;}
  46.                         if ($MapaIni[$i-1] [$a-1] eq '*') {$num++;}
  47.                
  48.                         if ($MapaIni[$i+1] [$a] eq '*') {$num++;} # abajo
  49.                         if ($MapaIni[$i+1] [$a+1] eq '*') {$num++;}
  50.                         if ($MapaIni[$i+1] [$a-1] eq '*') {$num++;}
  51.                
  52.                         if ($MapaIni[$i] [$a+1] eq '*') {$num++;} # a los lados
  53.                         if ($MapaIni[$i] [$a-1] eq '*') {$num++;}
  54.                
  55.                         $MapaFin [$i] [$a] = $num;
  56.                 }
  57.         }
  58. }
  59.  
  60. say;
  61.  
  62. for my $i (1..$NumFilas) # Imprimo la tabla
  63. {
  64.     for my $a (0..($NumColum-1))
  65.         {
  66.         print $MapaFin [$i][$a];
  67.         }
  68.        
  69.         print "\n";
  70. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Voy a llegar hasta el final, voy a subir la velocidad - Migue Benítez.
Aceitunas
Perlero nuevo
Perlero nuevo
 
Mensajes: 117
Registrado: 2013-11-07 15:25 @684
Ubicación: Ciudad Real, España.

Re: [RETO][ACM 10189] El buscaminas

Notapor explorer » 2014-04-05 11:08 @506

La entrada de datos no es conforme a lo que se pide.

El programa debe leer desde la entrada estándar, para poder procesar archivos de prueba muy grandes (n y m pueden llegar a valer 100).

Por ejemplo:

programa.pl test_buscaminas.txt

o

type test_buscaminas.txt > programa.pl
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Formación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados