trackler 2.2.1.86 → 2.2.1.87

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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<>();