The game shows a number in a square which tells you how many mines there are
adjacent to that square. Each square has at most eight adjacent squares. The 4×4 field
on the left contains two mines, each represented by a “*” character. If we represent the
same field by the hint numbers described above, we end up with the field on the Output:
Input:
*...
....
.*..
....
Output:
*100
2210
1*10
1110
import os import sys filename = "minesweeper.txt" file_contents = open(filename).readlines() field = [] def is_mine(x, y): try: if x < 0 or y < 0: # -1 is a valid index in python ! not for us return False if field[x][y] == "*": return True return False except: return False def get_nbr_adj_mines(x, y): cnt = 0 for del_x, del_y in [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]: #print x + del_x, ":", y + del_y, "=", str(is_mine(x + del_x, y + del_y)) if is_mine(x + del_x, y + del_y): cnt = cnt + 1 return cnt field_nbr = 1 while True: line = file_contents.pop(0) line.replace("\\n", "") n, m = int(line.split()[0]), int(line.split()[1]) if n == 0: break field = [] while n > 0: field.append(list(file_contents.pop(0).replace("\\n", ""))) n = n-1 print "Field #:", field_nbr for x, row in enumerate(field): for y, elt in enumerate(row): #print x, ":", y, ":", elt, " ", if is_mine(x, y): print "%s" % (elt), else: print "%d" % (get_nbr_adj_mines(x, y)), print field_nbr = field_nbr + 1
minesweeper.txt:
4 4 *... .... .*.. .... 3 5 **... ..... .*... 0 0
No comments:
Post a Comment