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)))
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)
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):
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()
#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
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(',')))))
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(",")))))
# 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