Пример #1
0
from python import util

dataset = []
while True:
    s = input()
    if not s:
        break
    dataset.append(s)

pairs = set()
corr = []
for x in dataset:
    if not x in pairs:
        cx = util.reverseComplement(x)
        if not cx in pairs:
            pairs.add(x)
        else:
            pairs.remove(cx)
            corr.append(x)
            corr.append(cx)
    else:
        pairs.remove(x)
        corr.append(x)

err_list = list(pairs)
for i in err_list:
    for j in corr:
        if util.getHammingDistance(i, j) == 1 or util.getHammingDistance(i, util.reverseComplement(j)) == 1:
            print("%s->%s" % (i, j))
            break
Пример #2
0
                queue.append(e)
            elif len(e.path) < len(node.path) + 1:
                e.path = node.path + [e]
            if e.value == start_node and len(node.path) >= data_len - k + 1:
                if not minPath or len(minPath) > len(node.path):
                    minPath = node.path
    return minPath


if __name__ == '__main__':
    s = []
    while True:
        l = input()
        if not l: break
        s.append(l)
    un = set(s).union({reverseComplement(x) for x in s})
    data_len = len(s[0])

    k = data_len - 1
    while k >= 1:
        edges = build_deBruijin_graph(un, k)
        g_visited_nodes = set()
        start_node = first(edges.keys())

        path = None
        while True:
            visited_nodes = set()
            path = traverseGraph(start_node, edges, visited_nodes, k)
            if path:
                break
            g_visited_nodes |= visited_nodes
Пример #3
0
def build_deBruijin_graph(s):
    un = s.union({util.reverseComplement(x) for x in s})
    return [(r[:-1], r[1:]) for r in un]