trackler 2.2.1.10 → 2.2.1.11

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 (240) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +3 -0
  3. data/lib/trackler/version.rb +1 -1
  4. data/problem-specifications/CONTRIBUTING.md +1 -1
  5. data/problem-specifications/TOPICS.txt +1 -0
  6. data/problem-specifications/exercises/accumulate/description.md +0 -3
  7. data/problem-specifications/exercises/hamming/canonical-data.json +3 -3
  8. data/problem-specifications/exercises/house/canonical-data.json +322 -0
  9. data/problem-specifications/exercises/palindrome-products/description.md +2 -2
  10. data/problem-specifications/exercises/simple-cipher/description.md +1 -1
  11. data/tracks/bash/config.json +0 -11
  12. data/tracks/cpp/docs/ABOUT.md +12 -37
  13. data/tracks/csharp/config.json +37 -0
  14. data/tracks/csharp/config/maintainers.json +10 -0
  15. data/tracks/csharp/docs/ABOUT.md +1 -1
  16. data/tracks/csharp/docs/RESOURCES.md +2 -2
  17. data/tracks/csharp/exercises/Exercises.All.sln +50 -8
  18. data/tracks/csharp/exercises/Exercises.Default.sln +50 -8
  19. data/tracks/csharp/exercises/collatz-conjecture/CollatzConjecture.cs +9 -0
  20. data/tracks/csharp/exercises/collatz-conjecture/CollatzConjecture.csproj +18 -0
  21. data/tracks/csharp/exercises/collatz-conjecture/CollatzConjectureTest.cs +43 -0
  22. data/tracks/csharp/exercises/collatz-conjecture/Example.cs +30 -0
  23. data/tracks/csharp/exercises/collatz-conjecture/README.md +38 -0
  24. data/tracks/csharp/exercises/diamond/Diamond.cs +1 -1
  25. data/tracks/csharp/exercises/diamond/Diamond.csproj +3 -1
  26. data/tracks/csharp/exercises/diamond/DiamondTest.cs +39 -21
  27. data/tracks/csharp/exercises/diamond/Example.cs +2 -2
  28. data/tracks/csharp/exercises/diamond/HINTS.md +3 -1
  29. data/tracks/csharp/exercises/spiral-matrix/Example.cs +40 -0
  30. data/tracks/csharp/exercises/spiral-matrix/README.md +36 -0
  31. data/tracks/csharp/exercises/spiral-matrix/SpiralMatrix.cs +9 -0
  32. data/tracks/csharp/exercises/spiral-matrix/SpiralMatrix.csproj +18 -0
  33. data/tracks/csharp/exercises/spiral-matrix/SpiralMatrixTest.cs +78 -0
  34. data/tracks/csharp/exercises/two-fer/Example.cs +16 -0
  35. data/tracks/csharp/exercises/two-fer/README.md +25 -0
  36. data/tracks/csharp/exercises/two-fer/TwoFer.cs +9 -0
  37. data/tracks/csharp/exercises/two-fer/TwoFer.csproj +18 -0
  38. data/tracks/csharp/exercises/two-fer/TwoFerTest.cs +24 -0
  39. data/tracks/dart/README.md +1 -1
  40. data/tracks/dart/docs/EXERCISE_README_INSERT.md +9 -0
  41. data/tracks/dart/docs/INSTALLATION.md +13 -0
  42. data/tracks/dart/docs/LEARNING.md +6 -0
  43. data/tracks/dart/docs/RESOURCES.md +7 -0
  44. data/tracks/dart/docs/TESTS.md +133 -0
  45. data/tracks/delphi/docs/ABOUT.md +18 -5
  46. data/tracks/delphi/docs/Getting_Started_Guide.md +930 -0
  47. data/tracks/delphi/exercises/hamming/uHammingExample.pas +1 -1
  48. data/tracks/delphi/exercises/hamming/uHammingTests.pas +15 -15
  49. data/tracks/ecmascript/.travis.yml +2 -1
  50. data/tracks/ecmascript/Makefile +19 -8
  51. data/tracks/ecmascript/config.json +16 -0
  52. data/tracks/ecmascript/exercises/accumulate/package.json +5 -5
  53. data/tracks/ecmascript/exercises/acronym/package.json +5 -5
  54. data/tracks/ecmascript/exercises/all-your-base/package.json +5 -5
  55. data/tracks/ecmascript/exercises/allergies/package.json +5 -5
  56. data/tracks/ecmascript/exercises/alphametics/package.json +5 -5
  57. data/tracks/ecmascript/exercises/anagram/package.json +5 -5
  58. data/tracks/ecmascript/exercises/atbash-cipher/package.json +5 -5
  59. data/tracks/ecmascript/exercises/beer-song/package.json +5 -5
  60. data/tracks/ecmascript/exercises/binary-search-tree/package.json +5 -5
  61. data/tracks/ecmascript/exercises/binary-search/package.json +5 -5
  62. data/tracks/ecmascript/exercises/binary/package.json +5 -5
  63. data/tracks/ecmascript/exercises/bob/package.json +5 -5
  64. data/tracks/ecmascript/exercises/bracket-push/package.json +5 -5
  65. data/tracks/ecmascript/exercises/circular-buffer/package.json +5 -5
  66. data/tracks/ecmascript/exercises/clock/package.json +5 -5
  67. data/tracks/ecmascript/exercises/connect/package.json +5 -5
  68. data/tracks/ecmascript/exercises/crypto-square/package.json +5 -5
  69. data/tracks/ecmascript/exercises/custom-set/package.json +5 -5
  70. data/tracks/ecmascript/exercises/diamond/package.json +5 -5
  71. data/tracks/ecmascript/exercises/difference-of-squares/package.json +5 -5
  72. data/tracks/ecmascript/exercises/diffie-hellman/package.json +5 -5
  73. data/tracks/ecmascript/exercises/etl/package.json +5 -5
  74. data/tracks/ecmascript/exercises/flatten-array/package.json +5 -5
  75. data/tracks/ecmascript/exercises/food-chain/package.json +5 -5
  76. data/tracks/ecmascript/exercises/gigasecond/package.json +5 -5
  77. data/tracks/ecmascript/exercises/grade-school/package.json +5 -5
  78. data/tracks/ecmascript/exercises/grains/package.json +5 -5
  79. data/tracks/ecmascript/exercises/hamming/package.json +5 -5
  80. data/tracks/ecmascript/exercises/hello-world/package.json +5 -5
  81. data/tracks/ecmascript/exercises/hexadecimal/package.json +5 -5
  82. data/tracks/ecmascript/exercises/isogram/package.json +5 -5
  83. data/tracks/ecmascript/exercises/kindergarten-garden/package.json +5 -5
  84. data/tracks/ecmascript/exercises/largest-series-product/package.json +5 -5
  85. data/tracks/ecmascript/exercises/leap/package.json +5 -5
  86. data/tracks/ecmascript/exercises/linked-list/package.json +5 -5
  87. data/tracks/ecmascript/exercises/list-ops/package.json +5 -5
  88. data/tracks/ecmascript/exercises/luhn/package.json +5 -5
  89. data/tracks/ecmascript/exercises/matrix/package.json +5 -5
  90. data/tracks/ecmascript/exercises/meetup/package.json +5 -5
  91. data/tracks/ecmascript/exercises/minesweeper/package.json +5 -5
  92. data/tracks/ecmascript/exercises/nth-prime/package.json +5 -5
  93. data/tracks/ecmascript/exercises/ocr-numbers/package.json +5 -5
  94. data/tracks/ecmascript/exercises/octal/package.json +5 -5
  95. data/tracks/ecmascript/exercises/palindrome-products/package.json +5 -5
  96. data/tracks/ecmascript/exercises/pangram/package.json +5 -5
  97. data/tracks/ecmascript/exercises/pascals-triangle/package.json +5 -5
  98. data/tracks/ecmascript/exercises/perfect-numbers/package.json +5 -5
  99. data/tracks/ecmascript/exercises/phone-number/package.json +5 -5
  100. data/tracks/ecmascript/exercises/pig-latin/package.json +5 -5
  101. data/tracks/ecmascript/exercises/prime-factors/package.json +5 -5
  102. data/tracks/ecmascript/exercises/pythagorean-triplet/package.json +5 -5
  103. data/tracks/ecmascript/exercises/queen-attack/package.json +5 -5
  104. data/tracks/ecmascript/exercises/raindrops/package.json +5 -5
  105. data/tracks/ecmascript/exercises/rna-transcription/package.json +5 -5
  106. data/tracks/ecmascript/exercises/robot-name/package.json +5 -5
  107. data/tracks/ecmascript/exercises/robot-simulator/package.json +5 -5
  108. data/tracks/ecmascript/exercises/roman-numerals/package.json +5 -5
  109. data/tracks/ecmascript/exercises/run-length-encoding/README.md +59 -0
  110. data/tracks/ecmascript/exercises/run-length-encoding/example.js +13 -0
  111. data/tracks/ecmascript/exercises/run-length-encoding/package.json +69 -0
  112. data/tracks/ecmascript/exercises/run-length-encoding/run-length-encoding.spec.js +59 -0
  113. data/tracks/ecmascript/exercises/saddle-points/package.json +5 -5
  114. data/tracks/ecmascript/exercises/say/package.json +5 -5
  115. data/tracks/ecmascript/exercises/scrabble-score/package.json +5 -5
  116. data/tracks/ecmascript/exercises/secret-handshake/package.json +5 -5
  117. data/tracks/ecmascript/exercises/series/package.json +5 -5
  118. data/tracks/ecmascript/exercises/sieve/package.json +5 -5
  119. data/tracks/ecmascript/exercises/simple-cipher/package.json +5 -5
  120. data/tracks/ecmascript/exercises/space-age/package.json +5 -5
  121. data/tracks/ecmascript/exercises/strain/package.json +5 -5
  122. data/tracks/ecmascript/exercises/sublist/package.json +5 -5
  123. data/tracks/ecmascript/exercises/sum-of-multiples/package.json +5 -5
  124. data/tracks/ecmascript/exercises/triangle/package.json +5 -5
  125. data/tracks/ecmascript/exercises/trinary/package.json +5 -5
  126. data/tracks/ecmascript/exercises/twelve-days/package.json +6 -5
  127. data/tracks/ecmascript/exercises/two-bucket/package.json +5 -5
  128. data/tracks/ecmascript/exercises/word-count/package.json +5 -5
  129. data/tracks/ecmascript/exercises/wordy/package.json +5 -5
  130. data/tracks/ecmascript/package.json +5 -5
  131. data/tracks/ecmascript/yarn.lock +403 -152
  132. data/tracks/elixir/docs/ABOUT.md +7 -20
  133. data/tracks/erlang/docs/ABOUT.md +4 -6
  134. data/tracks/fsharp/config.json +2 -1
  135. data/tracks/fsharp/docs/ABOUT.md +6 -2
  136. data/tracks/gnu-apl/.gitignore +4 -0
  137. data/tracks/gnu-apl/.travis.yml +5 -0
  138. data/tracks/gnu-apl/LICENSE +21 -0
  139. data/tracks/gnu-apl/README.md +67 -0
  140. data/tracks/gnu-apl/bin/fetch-configlet +32 -0
  141. data/tracks/gnu-apl/config.json +15 -0
  142. data/tracks/{scala/exercises/binary-search/src/main/scala/BinarySearch.scala → gnu-apl/config/exercise-readme-insert.md} +0 -0
  143. data/tracks/gnu-apl/config/exercise-readme.go.tmpl +16 -0
  144. data/tracks/gnu-apl/config/maintainers.json +6 -0
  145. data/tracks/gnu-apl/docs/ABOUT.md +0 -0
  146. data/tracks/gnu-apl/docs/INSTALLATION.md +0 -0
  147. data/tracks/gnu-apl/docs/LEARNING.md +0 -0
  148. data/tracks/gnu-apl/docs/RESOURCES.md +0 -0
  149. data/tracks/gnu-apl/docs/TESTS.md +0 -0
  150. data/tracks/gnu-apl/img/.keep +0 -0
  151. data/tracks/go/docs/ABOUT.md +4 -2
  152. data/tracks/go/exercises/pangram/example.go +1 -1
  153. data/tracks/go/exercises/pangram/pangram.go +1 -1
  154. data/tracks/go/exercises/pangram/pangram_test.go +1 -3
  155. data/tracks/groovy/README.md +2 -0
  156. data/tracks/groovy/config.json +25 -20
  157. data/tracks/groovy/docs/ABOUT.md +10 -3
  158. data/tracks/groovy/exercises/difference-of-squares/DifferenceOfSquares.groovy +19 -0
  159. data/tracks/groovy/exercises/difference-of-squares/{SquaresSpec.groovy → DifferenceOfSquaresSpec.groovy} +3 -3
  160. data/tracks/groovy/exercises/difference-of-squares/Example.groovy +1 -1
  161. data/tracks/groovy/exercises/hamming/Hamming.groovy +7 -0
  162. data/tracks/groovy/exercises/leap/Example.groovy +2 -2
  163. data/tracks/groovy/exercises/leap/Leap.groovy +11 -0
  164. data/tracks/groovy/exercises/leap/LeapSpec.groovy +4 -4
  165. data/tracks/groovy/exercises/nth-prime/Example.groovy +1 -1
  166. data/tracks/groovy/exercises/nth-prime/NthPrime.groovy +7 -0
  167. data/tracks/groovy/exercises/nth-prime/{PrimeSpec.groovy → NthPrimeSpec.groovy} +6 -6
  168. data/tracks/groovy/exercises/phone-number/PhoneNumber.groovy +17 -0
  169. data/tracks/groovy/exercises/raindrops/Raindrops.groovy +7 -0
  170. data/tracks/groovy/exercises/rna-transcription/Example.groovy +1 -1
  171. data/tracks/groovy/exercises/rna-transcription/RnaTranscription.groovy +7 -0
  172. data/tracks/groovy/exercises/rna-transcription/{ComplementSpec.groovy → RnaTranscriptionSpec.groovy} +2 -2
  173. data/tracks/groovy/exercises/robot-name/Example.groovy +2 -2
  174. data/tracks/groovy/exercises/robot-name/RobotName.groovy +9 -0
  175. data/tracks/groovy/exercises/robot-name/{RobotSpec.groovy → RobotNameSpec.groovy} +6 -6
  176. data/tracks/groovy/exercises/roman-numerals/Example.groovy +2 -2
  177. data/tracks/groovy/exercises/roman-numerals/RomanNumerals.groovy +7 -0
  178. data/tracks/groovy/exercises/roman-numerals/{RomanSpec.groovy → RomanNumeralsSpec.groovy} +2 -2
  179. data/tracks/groovy/exercises/word-count/Example.groovy +2 -2
  180. data/tracks/groovy/exercises/word-count/{Phrase.groovy → WordCount.groovy} +2 -2
  181. data/tracks/groovy/exercises/word-count/WordCountSpec.groovy +47 -0
  182. data/tracks/java/config.json +84 -74
  183. data/tracks/java/docs/ABOUT.md +11 -5
  184. data/tracks/java/exercises/house/README.md +124 -0
  185. data/tracks/java/exercises/house/build.gradle +18 -0
  186. data/tracks/java/exercises/house/src/example/java/House.java +55 -0
  187. data/tracks/java/exercises/house/src/main/java/.keep +0 -0
  188. data/tracks/java/exercises/house/src/test/java/HouseTest.java +341 -0
  189. data/tracks/java/exercises/minesweeper/src/example/java/MinesweeperBoard.java +3 -3
  190. data/tracks/java/exercises/series/src/test/java/SeriesTest.java +6 -5
  191. data/tracks/java/exercises/settings.gradle +1 -0
  192. data/tracks/java/exercises/two-fer/src/test/java/TwoferTest.java +9 -0
  193. data/tracks/javascript/exercises/circular-buffer/circular-buffer.spec.js +8 -0
  194. data/tracks/javascript/exercises/simple-cipher/README.md +1 -1
  195. data/tracks/kotlin/docs/ABOUT.md +7 -10
  196. data/tracks/lisp/.travis.yml +26 -11
  197. data/tracks/purescript/docs/ABOUT.md +16 -0
  198. data/tracks/r/config.json +1 -1
  199. data/tracks/r/config/maintainers.json +9 -9
  200. data/tracks/r/docs/ABOUT.md +9 -11
  201. data/tracks/r/docs/snippet.txt +10 -0
  202. data/tracks/ruby/docs/ABOUT.md +5 -5
  203. data/tracks/ruby/exercises/collatz-conjecture/.meta/generator/collatz_conjecture_case.rb +1 -2
  204. data/tracks/ruby/exercises/space-age/.meta/generator/space_age_case.rb +1 -2
  205. data/tracks/ruby/exercises/sum-of-multiples/.meta/generator/sum_of_multiples_case.rb +1 -1
  206. data/tracks/ruby/lib/generator/exercise_case.rb +15 -0
  207. data/tracks/scala/exercises/alphametics/src/test/scala/AlphameticsTest.scala +42 -28
  208. data/tracks/scala/exercises/binary-search/example.scala +1 -1
  209. data/tracks/scala/exercises/binary-search/src/main/scala/.keep +0 -0
  210. data/tracks/scala/exercises/binary-search/src/test/scala/BinarySearchTest.scala +13 -22
  211. data/tracks/scala/exercises/bowling/src/main/scala/.keep +0 -0
  212. data/tracks/scala/exercises/bowling/src/test/scala/BowlingSuite.scala +30 -17
  213. data/tracks/scala/exercises/change/src/test/scala/ChangeTest.scala +14 -4
  214. data/tracks/scala/exercises/custom-set/src/test/scala/CustomSetTest.scala +6 -4
  215. data/tracks/scala/exercises/food-chain/example.scala +4 -2
  216. data/tracks/scala/exercises/food-chain/src/test/scala/FoodChainTest.scala +170 -59
  217. data/tracks/scala/exercises/luhn/example.scala +9 -21
  218. data/tracks/scala/exercises/luhn/src/test/scala/LuhnTest.scala +46 -10
  219. data/tracks/scala/testgen/src/main/scala/AlphametricsTestGenerator.scala +42 -0
  220. data/tracks/scala/testgen/src/main/scala/BinarySearchTestGenerator.scala +32 -42
  221. data/tracks/scala/testgen/src/main/scala/BowlingTestGenerator.scala +22 -7
  222. data/tracks/scala/testgen/src/main/scala/ChangeTestGenerator.scala +37 -0
  223. data/tracks/scala/testgen/src/main/scala/CustomSetTestGenerator.scala +25 -20
  224. data/tracks/scala/testgen/src/main/scala/FoodChainTestGenerator.scala +13 -2
  225. data/tracks/scala/testgen/src/main/scala/LuhnTestGenerator.scala +15 -0
  226. data/tracks/scala/testgen/src/main/scala/TestBuilder.scala +10 -0
  227. data/tracks/sml/.travis.yml +9 -2
  228. data/tracks/sml/Makefile +42 -0
  229. data/tracks/sml/docs/EXERCISE_README_INSERT.md +21 -5
  230. data/tracks/sml/docs/RESOURCES.md +1 -1
  231. data/tracks/sml/docs/TESTS.md +2 -2
  232. metadata +67 -17
  233. data/tracks/bash/exercises/word-count/README.md +0 -24
  234. data/tracks/bash/exercises/word-count/example.awk +0 -12
  235. data/tracks/bash/exercises/word-count/example.sh +0 -21
  236. data/tracks/dart/.github/PULL_REQUEST_TEMPLATE.md +0 -23
  237. data/tracks/ecmascript/.babelrc +0 -3
  238. data/tracks/groovy/exercises/roman-numerals/Roman.groovy +0 -33
  239. data/tracks/groovy/exercises/word-count/PhraseSpec.groovy +0 -47
  240. data/tracks/scala/exercises/bowling/src/main/scala/Bowling.scala +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 68910c17056f60fa936005d660ffee60c7f48457
