コード例 #1
0
ファイル: subtree.go プロジェクト: nkitchen/rosalind
func main() {
	flag.Parse()
	size, _ := strconv.Atoi(flag.Arg(0))

	br := bufio.NewReader(os.Stdin)

	line, _ := br.ReadString('\n')
	taxa := strings.Fields(line)

	taxaToKeep := taxa[:size]
	taxaMap := map[string]bool{}
	for _, taxon := range taxaToKeep {
		taxaMap[taxon] = true
	}

	line, _ = br.ReadString('\n')
	t1, _ := tree.ReadNewick(strings.NewReader(line))
	s1 := tree.CollapseUnrootedBinary(t1, taxaMap)

	line, _ = br.ReadString('\n')
	t2, _ := tree.ReadNewick(strings.NewReader(line))
	s2 := tree.CollapseUnrootedBinary(t2, taxaMap)

	for _, taxon := range taxaToKeep {
		fmt.Printf("%v ", taxon)
	}
	fmt.Println()
	s1.WriteNewick(os.Stdout)
	fmt.Println()
	s2.WriteNewick(os.Stdout)
	fmt.Println()
}
コード例 #2
0
ファイル: sptd.go プロジェクト: nkitchen/rosalind
func main() {
	br := bufio.NewReader(os.Stdin)

	line, _ := br.ReadString('\n')
	taxa := strings.Fields(line)
	taxaInv := map[string]int{}
	for i, taxon := range taxa {
		taxaInv[taxon] = i
	}

	line, _ = br.ReadString('\n')
	t1, _ := tree.ReadNewick(strings.NewReader(line))
	line, _ = br.ReadString('\n')
	t2, _ := tree.ReadNewick(strings.NewReader(line))

	splits1 := phylo.Splits(t1, taxaInv)
	splits2 := phylo.Splits(t2, taxaInv)
	normalize(splits1)
	normalize(splits2)

	m1 := map[string]bool{}
	for _, a := range splits1 {
		m1[string(a)] = true
	}

	shared := 0
	for _, a := range splits2 {
		if m1[string(a)] {
			shared++
		}
	}

	d := 2 * (len(taxa) - 3 - shared)
	fmt.Println(d)
}
コード例 #3
0
ファイル: qrtd.go プロジェクト: nkitchen/rosalind
func main() {
	verify := flag.Bool("verify", false, "Check the distance for correctness")
	memprof := flag.String("memprof", "", "Write memory profile to this file")
	flag.Parse()

	br := bufio.NewReader(os.Stdin)

	line, _ := br.ReadString('\n')
	taxa := strings.Fields(line)
	taxaInv := map[string]int{}
	for i, taxon := range taxa {
		taxaInv[taxon] = i
	}

	line, _ = br.ReadString('\n')
	t1, err := tree.ReadNewick(strings.NewReader(line))
	if err != nil {
		panic(err)
	}
	line, _ = br.ReadString('\n')
	t2, err := tree.ReadNewick(strings.NewReader(line))
	if err != nil {
		panic(err)
	}

	d := phylo.QuartetDistance(t1, t2, len(taxa))
	fmt.Println(d)

	if *verify {
		d2 := distanceFromSplits(t1, t2, taxaInv)
		fmt.Println("From splits:", d2)
		if d == d2 {
			fmt.Println("ok")
		} else {
			fmt.Println("mismatch")
			os.Exit(1)
		}
	}

	if *memprof != "" {
		f, err := os.Create(*memprof)
		if err != nil {
			log.Fatal(err)
		}
		defer f.Close()
		pprof.Lookup("heap").WriteTo(f, 0)
	}
}
コード例 #4
0
ファイル: nwck.go プロジェクト: nkitchen/rosalind
func main() {
	br := bufio.NewReader(os.Stdin)

	for {
		input, err := br.ReadString(';')
		if err == io.EOF {
			break
		}
		if err != nil {
			log.Fatal(err)
		}
		t, err := tree.ReadNewick(strings.NewReader(input))
		if err != nil {
			log.Fatal(err)
		}
		_, _ = br.ReadString('\n')

		line, err := br.ReadString('\n')
		if err != nil {
			log.Fatal(err)
		}
		labels := strings.Fields(line)
		fmt.Print(t.Distance(labels[0], labels[1]), " ")

		buf, _ := br.Peek(1)
		if len(buf) > 0 && buf[0] == '\n' {
			_, _ = br.ReadByte()
		}
	}
	fmt.Println()
}
コード例 #5
0
ファイル: cntq.go プロジェクト: nkitchen/rosalind
func main() {
	br := bufio.NewReader(os.Stdin)

	_, _ = br.ReadString('\n')

	t, _ := tree.ReadNewick(br)

	countLeaves(t)
	e := tree.Edge{t, 0}
	_, q := countPQ(e, 0, 0)
	fmt.Println(q)
}
コード例 #6
0
ファイル: alph.go プロジェクト: nkitchen/rosalind
func main() {
	br := bufio.NewReader(os.Stdin)

	line, _ := br.ReadString('\n')
	t, err := tree.ReadNewick(strings.NewReader(line))
	if err != nil {
		log.Fatal(err)
	}

	fasta, err := gene.ReadAllFasta(br)
	if err != nil {
		log.Fatal(err)
	}

	for _, f := range fasta {
		dna[f.Description] = f.Data
	}
	n = len(fasta[0].Data)

	d := bestDistances(t)
	where := make([]int32, n)
	total := float32(0)
	for i := 0; i < n; i++ {
		bestDist := d[i][0]
		where[i] = 0
		for j := int32(1); j < 5; j++ {
			if d[i][j] < bestDist {
				bestDist = d[i][j]
				where[i] = j
			}
		}
		total += bestDist
	}

	fmt.Println(total)
	collectBestDna(t, where)
}
コード例 #7
0
ファイル: mend.go プロジェクト: nkitchen/rosalind
func main() {
	pedigree, _ := tree.ReadNewick(os.Stdin)

	fmt.Println(genotypeDistribution(pedigree))
}