From 95abe25187619d796101cc223fab1ef5a89b96be Mon Sep 17 00:00:00 2001 From: Wilmer Winkler Date: Wed, 8 Jan 2025 16:44:37 +0100 Subject: [PATCH] Wilmer Winkler --- src/main/java/com/booleanuk/Scrabble.java | 156 +++++++++++++++++++++- 1 file changed, 154 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/booleanuk/Scrabble.java b/src/main/java/com/booleanuk/Scrabble.java index 88108a8..e24fb68 100644 --- a/src/main/java/com/booleanuk/Scrabble.java +++ b/src/main/java/com/booleanuk/Scrabble.java @@ -1,12 +1,164 @@ package com.booleanuk; +import java.util.HashMap; +import java.util.Stack; + public class Scrabble { - public Scrabble(String word) { + Stack bracketStack = new Stack<>(); + boolean inValid = false; + + String word; + HashMap scoringList = new HashMap<>(); + + + public Scrabble(String word) { + scoringList = InitializeMap(); + this.word = word; } public int score() { - return -1; + + int letterCount = 0; + int curlyBracketLetterCount = 0; + int bracketLetterCount = 0; + int pointsMultiplier = 1; + int pointCounter = 0; + char[] charArray = word.toCharArray(); + + for (char c : charArray){ + if(scoringList.containsKey(c)){ + pointCounter += scoringList.get(c) * pointsMultiplier; + letterCount++; + } + else if(c == '{' ){ + + curlyBracketLetterCount = letterCount; + + bracketStack.push(c); + + pointsMultiplier *= 2; + + } + else if(c == '}' ){ + + if (bracketStack.empty()) inValid = true; + + if (!bracketStack.empty()) { + if('[' == bracketStack.peek()){ + inValid = true; + } + else bracketStack.pop(); + } + + curlyBracketLetterCount = letterCount - curlyBracketLetterCount; + + if(curlyBracketLetterCount < letterCount && curlyBracketLetterCount > 1) inValid = true; + + + if(bracketStack.empty()) { + pointsMultiplier = 1; + } + else pointsMultiplier = 3; + } + else if(c == '[' ){ + + bracketLetterCount = letterCount; + + bracketStack.push(c); + + pointsMultiplier *= 3; + + } + else if(c == ']' ){ + + if(bracketStack.empty()) inValid = true; + + bracketLetterCount = letterCount - bracketLetterCount; + + if(bracketLetterCount < letterCount && bracketLetterCount > 1) inValid = true; + + if (!bracketStack.empty()) { + if('{' == bracketStack.peek()){ + inValid = true; + } + else bracketStack.pop(); + } + + + + if(bracketStack.empty()) { + pointsMultiplier = 1; + } + else pointsMultiplier = 2; + + } + else return 0; + } + + if(!bracketStack.isEmpty() || inValid) return 0; + return pointCounter; + } + + public HashMap InitializeMap(){ + HashMap scoringList = new HashMap<>(); + + scoringList.put('A', 1); + scoringList.put('B', 3); + scoringList.put('C', 3); + scoringList.put('D', 2); + scoringList.put('E', 1); + scoringList.put('F', 4); + scoringList.put('G', 2); + scoringList.put('H', 4); + scoringList.put('I', 1); + scoringList.put('J', 8); + scoringList.put('K', 5); + scoringList.put('L', 1); + scoringList.put('M', 3); + scoringList.put('N', 1); + scoringList.put('O', 1); + scoringList.put('P', 3); + scoringList.put('Q', 10); + scoringList.put('R', 1); + scoringList.put('S', 1); + scoringList.put('T', 1); + scoringList.put('U', 1); + scoringList.put('V', 4); + scoringList.put('W', 4); + scoringList.put('X', 8); + scoringList.put('Y', 4); + scoringList.put('Z', 10); + scoringList.put('a', 1); + scoringList.put('b', 3); + scoringList.put('c', 3); + scoringList.put('d', 2); + scoringList.put('e', 1); + scoringList.put('f', 4); + scoringList.put('g', 2); + scoringList.put('h', 4); + scoringList.put('i', 1); + scoringList.put('j', 8); + scoringList.put('k', 5); + scoringList.put('l', 1); + scoringList.put('m', 3); + scoringList.put('n', 1); + scoringList.put('o', 1); + scoringList.put('p', 3); + scoringList.put('q', 10); + scoringList.put('r', 1); + scoringList.put('s', 1); + scoringList.put('t', 1); + scoringList.put('u', 1); + scoringList.put('v', 4); + scoringList.put('w', 4); + scoringList.put('x', 8); + scoringList.put('y', 4); + scoringList.put('z', 10); + + + + return scoringList; } }