trackler 2.2.1.86 → 2.2.1.87

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/reverse-string/metadata.yml +0 -1
  4. data/tracks/bash/CONTRIBUTING.md +129 -28
  5. data/tracks/bash/config/exercise_readme.go.tmpl +10 -4
  6. data/tracks/bash/exercises/acronym/README.md +8 -11
  7. data/tracks/bash/exercises/acronym/{acronym_tests.sh → acronym_test.sh} +0 -0
  8. data/tracks/bash/exercises/anagram/README.md +6 -1
  9. data/tracks/bash/exercises/anagram/anagram_test.sh +1 -1
  10. data/tracks/bash/exercises/armstrong-numbers/README.md +10 -2
  11. data/tracks/bash/exercises/atbash-cipher/README.md +6 -6
  12. data/tracks/bash/exercises/bob/README.md +8 -1
  13. data/tracks/bash/exercises/collatz-conjecture/README.md +11 -2
  14. data/tracks/bash/exercises/collatz-conjecture/{collatz_test.sh → collatz_conjecture_test.sh} +6 -6
  15. data/tracks/bash/exercises/difference-of-squares/README.md +6 -1
  16. data/tracks/bash/exercises/error-handling/README.md +13 -5
  17. data/tracks/bash/exercises/error-handling/error_handling_test.sh +18 -22
  18. data/tracks/bash/exercises/error-handling/example.sh +7 -6
  19. data/tracks/bash/exercises/gigasecond/.meta/hints.md +0 -5
  20. data/tracks/bash/exercises/gigasecond/README.md +36 -1
  21. data/tracks/bash/exercises/grains/README.md +10 -2
  22. data/tracks/bash/exercises/hamming/README.md +6 -1
  23. data/tracks/bash/exercises/hello-world/README.md +7 -2
  24. data/tracks/bash/exercises/leap/README.md +7 -2
  25. data/tracks/bash/exercises/luhn/README.md +7 -2
  26. data/tracks/bash/exercises/nucleotide-count/README.md +13 -22
  27. data/tracks/bash/exercises/pangram/README.md +7 -2
  28. data/tracks/bash/exercises/phone-number/README.md +10 -4
  29. data/tracks/bash/exercises/raindrops/README.md +6 -1
  30. data/tracks/bash/exercises/reverse-string/README.md +11 -2
  31. data/tracks/bash/exercises/rna-transcription/README.md +7 -2
  32. data/tracks/bash/exercises/roman-numerals/README.md +11 -2
  33. data/tracks/bash/exercises/triangle/README.md +5 -4
  34. data/tracks/bash/exercises/two-fer/README.md +7 -9
  35. data/tracks/bash/exercises/word-count/README.md +6 -2
  36. data/tracks/bash/exercises/word-count/example.sh +22 -13
  37. data/tracks/bash/scripts/canonical_data_check.sh +112 -0
  38. data/tracks/c/exercises/acronym/src/{example.h → acronym.h} +0 -0
  39. data/tracks/c/exercises/gigasecond/.meta/hints.md +124 -0
  40. data/tracks/c/exercises/gigasecond/README.md +126 -0
  41. data/tracks/c/exercises/isogram/src/{example.h → isogram.h} +0 -0
  42. data/tracks/c/exercises/meetup/.meta/hints.md +124 -0
  43. data/tracks/c/exercises/meetup/README.md +142 -12
  44. data/tracks/c/exercises/pangram/src/{example.h → pangram.h} +0 -0
  45. data/tracks/c/exercises/space-age/.meta/hints.md +124 -0
  46. data/tracks/c/exercises/space-age/README.md +127 -2
  47. data/tracks/elisp/bin/test-examples +11 -14
  48. data/tracks/elisp/config.json +9 -1
  49. data/tracks/elisp/exercises/acronym/README.md +13 -0
  50. data/tracks/elisp/exercises/acronym/acronym-test.el +28 -0
  51. data/tracks/elisp/exercises/acronym/acronym.el +11 -0
  52. data/tracks/elisp/exercises/acronym/example.el +14 -0
  53. data/tracks/elisp/exercises/bob/example.el +1 -3
  54. data/tracks/elisp/exercises/hamming/README.md +2 -0
  55. data/tracks/elisp/exercises/hamming/hamming-test.el +35 -12
  56. data/tracks/elisp/exercises/hamming/hamming.el +0 -3
  57. data/tracks/fsharp/exercises/custom-set/CustomSetTest.fs +206 -132
  58. data/tracks/fsharp/exercises/custom-set/Example.fs +2 -0
  59. data/tracks/fsharp/generators/Generators.fs +61 -0
  60. data/tracks/go/config.json +25 -2
  61. data/tracks/go/exercises/acronym/acronym_test.go +8 -0
  62. data/tracks/go/exercises/alphametics/.meta/gen.go +72 -0
  63. data/tracks/go/exercises/alphametics/.meta/hints.md +38 -0
  64. data/tracks/go/exercises/alphametics/README.md +93 -0
  65. data/tracks/go/exercises/alphametics/alphametics_test.go +33 -0
  66. data/tracks/go/exercises/alphametics/cases_test.go +59 -0
  67. data/tracks/go/exercises/alphametics/example.go +212 -0
  68. data/tracks/go/exercises/atbash-cipher/.meta/gen.go +6 -4
  69. data/tracks/go/exercises/atbash-cipher/cases_test.go +2 -2
  70. data/tracks/go/exercises/change/.meta/gen.go +7 -5
  71. data/tracks/go/exercises/change/cases_test.go +2 -2
  72. data/tracks/go/exercises/collatz-conjecture/.meta/gen.go +5 -3
  73. data/tracks/go/exercises/collatz-conjecture/cases_test.go +2 -2
  74. data/tracks/go/exercises/connect/.meta/gen.go +5 -3
  75. data/tracks/go/exercises/connect/cases_test.go +2 -2
  76. data/tracks/go/exercises/flatten-array/.meta/gen.go +5 -3
  77. data/tracks/go/exercises/flatten-array/cases_test.go +2 -2
  78. data/tracks/go/exercises/meetup/.meta/gen.go +19 -8
  79. data/tracks/go/exercises/meetup/cases_test.go +2 -2
  80. data/tracks/go/exercises/simple-linked-list/README.md +47 -0
  81. data/tracks/go/exercises/simple-linked-list/example.go +74 -0
  82. data/tracks/go/exercises/simple-linked-list/linked_list_test.go +210 -0
  83. data/tracks/idris/config.json +2 -2
  84. data/tracks/java/exercises/all-your-base/.meta/src/reference/java/BaseConverter.java +1 -5
  85. data/tracks/java/exercises/all-your-base/.meta/version +1 -1
  86. data/tracks/java/exercises/all-your-base/src/test/java/BaseConverterTest.java +34 -10
  87. data/tracks/java/exercises/bob/README.md +2 -0
  88. data/tracks/java/exercises/kindergarten-garden/.meta/version +1 -0
  89. data/tracks/java/exercises/kindergarten-garden/src/test/java/KindergartenGardenTest.java +0 -55
  90. data/tracks/java/exercises/meetup/.meta/version +1 -0
  91. data/tracks/java/exercises/meetup/src/test/java/MeetupTest.java +32 -0
  92. data/tracks/java/exercises/parallel-letter-frequency/README.md +1 -0
  93. data/tracks/java/exercises/proverb/README.md +16 -10
  94. data/tracks/java/exercises/rail-fence-cipher/README.md +5 -6
  95. data/tracks/java/exercises/two-fer/README.md +1 -1
  96. data/tracks/java/exercises/word-search/.meta/version +1 -1
  97. data/tracks/java/exercises/word-search/src/test/java/WordSearcherTest.java +240 -2
  98. data/tracks/javascript/.eslintignore +0 -1
  99. data/tracks/javascript/exercises/palindrome-products/example.js +3 -3
  100. data/tracks/kotlin/docs/INSTALLATION.md +77 -68
  101. data/tracks/kotlin/docs/TESTS.md +41 -39
  102. data/tracks/perl6/exercises/acronym/acronym.t +20 -8
  103. data/tracks/perl6/exercises/acronym/example.yaml +1 -1
  104. data/tracks/perl6/exercises/all-your-base/all-your-base.t +108 -66
  105. data/tracks/perl6/exercises/all-your-base/example.yaml +2 -2
  106. data/tracks/perl6/exercises/allergies/allergies.t +39 -15
  107. data/tracks/perl6/exercises/allergies/example.yaml +2 -2
  108. data/tracks/perl6/exercises/anagram/anagram.t +73 -40
  109. data/tracks/perl6/exercises/anagram/example.yaml +1 -1
  110. data/tracks/perl6/exercises/atbash-cipher/atbash-cipher.t +38 -15
  111. data/tracks/perl6/exercises/atbash-cipher/example.yaml +1 -1
  112. data/tracks/perl6/exercises/bob/bob.t +77 -27
  113. data/tracks/perl6/exercises/bob/example.yaml +1 -1
  114. data/tracks/perl6/exercises/flatten-array/example.yaml +1 -1
  115. data/tracks/perl6/exercises/flatten-array/flatten-array.t +20 -8
  116. data/tracks/perl6/exercises/luhn/example.yaml +1 -1
  117. data/tracks/perl6/exercises/luhn/luhn.t +42 -16
  118. data/tracks/perl6/exercises/roman-numerals/README.md +68 -0
  119. data/tracks/php/exercises/gigasecond/gigasecond_test.php +1 -1
  120. data/tracks/python/docs/ABOUT.md +2 -2
  121. metadata +27 -10
  122. data/tracks/bash/docs/EXERCISE_README_INSERT.md +0 -3
  123. data/tracks/bash/exercises/word-count/example.awk +0 -12
  124. data/tracks/java/exercises/alphametics/src/main/java/.keep +0 -0
