ðŸŽ‰ Exercism Research is now launched. Help Exercism, help science and have some fun at research.exercism.io ðŸŽ‰

# ErikSchierboom's solution

## to Scrabble Score in the Nim Track

Published at Sep 14 2020 · 0 comments
Instructions
Test suite
Solution

#### Note:

This exercise has changed since this solution was written.

Given a word, compute the Scrabble score for that word.

## Letter Values

You'll need these:

``````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.

## Running the tests

To compile and run the tests, just run the following in your exercise directory:

``````\$ nim c -r scrabble_score_test.nim
``````

## Submitting Exercises

Note that, when trying to submit an exercise, make sure the solution is in the `\$EXERCISM_WORKSPACE/nim/scrabble-score` directory.

You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Exercises Directory`.

## Source

Inspired by the Extreme Startup game https://github.com/rchatley/extreme_startup

## Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

### scrabble_score_test.nim

``````import unittest
import scrabble_score

# version 1.1.0

suite "Scrabble Score":
test "lowercase letter":
check score("a") == 1

test "uppercase letter":
check score("A") == 1

test "valuable letter":
check score("f") == 4

test "short word":
check score("at") == 2

test "short, valuable word":
check score("zoo") == 12

test "medium word":
check score("street") == 6

test "medium, valuable word":
check score("quirky") == 22

test "long, mixed-case word":
check score("OxyphenButazone") == 41

test "english-like word":
check score("pinata") == 8

test "empty input":
check score("") == 0

test "entire alphabet available":
check score("abcdefghijklmnopqrstuvwxyz") == 87``````
``````import strutils

proc score(letter: char): int =
case letter.toUpperAscii
of 'D', 'G': 2
of 'B', 'C', 'M', 'P': 3
of 'F', 'H', 'V', 'W', 'Y': 4
of 'K': 5
of 'J', 'X': 8
of 'Q', 'Z': 10
else: 1

proc score*(word: string): int =
for letter in word:
result.inc letter.score``````