From c1a022867db01df56d0a224709a0447e009cdc29 Mon Sep 17 00:00:00 2001 From: Jim Infield Date: Sun, 6 Mar 2016 00:46:23 -0600 Subject: [PATCH] Initial commit --- README.md | 33 +++++++++++++++++++++++++++++++++ cases_test.go | 25 +++++++++++++++++++++++++ raindrops.go | 9 +++++++++ raindrops_test.go | 25 +++++++++++++++++++++++++ 4 files changed, 92 insertions(+) create mode 100644 README.md create mode 100644 cases_test.go create mode 100644 raindrops.go create mode 100644 raindrops_test.go diff --git a/README.md b/README.md new file mode 100644 index 0000000..dc3d168 --- /dev/null +++ b/README.md @@ -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://exercism.io/languages/go). + +## Source + +A variation on a famous interview question intended to weed out potential candidates. [view source](http://jumpstartlab.com) diff --git a/cases_test.go b/cases_test.go new file mode 100644 index 0000000..e551032 --- /dev/null +++ b/cases_test.go @@ -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"}, +} diff --git a/raindrops.go b/raindrops.go new file mode 100644 index 0000000..653a331 --- /dev/null +++ b/raindrops.go @@ -0,0 +1,9 @@ +// +build !example + +package raindrops + +const testVersion = 2 + +func Convert(int) string + +// The test program has a benchmark too. How fast does your Convert convert? diff --git a/raindrops_test.go b/raindrops_test.go new file mode 100644 index 0000000..befa699 --- /dev/null +++ b/raindrops_test.go @@ -0,0 +1,25 @@ +package raindrops + +import "testing" + +const targetTestVersion = 2 + +func TestConvert(t *testing.T) { + if testVersion != targetTestVersion { + t.Fatalf("Found testVersion = %v, want %v", testVersion, targetTestVersion) + } + 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) + } + } +}