11
2- BLACK = "B"
3- WHITE = "W"
4- NONE = ""
2+ BLACK = 'B'
3+ WHITE = 'W'
4+ NONE = ''
55STONES = [BLACK , WHITE ]
66DIRECTIONS = [(0 , 1 ), (0 , - 1 ), (1 , 0 ), (- 1 , 0 )]
77
@@ -12,23 +12,25 @@ def __init__(self, board):
1212 self .width = len (self .board [0 ])
1313 self .height = len (self .board )
1414
15- def valid (self , x , y ):
16- return x >= 0 and x < self .width and y >= 0 and y < self .height
17-
18- def walk (self , x , y ,
19- visited_territory = [],
20- visited_coords = [],
21- visited_stones = []):
22- if not (x , y ) in visited_coords and self .valid (x , y ):
23- s = self .board [y ][x ]
24- if s in STONES :
25- if s not in visited_stones :
26- return (visited_territory , visited_stones + [s ])
15+ def valid (self , width , height ):
16+ return self .width > width >= 0 and self .height > height >= 0
17+
18+ def walk (self , width , height , visited_territory = None , visited_coords = None , visited_stones = None ):
19+ # Pylint gives W0102 warning if list used as default argument, because list is mutable.
20+ visited_territory = [] if visited_territory is None else visited_territory
21+ visited_coords = [] if visited_coords is None else visited_coords
22+ visited_stones = [] if visited_stones is None else visited_stones
23+
24+ if (width , height ) not in visited_coords and self .valid (width , height ):
25+ stone = self .board [height ][width ]
26+ if stone in STONES :
27+ if stone not in visited_stones :
28+ return (visited_territory , visited_stones + [stone ])
2729 else : # s is empty
28- for d in DIRECTIONS :
29- visited = self .walk (x + d [0 ], y + d [1 ],
30- visited_territory + [(x , y )],
31- visited_coords + [(x , y )],
30+ for direction in DIRECTIONS :
31+ visited = self .walk (width + direction [0 ], height + direction [1 ],
32+ visited_territory + [(width , height )],
33+ visited_coords + [(width , height )],
3234 visited_stones )
3335 visited_territory = visited [0 ]
3436 visited_stones = visited [1 ]
@@ -50,12 +52,12 @@ def territory(self, x, y):
5052
5153 def territories (self ):
5254 owners = STONES + [NONE ]
53- result = dict ([( owner , set ()) for owner in owners ])
55+ result = { owner : set () for owner in owners }
5456 visited = set ()
55- for y in range (self .height ):
56- for x in range (self .width ):
57- if not (x , y ) in visited :
58- owner , owned_territories = self .territory (x , y )
57+ for row in range (self .height ):
58+ for column in range (self .width ):
59+ if not (column , row ) in visited :
60+ owner , owned_territories = self .territory (column , row )
5961 result [owner ].update (owned_territories )
6062 visited .update (owned_territories )
6163
0 commit comments