Rosalind/BA1A/Go
From charlesreid1
ba1a.go
package main
import "fmt"
// Rosalind: Problem BA1A: Most Frequent k-mers
// Describe the problem
func BA1ADescription() {
description := []string{
"-----------------------------------------",
"Rosalind: Problem BA1A:",
"Most Frequest k-mers",
"",
"Given an input string and a length k,",
"report the k-mer or k-mers that occur",
"most frequently.",
"",
"URL: http://rosalind.info/problems/ba1a/",
"",
}
for _, line := range description {
fmt.Println(line)
}
}
// Count occurrences of a substring pattern
// in a string input
func PatternCount(input string, pattern string) int {
// Number of substring overlaps
var overlap = len(input) - len(pattern) + 1
// If overlap < 1, we are looking
// for a pattern longer than our input
if overlap<1 {
return 0
}
// Count of occurrences
count:=0
// Loop over each substring overlap
for i:=0; i<overlap; i++ {
// Grab a slice of the full input
start:=i
end:=i+len(pattern)
var slice = input[start:end]
if slice==pattern {
count += 1
}
}
return count
}
// Describe the problem, and call the function
func BA1A() {
BA1ADescription()
res := PatternCount("GCGCG","GCG")
fmt.Println("PatternCount(GCGCG,GCG) yields:",res)
}
ba1a_test.go
package main
import (
"fmt"
"testing"
)
// To run this test:
//
// $ go test -v -run TestPatternCount
// Run a single test of the PatternCount function
func TestPatternCount(t *testing.T) {
// Call the PatternCount function
input := "GCGCG"
pattern := "GCG"
result := PatternCount(input,pattern)
gold := 2
if result != gold {
err := fmt.Sprintf("Error testing PatternCount(): input = %s, pattern = %s, result = %d (should be %d)",
input, pattern, result, gold)
t.Error(err)
}
}
// Run a test matrix of the PatternCount function
func TestPatternCounts(t *testing.T) {
// Construct a test matrix
var tests = []struct {
input string
pattern string
gold int
}{
{"GCGCG", "GCG", 2},
{"GAGGGGGGGAG", "AGG", 1},
{"GCACGCACGCAC", "GCAC", 3},
{"", "GC", 0},
{"GCG", "GTACTCTC", 0},
{"ACGTACGTACGT", "CG", 3},
{"AAAGAGTGTCTGATAGCAGCTTCTGAACTGGTTACCTGCCGTGAGTAAATTAAATTTTATTGACTTAGGTCACTAAATACTTTAACCAATATAGGCATAGCGCACAGACAGATAATAATTACAGAGTACACAACATCCA",
"AAA", 4},
{"AGCGTGCCGAAATATGCCGCCAGACCTGCTGCGGTGGCCTCGCCGACTTCACGGATGCCAAGTGCATAGAGGAAGCGAGCAAAGGTGGTTTCTTTCGCTTTATCCAGCGCGTTAACCACGTTCTGTGCCGACTTT",
"TTT", 4},
{"GGACTTACTGACGTACG","ACT", 2},
{"ATCCGATCCCATGCCCATG","CC", 5},
{"CTGTTTTTGATCCATGATATGTTATCTCTCCGTCATCAGAAGAACAGTGACGGATCGCCCTCTCTCTTGGTCAGGCGACCGTTTGCCATAATGCCCATGCTTTCCAGCCAGCTCTCAAACTCCGGTGACTCGCGCAGGTTGAGT",
"CTC", 9},
}
for _, test := range tests {
result := PatternCount(test.input, test.pattern)
if result != test.gold {
err := fmt.Sprintf("Error testing PatternCount(): input = %s, pattern = %s, result = %d (should be %d)",
test.input, test.pattern, result, test.gold)
t.Error(err)
}
}
}
Flags
| Go notes on Go
Go/Strings · Go/Arrays · Go/Slices
Go/Lists · Go/Maps · Go/Stacks · Go/Queues
Go/Naming Conventions · Go/Design Patterns
Go/Timing · Go/Profiling · Go/Benchmarking
Go/Tests · Go/Travis CI · Go/Makefiles
our vim + go setup uses custom solarized colors for Golang
|