# http://rosalind.info/problems/rsub/ import newick, fasta def find_rev(t,dnas): r = [] for i in range(len(dnas[t.u])): r += [(p[0],p[-1],i,dnas[p[0].u][i]) for p in t.find_rev(dnas,i)] return r if __name__ == '__main__': with open('rosalind_rsub.txt') as f: nw = f.readline() nw.split() tree = newick.newick_parse(nw) fst = f.read() dnas,_ = fasta.parse_fasta(fst) nodes = tree.nodes() for node in nodes: revs = find_rev(node,dnas) for fc, dest, pos, mid in revs: print("%s %s %d %s->%s->%s" % (fc.u, dest.u, pos + 1, dnas[node.u][pos], mid, dnas[dest.u][pos])) assert(dnas[node.u][pos] == dnas[dest.u][pos])
import newick, fasta def find_rev(t, dnas): r = [] for i in range(len(dnas[t.u])): r += [(p[0], p[-1], i, dnas[p[0].u][i]) for p in t.find_rev(dnas, i)] return r if __name__ == '__main__': with open('rosalind_rsub.txt') as f: nw = f.readline() nw.split() tree = newick.newick_parse(nw) fst = f.read() dnas, _ = fasta.parse_fasta(fst) nodes = tree.nodes() for node in nodes: revs = find_rev(node, dnas) for fc, dest, pos, mid in revs: print("%s %s %d %s->%s->%s" % (fc.u, dest.u, pos + 1, dnas[node.u][pos], mid, dnas[dest.u][pos])) assert (dnas[node.u][pos] == dnas[dest.u][pos])
with open('rosalind_chbp.txt') as f: line = f.readline() line = line.strip() taxa = line.split() initialize(taxa) chars = [] char = f.readline() char = char.strip() while char != "": split(char, taxa) chars.append(char) char = f.readline() char = char.strip() r = internals.pop() output = r.fold() + ";" t = newick.newick_parse(output) r = newick.edge_splits(t, taxa) for char in chars: assert (char in r or invert(char) in r) print output
with open('rosalind_chbp.txt') as f: line = f.readline() line = line.strip() taxa = line.split() initialize(taxa) chars = [] char = f.readline() char = char.strip() while char != "": split(char,taxa) chars.append(char) char = f.readline() char = char.strip() r = internals.pop() output = r.fold() + ";" t = newick.newick_parse(output) r = newick.edge_splits(t,taxa) for char in chars: assert(char in r or invert(char) in r) print output