Initial Commit

This commit is contained in:
2016-08-13 18:20:14 -05:00
commit 50f4a86fd8
408 changed files with 15301 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
# Scrabble Score
Write a program that, given a word, computes the scrabble score for that word.
## Letter Values
You'll need these:
```plain
Letter Value
A, E, I, O, U, L, N, R, S, T 1
D, G 2
B, C, M, P 3
F, H, V, W, Y 4
K 5
J, X 8
Q, Z 10
```
## Examples
"cabbage" should be scored as worth 14 points:
- 3 points for C
- 1 point for A, twice
- 3 points for B, twice
- 2 points for G
- 1 point for E
And to total:
- `3 + 2*1 + 2*3 + 2 + 1`
- = `3 + 2 + 6 + 3`
- = `5 + 9`
- = 14
## Extensions
- You can play a `:double` or a `:triple` letter.
- You can play a `:double` or a `:triple` word.
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
Inspired by the Extreme Startup game [view source](https://github.com/rchatley/extreme_startup)

View File

@@ -0,0 +1,24 @@
package scrabble_score
import "strings"
// Score takes a word and returns the
// Scrabble score for that word
func Score(word string) int {
word = strings.ToUpper(word)
letterValues := map[rune]int{
'A': 1, 'E': 1, 'I': 1, 'O': 1, 'U': 1,
'L': 1, 'N': 1, 'R': 1, 'S': 1, 'T': 1,
'D': 2, 'G': 2,
'B': 3, 'C': 3, 'M': 3, 'P': 3,
'F': 4, 'H': 4, 'V': 4, 'W': 4, 'Y': 4,
'K': 5,
'J': 8, 'X': 8,
'Q': 10, 'Z': 10,
}
var ret int
for _, ch := range word {
ret += letterValues[ch]
}
return ret
}

View File

@@ -0,0 +1,33 @@
package scrabble_score
import "testing"
var tests = []struct {
input string
expected int
}{
{"", 0},
{" \t\n", 0},
{"a", 1},
{"f", 4},
{"street", 6},
{"quirky", 22},
{"oxyphenbutazone", 41},
{"alacrity", 13},
}
func TestScore(t *testing.T) {
for _, test := range tests {
if actual := Score(test.input); actual != test.expected {
t.Errorf("Score(%q) expected %d, Actual %d", test.input, test.expected, actual)
}
}
}
func BenchmarkScore(b *testing.B) {
for i := 0; i < b.N; i++ {
for _, test := range tests {
Score(test.input)
}
}
}