From 6aceeea3dffb21b7693d237134a19db81fa6d71e Mon Sep 17 00:00:00 2001 From: Joshua Wurdemann Date: Mon, 12 Mar 2018 23:57:39 -0400 Subject: [PATCH 1/5] first method good, second needs to account for the spaces in between the open closings --- src/main/java/io/zipcoder/ParenChecker.java | 52 +++++++++++++ .../io/zipcoder/AllOpensHaveEndsTest.java | 54 ++++++++++++++ .../java/io/zipcoder/ParenCheckerTest.java | 73 +++++++++++++++++++ 3 files changed, 179 insertions(+) create mode 100644 src/test/java/io/zipcoder/AllOpensHaveEndsTest.java diff --git a/src/main/java/io/zipcoder/ParenChecker.java b/src/main/java/io/zipcoder/ParenChecker.java index caee675..d3606b2 100644 --- a/src/main/java/io/zipcoder/ParenChecker.java +++ b/src/main/java/io/zipcoder/ParenChecker.java @@ -1,4 +1,56 @@ package io.zipcoder; +import java.util.HashMap; +import java.util.Map; +import java.util.Stack; + public class ParenChecker { + //Create a class with a method that verifies all parens () are paired. HINT: Use a stack. + private Stack theStack; + private char charAt; + + + public ParenChecker() { + this.theStack = new Stack(); + } + + public boolean verifyParens(String theString) { + // char[] theChar = theString.toCharArray(); + char parOpen = '('; + char parClosed = ')'; + for (int i = 0; i < theString.length(); i++) { + charAt = theString.charAt(i); + if (theStack.contains(parOpen) && charAt == parClosed) { + theStack.pop(); + } else if (charAt == parOpen || charAt == parClosed) { + theStack.push(charAt); + } + } + + return theStack.empty(); + } + + + public boolean verifyAllOpensHaveEnds(String theString) { + boolean allOpensHavePairs = false; + theStack.clear(); + Map bracketPairs = new HashMap(); + bracketPairs.put('(', ')'); + bracketPairs.put('{', '}'); + bracketPairs.put('[', ']'); + bracketPairs.put('<', '>'); + bracketPairs.put('"', '"'); + // theMap.put(' ' ',' ''); + + for (int i = 0; i < theString.length(); i++) { + char theChar = theString.charAt(i); + if (bracketPairs.containsKey(theChar)) { + theStack.push(theChar); + } else if (theStack.isEmpty() || bracketPairs.get(theStack.pop()) != theChar) return false; + + } + return theStack.isEmpty(); + } } + + diff --git a/src/test/java/io/zipcoder/AllOpensHaveEndsTest.java b/src/test/java/io/zipcoder/AllOpensHaveEndsTest.java new file mode 100644 index 0000000..35b22bc --- /dev/null +++ b/src/test/java/io/zipcoder/AllOpensHaveEndsTest.java @@ -0,0 +1,54 @@ +package io.zipcoder; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class AllOpensHaveEndsTest { + private ParenChecker theCheck; + @Before + public void setUp() throws Exception { + theCheck = new ParenChecker(); + } + + @Test + public void verifyAllOpensHaveEndsTest() { + String testString = "()"; + boolean expect = true; + boolean actual = theCheck.verifyAllOpensHaveEnds(testString); + + Assert.assertEquals(expect, actual); + } + @Test + public void verifyAllOpensHaveEnds1Test() { + String testString = "()(/////////////////////////////////)"; + boolean expect = true; + boolean actual = theCheck.verifyAllOpensHaveEnds(testString); + + Assert.assertEquals(expect, actual); + } + + @Test + public void verifyAllOpensHaveEndsFalseTEst() { + String testString = "(("; + boolean expect = false; + boolean actual = theCheck.verifyAllOpensHaveEnds(testString); + + Assert.assertEquals(expect, actual); + } + + @Test + public void verifyAllOpensHaveEndsFalse1Test() { + String testString = "(("; + boolean expect = false; + boolean actual = theCheck.verifyAllOpensHaveEnds(testString); + + Assert.assertEquals(expect, actual); + } + + + + +} \ No newline at end of file diff --git a/src/test/java/io/zipcoder/ParenCheckerTest.java b/src/test/java/io/zipcoder/ParenCheckerTest.java index 76aa3b6..61f5b99 100644 --- a/src/test/java/io/zipcoder/ParenCheckerTest.java +++ b/src/test/java/io/zipcoder/ParenCheckerTest.java @@ -1,8 +1,81 @@ package io.zipcoder; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; +import java.util.Stack; + public class ParenCheckerTest { + private ParenChecker checker; + private String[] theString; + @Before + public void setUp() throws Exception { + checker = new ParenChecker(); + theString = new String[]{"the (yo)", "the(,()", "the)", "the))", "the()()(", "the)()(", "()()()*()"}; + } + + @Test + public void parenClosedCheckerTest(){ + String testString = theString[0]; + boolean expected = true; + boolean actual = checker.verifyParens(testString); + Assert.assertEquals(expected, actual); + } + + @Test + public void parenOneOpenCheckerTest(){ + String testString = theString[1]; + boolean expected = false; + boolean actual = checker.verifyParens(testString); + Assert.assertEquals(expected, actual); + } + + @Test + public void parenOneClosedCheckerTest(){ + String testString = theString[2]; + boolean expected = false; + boolean actual = checker.verifyParens(testString); + Assert.assertEquals(expected, actual); + } + + @Test + public void parenTwoClosedCheckerTest(){ + String testString = theString[3]; + boolean expected = false; + boolean actual = checker.verifyParens(testString); + Assert.assertEquals(expected, actual); + } + + @Test + public void parenTwClosedOneOpenCheckerTest(){ + String testString = theString[4]; + boolean expected = false; + boolean actual = checker.verifyParens(testString); + Assert.assertEquals(expected, actual); + } + + @Test + public void parenOneClosedTwoOpenCheckerTest(){ + String testString = theString[5]; + boolean expected = false; + boolean actual = checker.verifyParens(testString); + Assert.assertEquals(expected, actual); + } + + @Test + public void parenFourClosedCheckerTest(){ + String testString = theString[6]; + boolean expected = true; + boolean actual = checker.verifyParens(testString); + Assert.assertEquals(expected, actual); + } + + + + + + + } \ No newline at end of file From 908de738690a997d5aeb9c5d74df60c9f8dd9503 Mon Sep 17 00:00:00 2001 From: Joshua Wurdemann Date: Tue, 13 Mar 2018 09:02:07 -0400 Subject: [PATCH 2/5] part accounts for all but single and doubles quotes --- src/main/java/io/zipcoder/ParenChecker.java | 10 +++++++-- .../io/zipcoder/AllOpensHaveEndsTest.java | 22 ++++++++++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/zipcoder/ParenChecker.java b/src/main/java/io/zipcoder/ParenChecker.java index d3606b2..0cf27e1 100644 --- a/src/main/java/io/zipcoder/ParenChecker.java +++ b/src/main/java/io/zipcoder/ParenChecker.java @@ -40,14 +40,20 @@ public boolean verifyAllOpensHaveEnds(String theString) { bracketPairs.put('[', ']'); bracketPairs.put('<', '>'); bracketPairs.put('"', '"'); - // theMap.put(' ' ',' ''); + bracketPairs.put('\'', '\''); for (int i = 0; i < theString.length(); i++) { char theChar = theString.charAt(i); if (bracketPairs.containsKey(theChar)) { theStack.push(theChar); - } else if (theStack.isEmpty() || bracketPairs.get(theStack.pop()) != theChar) return false; + } + + //how to account all things in between the open brackets. + //theStackisempty; + else if (bracketPairs.get(theStack.peek()) == theChar){ + theStack.pop(); + } } return theStack.isEmpty(); } diff --git a/src/test/java/io/zipcoder/AllOpensHaveEndsTest.java b/src/test/java/io/zipcoder/AllOpensHaveEndsTest.java index 35b22bc..f9dcfc8 100644 --- a/src/test/java/io/zipcoder/AllOpensHaveEndsTest.java +++ b/src/test/java/io/zipcoder/AllOpensHaveEndsTest.java @@ -41,7 +41,7 @@ public void verifyAllOpensHaveEndsFalseTEst() { @Test public void verifyAllOpensHaveEndsFalse1Test() { - String testString = "(("; + String testString = "((/////////////////////////////)"; boolean expect = false; boolean actual = theCheck.verifyAllOpensHaveEnds(testString); @@ -50,5 +50,25 @@ public void verifyAllOpensHaveEndsFalse1Test() { + @Test + public void verifyAllOpensHaveEndsFalse2Test() { + String testString = "((/////////////////////////////)}}}}}}}}}}}}}}}}}}}}}}}}{{{{{{{{{{{{{{{}}}"; + boolean expect = false; + boolean actual = theCheck.verifyAllOpensHaveEnds(testString); + + Assert.assertEquals(expect, actual); + } + @Test + public void verifyAllOpensHaveEnds2Test() { + String testString = "sfsdfkjdsljfl"; + boolean expect = true; + boolean actual = theCheck.verifyAllOpensHaveEnds(testString); + + Assert.assertEquals(expect, actual); + } + + + + } \ No newline at end of file From 1ac0a05a7af8e999a39eba2406822c2b2c906e5d Mon Sep 17 00:00:00 2001 From: Joshua Wurdemann Date: Tue, 13 Mar 2018 15:14:41 -0400 Subject: [PATCH 3/5] Map adds strings, counts but I am not printing in decending order --- src/main/java/io/zipcoder/WC.java | 46 +++++++++++++++++++ src/main/resources/someTextFile.txt | 2 + .../io/zipcoder/AllOpensHaveEndsTest.java | 18 ++++++++ 3 files changed, 66 insertions(+) diff --git a/src/main/java/io/zipcoder/WC.java b/src/main/java/io/zipcoder/WC.java index babb68c..ea4846c 100644 --- a/src/main/java/io/zipcoder/WC.java +++ b/src/main/java/io/zipcoder/WC.java @@ -2,11 +2,14 @@ import java.io.FileNotFoundException; import java.io.FileReader; +import java.util.HashMap; import java.util.Iterator; +import java.util.Map; import java.util.Scanner; public class WC { private Iterator si; + private Map words; public WC(String fileName) { try { @@ -17,7 +20,50 @@ public WC(String fileName) { } } + public static void main(String[] args) { + WC theWC = new WC("src/main/resources/someTextFile.txt"); + theWC.readsStringFromfileAddstoMap(); + theWC.print(); + } + public WC(Iterator si) { this.si = si; } + + public void readsStringFromfileAddstoMap() { + words = new HashMap(); + while (this.si.hasNext()) { + String[] wordsArray = this.si.next().split("[^\\w]+"); + putsStringKeyInMap(wordsArray); + } + } + + public void putsStringKeyInMap(String[] theWords) { + for (int i = 0; i < theWords.length; i++) { + String word = theWords[i]; + increaseValueOfWord(word); + } + } + + public void increaseValueOfWord(String theWord) { + int count = 1; + if (words.containsKey(theWord)) { + count = getCount(theWord); + words.put(theWord, count + 1); + } else { + words.put(theWord, count); + } + } + + public int getCount(String theWord) { + return words.get(theWord); + } + + + public void print() { + for (Map.Entry entry : words.entrySet()) + System.out.println(entry.getValue() + " : " + entry.getKey()); + } + } + diff --git a/src/main/resources/someTextFile.txt b/src/main/resources/someTextFile.txt index e69de29..16b60ff 100644 --- a/src/main/resources/someTextFile.txt +++ b/src/main/resources/someTextFile.txt @@ -0,0 +1,2 @@ +Yo My name is Joshua. +theNextPerson Yo,,,,, My name is Joshua.&*&(%^&*#$%^#$%@^$%&^&(%^*(%%$^#@$#$&^%$#(&*^%$#@99 \ No newline at end of file diff --git a/src/test/java/io/zipcoder/AllOpensHaveEndsTest.java b/src/test/java/io/zipcoder/AllOpensHaveEndsTest.java index f9dcfc8..edfe2b8 100644 --- a/src/test/java/io/zipcoder/AllOpensHaveEndsTest.java +++ b/src/test/java/io/zipcoder/AllOpensHaveEndsTest.java @@ -58,6 +58,24 @@ public void verifyAllOpensHaveEndsFalse2Test() { Assert.assertEquals(expect, actual); } + + @Test + public void verifyAllOpensHaveEndsTrueTest() { + String testString = "((/////////////////////////////))<>"; + boolean expect = true; + boolean actual = theCheck.verifyAllOpensHaveEnds(testString); + + Assert.assertEquals(expect, actual); + } + + @Test + public void verifyAllOpensHaveEndsfalseTest() { + String testString = "((/////////////////////////////))<"; + boolean expect = false; + boolean actual = theCheck.verifyAllOpensHaveEnds(testString); + + Assert.assertEquals(expect, actual); + } @Test public void verifyAllOpensHaveEnds2Test() { String testString = "sfsdfkjdsljfl"; From 9cb1315720dfa0b86cbfa4cb03d38cd3a3fe4c32 Mon Sep 17 00:00:00 2001 From: Joshua Wurdemann Date: Tue, 13 Mar 2018 15:24:27 -0400 Subject: [PATCH 4/5] switched to tree map --- src/main/java/io/zipcoder/WC.java | 7 ++----- src/main/resources/someTextFile.txt | 3 ++- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/zipcoder/WC.java b/src/main/java/io/zipcoder/WC.java index ea4846c..6032bad 100644 --- a/src/main/java/io/zipcoder/WC.java +++ b/src/main/java/io/zipcoder/WC.java @@ -2,10 +2,7 @@ import java.io.FileNotFoundException; import java.io.FileReader; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Scanner; +import java.util.*; public class WC { private Iterator si; @@ -31,7 +28,7 @@ public WC(Iterator si) { } public void readsStringFromfileAddstoMap() { - words = new HashMap(); + words = new TreeMap(); while (this.si.hasNext()) { String[] wordsArray = this.si.next().split("[^\\w]+"); putsStringKeyInMap(wordsArray); diff --git a/src/main/resources/someTextFile.txt b/src/main/resources/someTextFile.txt index 16b60ff..5dafeaf 100644 --- a/src/main/resources/someTextFile.txt +++ b/src/main/resources/someTextFile.txt @@ -1,2 +1,3 @@ Yo My name is Joshua. -theNextPerson Yo,,,,, My name is Joshua.&*&(%^&*#$%^#$%@^$%&^&(%^*(%%$^#@$#$&^%$#(&*^%$#@99 \ No newline at end of file +theNextPerson Yo,,,,, My name is Joshua.&*&(%^&*#$%^#$%@^$%&^&(%^*(%%$^#@$#$&^%$#(&*^%$#@99 +the next word in the book will be the next person who tells the next thing that akes the word that goes \ No newline at end of file From 9af8649877ee9fa8a8ae9bf224f34a91751892f3 Mon Sep 17 00:00:00 2001 From: Joshua Wurdemann Date: Tue, 13 Mar 2018 16:07:14 -0400 Subject: [PATCH 5/5] solution to order tree map by decent using Collections.reverseorder in the intialzation of the treemap so cool --- src/main/java/io/zipcoder/WC.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/zipcoder/WC.java b/src/main/java/io/zipcoder/WC.java index 6032bad..e3f0cdd 100644 --- a/src/main/java/io/zipcoder/WC.java +++ b/src/main/java/io/zipcoder/WC.java @@ -28,11 +28,12 @@ public WC(Iterator si) { } public void readsStringFromfileAddstoMap() { - words = new TreeMap(); + words = new TreeMap(Collections.reverseOrder()); while (this.si.hasNext()) { String[] wordsArray = this.si.next().split("[^\\w]+"); putsStringKeyInMap(wordsArray); } + } public void putsStringKeyInMap(String[] theWords) { @@ -56,8 +57,14 @@ public int getCount(String theWord) { return words.get(theWord); } +// public void reverseOrderOfMap(){ +// Map newMap = new TreeMap(Collections.reverseOrder()); +// newMap.putAll(words); +// } + public void print() { + // need to print in decending order. for (Map.Entry entry : words.entrySet()) System.out.println(entry.getValue() + " : " + entry.getKey()); }