 ## to Scrabble Score in the TypeScript Track

Published at May 22 2020 · 0 comments
Instructions
Test suite
Solution

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.

## Setup

Go through the setup instructions for TypeScript to install the necessary dependencies:

https://exercism.io/tracks/typescript/installation

## Requirements

Install assignment dependencies:

``````\$ yarn install
``````

## Making the test suite pass

Execute the tests with:

``````\$ yarn test
``````

In the test suites all tests but the first have been skipped.

Once you get a test passing, you can enable the next one by changing `xit` to `it`.

## 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.ts

``````import score from './scrabble-score'

describe('Scrabble', () => {
it('scores an empty word as zero', () => expect(score('')).toEqual(0))

xit('scores a null as zero', () => expect(score(undefined)).toEqual(0))

xit('scores a very short word', () => expect(score('a')).toEqual(1))

xit('scores the word by the number of letters', () => expect(score('street')).toEqual(6))

xit('scores more complicated words with more', () => expect(score('quirky')).toEqual(22))

xit('scores case insensitive words', () => expect(score('OXYPHENBUTAZONE')).toEqual(41))

})``````
``````type Score = {
[key: string]: string[]
}

const scrabble =  (word: string|undefined) =>{
if(word == undefined){
return 0
}
const scoresLookUp:Score = {
"1": ["A", "E", "I", "O", "U", "L", "N", 'R', 'S', 'T'],
'2': ['D', 'G'],
'3': ['B', 'C', 'M', 'P'],
'4': ['F', 'H', 'V', 'W', 'Y'],
'5': ['K'],
'8': ['J', 'X'],
'10': ['Q', 'Z']
}

let score = new Map();
for (const key in scoresLookUp)
scoresLookUp[key].forEach(letter=> score.set(letter, Number(key)))
let result = 0;

[...word.toUpperCase()].forEach(letter=> result += (score.get(letter)) ? score.get(letter):0 )
return result;
}
export default scrabble``````