Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Minesweeper solution in Clear category for Minesweeper by JimmyCarlos
def checkio(A):
if A[0][0] == -1: return (False, 0, 0)
adjDict = create_adjDict(A)
for tile,adjTiles in adjDict.items():
tile_value = A[tile[0]][tile[1]]
adj_unknowntiles = [(R,C) for R,C in adjTiles if A[R][C] == -1]
adj_emptytiles = [(R,C) for R,C in adjTiles if A[R][C] in range(0,9)]
adj_visiblemines = [(R,C) for R,C in adjTiles if A[R][C] == 9]
if len(adj_unknowntiles) == 0: continue
if len(adj_unknowntiles) + len(adj_visiblemines) == tile_value: # All mines
return (True, adj_unknowntiles[0][0], adj_unknowntiles[0][1])
if len(adj_visiblemines) == tile_value: # All safe
return (False, adj_unknowntiles[0][0], adj_unknowntiles[0][1])
else:
raise Exception("I QUIT!") # Don't think of it as "quitting" robot, consider it winning the award for the worst bot in computer history.
def create_adjDict(A) -> dict:
H,W = len(A),len(A[0])
adjDict = {}
for R,C in [(R,C) for R in range(H) for C in range(W) if A[R][C] in range(1,9)]:
adjDict[(R,C)] = set()
for r,c in ((R-1,C),(R,C+1),(R+1,C),(R,C-1),(R-1,C-1),(R-1,C+1),(R+1,C-1),(R+1,C+1)):
if 0 <= r < H and 0 <= c < W:
adjDict[(R,C)].add((r,c))
return adjDict
Aug. 23, 2019
Comments: