Sha256: b96be9c9ff26b1c892c1b26b6d065306b02369832a40e9acaa7797806930626f

Contents?: true

Size: 1.79 KB

Versions: 117

Compression:

Stored size: 1.79 KB

Contents

class ConnectGame:

    directions = [(0, 1), (0, -1), (1, 0), (-1, 0), (1, -1), (-1, 1)]
    white = "O"
    black = "X"
    none = ""

    def __init__(self, lines):
        self.board = self.make_board(lines)
        assert len(self.board) > 0

        self.width = len(self.board[0])
        self.height = len(self.board)
        assert self.width > 0 and self.height > 0

        for l in self.board:
            assert len(l) == self.width

    def valid(self, x, y):
        return x >= 0 and x < self.width and y >= 0 and y < self.height

    def make_board(self, lines):
        return ["".join(l.split()) for l in lines.splitlines()]

    def player_reach_dest(self, player, x, y):
        if player == self.black:
            return x == self.width - 1
        if player == self.white:
            return y == self.height - 1

    def walk_board(self, player, x, y, visited=[]):
        if (x, y) in visited:
            return False

        if (not self.valid(x, y)) or self.board[y][x] != player:
            return False

        if self.player_reach_dest(player, x, y):
            return True

        for d in self.directions:
            if self.walk_board(player, x + d[0], y + d[1], visited + [(x, y)]):
                return True

    def check_player_is_winner(self, player):
        if player == self.black:
            for y in range(self.height):
                if self.walk_board(player, 0, y):
                    return True
        if player == self.white:
            for x in range(self.width):
                if self.walk_board(player, x, 0):
                    return True

    def get_winner(self):
        if self.check_player_is_winner(self.black):
            return self.black
        if self.check_player_is_winner(self.white):
            return self.white
        return self.none

Version data entries

117 entries across 117 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/python/exercises/connect/example.py
trackler-2.2.1.179 tracks/python/exercises/connect/example.py
trackler-2.2.1.178 tracks/python/exercises/connect/example.py
trackler-2.2.1.177 tracks/python/exercises/connect/example.py
trackler-2.2.1.176 tracks/python/exercises/connect/example.py
trackler-2.2.1.175 tracks/python/exercises/connect/example.py
trackler-2.2.1.174 tracks/python/exercises/connect/example.py
trackler-2.2.1.173 tracks/python/exercises/connect/example.py
trackler-2.2.1.172 tracks/python/exercises/connect/example.py
trackler-2.2.1.171 tracks/python/exercises/connect/example.py
trackler-2.2.1.170 tracks/python/exercises/connect/example.py
trackler-2.2.1.169 tracks/python/exercises/connect/example.py
trackler-2.2.1.167 tracks/python/exercises/connect/example.py
trackler-2.2.1.166 tracks/python/exercises/connect/example.py
trackler-2.2.1.165 tracks/python/exercises/connect/example.py
trackler-2.2.1.164 tracks/python/exercises/connect/example.py
trackler-2.2.1.163 tracks/python/exercises/connect/example.py
trackler-2.2.1.162 tracks/python/exercises/connect/example.py
trackler-2.2.1.161 tracks/python/exercises/connect/example.py
trackler-2.2.1.160 tracks/python/exercises/connect/example.py