diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/miinaharava/bots/bot.py | 6 | ||||
-rw-r--r-- | src/miinaharava/bots/dssp.py | 30 |
2 files changed, 22 insertions, 14 deletions
diff --git a/src/miinaharava/bots/bot.py b/src/miinaharava/bots/bot.py index cfeedce..b00f9a6 100644 --- a/src/miinaharava/bots/bot.py +++ b/src/miinaharava/bots/bot.py @@ -91,8 +91,12 @@ class Bot(): count+=1 return count + def are_neighbours(self, tile1, tile2): + """ Kertoo ovatko laatat naapureita keskenään """ + return abs(tile1[0]-tile2[0])==1 or abs(tile1[1]-tile2[1])==1 + def known_tile(self, tile): - """ Kortoo onko laatta merkitty tai avattu. """ + """ Kertoo onko laatta merkitty tai avattu. """ return self.matrix[tile[0]][tile[1]] < Tile.UNOPENED def number_tile(self, tile): diff --git a/src/miinaharava/bots/dssp.py b/src/miinaharava/bots/dssp.py index 769c616..1307565 100644 --- a/src/miinaharava/bots/dssp.py +++ b/src/miinaharava/bots/dssp.py @@ -4,22 +4,27 @@ from random import sample from .simple import SimpleBot class DSSPBot(SimpleBot): - """ DSSPBot - perustyhmä botti """ + """ Kahta pistettä tutkiva tekoäly. Käyttää pohjana SipleBot tekoälyä """ + + def get_pairs(self): + """ Etsii kiinnostavien laattojen joukosta vierekkäiset """ + tiles = list(self.get_interesting_tiles()) + pairs = [] + for i, tile1 in enumerate(tiles): + for _, tile2 in enumerate(tiles, i+1): + if self.are_neighbours(tile1,tile2): + pairs.append((tile1,tile2)) + pairs.append((tile2,tile1)) + return pairs def search(self): - """ search - etsii kahden vierekkäisen laatan perusteella""" + """ Etsitään voiko viereisen numerolaatan osoittamat miinat ja + epävarmat poistamalla päätellä onko jokin nykyisen laatan tuntematon + vapaa. """ 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: + for tile1, tile2 in self.get_pairs(): c1 = self.get_value(tile1) c2 = self.get_value(tile2) n1 = self.get_neighbours(tile1) @@ -45,8 +50,7 @@ class DSSPBot(SimpleBot): c2 -= cc if c2 == 0: - for safe in n2: - self.safe_tiles.add(safe) + self.safe_tiles |= n2 return self.saved_hints() |