From 209cfb94932d0e3b8ecae828dfb6274a58be4a33 Mon Sep 17 00:00:00 2001 From: Hanna Adenholm Date: Wed, 6 Aug 2025 15:31:37 +0200 Subject: [PATCH 1/2] Finished ex --- src/main/java/com/booleanuk/Scrabble.java | 82 ++++++++++++++++++++++- 1 file changed, 80 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/booleanuk/Scrabble.java b/src/main/java/com/booleanuk/Scrabble.java index 88108a8..dba19ff 100644 --- a/src/main/java/com/booleanuk/Scrabble.java +++ b/src/main/java/com/booleanuk/Scrabble.java @@ -1,12 +1,90 @@ package com.booleanuk; +import java.util.HashMap; +import java.util.Map; + public class Scrabble { + private Map values; + private String word; + + public Scrabble(String word) { + this.word = word.toUpperCase(); + values = new HashMap<>(); + values.put('A', 1); + values.put('E', 1); + values.put('I', 1); + values.put('O', 1); + values.put('U', 1); + values.put('L', 1); + values.put('N', 1); + values.put('R', 1); + values.put('S', 1); + values.put('T', 1); + + values.put('D', 2); + values.put('G', 2); + + values.put('B', 3); + values.put('C', 3); + values.put('M', 3); + values.put('P', 3); + + values.put('F', 4); + values.put('H', 4); + values.put('V', 4); + values.put('W', 4); + values.put('Y', 4); + + values.put('K', 5); + + values.put('J', 8); + values.put('X', 8); + + values.put('Q', 10); + values.put('Z', 10); + } + + public int score(){ + if(word.length() == 0) + return 0; + return wordMultiplier(1, word); + } + public int wordMultiplier(int multiplier, String theWord){ + if (theWord.charAt(0) == '{' && theWord.endsWith("}") && theWord.charAt(2) != '}') + return wordMultiplier(2 * multiplier, (String) theWord.subSequence(1, theWord.length()-1)); + else if (theWord.charAt(0) == '[' && theWord.endsWith("]") && theWord.charAt(2) != ']') + return wordMultiplier(3 * multiplier, (String) theWord.subSequence(1, theWord.length()-1)); + else return multiplyWord(multiplier, theWord); } - public int score() { - return -1; + private int multiplyWord(int multiplier, String theWord){ + int score=0; + for (int i = 0; i < theWord.length(); i++) { + if (values.containsKey(theWord.charAt(i))) + score += values.get(theWord.charAt(i)); + else if(theWord.charAt(i) == '{' && theWord.length() >= i+3 && theWord.charAt(i+2) == '}'){ + if (values.containsKey(theWord.charAt(i+1))) { + score += values.get(theWord.charAt(i + 1)) * 2; + i += 2; + } + else + return 0; + } + else if(theWord.charAt(i) == '[' && theWord.length() >= i+3 && theWord.charAt(i+2) == ']'){ + if (values.containsKey(theWord.charAt(i+1))) { + score += values.get(theWord.charAt(i + 1)) * 3; + i += 2; + } + else + return 0; + } + else { + return 0; + } + } + return score * multiplier; } } From 2ee3d7a2ac9e9f99cf85121fa8e1832b4a41b585 Mon Sep 17 00:00:00 2001 From: Hanna Adenholm Date: Thu, 7 Aug 2025 08:21:36 +0200 Subject: [PATCH 2/2] slight improvement --- src/main/java/com/booleanuk/Scrabble.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/booleanuk/Scrabble.java b/src/main/java/com/booleanuk/Scrabble.java index dba19ff..f10ae76 100644 --- a/src/main/java/com/booleanuk/Scrabble.java +++ b/src/main/java/com/booleanuk/Scrabble.java @@ -48,18 +48,18 @@ public Scrabble(String word) { public int score(){ if(word.length() == 0) return 0; - return wordMultiplier(1, word); + return wordMultiplier(word); } - public int wordMultiplier(int multiplier, String theWord){ + public int wordMultiplier(String theWord){ if (theWord.charAt(0) == '{' && theWord.endsWith("}") && theWord.charAt(2) != '}') - return wordMultiplier(2 * multiplier, (String) theWord.subSequence(1, theWord.length()-1)); + return 2 * wordMultiplier((String) theWord.subSequence(1, theWord.length()-1)); else if (theWord.charAt(0) == '[' && theWord.endsWith("]") && theWord.charAt(2) != ']') - return wordMultiplier(3 * multiplier, (String) theWord.subSequence(1, theWord.length()-1)); - else return multiplyWord(multiplier, theWord); + return 3 * wordMultiplier((String) theWord.subSequence(1, theWord.length()-1)); + else return scoreLetters(theWord); } - private int multiplyWord(int multiplier, String theWord){ + private int scoreLetters(String theWord){ int score=0; for (int i = 0; i < theWord.length(); i++) { if (values.containsKey(theWord.charAt(i))) @@ -84,7 +84,7 @@ else if(theWord.charAt(i) == '[' && theWord.length() >= i+3 && theWord.charAt(i+ return 0; } } - return score * multiplier; + return score; } }