summaryrefslogtreecommitdiff
path: root/bots/dssp.py
diff options
context:
space:
mode:
Diffstat (limited to 'bots/dssp.py')
-rw-r--r--bots/dssp.py74
1 files changed, 0 insertions, 74 deletions
diff --git a/bots/dssp.py b/bots/dssp.py
deleted file mode 100644
index 0cace12..0000000
--- a/bots/dssp.py
+++ /dev/null
@@ -1,74 +0,0 @@
-""" bots/dssp.py - päättelee kahden vierekkäisen laatan perusteella """
-from random import sample
-from .simple import SimpleBot
-
-class DSSPBot(SimpleBot):
- """ DSSPBot - perustyhmä botti """
-
- def search(self):
- """ search - etsii kahden vierekkäisen laatan perusteella"""
- if super().search():
- return True
- tiles = list(self.get_interesting_tiles())
- pairs = []
- # pylint: disable = consider-using-enumerate
- for i in range(len(tiles)):
- for j in range(i+1,len(tiles)):
- if abs(tiles[i][0]-tiles[j][0])==1 or abs(tiles[i][1]-tiles[j][1])==1:
- pairs.append((tiles[i],tiles[j]))
- pairs.append((tiles[j],tiles[i]))
-
- for tile1, tile2 in pairs:
- c1 = self.get_value(tile1)
- c2 = self.get_value(tile2)
- n1 = self.get_neighbours(tile1)
- n2 = self.get_neighbours(tile2)
- self.remove_number_tiles(n1)
- self.remove_number_tiles(n2)
- c1 -= self.remove_mine_tiles(n1)
- c2 -= self.remove_mine_tiles(n2)
-
- # otetaan vain alue1:n laatat pois vähennetään se pommeista
- # näin tiedetään montako pommia on jäätävä yhteiselle alueelle
- nc = n1 & n2
- n1 = n1 - nc
- n2 = n2 - nc
- cc = c1 - len(n1)
-
- # jos yhteiselle alueelle ei jääkkään pommeja
- if cc < 1:
- continue
-
- # vähennetään yhteinen alue ja sen pommit alueesta 2
- # jos jäljelle ei jää miinoja merkataan alueet seiffeiks
- c2 -= cc
-
- if c2 == 0:
- for safe in n2:
- self.safe_tiles.add(safe)
-
- return self.saved_hints()
-
- def lucky_guess(self):
- heatmap = dict.fromkeys(self.get_unknown_tiles(), float(0))
- tiles = self.get_border_tiles()
- for tile in tiles:
- n = self.get_neighbours(tile)
- c = self.get_value(tile) - self.remove_mine_tiles(n)
- self.remove_number_tiles(n)
- for ntile in n:
- heatmap[ntile] += c/len(n)
-
- for tile in heatmap:
- if tile[0] in range(1,self.w-1):
- heatmap[tile]+=0.005
- if tile[1] in range(1,self.h-1):
- heatmap[tile]+=0.005
-
- best = min((x for _, x in heatmap.items()))
- best_tiles = [x for x,y in heatmap.items() if y == best]
-
- if best_tiles:
- self.safe_tiles.add(sample(best_tiles,1)[0])
- return True
- return False