Sha256: 4ea4d8597834b39b0eb14e38ed3552a187c44bee037ca59ed5c95758fb8e3d84
Contents?: true
Size: 1005 Bytes
Versions: 36
Compression:
Stored size: 1005 Bytes
Contents
package dna import ( "errors" "strings" ) // Histogram is a mapping from nucleotide to its count in given DNA type Histogram map[byte]int // DNA is a list of nucleotides type DNA string const validNucleotides = "ACGT" // Count counts number of occurrences of given nucleotide in given DNA func (dna DNA) Count(nucleotide byte) (count int, err error) { if !strings.Contains(validNucleotides, string(nucleotide)) { return 0, errors.New("dna: invalid nucleotide " + string(nucleotide)) } return strings.Count(string(dna), string(nucleotide)), nil } // Counts generates a histogram of valid nucleotides in given DNA. // Returns error if DNA contains invalid nucleotide. func (dna DNA) Counts() (Histogram, error) { var total int h := Histogram{} for i := range validNucleotides { nucleotide := validNucleotides[i] h[nucleotide], _ = dna.Count(nucleotide) total += h[nucleotide] } if total != len(dna) { return nil, errors.New("dna: contains invalid nucleotide") } return h, nil }
Version data entries
36 entries across 36 versions & 1 rubygems