コード例 #1
0
        ins[v] += 1
    print('ins', ins)
    print('outs', outs)

    contig_starts = [v for v, out in outs.items() if not (out in (0, 1) and ins[v] == 1)]
    print('contig_starts', contig_starts)

    contigs = []
    for start in contig_starts:
        while graph[start]:  # multiple edges
            path = [start]
            u = graph[start].pop()
            while ins[u] == outs[u] == 1:
                path.append(u)
                u = graph[u].pop()
            contigs.append(''.join(v[0] for v in path) + u)

    return contigs


if __name__ == '__main__':
    #dataset, test_contigs = big_example()
    dataset = read_dataset()

    dataset = [l.lower() for l in dataset]
    adjlist = debruijn_graph(dataset)
    contigs = sorted(assemble_contigs(adjlist))
    #print(len(contigs))
    #test_contigs = sorted(test_contigs)
    #print(len(test_contigs))
    write_result('\n'.join(sorted(contigs)))
コード例 #2
0
from common import small_example, big_example, read_dataset, write_result
from eulerian_cycle import eulerian_path

if __name__ == '__main__':
    dataset, _ = small_example()
    dataset = read_dataset()

    adjlist = {
        words[0]: set(words[1].split(','))
        for words in (l.split(' -> ') for l in dataset)
    }
    print(adjlist)
    path = eulerian_path(adjlist)

    output = ''.join(kmer[0] for kmer in path) + path[-1][1:]
    write_result(output)
コード例 #3
0
    for i in range(n):
        s[i + 1][0] = s[i][0] + down[i][0]

    for j in range(m):
        s[0][j + 1] = s[0][j] + right[0][j]

    for i in range(n):
        for j in range(m):
            s[i + 1][j + 1] = max(s[i][j + 1] + down[i][j + 1], s[i + 1][j] + right[i + 1][j])
    for l in s:
        print(l)
    return s[n][m]


inp = read_dataset()
n = int(inp[0])
m = int(inp[1])
down = [list(map(int, l.split())) for l in inp[2 : 2 + n]]
right = [list(map(int, l.split())) for l in inp[2 + n + 1 :]]

print(manhattan_tourist(n, m, down, right))
# print(out)


def num_simple_ways():
    m = 12 + 1
    n = 16 + 1

    ways = [[0] * m for _ in range(n)]
    for i in range(n):
コード例 #4
0
                count += 1
                ww = w[j + 1:]
            else:
                break

        #block = cv[i:i + k]
        #if block in w:
        #    print((i, w.find(block)))


#    print(count)

if __name__ == '__main__':
    inp, out = small_example()
    #inp, out = big_example()
    inp = read_dataset()

    k = int(inp[0])
    v = Seq(inp[1])
    w = Seq(inp[2])

    #with open('example_result.txt') as f:
    #    print(len(f.readlines()))
    #with open('ex_res.txt', 'w') as f2:
    #    with open('example_result.txt') as f:
    #        vs = sorted(tuple(map(int, l.strip()[1:-1].split(', ')))
    #                    for l in f.readlines())
    #        for a, b in vs:
    #            f2.write(str((a, b)) + ' ' + str(v[a:a + k]) + ' ' + str(w[b:b + k]) + '\n')

    #print()
コード例 #5
0
#def paired_path(adjlist, d):
#    if not adjlist: return []
#    graph = {u: vs for u, vs in adjlist.items()}
#    return eulerian_path(adjlist, paired_cycle, d)

if __name__ == '__main__':
    #k, d = 3, 2
    #genome = 'TAATGCCATGGGATGTT'
    #long_comp = composition(k + d + k, genome)
    #pairs = sorted((long[:k], long[-k:]) for long in long_comp)
    #print(', '.join('(' + '|'.join(pair) + ')' for pair in pairs))

    #data = '(AG|AG) → (GC|GC) → (CA|CT) → (AG|TG) → (GC|GC) → (CT|CT) → (TG|TG) → (GC|GC) → (CT|CA)'
    #pairs = (tuple(pair[1:-1].split('|')) for pair in data.split(' → '))
    #k, d = 2, 1
    data = read_dataset()
    d = int(data[0])
    pairs = [line.split('|') for line in data[1:]]
    k = len(pairs[0][0])
    adjlist = paired_dubruijn(pairs)

    path = paired_path(adjlist, d)
    print(path)

    genome = ['-' for _ in range(len(pairs) + k + d + k - 1)]
    print(''.join(genome))
    l, r = path[0]
    for i, (l, r) in enumerate(path):
        for j, c in enumerate(l + '-' * (d + 1) + r):
            if c != '-':
                genome[i + j] = c
コード例 #6
0
from common import small_example, big_example, read_dataset, write_result


def change(money, coins):
    min_change = [[] for _ in range(max(coins))]
    min_nums = [0] * max(coins)
    for sum in range(min(coins), money + 1):
        min_sum, min_c = min(
            (min_nums[(sum - c) % max(coins)], c) for c in coins if c <= sum)
        min_nums[sum % max(coins)] = min_sum + 1
        min_change[sum % max(coins)] = min_change[(sum - min_c) %
                                                  max(coins)] + [min_c]

    print(min_nums)
    print(min_change)
    return min_nums[money % sum], min_change[money % sum]


if __name__ == '__main__':
    input, output = small_example()
    input = read_dataset()
    print(change(int(input[0]), list(map(int, input[1].split(',')))))
コード例 #7
0
from common import small_example, big_example, read_dataset, write_result


def change(money, coins):
    min_change = [[] for _ in range(max(coins))]
    min_nums = [0] * max(coins)
    for sum in range(min(coins), money + 1):
        min_sum, min_c = min((min_nums[(sum - c) % max(coins)], c) for c in coins if c <= sum)
        min_nums[sum % max(coins)] = min_sum + 1
        min_change[sum % max(coins)] = min_change[(sum - min_c) % max(coins)] + [min_c]

    print(min_nums)
    print(min_change)
    return min_nums[money % sum], min_change[money % sum]


if __name__ == "__main__":
    input, output = small_example()
    input = read_dataset()
    print(change(int(input[0]), list(map(int, input[1].split(",")))))
コード例 #8
0
#    if not adjlist: return []
#    graph = {u: vs for u, vs in adjlist.items()}
#    return eulerian_path(adjlist, paired_cycle, d)


if __name__ == '__main__':
    #k, d = 3, 2
    #genome = 'TAATGCCATGGGATGTT'
    #long_comp = composition(k + d + k, genome)
    #pairs = sorted((long[:k], long[-k:]) for long in long_comp)
    #print(', '.join('(' + '|'.join(pair) + ')' for pair in pairs))

    #data = '(AG|AG) → (GC|GC) → (CA|CT) → (AG|TG) → (GC|GC) → (CT|CT) → (TG|TG) → (GC|GC) → (CT|CA)'
    #pairs = (tuple(pair[1:-1].split('|')) for pair in data.split(' → '))
    #k, d = 2, 1
    data = read_dataset()
    d = int(data[0])
    pairs = [line.split('|') for line in data[1:]]
    k = len(pairs[0][0])
    adjlist = paired_dubruijn(pairs)

    path = paired_path(adjlist, d)
    print(path)

    genome = ['-' for _ in range(len(pairs) + k + d + k - 1)]
    print(''.join(genome))
    l, r = path[0]
    for i, (l, r) in enumerate(path):
        for j, c in enumerate(l + '-' * (d + 1) + r):
            if c != '-':
                genome[i + j] = c