4
- data.tar.gz: 85f24b00eec2d4e267fd48b7a095e6303df04450
3
+ metadata.gz: 643c800ff499662b7d1b27b73254935090d5ef8f
4
+ data.tar.gz: 3a8a383cb166273a7fda7b0bcd2d54a51a2cfe84
5
5
  SHA512:
6
- metadata.gz: 2aa11d5c09f99c3c200621296e17b94ec72dc89190ba2b3b73e844faae7496b99b806dd8c8458482df515d89a9cf8495687834ca749144797cc3698ed30f01d1
7
- data.tar.gz: 9bb954088ac4a7953d124b6506b7b64afea1155d8668fe1b6e2db83af7aa3134dd650327ee90a48855d763830c5fbdaccfe157fd4a09d0251d02e7959cf6eeb4
6
+ metadata.gz: 0b2738e867cb7248a54e07e83dc85d7b8df3dcefae27008200b94b690981818cc63ff66a94a2d424443af8e4102d0dbd995c4c4f10a327efb1e8d1f0a44702dd
7
+ data.tar.gz: 120adbf3d5a0b0ccf504fa10f2786b5dfad66c97381cbe61b5b596ee4b033626d193f77d3f8317fb086a8124b57f55a7b4c83a8a49738f60dbfa10f0be5c9df2
data/.gitmodules CHANGED
@@ -172,3 +172,6 @@
172
172
  [submodule "problem-specifications"]
