コード例 #1
0
ファイル: rosalind_full.py プロジェクト: orenlivne/euler
def chain(l):
    '''Return the chain of letters of t from a sorted list of b-/y-ion masses.'''
    i, n = 0, len(l)
    while True:
        li = l[i]
        try: i, ti = it.dropwhile(lambda x: not x[1], ((k, ro.aa_of_mass_exact(l[k] - li)) for k in xrange(i + 1, n))).next()
        except StopIteration: break
        yield ti
コード例 #2
0
ファイル: rosalind_sgra.py プロジェクト: orenlivne/euler
def longest_protein_from_spectrum_graph(a):
    '''Main driver to solve this problem.'''
    g = nx.DiGraph()
    g.add_weighted_edges_from((u, v, r) for u, v, r in ((i, j, ro.aa_of_mass_exact(v - u)) for i, u in enumerate(a) for j, v in enumerate(a) if v > u) if r)
    i, l = nx.topological_sort(g), np.zeros((len(a),), dtype=int)
    for u in i:  l[u] = 0 if g.in_degree(u) == 0 else (max(l[v] for v in g.predecessors_iter(u)) + 1)
    u = np.argmax(l)
    d, s = l[u], ''
    for _ in xrange(d):
        v = max((l[v], v) for v in g.predecessors_iter(u))[1]
        s, u, d = g[v][u]['weight'] + s, v, l[v]
    return s