class MoveSorter():
    def __init__(self, moves: str = None):
        self._moves = VectorArray()
        self._figure_moves = {}
        if moves is not None:
            self.add_multiple_moves(moves)

    def add_multiple_moves(self, moves: str):
        moves_count = 0
        for line in moves.splitlines():
            if moves_count == 0:
                moves_count = line
                self._moves.set_vector(int(line))
            else:
                self._moves.add(line)
        self._moves.clear_unused_memory()

    def add_move(self, move: str):
        self._moves.add(move)

    def sort(self):
        self._moves.alphabetical_sort()

    def print_square_moves_table(self):
        elems_begin_with_count = {
            'a': 0,
            'b': 0,
            'c': 0,
            'd': 0,
            'e': 0,
            'f': 0,
            'g': 0,
            'h': 0
        }
        for elem_index in range(self._moves.size()):
            elem = self._moves.get(elem_index)
            for i in ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']:
                if isinstance(elem, str) and elem[0] == i:
                    elems_begin_with_count[i] += 1

        min_len = 0
        for k, v in elems_begin_with_count.items():
            if v != 0:
                if min_len == 0:
                    min_len = v
                else:
                    if min_len > v:
                        min_len = v

        res = str(self._moves.size()) + "\n"
        str_array = MatrixArray(None, min_len)
        for elem_index in range(self._moves.size() + 1):
            elem = self._moves.get(elem_index)
            if elem_index > 0 and elem_index % min_len == 0:
                res += str_array.get_row(int(elem_index / min_len) -
                                         1).join(' ')
                res += "\n"
            str_array.add(elem)
        return res[:-1]
Exemple #2
0
def makeVertexesArray(vertexIndexes: [], adjacencyVector: AdjacencyVector):

    vertexes = VectorArray(len(vertexIndexes))

    for masterVertexIndex, slaveVIndexesArr in enumerate(vertexIndexes):
        masterVertex = vertexes[masterVertexIndex]
        if masterVertex is None:
            masterVertex = Vertex(masterVertexIndex)
            vertexes.replace(masterVertex, masterVertexIndex)

        for slaveVertexIndex in slaveVIndexesArr:
            slaveVertex = vertexes[slaveVertexIndex]
            if slaveVertex is None:
                slaveVertex = Vertex(slaveVertexIndex)
                vertexes.replace(slaveVertex, slaveVertexIndex)
            masterVertex.addBindedVertex(slaveVertex)
            adjacencyVector.bind(slaveVertex.index, masterVertex.index)
    vertexes.clear_unused_memory()

    return vertexes