173
173
  path = problem-specifications
174
174
  url = https://github.com/exercism/problem-specifications
175
+ [submodule "tracks/gnu-apl"]
176
+ path = tracks/gnu-apl
177
+ url = https://github.com/exercism/gnu-apl
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.2.1.10"
2
+ VERSION = "2.2.1.11"
3
3
  end
@@ -317,7 +317,7 @@ scenarios in this guide.
317
317
 
318
318
  ### Pull Request Guidelines
319
319
 
320
- See the [pull request guidelines](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/pull-request-guidelines.md) in the docs repository.
320
+ See the [pull request guidelines](https://github.com/exercism/docs/blob/master/contributing/pull-request-guidelines.md) in the docs repository.
321
321
 
322
322
  ### Exercise Versioning
323
323
 
@@ -56,6 +56,7 @@ Games
56
56
  Globalization
57
57
  Logic
58
58
  Mathematics
59
+ Memory Management
59
60
  Networking
60
61
  Parallellism
61
62
  Parsing
@@ -22,6 +22,3 @@ Check out the test suite to see the expected function signature.
22
22
  Keep your hands off that collect/map/fmap/whatchamacallit functionality
23
23
  provided by your standard library!
24
24
  Solve this one yourself using other basic tools instead.
25
-
26
- Lisp specific: it's perfectly fine to use `MAPCAR` or the equivalent,
27
- as this is idiomatic Lisp, not a library function.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "exercise": "hamming",
3
- "version": "1.1.0",
3
+ "version": "2.0.0",
4
4
  "comments": [
5
5
  "Language implementations vary on the issue of unequal length strands.",
6
6
  "A language may elect to simplify this task by only presenting equal",
@@ -110,14 +110,14 @@
110
110
  "property": "distance",
111
111
  "strand1": "AATG",
112
112
  "strand2": "AAA",
113
- "expected": -1
113
+ "expected": {"error": "left and right strands must be of equal length"}
114
114
  },
115
115
  {
116
116
  "description": "disallow second strand longer",
117
117
  "property": "distance",
118
118
  "strand1": "ATA",
119
119
  "strand2": "AGTG",
120
- "expected": -1
120
+ "expected": {"error": "left and right strands must be of equal length"}
121
121
  }
122
122
  ]
123
123
  }
@@ -0,0 +1,322 @@
1
+ {
2
+ "exercise": "house",
3
+ "version": "1.0.0",
4
+ "comments": [
5
+ "JSON doesn't allow for multi-line strings, so all verses are presented ",
6
+ "here as arrays of strings. It's up to the test generator to join the ",
7
+ "lines together with line breaks.",
8
+ "Some languages test for the verse() method, which takes a start verse ",
9
+ "and optional end verse, but other languages have only tested for the full poem.",
10
+ "For those languages in the latter category, you may wish to only ",
11
+ "implement the full song test and leave the rest alone, ignoring the start verse, ",
12
+ "end verse, and verse fields."
13
+ ],
14
+ "cases": [
15
+ {
16
+ "description": "Return specified verse or series of verses",
17
+ "cases": [
18
+ {
19
+ "description": "verse one - the house that jack built",
20
+ "property": "verse",
21
+ "verse": 1,
22
+ "expected": [
23
+ "This is the house that Jack built."
24
+ ]
25
+ },
26
+ {
27
+ "description": "verse two - the malt that lay",
28
+ "property": "verse",
29
+ "verse": 2,
30
+ "expected": [
31
+ "This is the malt",
32
+ "that lay in the house that Jack built."
33
+ ]
34
+ },
35
+ {
36
+ "description": "verse three - the rat that ate",
37
+ "property": "verse",
38
+ "verse": 3,
39
+ "expected": [
40
+ "This is the rat",
41
+ "that ate the malt",
42
+ "that lay in the house that Jack built."
43
+ ]
44
+ },
45
+ {
46
+ "description": "verse four - the cat that killed",
47
+ "property": "verse",
48
+ "verse": 4,
49
+ "expected": [
50
+ "This is the cat",
51
+ "that killed the rat",
52
+ "that ate the malt",
53
+ "that lay in the house that Jack built."
54
+ ]
55
+ },
56
+ {
57
+ "description": "verse five - the dog that worried",
58
+ "property": "verse",
59
+ "verse": 5,
60
+ "expected": [
61
+ "This is the dog",
62
+ "that worried the cat",
63
+ "that killed the rat",
64
+ "that ate the malt",
65
+ "that lay in the house that Jack built."
66
+ ]
67
+ },
68
+ {
69
+ "description": "verse six - the cow with the crumpled horn",
70
+ "property": "verse",
71
+ "verse": 6,
72
+ "expected": [
73
+ "This is the cow with the crumpled horn",
74
+ "that tossed the dog",
75
+ "that worried the cat",
76
+ "that killed the rat",
77
+ "that ate the malt",
78
+ "that lay in the house that Jack built."
79
+ ]
80
+ },
81
+ {
82
+ "description": "verse seven - the maiden all forlorn",
83
+ "property": "verse",
84
+ "verse": 7,
85
+ "expected": [
86
+ "This is the maiden all forlorn",
87
+ "that milked the cow with the crumpled horn",
88
+ "that tossed the dog",
89
+ "that worried the cat",
90
+ "that killed the rat",
91
+ "that ate the malt",
92
+ "that lay in the house that Jack built."
93
+ ]
94
+ },
95
+ {
96
+ "description": "verse eight - the man all tattered and torn",
97
+ "property": "verse",
98
+ "verse": 8,
99
+ "expected": [
100
+ "This is the man all tattered and torn",
101
+ "that kissed the maiden all forlorn",
102
+ "that milked the cow with the crumpled horn",
103
+ "that tossed the dog",
104
+ "that worried the cat",
105
+ "that killed the rat",
106
+ "that ate the malt",
107
+ "that lay in the house that Jack built."
108
+ ]
109
+ },
110
+ {
111
+ "description": "verse nine - the priest all shaven and shorn",
112
+ "property": "verse",
113
+ "verse": 9,
114
+ "expected": [
115
+ "This is the priest all shaven and shorn",
116
+ "that married the man all tattered and torn",
117
+ "that kissed the maiden all forlorn",
118
+ "that milked the cow with the crumpled horn",
119
+ "that tossed the dog",
120
+ "that worried the cat",
121
+ "that killed the rat",
122
+ "that ate the malt",
123
+ "that lay in the house that Jack built."
124
+ ]
125
+ },
126
+ {
127
+ "description": "verse 10 - the rooster that crowed in the morn",
128
+ "property": "verse",
129
+ "verse": 10,
130
+ "expected": [
131
+ "This is the rooster that crowed in the morn",
132
+ "that woke the priest all shaven and shorn",
133
+ "that married the man all tattered and torn",
134
+ "that kissed the maiden all forlorn",
135
+ "that milked the cow with the crumpled horn",
136
+ "that tossed the dog",
137
+ "that worried the cat",
138
+ "that killed the rat",
139
+ "that ate the malt",
140
+ "that lay in the house that Jack built."
141
+ ]
142
+ },
143
+ {
144
+ "description": "verse 11 - the farmer sowing his corn",
145
+ "property": "verse",
146
+ "verse": 11,
147
+ "expected": [
148
+ "This is the farmer sowing his corn",
149
+ "that kept the rooster that crowed in the morn",
150
+ "that woke the priest all shaven and shorn",
151
+ "that married the man all tattered and torn",
152
+ "that kissed the maiden all forlorn",
153
+ "that milked the cow with the crumpled horn",
154
+ "that tossed the dog",
155
+ "that worried the cat",
156
+ "that killed the rat",
157
+ "that ate the malt",
158
+ "that lay in the house that Jack built."
159
+ ]
160
+ },
161
+ {
162
+ "description": "verse 12 - the horse and the hound and the horn",
163
+ "property": "verse",
164
+ "verse": 12,
165
+ "expected": [
166
+ "This is the horse and the hound and the horn",
167
+ "that belonged to the farmer sowing his corn",
168
+ "that kept the rooster that crowed in the morn",
169
+ "that woke the priest all shaven and shorn",
170
+ "that married the man all tattered and torn",
171
+ "that kissed the maiden all forlorn",
172
+ "that milked the cow with the crumpled horn",
173
+ "that tossed the dog",
174
+ "that worried the cat",
175
+ "that killed the rat",
176
+ "that ate the malt",
177
+ "that lay in the house that Jack built."
178
+ ]
179
+ },
180
+ {
181
+ "description": "multiple verses",
182
+ "property": "verses",
183
+ "start verse": 4,
184
+ "end verse": 8,
185
+ "expected": [
186
+ "This is the cat",
187
+ "that killed the rat",
188
+ "that ate the malt",
189
+ "that lay in the house that Jack built.",
190
+ "",
191
+ "This is the dog",
192
+ "that worried the cat",
193
+ "that killed the rat",
194
+ "that ate the malt",
195
+ "that lay in the house that Jack built.",
196
+ "",
197
+ "This is the cow with the crumpled horn",
198
+ "that tossed the dog",
199
+ "that worried the cat",
200
+ "that killed the rat",
201
+ "that ate the malt",
202
+ "that lay in the house that Jack built.",
203
+ "",
204
+ "This is the maiden all forlorn",
205
+ "that milked the cow with the crumpled horn",
206
+ "that tossed the dog",
207
+ "that worried the cat",
208
+ "that killed the rat",
209
+ "that ate the malt",
210
+ "that lay in the house that Jack built.",
211
+ "",
212
+ "This is the man all tattered and torn",
213
+ "that kissed the maiden all forlorn",
214
+ "that milked the cow with the crumpled horn",
215
+ "that tossed the dog",
216
+ "that worried the cat",
217
+ "that killed the rat",
218
+ "that ate the malt",
219
+ "that lay in the house that Jack built."
220
+ ]
221
+ },
222
+ {
223
+ "description": "full rhyme",
224
+ "property": "verses",
225
+ "start verse": 1,
226
+ "end verse": 12,
227
+ "expected": [
228
+ "This is the house that Jack built.",
229
+ "",
230
+ "This is the malt",
231
+ "that lay in the house that Jack built.",
232
+ "",
233
+ "This is the rat",
234
+ "that ate the malt",
235
+ "that lay in the house that Jack built.",
236
+ "",
237
+ "This is the cat",
238
+ "that killed the rat",
239
+ "that ate the malt",
240
+ "that lay in the house that Jack built.",
241
+ "",
242
+ "This is the dog",
243
+ "that worried the cat",
244
+ "that killed the rat",
245
+ "that ate the malt",
246
+ "that lay in the house that Jack built.",
247
+ "",
248
+ "This is the cow with the crumpled horn",
249
+ "that tossed the dog",
250
+ "that worried the cat",
251
+ "that killed the rat",
252
+ "that ate the malt",
253
+ "that lay in the house that Jack built.",
254
+ "",
255
+ "This is the maiden all forlorn",
256
+ "that milked the cow with the crumpled horn",
257
+ "that tossed the dog",
258
+ "that worried the cat",
259
+ "that killed the rat",
260
+ "that ate the malt",
261
+ "that lay in the house that Jack built.",
262
+ "",
263
+ "This is the man all tattered and torn",
264
+ "that kissed the maiden all forlorn",
265
+ "that milked the cow with the crumpled horn",
266
+ "that tossed the dog",
267
+ "that worried the cat",
268
+ "that killed the rat",
269
+ "that ate the malt",
270
+ "that lay in the house that Jack built.",
271
+ "",
272
+ "This is the priest all shaven and shorn",
273
+ "that married the man all tattered and torn",
274
+ "that kissed the maiden all forlorn",
275
+ "that milked the cow with the crumpled horn",
276
+ "that tossed the dog",
277
+ "that worried the cat",
278
+ "that killed the rat",
279
+ "that ate the malt",
280
+ "that lay in the house that Jack built.",
281
+ "",
282
+ "This is the rooster that crowed in the morn",
283
+ "that woke the priest all shaven and shorn",
284
+ "that married the man all tattered and torn",
285
+ "that kissed the maiden all forlorn",
286
+ "that milked the cow with the crumpled horn",
287
+ "that tossed the dog",
288
+ "that worried the cat",
289
+ "that killed the rat",
290
+ "that ate the malt",
291
+ "that lay in the house that Jack built.",
292
+ "",
293
+ "This is the farmer sowing his corn",
294
+ "that kept the rooster that crowed in the morn",
295
+ "that woke the priest all shaven and shorn",
296
+ "that married the man all tattered and torn",
297
+ "that kissed the maiden all forlorn",
298
+ "that milked the cow with the crumpled horn",
299
+ "that tossed the dog",
300
+ "that worried the cat",
301
+ "that killed the rat",
302
+ "that ate the malt",
303
+ "that lay in the house that Jack built.",
304
+ "",
305
+ "This is the horse and the hound and the horn",
306
+ "that belonged to the farmer sowing his corn",
307
+ "that kept the rooster that crowed in the morn",
308
+ "that woke the priest all shaven and shorn",
309
+ "that married the man all tattered and torn",
310
+ "that kissed the maiden all forlorn",
311
+ "that milked the cow with the crumpled horn",
312
+ "that tossed the dog",
313
+ "that worried the cat",
314
+ "that killed the rat",
315
+ "that ate the malt",
316
+ "that lay in the house that Jack built."
317
+ ]
318
+ }
319
+ ]
320
+ }
321
+ ]
322
+ }
@@ -12,7 +12,7 @@ product: `91 * 99 = 9009`.
12
12
 
