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

Version Path
trackler-2.2.1.92 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.91 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.90 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.89 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.88 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.87 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.86 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.85 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.84 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.83 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.82 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.81 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.80 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.79 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.78 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.77 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.76 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.75 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.74 tracks/go/exercises/nucleotide-count/example.go
trackler-2.2.1.73 tracks/go/exercises/nucleotide-count/example.go