def median(dnas, k): kmers = set() for dna in dnas: substr_kmers = set(["".join(x) for x in window(dna, k)]) for kmer in substr_kmers: kmers.update(set(generate_words_with_mismatches(kmer, k))) opt_kmer = '' opt_distance = len(dnas)*k + 1 for kmer in kmers: if opt_distance > d(kmer, dnas, k): opt_distance = d(kmer, dnas, k) opt_kmer = kmer return opt_kmer, opt_distance
def median(dnas, k): kmers = set() for dna in dnas: substr_kmers = set(["".join(x) for x in window(dna, k)]) for kmer in substr_kmers: kmers.update(set(generate_words_with_mismatches(kmer, k))) opt_kmer = '' opt_distance = len(dnas) * k + 1 for kmer in kmers: if opt_distance > d(kmer, dnas, k): opt_distance = d(kmer, dnas, k) opt_kmer = kmer return opt_kmer, opt_distance
def enumerate_motifs(dnas, k, d): kmers = [] for text in dnas: kmers.extend(["".join(x) for x in window(text, k)]) resulting_set = set() for kmer in kmers: for modified_kmer in generate_words_with_mismatches(kmer, d): will_add = True for text in dnas: was_found = False for fragment in ["".join(x) for x in window(text, k)]: if hamming_distance(fragment, modified_kmer) <= d: was_found = True break if not was_found: will_add = False break if will_add: resulting_set.add(modified_kmer) return list(resulting_set)
max_count = 0 visited_kmers = set() for kmer in kmers: app = approx_pattern_count(text, kmer, d) + approx_pattern_count( text, reverse_dna(kmer), d) if app > 0 and kmer not in visited_kmers: if kmer not in count_dict: count_dict[kmer] = 0 count_dict[kmer] += app if count_dict[kmer] > max_count: max_count = count_dict[kmer] result = [key for key in count_dict if count_dict[key] == max_count] return result, max_count if __name__ == '__main__': with open('in.txt', 'r') as f: text = f.readline().strip() k, d = map(int, f.readline().split()) substr_kmers = set(["".join(x) for x in window(text, k)]) kmers = set() for kmer in substr_kmers: kmers.update(set(generate_words_with_mismatches(kmer, d))) result, max_count = frequent_words_with_mismatch(text, kmers, d) with open('out.txt', 'w') as f: f.write(str(' '.join(result)))
max_count = 0 visited_kmers = set() for kmer in kmers: app = approx_pattern_count(text, kmer, d) + approx_pattern_count(text, reverse_dna(kmer), d) if app > 0 and kmer not in visited_kmers: if kmer not in count_dict: count_dict[kmer] = 0 count_dict[kmer] += app if count_dict[kmer] > max_count: max_count = count_dict[kmer] result = [key for key in count_dict if count_dict[key] == max_count] return result, max_count if __name__ == '__main__': with open('in.txt', 'r') as f: text = f.readline().strip() k, d = map(int, f.readline().split()) substr_kmers = set(["".join(x) for x in window(text, k)]) kmers = set() for kmer in substr_kmers: kmers.update(set(generate_words_with_mismatches(kmer, d))) result, max_count = frequent_words_with_mismatch(text, kmers, d) with open('out.txt', 'w') as f: f.write(str(' '.join(result)))