13
13
  It's possible (and indeed common) for a palindrome product to be the product
14
14
  of multiple combinations of numbers. For example, the palindrome product `9` has
15
- the factors `(1, 9)`, `(3, 3)`, and `(9, 1)`.
15
+ the factors `(1, 9)` and `(3, 3)`.
16
16
 
17
17
  Write a program that given a range of integers, returns the smallest and largest
18
18
  palindromic product of factors within that range, along with all the factors in the range for that product.
@@ -22,7 +22,7 @@ palindromic product of factors within that range, along with all the factors in
22
22
  Given the range `[1, 9]` (both inclusive)...
23
23
 
24
24
  The smallest product is `1`. Its factors are `(1, 1)`.
25
- The largest product is `9`. Its factors are `(1, 9)`, `(3, 3)`, and `(9, 1)`.
25
+ The largest product is `9`. Its factors are `(1, 9)`, and `(3, 3)`.
26
26
 
27
27
  ## Example 2
28
28
 
@@ -45,7 +45,7 @@ Given the key "aaaaaaaaaaaaaaaaaa", encoding the string "iamapandabear"
45
45
  would return the original "iamapandabear".
46
46
 
47
47
  Given the key "ddddddddddddddddd", encoding our string "iamapandabear"
48
- would return the obscured "lpdsdqgdehdu"
48
+ would return the obscured "ldpdsdqgdehdu"
49
49
 
50
50
  In the example above, we've set a = 0 for the key value. So when the
51
51
  plaintext is added to the key, we end up with the same message coming
@@ -109,17 +109,6 @@
109
109
  "associative_arrays"
110
110
  ]
111
111
  },
112
- {
113
- "uuid": "51bd6542-408b-4a73-8343-1c4d50db5315",
114
- "slug": "word-count",
115
- "core": false,
116
- "unlocked_by": "pangram",
117
- "difficulty": 2,
118
- "topics": [
119
- "control_flow_loops",
120
- "string_comparison"
121
- ]
122
- },
123
112
  {
124
113
  "uuid": "0cfac255-6871-4588-a16b-98f7692bfdbe",
125
114
  "slug": "two-fer",