program Minesweeper; uses crt; var infile,outfile:text; x,y,z,r,c:integer; s:string; minefield,original: array[0..17,0..31] of char; minecounter, revealedcounter: integer; procedure fillfield(r,c:integer); begin if minefield[r-1,c-1]='.' then begin minefield[r-1,c-1]:='Z'; fillfield(r-1,c-1); end; if minefield[r-1,c]='.' then begin minefield[r-1,c]:='Z'; fillfield(r-1,c); end; if minefield[r-1,c+1]='.' then begin minefield[r-1,c+1]:='Z'; fillfield(r-1,c+1); end; if minefield[r,c-1]='.' then begin minefield[r,c-1]:='Z'; fillfield(r,c-1); end; if minefield[r,c+1]='.' then begin minefield[r,c+1]:='Z'; fillfield(r,c+1); end; if minefield[r+1,c-1]='.' then begin minefield[r+1,c-1]:='Z'; fillfield(r+1,c-1); end; if minefield[r+1,c]='.' then begin minefield[r+1,c]:='Z'; fillfield(r+1,c); end; if minefield[r+1,c+1]='.' then begin minefield[r+1,c+1]:='Z'; fillfield(r+1,c+1); end; end; begin assign(infile,'DATA41.txt'); reset(infile); assign(outfile,'OUT41.txt'); rewrite(outfile); for x:=0 to 17 do for y:=0 to 31 do begin minefield[x,y]:='$'; original[x,y]:='$'; end; for x:=1 to 16 do begin readln(infile,s); for y:=1 to 30 do begin minefield[x,y]:=s[y]; original[x,y]:=s[y]; end; end; for x:=1 to 16 do for y:=1 to 30 do begin minecounter := 0; if minefield[x,y]='.' then begin if minefield[x-1,y-1]='X' then inc(minecounter); if minefield[x-1,y]='X' then inc(minecounter); if minefield[x-1,y+1]='X' then inc(minecounter); if minefield[x,y-1]='X' then inc(minecounter); if minefield[x,y+1]='X' then inc(minecounter); if minefield[x+1,y-1]='X' then inc(minecounter); if minefield[x+1,y]='X' then inc(minecounter); if minefield[x+1,y+1]='X' then inc(minecounter); if minecounter > 0 then begin minefield[x,y] := chr(minecounter + 48); original[x,y] := chr(minecounter + 48); end; end; end; for x:=1 to 5 do begin readln(infile,r,c); if minefield[r,c] = 'X' then writeln(outfile,'MINE - YOU LOSE') else begin if minefield[r,c] in ['1'..'9'] then writeln(outfile,'NO MINE - ',minefield[r,c],' SURROUNDING IT') else begin minefield[r,c]:='Z'; fillfield(r,c); revealedcounter := 0; for y:=1 to 16 do for z:=1 to 30 do if minefield[y,z]='Z' then begin inc(revealedcounter); if minefield[y-1,z-1] in ['1'..'9'] then begin inc(revealedcounter); minefield[y-1,z-1] := '0'; end; if minefield[y-1,z] in ['1'..'9'] then begin inc(revealedcounter); minefield[y-1,z] := '0'; end; if minefield[y-1,z+1] in ['1'..'9'] then begin inc(revealedcounter); minefield[y-1,z+1] := '0'; end; if minefield[y,z-1] in ['1'..'9'] then begin inc(revealedcounter); minefield[y,z-1] := '0'; end; if minefield[y,z+1] in ['1'..'9'] then begin inc(revealedcounter); minefield[y,z+1] := '0'; end; if minefield[y+1,z-1] in ['1'..'9'] then begin inc(revealedcounter); minefield[y+1,z-1] := '0'; end; if minefield[y+1,z] in ['1'..'9'] then begin inc(revealedcounter); minefield[y+1,z] := '0'; end; if minefield[y+1,z+1] in ['1'..'9'] then begin inc(revealedcounter); minefield[y+1,z+1] := '0'; end; end; writeln(outfile,'NO MINE - ',revealedcounter,' SQUARES REVEALED'); for y:=1 to 16 do for z:=1 to 30 do minefield[y,z]:=original[y,z]; end; end; end; close(infile); close(outfile); end.