diff options
author | Aineopintojen-harjoitustyo-Algoritmit-j <github-hy-tiralabra@v.hix.fi> | 2024-02-18 14:19:02 +0200 |
---|---|---|
committer | Aineopintojen-harjoitustyo-Algoritmit-j <github-hy-tiralabra@v.hix.fi> | 2024-02-18 14:19:02 +0200 |
commit | 890fd029b3ee1dee4a0c1c2430b061cd66b8b8e8 (patch) | |
tree | c1ee5d0e6a9888b34ecf6a45a0290b29a3769885 | |
parent | a947010229c81872a28552bddc37a4761c3a575a (diff) |
Refactor & comment bots.
-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() |