summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-11-11 16:43:31 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-11-11 16:43:31 +0100
commitb1f583939a93886813088ebba1d0e996688437c3 (patch)
treec6b99055cdc75c74a1a2cbb9779a0a67ade3b1f1
parentebc1dfba521f94934b433a6caba927ebb7ae2b78 (diff)
Solve Nucleotide Count
-rw-r--r--go/nucleotide-count/nucleotide_count.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/go/nucleotide-count/nucleotide_count.go b/go/nucleotide-count/nucleotide_count.go
new file mode 100644
index 0000000..8d2fda6
--- /dev/null
+++ b/go/nucleotide-count/nucleotide_count.go
@@ -0,0 +1,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
+}