summaryrefslogtreecommitdiff
path: root/go/nucleotide-count/nucleotide_count.go
blob: 8d2fda631407551397108b643d560332f6cefedb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package dna

import "errors"

const testVersion = 2

var ErrInvalid = errors.New("invalid")

type Histogram map[byte]int
type DNA string

func (d DNA) Count(b byte) (int, error) {
	h, err := d.Counts()
	if err != nil {
		return 0, err
	}
	if v, ok := h[b]; ok {
		return v, nil
	}
	return 0, ErrInvalid
}

func (d DNA) Counts() (Histogram, error) {
	h := Histogram{'A': 0, 'C': 0, 'G': 0, 'T': 0}
	for _, v := range d {
		b := byte(v)
		if _, ok := h[b]; !ok {
			return nil, ErrInvalid
		}
		h[b]++
	}
	return h, nil
}