Initial Commit
This commit is contained in:
33
go/raindrops/README.md
Normal file
33
go/raindrops/README.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# Raindrops
|
||||
|
||||
Write a program that converts a number to a string, the contents of which depends on the number's prime factors.
|
||||
|
||||
- If the number contains 3 as a prime factor, output 'Pling'.
|
||||
- If the number contains 5 as a prime factor, output 'Plang'.
|
||||
- If the number contains 7 as a prime factor, output 'Plong'.
|
||||
- If the number does not contain 3, 5, or 7 as a prime factor,
|
||||
just pass the number's digits straight through.
|
||||
|
||||
## Examples
|
||||
|
||||
- 28's prime-factorization is 2, 2, 7.
|
||||
- In raindrop-speak, this would be a simple "Plong".
|
||||
- 1755 prime-factorization is 3, 3, 3, 5, 13.
|
||||
- In raindrop-speak, this would be a "PlingPlang".
|
||||
- The prime factors of 34 are 2 and 17.
|
||||
- Raindrop-speak doesn't know what to make of that,
|
||||
so it just goes with the straightforward "34".
|
||||
|
||||
To run the tests simply run the command `go test` in the exercise directory.
|
||||
|
||||
If the test suite contains benchmarks, you can run these with the `-bench`
|
||||
flag:
|
||||
|
||||
go test -bench .
|
||||
|
||||
For more detailed info about the Go track see the [help
|
||||
page](http://help.exercism.io/getting-started-with-go.html).
|
||||
|
||||
## Source
|
||||
|
||||
A variation on a famous interview question intended to weed out potential candidates. [view source](http://jumpstartlab.com)
|
25
go/raindrops/cases_test.go
Normal file
25
go/raindrops/cases_test.go
Normal file
@@ -0,0 +1,25 @@
|
||||
package raindrops
|
||||
|
||||
// Source: exercism/x-common
|
||||
// Commit: 3b07e53 Merge pull request #117 from mikeyjcat/add-raindrops-json
|
||||
|
||||
var tests = []struct {
|
||||
input int
|
||||
expected string
|
||||
}{
|
||||
{1, "1"},
|
||||
{3, "Pling"},
|
||||
{5, "Plang"},
|
||||
{7, "Plong"},
|
||||
{6, "Pling"},
|
||||
{9, "Pling"},
|
||||
{10, "Plang"},
|
||||
{14, "Plong"},
|
||||
{15, "PlingPlang"},
|
||||
{21, "PlingPlong"},
|
||||
{25, "Plang"},
|
||||
{35, "PlangPlong"},
|
||||
{49, "Plong"},
|
||||
{52, "52"},
|
||||
{105, "PlingPlangPlong"},
|
||||
}
|
26
go/raindrops/raindrops.go
Normal file
26
go/raindrops/raindrops.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package raindrops
|
||||
|
||||
import "fmt"
|
||||
|
||||
// TestVersion
|
||||
const TestVersion = 1
|
||||
|
||||
// Convert takes a number and returns Raindrop-speak
|
||||
func Convert(i int) string {
|
||||
var ret string
|
||||
if i%3 == 0 {
|
||||
ret += "Pling"
|
||||
}
|
||||
if i%5 == 0 {
|
||||
ret += "Plang"
|
||||
}
|
||||
if i%7 == 0 {
|
||||
ret += "Plong"
|
||||
}
|
||||
if ret != "" {
|
||||
return ret
|
||||
}
|
||||
return fmt.Sprintf("%d", i)
|
||||
}
|
||||
|
||||
// The test program has a benchmark too. How fast does your Convert convert?
|
28
go/raindrops/raindrops_test.go
Normal file
28
go/raindrops/raindrops_test.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package raindrops
|
||||
|
||||
import "testing"
|
||||
|
||||
const testVersion = 1
|
||||
|
||||
// Retired testVersions
|
||||
// (none) 52fb31c169bc1b540109028f33f4f61b5f429753
|
||||
|
||||
func TestConvert(t *testing.T) {
|
||||
if TestVersion != testVersion {
|
||||
t.Fatalf("Found TestVersion = %v, want %v", TestVersion, testVersion)
|
||||
}
|
||||
for _, test := range tests {
|
||||
if actual := Convert(test.input); actual != test.expected {
|
||||
t.Errorf("Convert(%d) = %q, expected %q.",
|
||||
test.input, actual, test.expected)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkConvert(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
for _, test := range tests {
|
||||
Convert(test.input)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user