# Hoang's solution

## to Scrabble Score in the Ruby Track

Published at Nov 28 2019 · 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.

For installation and learning resources, refer to the Ruby resources page.

For running the tests provided, you will need the Minitest gem. Open a terminal window and run the following command to install minitest:

``````gem install minitest
``````

If you would like color output, you can `require 'minitest/pride'` in the test file, or note the alternative instruction, below, for running the test file.

Run the tests from the exercise directory using the following command:

``````ruby scrabble_score_test.rb
``````

To include color from the command line:

``````ruby -r minitest/pride scrabble_score_test.rb
``````

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

``````require 'minitest/autorun'
require_relative 'scrabble_score'

class ScrabbleTest < Minitest::Test
def test_empty_word_scores_zero
assert_equal 0, Scrabble.new('').score
end

def test_whitespace_scores_zero
skip
assert_equal 0, Scrabble.new(" \t\n").score
end

def test_nil_scores_zero
skip
assert_equal 0, Scrabble.new(nil).score
end

def test_scores_very_short_word
skip
assert_equal 1, Scrabble.new('a').score
end

def test_scores_other_very_short_word
skip
assert_equal 4, Scrabble.new('f').score
end

def test_simple_word_scores_the_number_of_letters
skip
assert_equal 6, Scrabble.new('street').score
end

def test_complicated_word_scores_more
skip
assert_equal 22, Scrabble.new('quirky').score
end

def test_scores_are_case_insensitive
skip
assert_equal 41, Scrabble.new('OXYPHENBUTAZONE').score
end

def test_convenient_scoring
skip
assert_equal 13, Scrabble.score('alacrity')
end
end``````
``````=begin
Write your code for the 'Scrabble Score' exercise in this file. Make the tests in
`scrabble_score_test.rb` pass.

To get started with TDD, see the `README.md` file in your
`ruby/scrabble-score` directory.
=end

class Scrabble
SCORE = {
"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
}

def initialize(input)
@input = input
end

def score
# 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
#

# first solution
#
# one_point = %w(A E I O U L N R S T)
# two_point = %w(D G)
# three_point = %w(B C M P)
# four_point = %w(F H V W Y)
# five_point = %w(K)
# eight_point = %w(J X)
# ten_point = %w(Q Z)
# total_point = 0
# @input.to_s.upcase.chars.each do |char|
#   total_point += 1 if one_point.include?(char)
#   total_point += 2 if two_point.include?(char)
#   total_point += 3 if three_point.include?(char)
#   total_point += 4 if four_point.include?(char)
#   total_point += 5 if five_point.include?(char)
#   total_point += 8 if eight_point.include?(char)
#   total_point += 10 if ten_point.include?(char)
# end
# total_point

# first solution end

# second solution
total_point = 0
@input.to_s.gsub(/[^\w]/, "").upcase.chars.each do |char|
total_point += SCORE[char]
end
total_point
end

def self.score(input)
new(input).score
end
end``````