Initial Commit
This commit is contained in:
52
go/scrabble-score/README.md
Normal file
52
go/scrabble-score/README.md
Normal 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)
|
24
go/scrabble-score/scrabble_score.go
Normal file
24
go/scrabble-score/scrabble_score.go
Normal 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
|
||||
}
|
33
go/scrabble-score/scrabble_score_test.go
Normal file
33
go/scrabble-score/scrabble_score_test.go
Normal 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)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user