Skip to content

Instantly share code, notes, and snippets.

@zantetsuken88
Last active August 8, 2018 13:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zantetsuken88/2251ffe13bb0950601a32b5bccb05075 to your computer and use it in GitHub Desktop.
Save zantetsuken88/2251ffe13bb0950601a32b5bccb05075 to your computer and use it in GitHub Desktop.
ScrabbleScore
import java.util.HashMap;
import java.util.List;
class Scrabble {
private static final HashMap<Character, Integer> SCORE_MAP = new HashMap<Character, Integer>() {{
put('a', 1);
put('b', 3);
put('c', 3);
put('d', 2);
put('e', 1);
put('f', 4);
put('g', 2);
put('h', 4);
put('i', 1);
put('j', 8);
put('k', 5);
put('l', 1);
put('m', 3);
put('n', 1);
put('o', 1);
put('p', 3);
put('q', 10);
put('r', 1);
put('s', 1);
put('t', 1);
put('u', 1);
put('v', 4);
put('w', 4);
put('x', 8);
put('y', 4);
put('z', 10);
}};
public enum WordMultiplier {
SINGLE(1),
DOUBLE(2),
TRIPLE(3);
private final int multiplier;
WordMultiplier(int multiplier) {
this.multiplier = multiplier;
}
}
public enum LetterMultiplier {
SINGLE(1),
DOUBLE(2),
TRIPLE(3);
private final int letterMultiplier;
LetterMultiplier(int letterMultiplier) {
this.letterMultiplier = letterMultiplier;
}
}
private String word;
private WordMultiplier multiplier;
private List<LetterMultiplier> letterMultipliers;
Scrabble(String word) {
this(word, WordMultiplier.SINGLE);
}
Scrabble(String word, Scrabble.WordMultiplier multiplier) {
this.word = word;
this.multiplier = multiplier;
}
Scrabble(String word, Scrabble.WordMultiplier multiplier, List<LetterMultiplier> letterMultipliers) {
this.word = word;
this.multiplier = multiplier;
this.letterMultipliers = letterMultipliers;
}
int getScore() {
char[] wordChars = word.toLowerCase().toCharArray();
int score = 0;
int i = 0;
for (char c : wordChars) {
if (letterMultipliers != null) {
score += SCORE_MAP.get(c) * letterMultipliers.get(i).letterMultiplier;
} else {
score += SCORE_MAP.get(c);
}
i++;
}
return score * multiplier.multiplier;
}
}
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertEquals;
public class ScrabbleScoreTest {
private Scrabble scrabble;
private Scrabble.LetterMultiplier one = Scrabble.LetterMultiplier.SINGLE;
private Scrabble.LetterMultiplier two = Scrabble.LetterMultiplier.DOUBLE;
private Scrabble.LetterMultiplier three = Scrabble.LetterMultiplier.TRIPLE;
@Test
public void testALowerCaseLetter() {
scrabble = new Scrabble("a");
assertEquals(1, scrabble.getScore());
}
@Test
public void testAUpperCaseLetter() {
scrabble = new Scrabble("A");
assertEquals(1, scrabble.getScore());
}
@Test
public void testAValuableLetter() {
scrabble = new Scrabble("f");
assertEquals(4, scrabble.getScore());
}
@Test
public void testAShortWord() {
scrabble = new Scrabble("at");
assertEquals(2, scrabble.getScore());
}
@Test
public void testAShortValuableWord() {
scrabble = new Scrabble("zoo");
assertEquals(12, scrabble.getScore());
}
@Test
public void testAMediumWord() {
scrabble = new Scrabble("street");
assertEquals(6, scrabble.getScore());
}
@Test
public void testAMediumValuableWord() {
scrabble = new Scrabble("quirky");
assertEquals(22, scrabble.getScore());
}
@Test
public void testALongMixCaseWord() {
scrabble = new Scrabble("OxyphenButazone");
assertEquals(41, scrabble.getScore());
}
@Test
public void testAEnglishLikeWord() {
scrabble = new Scrabble("pinata");
assertEquals(8, scrabble.getScore());
}
@Test
public void testAnEmptyInput() {
scrabble = new Scrabble("");
assertEquals(0, scrabble.getScore());
}
@Test
public void testEntireAlphabetAvailable() {
scrabble = new Scrabble("abcdefghijklmnopqrstuvwxyz");
assertEquals(87, scrabble.getScore());
}
@Test
public void testDoubleWord() {
scrabble = new Scrabble("abcdefghijklmnopqrstuvwxyz", Scrabble.WordMultiplier.DOUBLE);
assertEquals(174, scrabble.getScore());
}
@Test
public void testTripleWord() {
scrabble = new Scrabble("abcdefghijklmnopqrstuvwxyz", Scrabble.WordMultiplier.TRIPLE);
assertEquals(261, scrabble.getScore());
}
@Test
public void testDoubleLetters() {
List<Scrabble.LetterMultiplier> letterMultipliers = Arrays.asList(one, two, one, one, two, one);
scrabble = new Scrabble("double", Scrabble.WordMultiplier.DOUBLE, letterMultipliers);
assertEquals(22, scrabble.getScore());
}
@Test
public void testTripleLetters() {
List<Scrabble.LetterMultiplier> letterMultipliers = Arrays.asList(one, two, one, one, three, one);
scrabble = new Scrabble("triple", Scrabble.WordMultiplier.SINGLE, letterMultipliers);
assertEquals(11, scrabble.getScore());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment