Преглед изворни кода

bracket-push: add to track

Stuart Kent пре 9 година
родитељ
комит
81922a4a5c

+ 7
- 1
config.json Прегледај датотеку

@@ -49,7 +49,8 @@
49 49
     "queen-attack",
50 50
     "minesweeper",
51 51
     "series",
52
-    "robot-simulator"
52
+    "robot-simulator",
53
+    "bracket-push"
53 54
   ],
54 55
   "exercises": [
55 56
     {
@@ -281,6 +282,11 @@
281 282
       "slug": "robot-simulator",
282 283
       "difficulty": 1,
283 284
       "topics": []
285
+    },
286
+    {
287
+      "slug": "bracket-push",
288
+      "difficulty": 1,
289
+      "topics": []
284 290
     }
285 291
   ],
286 292
   "deprecated": [

+ 17
- 0
exercises/bracket-push/build.gradle Прегледај датотеку

@@ -0,0 +1,17 @@
1
+apply plugin: "java"
2
+apply plugin: "eclipse"
3
+apply plugin: "idea"
4
+
5
+repositories {
6
+  mavenCentral()
7
+}
8
+
9
+dependencies {
10
+  testCompile "junit:junit:4.12"
11
+}
12
+test {
13
+  testLogging {
14
+    exceptionFormat = 'full'
15
+    events = ["passed", "failed", "skipped"]
16
+  }
17
+}

+ 45
- 0
exercises/bracket-push/src/example/java/BracketChecker.java Прегледај датотеку

@@ -0,0 +1,45 @@
1
+import java.util.*;
2
+
3
+final class BracketChecker {
4
+
5
+    private static final Map<Character, Character> BRACKET_PAIR_MAP = new HashMap<Character, Character>() {{
6
+        put('[', ']');
7
+        put('{', '}');
8
+        put('(', ')');
9
+    }};
10
+
11
+    private static boolean isOpeningBracket(final char character) {
12
+        return BRACKET_PAIR_MAP.keySet().contains(character);
13
+    }
14
+
15
+    private static boolean isClosingBracket(final char character) {
16
+        return BRACKET_PAIR_MAP.values().contains(character);
17
+    }
18
+
19
+    private final String expression;
20
+
21
+    BracketChecker(final String expression) {
22
+        this.expression = expression;
23
+    }
24
+
25
+    boolean areBracketsMatchedAndNestedCorrectly() {
26
+        final Stack<Character> bracketsStack = new Stack<>();
27
+
28
+        for (final char character : expression.toCharArray()) {
29
+            if (isOpeningBracket(character)) {
30
+                bracketsStack.push(character);
31
+            } else if (isClosingBracket(character)) {
32
+                if (bracketsStack.isEmpty()) {
33
+                    return false;
34
+                }
35
+
36
+                if (!BRACKET_PAIR_MAP.get(bracketsStack.pop()).equals(character)) {
37
+                    return false;
38
+                }
39
+            }
40
+        }
41
+
42
+        return bracketsStack.isEmpty();
43
+    }
44
+
45
+}

+ 5
- 0
exercises/bracket-push/src/main/java/BracketChecker.java Прегледај датотеку

@@ -0,0 +1,5 @@
1
+final class BracketChecker {
2
+
3
+
4
+
5
+}

+ 102
- 0
exercises/bracket-push/src/test/java/BracketCheckerTest.java Прегледај датотеку

@@ -0,0 +1,102 @@
1
+import org.junit.Ignore;
2
+import org.junit.Test;
3
+
4
+import static org.junit.Assert.assertEquals;
5
+import static org.junit.Assert.assertFalse;
6
+import static org.junit.Assert.assertTrue;
7
+
8
+public final class BracketCheckerTest {
9
+
10
+    @Test
11
+    public void testPairedSquareBrackets() {
12
+        final BracketChecker bracketChecker = new BracketChecker("[]");
13
+        assertTrue(bracketChecker.areBracketsMatchedAndNestedCorrectly());
14
+    }
15
+
16
+    @Ignore
17
+    @Test
18
+    public void testEmptyString() {
19
+        final BracketChecker bracketChecker = new BracketChecker("");
20
+        assertTrue(bracketChecker.areBracketsMatchedAndNestedCorrectly());
21
+    }
22
+
23
+    @Ignore
24
+    @Test
25
+    public void testUnpairedBrackets() {
26
+        final BracketChecker bracketChecker = new BracketChecker("[[");
27
+        assertFalse(bracketChecker.areBracketsMatchedAndNestedCorrectly());
28
+    }
29
+
30
+    @Ignore
31
+    @Test
32
+    public void testIncorrectlyOrderedBrackets() {
33
+        final BracketChecker bracketChecker = new BracketChecker("}{");
34
+        assertFalse(bracketChecker.areBracketsMatchedAndNestedCorrectly());
35
+    }
36
+
37
+    @Ignore
38
+    @Test
39
+    public void testPairedBracketsWithWhitespace() {
40
+        final BracketChecker bracketChecker = new BracketChecker("{ }");
41
+        assertTrue(bracketChecker.areBracketsMatchedAndNestedCorrectly());
42
+    }
43
+
44
+    @Ignore
45
+    @Test
46
+    public void testSimpleNestedBrackets() {
47
+        final BracketChecker bracketChecker = new BracketChecker("{[]}");
48
+        assertTrue(bracketChecker.areBracketsMatchedAndNestedCorrectly());
49
+    }
50
+
51
+    @Ignore
52
+    @Test
53
+    public void testSeveralPairedBrackets() {
54
+        final BracketChecker bracketChecker = new BracketChecker("{}[]");
55
+        assertTrue(bracketChecker.areBracketsMatchedAndNestedCorrectly());
56
+    }
57
+
58
+    @Ignore
59
+    @Test
60
+    public void testPairedAndNestedBrackets() {
61
+        final BracketChecker bracketChecker = new BracketChecker("([{}({}[])])");
62
+        assertTrue(bracketChecker.areBracketsMatchedAndNestedCorrectly());
63
+    }
64
+
65
+    @Ignore
66
+    @Test
67
+    public void testUnopenedClosingBracket() {
68
+        final BracketChecker bracketChecker = new BracketChecker("{[)][]}");
69
+        assertFalse(bracketChecker.areBracketsMatchedAndNestedCorrectly());
70
+    }
71
+
72
+    @Ignore
73
+    @Test
74
+    public void testUnpairedAndNestedBracket() {
75
+        final BracketChecker bracketChecker = new BracketChecker("([{])");
76
+        assertFalse(bracketChecker.areBracketsMatchedAndNestedCorrectly());
77
+    }
78
+
79
+    @Ignore
80
+    @Test
81
+    public void testPairedAndIncorrectlyNestedBrackets() {
82
+        final BracketChecker bracketChecker = new BracketChecker("[({]})");
83
+        assertFalse(bracketChecker.areBracketsMatchedAndNestedCorrectly());
84
+    }
85
+
86
+    @Ignore
87
+    @Test
88
+    public void testValidMathExpression() {
89
+        final BracketChecker bracketChecker = new BracketChecker("(((185 + 223.85) * 15) - 543)/2");
90
+        assertTrue(bracketChecker.areBracketsMatchedAndNestedCorrectly());
91
+    }
92
+
93
+    @Ignore
94
+    @Test
95
+    public void testValidComplexLaTeXExpression() {
96
+        final BracketChecker bracketChecker = new BracketChecker(
97
+                "\\left(\\begin{array}{cc} \\frac{1}{3} & x\\\\ \\mathrm{e}^{x} &... x^2 \\end{array}\\right)");
98
+
99
+        assertTrue(bracketChecker.areBracketsMatchedAndNestedCorrectly());
100
+    }
101
+
102
+}

+ 1
- 0
exercises/settings.gradle Прегледај датотеку

@@ -6,6 +6,7 @@ include 'atbash-cipher'
6 6
 include 'beer-song'
7 7
 include 'binary'
8 8
 include 'bob'
9
+include 'bracket-push'
9 10
 include 'crypto-square'
10 11
 include 'difference-of-squares'
11 12
 include 'etl'