From 0563ac93a2dd9bbcfbf605348b1bcf8370eed299 Mon Sep 17 00:00:00 2001 From: Mattias Hedbom Date: Wed, 8 Jan 2025 20:48:31 +0100 Subject: [PATCH 1/3] Scrabble challenge, core exercise completed. Did not manage to complete all the extensions. --- src/main/java/com/booleanuk/Scrabble.java | 124 +++++++++++++++++++++- 1 file changed, 123 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/Scrabble.java b/src/main/java/com/booleanuk/Scrabble.java index 88108a8..7af886c 100644 --- a/src/main/java/com/booleanuk/Scrabble.java +++ b/src/main/java/com/booleanuk/Scrabble.java @@ -1,12 +1,134 @@ package com.booleanuk; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; + public class Scrabble { + HashMap, Integer> map = new HashMap<>(); + + /*ArrayList point1 = new ArrayList<>(Arrays.asList('A', 'E', 'I', 'O', 'U', 'L', 'N', 'R', 'S', 'T')); + ArrayList point2 = new ArrayList<>(Arrays.asList('D', 'G')); + ArrayList point3 = new ArrayList<>(Arrays.asList('B', 'C', 'M', 'P')); + ArrayList point4 = new ArrayList<>(Arrays.asList('F', 'H', 'V', 'W', 'Y')); + ArrayList point5 = new ArrayList<>(Arrays.asList('K')); + ArrayList point8 = new ArrayList<>(Arrays.asList('J', 'X')); + ArrayList point10 = new ArrayList<>(Arrays.asList('Q', 'Z'));*/ + + ArrayList point1 = new ArrayList<>(Arrays.asList("A", "E", "I", "O", "U", "L", "N", "R", "S", "T")); + ArrayList point2 = new ArrayList<>(Arrays.asList("D", "G")); + ArrayList point3 = new ArrayList<>(Arrays.asList("B", "C", "M", "P")); + ArrayList point4 = new ArrayList<>(Arrays.asList("F", "H", "V", "W", "Y")); + ArrayList point5 = new ArrayList<>(Arrays.asList("K")); + ArrayList point8 = new ArrayList<>(Arrays.asList("J", "X")); + ArrayList point10 = new ArrayList<>(Arrays.asList("Q", "Z")); + int points = 0; + public Scrabble(String word) { + map.put(point1, 1); + map.put(point2, 2); + map.put(point3, 3); + map.put(point4, 4); + map.put(point5, 5); + map.put(point8, 8); + map.put(point10, 10); + + if(!word.trim().isEmpty()){ + + for(ArrayList listOfChars : map.keySet()){ + + for(String aString : listOfChars){ + + for(int i = 0; i < word.length(); i++){ + if(!word.matches("a-zA-Z")){ + + } + + + if(aString.toLowerCase().charAt(0)==(word.toLowerCase().charAt(i))){ + points = points + map.get(listOfChars); + System.out.println( "nu blev det " + map.get(listOfChars) + "poäng! för bokstaven: " + aString); + System.out.println("Tot poäng: " + points); + + + + if(i > 0 && i < word.length() -1){ + if(word.charAt(i-1) == '{' && word.charAt(i+1) == '}'){ + points = points + map.get(listOfChars); + System.out.println( "nu blev det " + map.get(listOfChars) + "poäng! för bokstaven: " + aString + "Dubbelpoäng"); + System.out.println("Tot poäng: " + points); + } + else if(word.charAt(i-1) == '[' && word.charAt(i+1) == ']'){ + points = points + map.get(listOfChars)*2; + System.out.println( "nu blev det " + map.get(listOfChars) + "poäng! för bokstaven: " + aString+ "Trippelpoäng"); + System.out.println("Tot poäng: " + points); + } + } + } + + + + + // för extension + /* + if(i == 0 && word.charAt(0) == '{' && word.charAt(2) == '}'){ + if(listOfChars.contains(String.valueOf(word.charAt(i+1)).toUpperCase())){ + points = points + map.get(listOfChars)*2; + System.out.println( "nu blev det dubbelpoäng!" + points); + + } + } + else if(i <= word.length()-2 && word.charAt(i) == '{' && word.charAt(i+2) == '}'){ + if(aString.equals(String.valueOf(word.charAt(i+1)).toUpperCase())){ + points = points + map.get(listOfChars)*2; + System.out.println( "nu blev det dubbelpoäng!" + points); + + } + + } + else if(i == 0 && word.charAt(0) == '[' && word.charAt(2) == ']'){ + if(listOfChars.contains(String.valueOf(word.charAt(i+1)).toUpperCase())){ + points = points + map.get(listOfChars)*3; + + } + } + else if(i <= word.length()-2 && word.charAt(i) == '[' && word.charAt(i+2) == ']'){ + if(listOfChars.contains(String.valueOf(word.charAt(i+1)).toUpperCase())){ + points = points + map.get(listOfChars)*3; + + } + }*/ + + } + + } + } + if(word.charAt(0) == '{' && word.charAt(word.length()-1) == '}'){ + points = points*2; + System.out.println("dubbelord!"); + if(word.charAt(1) == '[' && word.charAt(word.length()-2) == ']'){ + points = points*3; + System.out.println("trippelord!"); + } + } + if(word.charAt(0) == '[' && word.charAt(word.length()-1) == ']'){ + points = points*3; + System.out.println("trippelord!"); + if(word.charAt(0) == '{' && word.charAt(word.length()-1) == '}'){ + points = points*2; + System.out.println("dubbelord!"); + } + } + + } + } + + public int score() { - return -1; + return points; } } From 29b9078580906b04770e8b60c09995d1a137f17c Mon Sep 17 00:00:00 2001 From: Mattias Hedbom Date: Wed, 8 Jan 2025 20:52:23 +0100 Subject: [PATCH 2/3] Scrabble challenge, core exercise completed. Did not manage to complete all the extensions, just 7/11. --- src/main/java/com/booleanuk/Scrabble.java | 62 ----------------------- 1 file changed, 62 deletions(-) diff --git a/src/main/java/com/booleanuk/Scrabble.java b/src/main/java/com/booleanuk/Scrabble.java index 7af886c..b4e5a37 100644 --- a/src/main/java/com/booleanuk/Scrabble.java +++ b/src/main/java/com/booleanuk/Scrabble.java @@ -7,14 +7,6 @@ public class Scrabble { HashMap, Integer> map = new HashMap<>(); - /*ArrayList point1 = new ArrayList<>(Arrays.asList('A', 'E', 'I', 'O', 'U', 'L', 'N', 'R', 'S', 'T')); - ArrayList point2 = new ArrayList<>(Arrays.asList('D', 'G')); - ArrayList point3 = new ArrayList<>(Arrays.asList('B', 'C', 'M', 'P')); - ArrayList point4 = new ArrayList<>(Arrays.asList('F', 'H', 'V', 'W', 'Y')); - ArrayList point5 = new ArrayList<>(Arrays.asList('K')); - ArrayList point8 = new ArrayList<>(Arrays.asList('J', 'X')); - ArrayList point10 = new ArrayList<>(Arrays.asList('Q', 'Z'));*/ - ArrayList point1 = new ArrayList<>(Arrays.asList("A", "E", "I", "O", "U", "L", "N", "R", "S", "T")); ArrayList point2 = new ArrayList<>(Arrays.asList("D", "G")); ArrayList point3 = new ArrayList<>(Arrays.asList("B", "C", "M", "P")); @@ -40,89 +32,35 @@ public Scrabble(String word) { for(String aString : listOfChars){ for(int i = 0; i < word.length(); i++){ - if(!word.matches("a-zA-Z")){ - - } - if(aString.toLowerCase().charAt(0)==(word.toLowerCase().charAt(i))){ points = points + map.get(listOfChars); - System.out.println( "nu blev det " + map.get(listOfChars) + "poäng! för bokstaven: " + aString); - System.out.println("Tot poäng: " + points); - - if(i > 0 && i < word.length() -1){ if(word.charAt(i-1) == '{' && word.charAt(i+1) == '}'){ points = points + map.get(listOfChars); - System.out.println( "nu blev det " + map.get(listOfChars) + "poäng! för bokstaven: " + aString + "Dubbelpoäng"); - System.out.println("Tot poäng: " + points); } else if(word.charAt(i-1) == '[' && word.charAt(i+1) == ']'){ points = points + map.get(listOfChars)*2; - System.out.println( "nu blev det " + map.get(listOfChars) + "poäng! för bokstaven: " + aString+ "Trippelpoäng"); - System.out.println("Tot poäng: " + points); } } } - - - - - // för extension - /* - if(i == 0 && word.charAt(0) == '{' && word.charAt(2) == '}'){ - if(listOfChars.contains(String.valueOf(word.charAt(i+1)).toUpperCase())){ - points = points + map.get(listOfChars)*2; - System.out.println( "nu blev det dubbelpoäng!" + points); - - } - } - else if(i <= word.length()-2 && word.charAt(i) == '{' && word.charAt(i+2) == '}'){ - if(aString.equals(String.valueOf(word.charAt(i+1)).toUpperCase())){ - points = points + map.get(listOfChars)*2; - System.out.println( "nu blev det dubbelpoäng!" + points); - - } - - } - else if(i == 0 && word.charAt(0) == '[' && word.charAt(2) == ']'){ - if(listOfChars.contains(String.valueOf(word.charAt(i+1)).toUpperCase())){ - points = points + map.get(listOfChars)*3; - - } - } - else if(i <= word.length()-2 && word.charAt(i) == '[' && word.charAt(i+2) == ']'){ - if(listOfChars.contains(String.valueOf(word.charAt(i+1)).toUpperCase())){ - points = points + map.get(listOfChars)*3; - - } - }*/ - } - } } if(word.charAt(0) == '{' && word.charAt(word.length()-1) == '}'){ points = points*2; - System.out.println("dubbelord!"); if(word.charAt(1) == '[' && word.charAt(word.length()-2) == ']'){ points = points*3; - System.out.println("trippelord!"); } } if(word.charAt(0) == '[' && word.charAt(word.length()-1) == ']'){ points = points*3; - System.out.println("trippelord!"); if(word.charAt(0) == '{' && word.charAt(word.length()-1) == '}'){ points = points*2; - System.out.println("dubbelord!"); } } - } - - } From 6c86ffdaa332593dc7d1194bb214456d688195c6 Mon Sep 17 00:00:00 2001 From: Mattias Hedbom Date: Thu, 16 Jan 2025 22:25:21 +0100 Subject: [PATCH 3/3] Fixed the last extensions --- src/main/java/com/booleanuk/Scrabble.java | 128 +++++++++++++++++----- 1 file changed, 101 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/booleanuk/Scrabble.java b/src/main/java/com/booleanuk/Scrabble.java index b4e5a37..074619b 100644 --- a/src/main/java/com/booleanuk/Scrabble.java +++ b/src/main/java/com/booleanuk/Scrabble.java @@ -3,10 +3,13 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.Stack; public class Scrabble { HashMap, Integer> map = new HashMap<>(); + String word; + ArrayList point0 = new ArrayList<>(Arrays.asList("{", "[", "}", "]")); ArrayList point1 = new ArrayList<>(Arrays.asList("A", "E", "I", "O", "U", "L", "N", "R", "S", "T")); ArrayList point2 = new ArrayList<>(Arrays.asList("D", "G")); ArrayList point3 = new ArrayList<>(Arrays.asList("B", "C", "M", "P")); @@ -16,7 +19,9 @@ public class Scrabble { ArrayList point10 = new ArrayList<>(Arrays.asList("Q", "Z")); int points = 0; + public Scrabble(String word) { + map.put(point0, 0); map.put(point1, 1); map.put(point2, 2); map.put(point3, 3); @@ -25,48 +30,117 @@ public Scrabble(String word) { map.put(point8, 8); map.put(point10, 10); - if(!word.trim().isEmpty()){ + this.word = word; + } + + + public int score() { + Stack brackets = new Stack<>(); + int characterExists = 0; + int characterThatGivePoints = 0; + Boolean bracketsFrameEntireWord = false; + + if (word.trim().isEmpty()) { + return 0; + } + + for (int i = 0; i < word.length(); i++) { + for (ArrayList list : map.keySet()) { + if (list.contains(Character.toString(word.toUpperCase().charAt(i)))) { + characterExists++; + + if (map.get(list) > 0) { + characterThatGivePoints++; + } + break; + } + } + } + if (characterExists < word.length()) { + return 0; + } + + if (word.toLowerCase().charAt(0) == '{' || word.toLowerCase().charAt(0) == '[') { + bracketsFrameEntireWord = true; + } + for (ArrayList listOfChars : map.keySet()) { - for(ArrayList listOfChars : map.keySet()){ + for (int e = 0; e < listOfChars.size(); e++) { + Boolean bracketFound = false; + int charsBetweenBrackets = 0; - for(String aString : listOfChars){ + for (int i = 0; i < word.length(); i++) { + if (word.toLowerCase().charAt(i) == '{' || word.toLowerCase().charAt(i) == '[') { + brackets.push(word.toLowerCase().charAt(i)); + bracketFound = true; + } else if (word.toLowerCase().charAt(i) == '}' || word.toLowerCase().charAt(i) == ']') { + if (brackets.isEmpty()) { + return 0; + } + if (i != word.length() - 1 && brackets.size() == 1) { + bracketsFrameEntireWord = false; + } + if (brackets.peek() == '{' && word.toLowerCase().charAt(i) == '}') { + if (charsBetweenBrackets == characterThatGivePoints) { + brackets.pop(); + } else if (charsBetweenBrackets > 1 && charsBetweenBrackets < word.length() - 2) { + return 0; + } else { + brackets.pop(); + bracketFound = false; + charsBetweenBrackets = 0; + } - for(int i = 0; i < word.length(); i++){ + } else if (brackets.peek() == '[' && word.toLowerCase().charAt(i) == ']') { + if (charsBetweenBrackets == characterThatGivePoints) { + brackets.pop(); + } else if (charsBetweenBrackets > 1 && charsBetweenBrackets < word.length() - 2) { + return 0; + } else { + brackets.pop(); + bracketFound = false; + charsBetweenBrackets = 0; + } + } else { + return 0; + } + } else if (bracketFound) { + charsBetweenBrackets++; + } - if(aString.toLowerCase().charAt(0)==(word.toLowerCase().charAt(i))){ - points = points + map.get(listOfChars); + if (listOfChars.get(e).toLowerCase().charAt(0) == (word.toLowerCase().charAt(i))) { + points = points + map.get(listOfChars); - if(i > 0 && i < word.length() -1){ - if(word.charAt(i-1) == '{' && word.charAt(i+1) == '}'){ - points = points + map.get(listOfChars); - } - else if(word.charAt(i-1) == '[' && word.charAt(i+1) == ']'){ - points = points + map.get(listOfChars)*2; - } + if (i > 0 && i < word.length() - 1) { + if (word.charAt(i - 1) == '{' && word.charAt(i + 1) == '}') { + points = points + map.get(listOfChars); + } else if (word.charAt(i - 1) == '[' && word.charAt(i + 1) == ']') { + points = points + map.get(listOfChars) * 2; } } } } + + if (!brackets.isEmpty()) { + return 0; + } } - if(word.charAt(0) == '{' && word.charAt(word.length()-1) == '}'){ - points = points*2; - if(word.charAt(1) == '[' && word.charAt(word.length()-2) == ']'){ - points = points*3; + } + + if (bracketsFrameEntireWord) { + if (word.charAt(0) == '{' && word.charAt(word.length() - 1) == '}') { + points = points * 2; + if (word.charAt(1) == '[' && word.charAt(word.length() - 2) == ']') { + points = points * 3; } } - if(word.charAt(0) == '[' && word.charAt(word.length()-1) == ']'){ - points = points*3; - if(word.charAt(0) == '{' && word.charAt(word.length()-1) == '}'){ - points = points*2; + if (word.charAt(0) == '[' && word.charAt(word.length() - 1) == ']') { + points = points * 3; + if (word.charAt(0) == '{' && word.charAt(word.length() - 1) == '}') { + points = points * 2; } } } - } - - - - public int score() { return points; } - }