@@ -51,7 +51,7 @@
51
51
  "map"
52
52
  ],
53
53
  "unlocked_by": null,
54
- "uuid": "612f5f98-09a6-9d80-5820-edeec5ce1e1544073ed"
54
+ "uuid": "06242da7-4796-482a-a467-358b22128c32"
55
55
  }
56
56
  ],
57
57
  "foregone": [],
@@ -61,4 +61,4 @@
61
61
  "docs"
62
62
  ],
63
63
  "language": "Idris"
64
- }
64
+ }
@@ -39,11 +39,7 @@ final class BaseConverter {
39
39
  }
40
40
 
41
41
  if (originalDigits.length == 0) {
42
- throw new IllegalArgumentException("You must supply at least one digit.");
43
- }
44
-
45
- if (originalDigits.length > 1 && originalDigits[0] == 0) {
46
- throw new IllegalArgumentException("Digits may not contain leading zeros.");
42
+ return;
47
43
  }
48
44
 
49
45
  if (Arrays.stream(originalDigits).min().getAsInt() < 0) {
@@ -1 +1 @@
1
- 1.1.0
1
+ 2.1.0
@@ -150,10 +150,18 @@ public class BaseConverterTest {
150
150
  @Ignore("Remove to run test")
151
151
  @Test
152
152
  public void testEmptyDigits() {
153
- expectedException.expect(IllegalArgumentException.class);
154
- expectedException.expectMessage("You must supply at least one digit.");
153
+ final BaseConverter baseConverter = new BaseConverter(2, new int[]{});
154
+
155
+ final int[] expectedDigits = new int[]{0};
156
+ final int[] actualDigits = baseConverter.convertToBase(10);
155
157
 
156
- new BaseConverter(2, new int[]{});
158
+ assertArrayEquals(
159
+ String.format(
160
+ "Expected digits: %s but found digits: %s",
161
+ Arrays.toString(expectedDigits),
162
+ Arrays.toString(actualDigits)),
163
+ expectedDigits,
164
+ actualDigits);
157
165
  }
158
166
 
159
167
  @Ignore("Remove to run test")
@@ -176,19 +184,35 @@ public class BaseConverterTest {
176
184
  @Ignore("Remove to run test")
177
185
  @Test
178
186
  public void testMultipleZeros() {
179
- expectedException.expect(IllegalArgumentException.class);
180
- expectedException.expectMessage("Digits may not contain leading zeros.");
187
+ final BaseConverter baseConverter = new BaseConverter(10, new int[]{0, 0, 0});
188
+
189
+ final int[] expectedDigits = new int[]{0};
190
+ final int[] actualDigits = baseConverter.convertToBase(2);
181
191
 
182
- new BaseConverter(10, new int[]{0, 0, 0});
192
+ assertArrayEquals(
193
+ String.format(
194
+ "Expected digits: %s but found digits: %s",
195
+ Arrays.toString(expectedDigits),
196
+ Arrays.toString(actualDigits)),
197
+ expectedDigits,
198
+ actualDigits);
183
199
  }
184
200
 
185
201
  @Ignore("Remove to run test")
186
202
  @Test
187
203
  public void testLeadingZeros() {
188
- expectedException.expect(IllegalArgumentException.class);
189
- expectedException.expectMessage("Digits may not contain leading zeros.");
204
+ final BaseConverter baseConverter = new BaseConverter(7, new int[]{0, 6, 0});
205
+
206
+ final int[] expectedDigits = new int[]{4, 2};
207
+ final int[] actualDigits = baseConverter.convertToBase(10);
190
208
 
191
- new BaseConverter(7, new int[]{0, 6, 0});
209
+ assertArrayEquals(
210
+ String.format(
211
+ "Expected digits: %s but found digits: %s",
212
+ Arrays.toString(expectedDigits),
213
+ Arrays.toString(actualDigits)),
214
+ expectedDigits,
215
+ actualDigits);
192
216
  }
193
217
 
194
218
  @Ignore("Remove to run test")
@@ -250,7 +274,7 @@ public class BaseConverterTest {
250
274
  @Ignore("Remove to run test")
251
275
  @Test
252
276
  public void testSecondBaseIsZero() {
253
- final BaseConverter baseConverter = new BaseConverter(2, new int[]{1, 0, 1, 0, 1, 0});
277
+ final BaseConverter baseConverter = new BaseConverter(10, new int[]{7});
254
278
 
255
279
  expectedException.expect(IllegalArgumentException.class);
256
280
  expectedException.expectMessage("Bases must be at least 2.");
@@ -6,6 +6,8 @@ Bob answers 'Sure.' if you ask him a question.
6
6
 
7
7
  He answers 'Whoa, chill out!' if you yell at him.
8
8
 
9
+ He answers 'Calm down, I know what I'm doing!' if you yell a question at him.
10
+
9
11
  He says 'Fine. Be that way!' if you address him without actually saying
10
12
  anything.
11
13
 
@@ -124,59 +124,4 @@ public class KindergartenGardenTest {
124
124
  );
125
125
  }
126
126
 
127
- @Ignore("Remove to run test")
128
- @Test
129
- public void customStudentGardenFirstStudentInAlphabeticalOrder() {
130
- String[] studentArray = {"Samantha", "Patricia", "Xander", "Roger"};
131
- String student = "Patricia";
132
- String plants = "VCRRGVRG\nRVGCCGCV";
133
- List<Plant> expected = Arrays.asList(Plant.VIOLETS, Plant.CLOVER, Plant.RADISHES, Plant.VIOLETS);
134
-
135
- assertEquals(
136
- expected,
137
- new KindergartenGarden(plants, studentArray).getPlantsOfStudent(student)
138
- );
139
- }
140
-
141
- @Ignore("Remove to run test")
142
- @Test
143
- public void customStudentGardenSecondStudentInAlphabeticalOrder() {
144
- String[] studentArray = {"Samantha", "Patricia", "Xander", "Roger"};
145
- String student = "Roger";
146
- String plants = "VCRRGVRG\nRVGCCGCV";
147
- List<Plant> expected = Arrays.asList(Plant.RADISHES, Plant.RADISHES, Plant.GRASS, Plant.CLOVER);
148
-
149
- assertEquals(
150
- expected,
151
- new KindergartenGarden(plants, studentArray).getPlantsOfStudent(student)
152
- );
153
- }
154
-
155
- @Ignore("Remove to run test")
156
- @Test
157
- public void customStudentGardenThirdStudentInAlphabeticalOrder() {
158
- String[] studentArray = {"Samantha", "Patricia", "Xander", "Roger"};
159
- String student = "Samantha";
160
- String plants = "VCRRGVRG\nRVGCCGCV";
161
- List<Plant> expected = Arrays.asList(Plant.GRASS, Plant.VIOLETS, Plant.CLOVER, Plant.GRASS);
162
-
163
- assertEquals(
164
- expected,
165
- new KindergartenGarden(plants, studentArray).getPlantsOfStudent(student)
166
- );
167
- }
168
-
169
- @Ignore("Remove to run test")
170
- @Test
171
- public void customStudentGardenFourthStudentInAlphabeticalOrder() {
172
- String[] studentArray = {"Samantha", "Patricia", "Xander", "Roger"};
173
- String student = "Xander";
174
- String plants = "VCRRGVRG\nRVGCCGCV";
175
- List<Plant> expected = Arrays.asList(Plant.RADISHES, Plant.GRASS, Plant.CLOVER, Plant.VIOLETS);
176
-
177
- assertEquals(
178
- expected,
179
- new KindergartenGarden(plants, studentArray).getPlantsOfStudent(student)
180
- );
181
- }
182
127
  }
@@ -0,0 +1 @@
1
+ 1.1.0
@@ -734,4 +734,36 @@ public class MeetupTest {
734
734
  Meetup meetup = new Meetup(4, 2013);
735
735
  assertEquals(expected, meetup.day(DayOfWeek.SUNDAY, MeetupSchedule.LAST));
736
736
  }
737
+
738
+ @Ignore("Remove to run test")
739
+ @Test
740
+ public void testLastWednesdayOfFebruary2012() {
741
+ LocalDate expected = LocalDate.of(2012, 2, 29);
742
+ Meetup meetup = new Meetup(2, 2012);
743
+ assertEquals(expected, meetup.day(DayOfWeek.WEDNESDAY, MeetupSchedule.LAST));
744
+ }
745
+
746
+ @Ignore("Remove to run test")
747
+ @Test
748
+ public void testLastWednesdayOfDecember2014() {
749
+ LocalDate expected = LocalDate.of(2014, 12, 31);
750
+ Meetup meetup = new Meetup(12, 2014);
751
+ assertEquals(expected, meetup.day(DayOfWeek.WEDNESDAY, MeetupSchedule.LAST));
752
+ }
753
+
754
+ @Ignore("Remove to run test")
755
+ @Test
756
+ public void testLastSundayOfFebruary2015() {
757
+ LocalDate expected = LocalDate.of(2015, 2, 22);
758
+ Meetup meetup = new Meetup(2, 2015);
759
+ assertEquals(expected, meetup.day(DayOfWeek.SUNDAY, MeetupSchedule.LAST));
760
+ }
761
+
762
+ @Ignore("Remove to run test")
763
+ @Test
764
+ public void testFirstFridayOfDecember2012() {
765
+ LocalDate expected = LocalDate.of(2012, 12, 7);
766
+ Meetup meetup = new Meetup(12, 2012);
767
+ assertEquals(expected, meetup.day(DayOfWeek.FRIDAY, MeetupSchedule.FIRST));
768
+ }
737
769
  }
@@ -15,6 +15,7 @@ Java documentation on [parallel streams](https://docs.oracle.com/javase/tutorial
15
15
 
16
16
  As a stretch goal, consider if your implementation will work for characters with [diacritics or accents](https://en.wikipedia.org/wiki/Diacritic). For example, such solutions should not consider e and ë the same character. An example text for this case is [Wilhelmus](https://en.wikipedia.org/wiki/Wilhelmus), the Dutch national anthem.
17
17
 
18
+
18
19
  # Running the tests
19
20
 
20
21
  You can run all the tests for an exercise by entering
@@ -1,14 +1,20 @@
1
- # Proverb in Java
1
+ # Proverb
2
2
 
3
- For want of a horseshoe nail, a kingdom was lost, or so the saying goes. Dynamically output the full test of this proverbial rhyme.
3
+ For want of a horseshoe nail, a kingdom was lost, or so the saying goes.
4
4
 
5
- > For want of a nail the shoe was lost.<br>
6
- > For want of a shoe the horse was lost.<br>
7
- > For want of a horse the rider was lost.<br>
8
- > For want of a rider the message was lost.<br>
9
- > For want of a message the battle was lost.<br>
10
- > For want of a battle the kingdom was lost.<br>
11
- > And all for the want of a horseshoe nail.<br>
5
+ Given a list of inputs, generate the relevant proverb. For example, given the list `["nail", "shoe", "horse", "rider", "message", "battle", "kingdom"]`, you will output the full text of this proverbial rhyme:
6
+
7
+ ```text
8
+ For want of a nail the shoe was lost.
9
+ For want of a shoe the horse was lost.
10
+ For want of a horse the rider was lost.
11
+ For want of a rider the message was lost.
12
+ For want of a message the battle was lost.
13
+ For want of a battle the kingdom was lost.
14
+ And all for the want of a nail.
15
+ ```
16
+
17
+ Note that the list of inputs may vary; your solution should be able to handle lists of arbitrary length and content. No line of the output text should be a static, unchanging string; all should vary according to the input given.
12
18
 
13
19
  # Running the tests
14
20
 
@@ -22,7 +28,7 @@ in your terminal.
22
28
 
23
29
  ## Source
24
30
 
25
- Wikipedia [https://en.wikipedia.org/wiki/For_Want_of_a_Nail](https://en.wikipedia.org/wiki/For_Want_of_a_Nail)
31
+ Wikipedia [http://en.wikipedia.org/wiki/For_Want_of_a_Nail](http://en.wikipedia.org/wiki/For_Want_of_a_Nail)
26
32
 
27
33
  ## Submitting Incomplete Solutions
28
34
 
@@ -58,21 +58,20 @@ W . . . E . . . C . . . R . . . L . . . T . . . E
58
58
 
59
59
  If you now read along the zig-zag shape you can read the original message.
60
60
 
61
+ # Running the tests
61
62
 
62
-
63
- To run the tests:
63
+ You can run all the tests for an exercise by entering
64
64
 
65
65
  ```sh
66
66
  $ gradle test
67
67
  ```
68
68
 
69
- For more detailed info about the Java track see the [help page](http://exercism.io/languages/java).
70
-
69
+ in your terminal.
71
70
 
72
71
  ## Source
73
72
 
74
- [Wikipedia](https://en.wikipedia.org/wiki/Transposition_cipher#Rail_Fence_cipher)
73
+ Wikipedia [https://en.wikipedia.org/wiki/Transposition_cipher#Rail_Fence_cipher](https://en.wikipedia.org/wiki/Transposition_cipher#Rail_Fence_cipher)
75
74
 
76
75
  ## Submitting Incomplete Solutions
76
+
77
77
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
78
- i
@@ -66,7 +66,7 @@ in your terminal.
66
66
 
67
67
  ## Source
68
68
 
69
- This is an exercise to introduce users to basic programming constructs, just after hello World. [https://en.wikipedia.org/wiki/Two-fer](https://en.wikipedia.org/wiki/Two-fer)
69
+ This is an exercise to introduce users to basic programming constructs, just after Hello World. [https://en.wikipedia.org/wiki/Two-fer](https://en.wikipedia.org/wiki/Two-fer)
70
70
 
71
71
  ## Submitting Incomplete Solutions
72
72
 
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.1.0
@@ -1,5 +1,6 @@
1
1
  import org.junit.Before;
2
2
  import org.junit.Test;
3
+ import org.junit.Ignore;
3
4
 
4
5
  import java.util.*;
5
6
 
@@ -15,7 +16,136 @@ public class WordSearcherTest {
15
16
  }
16
17
 
17
18
  @Test
18
- public void testLocatesWordsWrittenLeftToRight() {
19
+ public void testAcceptsInitialGridAndTargetWord() {
20
+ Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
21
+ expectedLocations.put("clojure", Optional.empty());
22
+
23
+ Set<String> searchWords = expectedLocations.keySet();
24
+
25
+ Map<String, Optional<WordLocation>> actualLocations = wordSearcher.search(
26
+ searchWords,
27
+ new char[][]{
28
+ {'j', 'e', 'f', 'b', 'l', 'p', 'e', 'p', 'r', 'e'}
29
+ }
30
+ );
31
+
32
+ assertEquals(expectedLocations, actualLocations);
33
+ }
34
+
35
+ @Ignore("Remove to run test")
36
+ @Test
37
+ public void testLocatesOneWordWrittenLeftToRight() {
38
+ Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
39
+ expectedLocations.put("clojure", Optional.of(new WordLocation(new Pair(1, 1), new Pair(7, 1))));
40
+
41
+ Set<String> searchWords = expectedLocations.keySet();
42
+
43
+ Map<String, Optional<WordLocation>> actualLocations = wordSearcher.search(
44
+ searchWords,
45
+ new char[][]{
46
+ {'c', 'l', 'o', 'j', 'u', 'r', 'e', 'r', 'm', 't'}
47
+ }
48
+ );
49
+
50
+ assertEquals(expectedLocations, actualLocations);
51
+ }
52
+
53
+ @Ignore("Remove to run test")
54
+ @Test
55
+ public void testShouldLocateTheSameWordLeftToRightInDifferentPosition() {
56
+ Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
57
+ expectedLocations.put("clojure", Optional.of(new WordLocation(new Pair(3, 1), new Pair(9, 1))));
58
+
59
+ Set<String> searchWords = expectedLocations.keySet();
60
+
61
+ Map<String, Optional<WordLocation>> actualLocations = wordSearcher.search(
62
+ searchWords,
63
+ new char[][]{
64
+ {'m', 't', 'c', 'l', 'o', 'j', 'u', 'r', 'e', 'r'}
65
+ }
66
+ );
67
+
68
+ assertEquals(expectedLocations, actualLocations);
69
+ }
70
+
71
+ @Ignore("Remove to run test")
72
+ @Test
73
+ public void testShouldLocateADifferentLeftToRightWord() {
74
+ Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
75
+ expectedLocations.put("coffee", Optional.of(new WordLocation(new Pair(1, 1), new Pair(6, 1))));
76
+
77
+ Set<String> searchWords = expectedLocations.keySet();
78
+
79
+ Map<String, Optional<WordLocation>> actualLocations = wordSearcher.search(
80
+ searchWords,
81
+ new char[][]{
82
+ {'c', 'o', 'f', 'f', 'e', 'e', 'l', 'p', 'l', 'x'}
83
+ }
84
+ );
85
+
86
+ assertEquals(expectedLocations, actualLocations);
87
+ }
88
+
89
+ @Ignore("Remove to run test")
90
+ @Test
91
+ public void testShouldLocateThatDifferentLeftToRightWordInADifferentPosition() {
92
+ Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
93
+ expectedLocations.put("coffee", Optional.of(new WordLocation(new Pair(2, 1), new Pair(7, 1))));
94
+
95
+ Set<String> searchWords = expectedLocations.keySet();
96
+
97
+ Map<String, Optional<WordLocation>> actualLocations = wordSearcher.search(
98
+ searchWords,
99
+ new char[][]{
100
+ {'x', 'c', 'o', 'f', 'f', 'e', 'e', 'z', 'l', 'p'}
101
+ }
102
+ );
103
+
104
+ assertEquals(expectedLocations, actualLocations);
105
+ }
106
+
107
+ @Ignore("Remove to run test")
108
+ @Test
109
+ public void testShouldLocateLeftToRightWordInTwoLineGrid() {
110
+ Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
111
+ expectedLocations.put("clojure", Optional.of(new WordLocation(new Pair(2, 2), new Pair(8, 2))));
112
+
113
+ Set<String> searchWords = expectedLocations.keySet();
114
+
115
+ Map<String, Optional<WordLocation>> actualLocations = wordSearcher.search(
116
+ searchWords,
117
+ new char[][]{
118
+ {'j', 'e', 'f', 'b', 'l', 'p', 'e', 'p', 'r', 'e'},
119
+ {'t', 'c', 'l', 'o', 'j', 'u', 'r', 'e', 'r', 'm'}
120
+ }
121
+ );
122
+
123
+ assertEquals(expectedLocations, actualLocations);
124
+ }
125
+
126
+ @Ignore("Remove to run test")
127
+ @Test
128
+ public void testShouldLocateLeftToRightWordInThreeLineGrid() {
129
+ Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
130
+ expectedLocations.put("clojure", Optional.of(new WordLocation(new Pair(1, 3), new Pair(7, 3))));
131
+
132
+ Set<String> searchWords = expectedLocations.keySet();
133
+
134
+ Map<String, Optional<WordLocation>> actualLocations = wordSearcher.search(
135
+ searchWords,
136
+ new char[][]{
137
+ {'c', 'a', 'm', 'd', 'c', 'i', 'm', 'g', 't', 'c'},
138
+ {'j', 'e', 'f', 'b', 'l', 'p', 'e', 'p', 'r', 'e'},
139
+ {'c', 'l', 'o', 'j', 'u', 'r', 'e', 'r', 'm', 't'}
140
+ }
141
+ );
142
+
143
+ assertEquals(expectedLocations, actualLocations);
144
+ }
145
+
146
+ @Ignore("Remove to run test")
147
+ @Test
148
+ public void testLocatesWordWrittenLeftToRightInTenLineGrid() {
19
149
  Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
20
150
  expectedLocations.put("clojure", Optional.of(new WordLocation(new Pair(1, 10), new Pair(7, 10))));
21
151
 
@@ -40,11 +170,112 @@ public class WordSearcherTest {
40
170
  assertEquals(expectedLocations, actualLocations);
41
171
  }
42
172
 
173
+ @Ignore("Remove to run test")
174
+ @Test
175
+ public void testLocatesSameWordWrittenLeftToRightInDifferentTenLineGrid() {
176
+ Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
177
+ expectedLocations.put("clojure", Optional.of(new WordLocation(new Pair(1, 9), new Pair(7, 9))));
178
+
179
+ Set<String> searchWords = expectedLocations.keySet();
180
+
181
+ Map<String, Optional<WordLocation>> actualLocations = wordSearcher.search(
182
+ searchWords,
183
+ new char[][]{
184
+ {'j', 'e', 'f', 'b', 'l', 'p', 'e', 'p', 'r', 'e'},
185
+ {'c', 'a', 'm', 'd', 'c', 'i', 'm', 'g', 't', 'c'},
186
+ {'o', 'i', 'v', 'o', 'k', 'p', 'r', 'j', 's', 'm'},
187
+ {'p', 'b', 'w', 'a', 's', 'q', 'r', 'o', 'u', 'a'},
188
+ {'r', 'i', 'x', 'i', 'l', 'e', 'l', 'h', 'r', 's'},
189
+ {'w', 'o', 'l', 'c', 'q', 'l', 'i', 'r', 'p', 'c'},
190
+ {'s', 'c', 'r', 'e', 'e', 'a', 'u', 'm', 'g', 'r'},
191
+ {'a', 'l', 'x', 'h', 'p', 'b', 'u', 'r', 'y', 'i'},
192
+ {'c', 'l', 'o', 'j', 'u', 'r', 'e', 'r', 'm', 't'},
193
+ {'j', 'a', 'l', 'a', 'y', 'c', 'a', 'l', 'm', 'p'}
194
+ }
195
+ );
196
+
197
+ assertEquals(expectedLocations, actualLocations);
198
+ }
199
+
200
+ @Ignore("Remove to run test")
201
+ @Test
202
+ public void testLocatesDifferentWordWrittenLeftToRightInTenLineGrid() {
203
+ Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
204
+ expectedLocations.put("fortran", Optional.of(new WordLocation(new Pair(1, 7), new Pair(7, 7))));
205
+
206
+ Set<String> searchWords = expectedLocations.keySet();
207
+
208
+ Map<String, Optional<WordLocation>> actualLocations = wordSearcher.search(
209
+ searchWords,
210
+ new char[][]{
211
+ {'j', 'e', 'f', 'b', 'l', 'p', 'e', 'p', 'r', 'e'},
212
+ {'c', 'a', 'm', 'd', 'c', 'i', 'm', 'g', 't', 'c'},
213
+ {'o', 'i', 'v', 'o', 'k', 'p', 'r', 'j', 's', 'm'},
214
+ {'p', 'b', 'w', 'a', 's', 'q', 'r', 'o', 'u', 'a'},
215
+ {'r', 'i', 'x', 'i', 'l', 'e', 'l', 'h', 'r', 's'},
216
+ {'w', 'o', 'l', 'c', 'q', 'l', 'i', 'r', 'p', 'c'},
217
+ {'f', 'o', 'r', 't', 'r', 'a', 'n', 'f', 't', 'w'},
218
+ {'a', 'l', 'x', 'h', 'p', 'b', 'u', 'r', 'y', 'i'},
219
+ {'c', 'l', 'o', 'j', 'u', 'r', 'e', 'r', 'm', 't'},
220
+ {'j', 'a', 'l', 'a', 'y', 'c', 'a', 'l', 'm', 'p'}
221
+ }
222
+ );
223
+
224
+ assertEquals(expectedLocations, actualLocations);
225
+ }
226
+
227
+ @Ignore("Remove to run test")
43
228
  @Test
44
- public void testLocatesWordsWrittenRightToLeft() {
229
+ public void testShouldLocateMultipleWords() {
45
230
  Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
231
+ expectedLocations.put("fortran", Optional.of(new WordLocation(new Pair(1, 7), new Pair(7, 7))));
46
232
  expectedLocations.put("clojure", Optional.of(new WordLocation(new Pair(1, 10), new Pair(7, 10))));
233
+
234
+ Set<String> searchWords = expectedLocations.keySet();
235
+
236
+ Map<String, Optional<WordLocation>> actualLocations = wordSearcher.search(
237
+ searchWords,
238
+ new char[][]{
239
+ {'j', 'e', 'f', 'b', 'l', 'p', 'e', 'p', 'r', 'e'},
240
+ {'c', 'a', 'm', 'd', 'c', 'i', 'm', 'g', 't', 'c'},
241
+ {'o', 'i', 'v', 'o', 'k', 'p', 'r', 'j', 's', 'm'},
242
+ {'p', 'b', 'w', 'a', 's', 'q', 'r', 'o', 'u', 'a'},
243
+ {'r', 'i', 'x', 'i', 'l', 'e', 'l', 'h', 'r', 's'},
244
+ {'w', 'o', 'l', 'c', 'q', 'l', 'i', 'r', 'p', 'c'},
245
+ {'f', 'o', 'r', 't', 'r', 'a', 'n', 'f', 't', 'w'},
246
+ {'a', 'l', 'x', 'h', 'p', 'b', 'u', 'r', 'y', 'i'},
247
+ {'j', 'a', 'l', 'a', 'y', 'c', 'a', 'l', 'm', 'p'},
248
+ {'c', 'l', 'o', 'j', 'u', 'r', 'e', 'r', 'm', 't'}
249
+ }
250
+ );
251
+
252
+ assertEquals(expectedLocations, actualLocations);
253
+ }
254
+
255
+ @Ignore("Remove to run test")
256
+ @Test
257
+ public void testShouldLocateASingleWordRightToLeft() {
258
+ Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
259
+ expectedLocations.put("elixir", Optional.of(new WordLocation(new Pair(6, 1), new Pair(1, 1))));
260
+
261
+ Set<String> searchWords = expectedLocations.keySet();
262
+
263
+ Map<String, Optional<WordLocation>> actualLocations = wordSearcher.search(
264
+ searchWords,
265
+ new char[][]{
266
+ {'r', 'i', 'x', 'i', 'l', 'e', 'l', 'h', 'r', 's'}
267
+ }
268
+ );
269
+
270
+ assertEquals(expectedLocations, actualLocations);
271
+ }
272
+
273
+ @Ignore("Remove to run test")
274
+ @Test
275
+ public void testShouldLocateMultipleWordsWrittenInDifferentHorizontalDirections() {
276
+ Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
47
277
  expectedLocations.put("elixir", Optional.of(new WordLocation(new Pair(6, 5), new Pair(1, 5))));
278
+ expectedLocations.put("clojure", Optional.of(new WordLocation(new Pair(1, 10), new Pair(7, 10))));
48
279
 
49
280
  Set<String> searchWords = expectedLocations.keySet();
50
281
 
@@ -67,6 +298,7 @@ public class WordSearcherTest {
67
298
  assertEquals(expectedLocations, actualLocations);
68
299
  }
69
300
 
301
+ @Ignore("Remove to run test")
70
302
  @Test
71
303
  public void testLocatesWordsWrittenTopToBottom() {
72
304
  Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
@@ -95,6 +327,7 @@ public class WordSearcherTest {
95
327
  assertEquals(expectedLocations, actualLocations);
96
328
  }
97
329
 
330
+ @Ignore("Remove to run test")
98
331
  @Test
99
332
  public void testLocatesWordsWrittenBottomToTop() {
100
333
  Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
@@ -122,6 +355,7 @@ public class WordSearcherTest {
122
355
  assertEquals(expectedLocations, actualLocations);
123
356
  }
124
357
 
358
+ @Ignore("Remove to run test")
125
359
  @Test
126
360
  public void testLocatesWordsWrittenTopLeftToBottomRight() {
127
361
  Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
@@ -150,6 +384,7 @@ public class WordSearcherTest {
150
384
  assertEquals(expectedLocations, actualLocations);
151
385
  }
152
386
 
387
+ @Ignore("Remove to run test")
153
388
  @Test
154
389
  public void testLocatesWordsWrittenBottomRightToTopLeft() {
155
390
  Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
@@ -179,6 +414,7 @@ public class WordSearcherTest {
179
414
  assertEquals(expectedLocations, actualLocations);
180
415
  }
181
416
 
417
+ @Ignore("Remove to run test")
182
418
  @Test
183
419
  public void testLocatesWordsWrittenBottomLeftToTopRight() {
184
420
  Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
@@ -209,6 +445,7 @@ public class WordSearcherTest {
209
445
  assertEquals(expectedLocations, actualLocations);
210
446
  }
211
447
 
448
+ @Ignore("Remove to run test")
212
449
  @Test
213
450
  public void testLocatesWordsWrittenTopRightToBottomLeft() {
214
451
  Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();
@@ -240,6 +477,7 @@ public class WordSearcherTest {
240
477
  assertEquals(expectedLocations, actualLocations);
241
478
  }
242
479
 
480
+ @Ignore("Remove to run test")
243
481
  @Test
244
482
  public void testFailsToLocateAWordsThatIsNotInThePuzzle() {
245
483
  Map<String, Optional<WordLocation>> expectedLocations = new HashMap<>();