trackler 2.2.1.105 → 2.2.1.106

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 (558) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/.travis.yml +1 -41
  4. data/problem-specifications/exercises/bowling/canonical-data.json +17 -1
  5. data/problem-specifications/exercises/circular-buffer/canonical-data.json +317 -278
  6. data/problem-specifications/exercises/forth/canonical-data.json +155 -67
  7. data/problem-specifications/exercises/grains/canonical-data.json +32 -11
  8. data/problem-specifications/exercises/grep/canonical-data.json +106 -64
  9. data/problem-specifications/exercises/house/canonical-data.json +57 -29
  10. data/problem-specifications/exercises/isogram/canonical-data.json +28 -10
  11. data/problem-specifications/exercises/list-ops/canonical-data.json +77 -39
  12. data/problem-specifications/exercises/pov/canonical-data.json +386 -355
  13. data/problem-specifications/exercises/trinary/canonical-data.json +34 -12
  14. data/problem-specifications/exercises/two-bucket/description.md +1 -1
  15. data/problem-specifications/exercises/word-search/canonical-data.json +309 -269
  16. data/problem-specifications/exercises/zipper/canonical-data.json +337 -311
  17. data/tracks/bash/docs/ABOUT.md +22 -2
  18. data/tracks/c/exercises/bob/README.md +2 -0
  19. data/tracks/c/exercises/bob/src/example.c +4 -2
  20. data/tracks/c/exercises/bob/test/test_bob.c +82 -12
  21. data/tracks/c/exercises/palindrome-products/src/example.c +100 -27
  22. data/tracks/c/exercises/palindrome-products/src/example.h +19 -4
  23. data/tracks/c/exercises/palindrome-products/test/test_palindrome_products.c +178 -10
  24. data/tracks/common-lisp/exercises/bob/README.md +2 -0
  25. data/tracks/common-lisp/exercises/bob/bob-test.lisp +45 -8
  26. data/tracks/common-lisp/exercises/bob/example.lisp +11 -7
  27. data/tracks/cpp/docs/INSTALLATION.md +1 -1
  28. data/tracks/cpp/exercises/leap/leap_test.cpp +1 -1
  29. data/tracks/elixir/exercises/pig-latin/example.exs +1 -2
  30. data/tracks/elixir/exercises/pig-latin/pig_latin_test.exs +13 -4
  31. data/tracks/elm/config.json +4 -4
  32. data/tracks/elm/exercises/bob/Bob.example.elm +3 -1
  33. data/tracks/elm/exercises/bob/README.md +2 -0
  34. data/tracks/elm/exercises/bob/tests/Tests.elm +1 -1
  35. data/tracks/elm/exercises/phone-number/PhoneNumber.example.elm +33 -18
  36. data/tracks/elm/exercises/phone-number/tests/Tests.elm +40 -19
  37. data/tracks/elm/exercises/space-age/tests/Tests.elm +8 -8
  38. data/tracks/fsharp/exercises/all-your-base/AllYourBaseTest.fs +2 -2
  39. data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTree.fs +3 -7
  40. data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTreeTest.fs +63 -37
  41. data/tracks/fsharp/exercises/binary-search-tree/Example.fs +5 -5
  42. data/tracks/fsharp/exercises/circular-buffer/CircularBufferTest.fs +0 -13
  43. data/tracks/fsharp/exercises/complex-numbers/ComplexNumbersTest.fs +7 -1
  44. data/tracks/fsharp/exercises/react/ReactTest.fs +0 -12
  45. data/tracks/fsharp/exercises/scale-generator/Example.fs +11 -7
  46. data/tracks/fsharp/exercises/scale-generator/ScaleGenerator.fs +1 -1
  47. data/tracks/fsharp/exercises/scale-generator/ScaleGeneratorTest.fs +34 -49
  48. data/tracks/fsharp/generators/Common.fs +1 -1
  49. data/tracks/fsharp/generators/Exercise.fs +3 -2
  50. data/tracks/fsharp/generators/Generators.fs +95 -29
  51. data/tracks/fsharp/generators/Templates/_TestFunction.liquid +1 -1
  52. data/tracks/fsharp/generators/Templates/_TestFunctionBody.liquid +3 -1
  53. data/tracks/fsharp/generators/Templates/_TestMember.liquid +1 -1
  54. data/tracks/fsharp/generators/Templates/_TestMemberBody.liquid +3 -1
  55. data/tracks/go/exercises/simple-linked-list/linked_list_test.go +17 -13
  56. data/tracks/haskell/config.json +10 -0
  57. data/tracks/haskell/exercises/all-your-base/package.yaml +1 -1
  58. data/tracks/haskell/exercises/all-your-base/test/Tests.hs +1 -1
  59. data/tracks/haskell/exercises/bowling/package.yaml +1 -1
  60. data/tracks/haskell/exercises/bowling/test/Tests.hs +8 -0
  61. data/tracks/haskell/exercises/complex-numbers/package.yaml +1 -1
  62. data/tracks/haskell/exercises/diamond/examples/success-standard/src/Diamond.hs +2 -2
  63. data/tracks/haskell/exercises/diamond/package.yaml +1 -1
  64. data/tracks/haskell/exercises/diamond/src/Diamond.hs +1 -1
  65. data/tracks/haskell/exercises/diamond/test/Tests.hs +1 -1
  66. data/tracks/haskell/exercises/forth/package.yaml +1 -1
  67. data/tracks/haskell/exercises/grains/package.yaml +1 -1
  68. data/tracks/haskell/exercises/isogram/package.yaml +1 -1
  69. data/tracks/haskell/exercises/list-ops/package.yaml +1 -1
  70. data/tracks/haskell/exercises/list-ops/test/Tests.hs +81 -76
  71. data/tracks/haskell/exercises/pov/package.yaml +1 -1
  72. data/tracks/haskell/exercises/protein-translation/README.md +102 -0
  73. data/tracks/haskell/exercises/protein-translation/examples/success-standard/package.yaml +17 -0
  74. data/tracks/haskell/exercises/protein-translation/examples/success-standard/src/ProteinTranslation.hs +24 -0
  75. data/tracks/haskell/exercises/protein-translation/package.yaml +20 -0
  76. data/tracks/haskell/exercises/protein-translation/src/ProteinTranslation.hs +4 -0
  77. data/tracks/haskell/exercises/protein-translation/stack.yaml +1 -0
  78. data/tracks/haskell/exercises/protein-translation/test/Tests.hs +119 -0
  79. data/tracks/haskell/exercises/zipper/package.yaml +1 -1
  80. data/tracks/java/.github/PULL_REQUEST_TEMPLATE.md +1 -1
  81. data/tracks/java/config.json +13 -0
  82. data/tracks/java/exercises/atbash-cipher/src/test/java/AtbashTest.java +78 -62
  83. data/tracks/java/exercises/binary/.meta/version +1 -0
  84. data/tracks/java/exercises/binary/src/test/java/BinaryTest.java +97 -32
  85. data/tracks/java/exercises/bracket-push/.meta/version +1 -1
  86. data/tracks/java/exercises/isbn-verifier/.meta/version +1 -1
  87. data/tracks/java/exercises/isbn-verifier/src/test/java/IsbnVerifierTest.java +6 -0
  88. data/tracks/java/exercises/matrix/.meta/src/reference/java/Matrix.java +0 -8
  89. data/tracks/java/exercises/matrix/.meta/version +2 -0
  90. data/tracks/java/exercises/matrix/src/test/java/MatrixTest.java +95 -193
  91. data/tracks/java/exercises/octal/src/test/java/OctalTest.java +81 -32
  92. data/tracks/java/exercises/pascals-triangle/.meta/version +1 -1
  93. data/tracks/java/exercises/phone-number/.meta/version +1 -1
  94. data/tracks/java/exercises/pig-latin/.meta/version +1 -1
  95. data/tracks/java/exercises/pig-latin/src/test/java/PigLatinTranslatorTest.java +116 -55
  96. data/tracks/java/exercises/prime-factors/src/test/java/PrimeFactorsCalculatorTest.java +42 -24
  97. data/tracks/java/exercises/raindrops/.meta/version +1 -1
  98. data/tracks/java/exercises/raindrops/src/test/java/RaindropConverterTest.java +97 -41
  99. data/tracks/java/exercises/reverse-string/.meta/version +1 -1
  100. data/tracks/java/exercises/roman-numerals/src/test/java/RomanNumeralsTest.java +118 -37
  101. data/tracks/java/exercises/run-length-encoding/.meta/version +1 -0
  102. data/tracks/java/exercises/scrabble-score/src/test/java/ScrabbleScoreTest.java +71 -29
  103. data/tracks/java/exercises/settings.gradle +1 -0
  104. data/tracks/java/exercises/two-bucket/.meta/src/reference/java/TwoBucket.java +145 -0
  105. data/tracks/java/exercises/two-bucket/.meta/version +1 -0
  106. data/tracks/java/exercises/two-bucket/README.md +48 -0
  107. data/tracks/java/exercises/two-bucket/build.gradle +18 -0
  108. data/{problem-specifications/exercises/circular-buffer/USE_OLD_SCHEMA → tracks/java/exercises/two-bucket/src/main/java/.keep} +0 -0
  109. data/tracks/java/exercises/two-bucket/src/test/java/TwoBucketTest.java +77 -0
  110. data/tracks/javascript/.eslintignore +0 -9
  111. data/tracks/javascript/exercises/binary-search/example.js +1 -1
  112. data/tracks/javascript/exercises/binary-search-tree/example.js +2 -2
  113. data/tracks/javascript/exercises/bracket-push/example.js +1 -1
  114. data/tracks/javascript/exercises/leap/example.js +7 -3
  115. data/tracks/javascript/exercises/leap/leap.js +2 -2
  116. data/tracks/javascript/exercises/list-ops/example.js +1 -1
  117. data/tracks/javascript/exercises/luhn/example.js +2 -2
  118. data/tracks/javascript/exercises/pythagorean-triplet/example.js +2 -1
  119. data/tracks/javascript/exercises/roman-numerals/example.js +3 -2
  120. data/tracks/julia/config.json +13 -0
  121. data/tracks/julia/exercises/isbn-verifier/README.md +51 -0
  122. data/tracks/julia/exercises/isbn-verifier/example.jl +26 -0
  123. data/{problem-specifications/exercises/forth/USE_OLD_SCHEMA → tracks/julia/exercises/isbn-verifier/isbn-verifier.jl} +0 -0
  124. data/tracks/julia/exercises/isbn-verifier/runtests.jl +73 -0
  125. data/tracks/perl5/.travis.yml +8 -1
  126. data/tracks/perl5/README.md +9 -11
  127. data/tracks/perl5/bin/exercise-gen.pl +14 -29
  128. data/tracks/perl5/config.json +1 -0
  129. data/tracks/perl5/cpanfile +2 -1
  130. data/tracks/perl5/exercises/accumulate/{Example.pm → .meta/solutions/Accumulate.pm} +1 -1
  131. data/tracks/perl5/exercises/accumulate/.meta/solutions/accumulate.t +1 -0
  132. data/tracks/perl5/exercises/accumulate/accumulate.t +1 -1
  133. data/tracks/perl5/exercises/all-your-base/{Example.pm → .meta/solutions/AllYourBase.pm} +1 -1
  134. data/tracks/perl5/exercises/all-your-base/.meta/solutions/all-your-base.t +1 -0
  135. data/tracks/perl5/exercises/all-your-base/all-your-base.t +1 -1
  136. data/tracks/perl5/exercises/allergies/{Example.pm → .meta/solutions/Allergies.pm} +1 -1
  137. data/tracks/perl5/exercises/allergies/.meta/solutions/allergies.t +1 -0
  138. data/tracks/perl5/exercises/allergies/allergies.t +75 -8
  139. data/tracks/perl5/exercises/anagram/{Example.pm → .meta/solutions/Anagram.pm} +1 -1
  140. data/tracks/perl5/exercises/anagram/.meta/solutions/anagram.t +1 -0
  141. data/tracks/perl5/exercises/anagram/anagram.t +61 -8
  142. data/tracks/perl5/exercises/atbash-cipher/{Example.pm → .meta/solutions/Cipher.pm} +1 -1
  143. data/tracks/perl5/exercises/atbash-cipher/.meta/solutions/cipher.t +1 -0
  144. data/tracks/perl5/exercises/atbash-cipher/cipher.t +81 -8
  145. data/tracks/perl5/exercises/beer-song/{Example.pm → .meta/solutions/Beer.pm} +1 -1
  146. data/tracks/perl5/exercises/beer-song/.meta/solutions/beer.t +1 -0
  147. data/tracks/perl5/exercises/beer-song/beer.t +80 -7
  148. data/tracks/perl5/exercises/binary/{Example.pm → .meta/solutions/Binary.pm} +1 -1
  149. data/tracks/perl5/exercises/binary/.meta/solutions/binary.t +1 -0
  150. data/tracks/perl5/exercises/binary/binary.t +1 -1
  151. data/tracks/perl5/exercises/binary-search/{Example.pm → .meta/solutions/BinarySearch.pm} +1 -1
  152. data/tracks/perl5/exercises/binary-search/.meta/solutions/binary-search.t +1 -0
  153. data/tracks/perl5/exercises/binary-search/binary-search.t +1 -1
  154. data/tracks/perl5/exercises/binary-search-tree/{Example.pm → .meta/solutions/BinarySearchTree.pm} +1 -1
  155. data/tracks/perl5/exercises/binary-search-tree/.meta/solutions/binary_search_tree.t +1 -0
  156. data/tracks/perl5/exercises/binary-search-tree/binary_search_tree.t +1 -1
  157. data/tracks/perl5/exercises/bob/{example.yaml → .meta/exercise-data.yaml} +0 -1
  158. data/tracks/perl5/exercises/bob/{Example.pm → .meta/solutions/Bob.pm} +0 -0
  159. data/tracks/perl5/exercises/bob/.meta/solutions/bob.t +1 -0
  160. data/tracks/perl5/exercises/bob/bob.t +1 -2
  161. data/tracks/perl5/exercises/clock/{Example.pm → .meta/solutions/Clock.pm} +2 -2
  162. data/tracks/perl5/exercises/clock/.meta/solutions/clock.t +1 -0
  163. data/tracks/perl5/exercises/clock/clock.t +1 -1
  164. data/tracks/perl5/exercises/crypto-square/{Example.pm → .meta/solutions/Crypto.pm} +1 -1
  165. data/tracks/perl5/exercises/crypto-square/.meta/solutions/crypto.t +1 -0
  166. data/tracks/perl5/exercises/crypto-square/crypto.t +1 -1
  167. data/tracks/perl5/exercises/custom-set/{Example.pm → .meta/solutions/CustomSet.pm} +1 -1
  168. data/tracks/perl5/exercises/custom-set/.meta/solutions/custom-set.t +1 -0
  169. data/tracks/perl5/exercises/custom-set/custom-set.t +1 -1
  170. data/tracks/perl5/exercises/difference-of-squares/{Example.pm → .meta/solutions/Squares.pm} +1 -1
  171. data/tracks/perl5/exercises/difference-of-squares/.meta/solutions/difference_of_squares.t +1 -0
  172. data/tracks/perl5/exercises/difference-of-squares/difference_of_squares.t +1 -1
  173. data/tracks/perl5/exercises/etl/{Example.pm → .meta/solutions/ETL.pm} +1 -1
  174. data/tracks/perl5/exercises/etl/.meta/solutions/etl.t +1 -0
  175. data/tracks/perl5/exercises/etl/etl.t +1 -1
  176. data/tracks/perl5/exercises/food-chain/{Example.pm → .meta/solutions/FoodChainSong.pm} +1 -1
  177. data/tracks/perl5/exercises/food-chain/.meta/solutions/food_chain.t +1 -0
  178. data/tracks/perl5/exercises/food-chain/food_chain.t +1 -1
  179. data/tracks/perl5/exercises/gigasecond/{Example.pm → .meta/solutions/Gigasecond.pm} +1 -1
  180. data/tracks/perl5/exercises/gigasecond/.meta/solutions/gigasecond.t +1 -0
  181. data/tracks/perl5/exercises/gigasecond/gigasecond.t +1 -1
  182. data/tracks/perl5/exercises/grade-school/{Example.pm → .meta/solutions/GradeSchool.pm} +1 -1
  183. data/tracks/perl5/exercises/grade-school/.meta/solutions/grade_school.t +1 -0
  184. data/tracks/perl5/exercises/grade-school/grade_school.t +1 -1
  185. data/tracks/perl5/exercises/grains/{Example.pm → .meta/solutions/Grains.pm} +1 -1
  186. data/tracks/perl5/exercises/grains/.meta/solutions/grains.t +1 -0
  187. data/tracks/perl5/exercises/grains/grains.t +54 -6
  188. data/tracks/perl5/exercises/hamming/{Example.pm → .meta/solutions/Hamming.pm} +1 -1
  189. data/tracks/perl5/exercises/hamming/.meta/solutions/hamming.t +1 -0
  190. data/tracks/perl5/exercises/hamming/hamming.t +1 -1
  191. data/tracks/perl5/exercises/hello-world/{example.yaml → .meta/exercise-data.yaml} +0 -1
  192. data/tracks/perl5/exercises/hello-world/{Example.pm → .meta/solutions/HelloWorld.pm} +0 -0
  193. data/tracks/perl5/exercises/hello-world/.meta/solutions/hello-world.t +1 -0
  194. data/tracks/perl5/exercises/hello-world/hello-world.t +1 -2
  195. data/tracks/perl5/exercises/hexadecimal/{Example.pm → .meta/solutions/Hexadecimal.pm} +1 -1
  196. data/tracks/perl5/exercises/hexadecimal/.meta/solutions/hexadecimal.t +1 -0
  197. data/tracks/perl5/exercises/hexadecimal/hexadecimal.t +1 -1
  198. data/tracks/perl5/exercises/house/{Example.pm → .meta/solutions/House.pm} +1 -1
  199. data/tracks/perl5/exercises/house/.meta/solutions/house.t +1 -0
  200. data/tracks/perl5/exercises/house/house.t +1 -1
  201. data/tracks/perl5/exercises/kindergarten-garden/{Example.pm → .meta/solutions/Kindergarten.pm} +1 -1
  202. data/tracks/perl5/exercises/kindergarten-garden/.meta/solutions/kindergarten.t +1 -0
  203. data/tracks/perl5/exercises/kindergarten-garden/kindergarten.t +1 -1
  204. data/tracks/perl5/exercises/largest-series-product/{Example.pm → .meta/solutions/Series.pm} +1 -1
  205. data/tracks/perl5/exercises/largest-series-product/.meta/solutions/series_product.t +1 -0
  206. data/tracks/perl5/exercises/largest-series-product/series_product.t +1 -1
  207. data/tracks/perl5/exercises/leap/{example.yaml → .meta/exercise-data.yaml} +0 -1
  208. data/tracks/perl5/exercises/leap/{Example.pm → .meta/solutions/Leap.pm} +0 -0
  209. data/tracks/perl5/exercises/leap/.meta/solutions/leap.t +1 -0
  210. data/tracks/perl5/exercises/leap/leap.t +1 -2
  211. data/tracks/perl5/exercises/linked-list/{Example.pm → .meta/solutions/Deque.pm} +1 -1
  212. data/tracks/perl5/exercises/linked-list/.meta/solutions/deque.t +1 -0
  213. data/tracks/perl5/exercises/linked-list/deque.t +60 -7
  214. data/tracks/perl5/exercises/list-ops/{Example.pm → .meta/solutions/ListOps.pm} +1 -1
  215. data/tracks/perl5/exercises/list-ops/.meta/solutions/list-ops.t +1 -0
  216. data/tracks/perl5/exercises/list-ops/list-ops.t +1 -1
  217. data/tracks/perl5/exercises/luhn/{example.yaml → .meta/exercise-data.yaml} +0 -0
  218. data/tracks/perl5/exercises/luhn/{Example.pm → .meta/solutions/Luhn.pm} +0 -0
  219. data/tracks/perl5/exercises/luhn/.meta/solutions/luhn.t +1 -0
  220. data/tracks/perl5/exercises/luhn/luhn.t +1 -2
  221. data/tracks/perl5/exercises/matrix/{Example.pm → .meta/solutions/Matrix.pm} +1 -1
  222. data/tracks/perl5/exercises/matrix/.meta/solutions/matrix.t +1 -0
  223. data/tracks/perl5/exercises/matrix/matrix.t +1 -1
  224. data/tracks/perl5/exercises/meetup/{Example.pm → .meta/solutions/Meetup.pm} +1 -1
  225. data/tracks/perl5/exercises/meetup/.meta/solutions/meetup.t +1 -0
  226. data/tracks/perl5/exercises/meetup/meetup.t +1 -1
  227. data/tracks/perl5/exercises/minesweeper/{Example.pm → .meta/solutions/Minesweeper.pm} +1 -1
  228. data/tracks/perl5/exercises/minesweeper/.meta/solutions/minesweeper.t +1 -0
  229. data/tracks/perl5/exercises/minesweeper/minesweeper.t +1 -1
  230. data/tracks/perl5/exercises/nucleotide-count/{Example.pm → .meta/solutions/NucleotideCount.pm} +1 -1
  231. data/tracks/perl5/exercises/nucleotide-count/.meta/solutions/nucleotide_count.t +1 -0
  232. data/tracks/perl5/exercises/nucleotide-count/nucleotide_count.t +1 -1
  233. data/tracks/perl5/exercises/ocr-numbers/{Example.pm → .meta/solutions/OCR.pm} +1 -1
  234. data/tracks/perl5/exercises/ocr-numbers/.meta/solutions/ocr.t +1 -0
  235. data/tracks/perl5/exercises/ocr-numbers/ocr.t +1 -1
  236. data/tracks/perl5/exercises/palindrome-products/{Example.pm → .meta/solutions/Palindrome.pm} +1 -1
  237. data/tracks/perl5/exercises/palindrome-products/.meta/solutions/palindrome.t +1 -0
  238. data/tracks/perl5/exercises/palindrome-products/palindrome.t +1 -1
  239. data/tracks/perl5/exercises/pascals-triangle/{Example.pm → .meta/solutions/Triangle.pm} +1 -1
  240. data/tracks/perl5/exercises/pascals-triangle/.meta/solutions/triangle.t +1 -0
  241. data/tracks/perl5/exercises/pascals-triangle/triangle.t +51 -7
  242. data/tracks/perl5/exercises/phone-number/{example.yaml → .meta/exercise-data.yaml} +0 -0
  243. data/tracks/perl5/exercises/phone-number/{Example.pm → .meta/solutions/PhoneNumber.pm} +0 -0
  244. data/tracks/perl5/exercises/phone-number/.meta/solutions/phone-number.t +1 -0
  245. data/tracks/perl5/exercises/phone-number/phone-number.t +1 -2
  246. data/tracks/perl5/exercises/pig-latin/{Example.pm → .meta/solutions/PigLatin.pm} +1 -1
  247. data/tracks/perl5/exercises/pig-latin/.meta/solutions/piglatin.t +1 -0
  248. data/tracks/perl5/exercises/pig-latin/piglatin.t +1 -1
  249. data/tracks/perl5/exercises/point-mutations/{Example.pm → .meta/solutions/DNA.pm} +1 -1
  250. data/tracks/perl5/exercises/point-mutations/.meta/solutions/dna.t +1 -0
  251. data/tracks/perl5/exercises/point-mutations/dna.t +75 -7
  252. data/tracks/perl5/exercises/prime-factors/{Example.pm → .meta/solutions/Prime.pm} +1 -1
  253. data/tracks/perl5/exercises/prime-factors/.meta/solutions/prime.t +1 -0
  254. data/tracks/perl5/exercises/prime-factors/prime.t +63 -7
  255. data/tracks/perl5/exercises/proverb/{Example.pm → .meta/solutions/Proverb.pm} +1 -1
  256. data/tracks/perl5/exercises/proverb/.meta/solutions/proverb.t +1 -0
  257. data/tracks/perl5/exercises/proverb/proverb.t +58 -7
  258. data/tracks/perl5/exercises/pythagorean-triplet/{Example.pm → .meta/solutions/Triplet.pm} +2 -2
  259. data/tracks/perl5/exercises/pythagorean-triplet/.meta/solutions/triplet.t +1 -0
  260. data/tracks/perl5/exercises/pythagorean-triplet/triplet.t +1 -1
  261. data/tracks/perl5/exercises/queen-attack/{Example.pm → .meta/solutions/Queens.pm} +1 -1
  262. data/tracks/perl5/exercises/queen-attack/.meta/solutions/queen.t +1 -0
  263. data/tracks/perl5/exercises/queen-attack/queen.t +186 -8
  264. data/tracks/perl5/exercises/raindrops/{Example.pm → .meta/solutions/Raindrops.pm} +1 -1
  265. data/tracks/perl5/exercises/raindrops/.meta/solutions/raindrops.t +1 -0
  266. data/tracks/perl5/exercises/raindrops/raindrops.t +89 -7
  267. data/tracks/perl5/exercises/rna-transcription/{Example.pm → .meta/solutions/DNA.pm} +1 -1
  268. data/tracks/perl5/exercises/rna-transcription/.meta/solutions/rna.t +1 -0
  269. data/tracks/perl5/exercises/rna-transcription/rna.t +1 -1
  270. data/tracks/perl5/exercises/robot-name/{Example.pm → .meta/solutions/RobotName.pm} +1 -1
  271. data/tracks/perl5/exercises/robot-name/.meta/solutions/robot_name.t +1 -0
  272. data/tracks/perl5/exercises/robot-name/robot_name.t +1 -1
  273. data/tracks/perl5/exercises/robot-simulator/{Example.pm → .meta/solutions/Robot.pm} +1 -1
  274. data/tracks/perl5/exercises/robot-simulator/.meta/solutions/robot_simulator.t +1 -0
  275. data/tracks/perl5/exercises/robot-simulator/robot_simulator.t +1 -1
  276. data/tracks/perl5/exercises/roman-numerals/{Example.pm → .meta/solutions/Decimal.pm} +1 -1
  277. data/tracks/perl5/exercises/roman-numerals/.meta/solutions/roman.t +1 -0
  278. data/tracks/perl5/exercises/roman-numerals/roman.t +1 -1
  279. data/tracks/perl5/exercises/saddle-points/{Example.pm → .meta/solutions/Matrix.pm} +1 -1
  280. data/tracks/perl5/exercises/saddle-points/.meta/solutions/saddle_points.t +1 -0
  281. data/tracks/perl5/exercises/saddle-points/saddle_points.t +1 -1
  282. data/tracks/perl5/exercises/say/{Example.pm → .meta/solutions/Say.pm} +1 -1
  283. data/tracks/perl5/exercises/say/.meta/solutions/say.t +1 -0
  284. data/tracks/perl5/exercises/say/say.t +1 -1
  285. data/tracks/perl5/exercises/scrabble-score/{Example.pm → .meta/solutions/Word.pm} +1 -1
  286. data/tracks/perl5/exercises/scrabble-score/.meta/solutions/scrabble.t +1 -0
  287. data/tracks/perl5/exercises/scrabble-score/scrabble.t +1 -1
  288. data/tracks/perl5/exercises/secret-handshake/{Example.pm → .meta/solutions/SecretHandshake.pm} +1 -1
  289. data/tracks/perl5/exercises/secret-handshake/.meta/solutions/handshake.t +1 -0
  290. data/tracks/perl5/exercises/secret-handshake/handshake.t +1 -1
  291. data/tracks/perl5/exercises/series/{Example.pm → .meta/solutions/Series.pm} +1 -1
  292. data/tracks/perl5/exercises/series/.meta/solutions/series.t +1 -0
  293. data/tracks/perl5/exercises/series/series.t +1 -1
  294. data/tracks/perl5/exercises/sieve/{Example.pm → .meta/solutions/Sieve.pm} +1 -1
  295. data/tracks/perl5/exercises/sieve/.meta/solutions/sieve.t +1 -0
  296. data/tracks/perl5/exercises/sieve/sieve.t +1 -1
  297. data/tracks/perl5/exercises/simple-cipher/{Example.pm → .meta/solutions/Cipher.pm} +1 -1
  298. data/tracks/perl5/exercises/simple-cipher/.meta/solutions/cipher.t +1 -0
  299. data/tracks/perl5/exercises/simple-cipher/cipher.t +1 -1
  300. data/tracks/perl5/exercises/simple-linked-list/{Example.pm → .meta/solutions/LinkedList.pm} +1 -1
  301. data/tracks/perl5/exercises/simple-linked-list/.meta/solutions/simple_linked_list.t +1 -0
  302. data/tracks/perl5/exercises/simple-linked-list/simple_linked_list.t +1 -1
  303. data/tracks/perl5/exercises/space-age/{Example.pm → .meta/solutions/SpaceAge.pm} +1 -1
  304. data/tracks/perl5/exercises/space-age/.meta/solutions/space.t +1 -0
  305. data/tracks/perl5/exercises/space-age/space.t +1 -1
  306. data/tracks/perl5/exercises/strain/{Example.pm → .meta/solutions/Strain.pm} +1 -1
  307. data/tracks/perl5/exercises/strain/.meta/solutions/strain.t +1 -0
  308. data/tracks/perl5/exercises/strain/strain.t +1 -1
  309. data/tracks/perl5/exercises/sublist/{Example.pm → .meta/solutions/Sublist.pm} +1 -1
  310. data/tracks/perl5/exercises/sublist/.meta/solutions/sublist.t +1 -0
  311. data/tracks/perl5/exercises/sublist/sublist.t +1 -1
  312. data/tracks/perl5/exercises/sum-of-multiples/{Example.pm → .meta/solutions/SumOfMultiples.pm} +1 -1
  313. data/tracks/perl5/exercises/sum-of-multiples/.meta/solutions/sum_of_multiples.t +1 -0
  314. data/tracks/perl5/exercises/sum-of-multiples/sum_of_multiples.t +1 -1
  315. data/tracks/perl5/exercises/triangle/{Example.pm → .meta/solutions/Triangle.pm} +1 -1
  316. data/tracks/perl5/exercises/triangle/.meta/solutions/triangle.t +1 -0
  317. data/tracks/perl5/exercises/triangle/triangle.t +87 -8
  318. data/tracks/perl5/exercises/trinary/{Example.pm → .meta/solutions/Trinary.pm} +1 -1
  319. data/tracks/perl5/exercises/trinary/.meta/solutions/trinary.t +1 -0
  320. data/tracks/perl5/exercises/trinary/trinary.t +1 -1
  321. data/tracks/perl5/exercises/twelve-days/{Example.pm → .meta/solutions/TwelveDays.pm} +1 -1
  322. data/tracks/perl5/exercises/twelve-days/.meta/solutions/song.t +1 -0
  323. data/tracks/perl5/exercises/twelve-days/song.t +1 -1
  324. data/tracks/perl5/exercises/word-count/{Example.pm → .meta/solutions/Phrase.pm} +1 -1
  325. data/tracks/perl5/exercises/word-count/.meta/solutions/word_count.t +1 -0
  326. data/tracks/perl5/exercises/word-count/word_count.t +1 -1
  327. data/tracks/perl5/exercises/wordy/{Example.pm → .meta/solutions/Wordy.pm} +1 -1
  328. data/tracks/perl5/exercises/wordy/.meta/solutions/wordy.t +1 -0
  329. data/tracks/perl5/exercises/wordy/wordy.t +87 -9
  330. data/tracks/perl5/lib/Exercism/Generator.pm +48 -0
  331. data/tracks/perl5/t/generated-tests.t +26 -0
  332. data/tracks/perl5/templates/test.mustache +4 -17
  333. data/tracks/perl6/.proverc +1 -0
  334. data/tracks/perl6/.travis.yml +6 -10
  335. data/tracks/perl6/README.md +1 -3
  336. data/tracks/perl6/bin/exercise-gen.pl6 +2 -0
  337. data/tracks/perl6/exercises/accumulate/.meta/solutions/accumulate.t +1 -0
  338. data/tracks/perl6/exercises/acronym/.meta/solutions/acronym.t +1 -0
  339. data/tracks/perl6/exercises/all-your-base/.meta/solutions/all-your-base.t +1 -0
  340. data/tracks/perl6/exercises/allergies/.meta/solutions/allergies.t +1 -0
  341. data/tracks/perl6/exercises/anagram/.meta/solutions/anagram.t +1 -0
  342. data/tracks/perl6/exercises/atbash-cipher/.meta/solutions/atbash-cipher.t +1 -0
  343. data/tracks/perl6/exercises/bob/.meta/solutions/bob.t +1 -0
  344. data/tracks/perl6/exercises/clock/.meta/solutions/clock.t +1 -0
  345. data/tracks/perl6/exercises/etl/.meta/solutions/etl.t +1 -0
  346. data/tracks/perl6/exercises/flatten-array/.meta/solutions/flatten-array.t +1 -0
  347. data/tracks/perl6/exercises/grade-school/.meta/solutions/grade-school.t +1 -0
  348. data/tracks/perl6/exercises/grains/.meta/solutions/grains.t +1 -0
  349. data/tracks/perl6/exercises/hamming/.meta/solutions/hamming.t +1 -0
  350. data/tracks/perl6/exercises/hello-world/.meta/solutions/hello-world.t +1 -0
  351. data/tracks/perl6/exercises/leap/.meta/solutions/leap.t +1 -0
  352. data/tracks/perl6/exercises/linked-list/.meta/solutions/linked-list.t +1 -0
  353. data/tracks/perl6/exercises/luhn/.meta/solutions/luhn.t +1 -0
  354. data/tracks/perl6/exercises/meetup/.meta/solutions/meetup.t +1 -0
  355. data/tracks/perl6/exercises/nucleotide-count/.meta/solutions/nucleotide-count.t +1 -0
  356. data/tracks/perl6/exercises/pangram/.meta/solutions/pangram.t +1 -0
  357. data/tracks/perl6/exercises/phone-number/.meta/solutions/phone-number.t +1 -0
  358. data/tracks/perl6/exercises/raindrops/.meta/solutions/raindrops.t +1 -0
  359. data/tracks/perl6/exercises/rna-transcription/.meta/solutions/rna-transcription.t +1 -0
  360. data/tracks/perl6/exercises/robot-name/.meta/solutions/robot-name.t +1 -0
  361. data/tracks/perl6/exercises/roman-numerals/.meta/solutions/roman-numerals.t +1 -0
  362. data/tracks/perl6/exercises/scrabble-score/.meta/solutions/scrabble-score.t +1 -0
  363. data/tracks/perl6/exercises/space-age/.meta/solutions/space-age.t +1 -0
  364. data/tracks/perl6/exercises/two-fer/.meta/solutions/two-fer.t +1 -0
  365. data/tracks/perl6/exercises/word-count/.meta/solutions/word-count.t +1 -0
  366. data/tracks/perl6/exercises/wordy/.meta/solutions/wordy.t +1 -0
  367. data/tracks/python/config/exercise_readme.go.tmpl +23 -4
  368. data/tracks/python/exercises/accumulate/README.md +2 -3
  369. data/tracks/python/exercises/acronym/README.md +2 -3
  370. data/tracks/python/exercises/acronym/acronym_test.py +2 -5
  371. data/tracks/python/exercises/all-your-base/README.md +2 -4
  372. data/tracks/python/exercises/allergies/README.md +2 -3
  373. data/tracks/python/exercises/allergies/allergies_test.py +1 -1
  374. data/tracks/python/exercises/alphametics/README.md +2 -4
  375. data/tracks/python/exercises/anagram/README.md +2 -3
  376. data/tracks/python/exercises/anagram/anagram_test.py +2 -16
  377. data/tracks/python/exercises/armstrong-numbers/README.md +16 -2
  378. data/tracks/python/exercises/atbash-cipher/README.md +2 -3
  379. data/tracks/python/exercises/atbash-cipher/atbash_cipher_test.py +1 -1
  380. data/tracks/python/exercises/beer-song/README.md +2 -3
  381. data/tracks/python/exercises/binary/README.md +2 -3
  382. data/tracks/python/exercises/binary-search/README.md +2 -3
  383. data/tracks/python/exercises/binary-search-tree/README.md +2 -3
  384. data/tracks/python/exercises/bob/README.md +4 -3
  385. data/tracks/python/exercises/book-store/README.md +2 -3
  386. data/tracks/python/exercises/bowling/README.md +2 -3
  387. data/tracks/python/exercises/bracket-push/README.md +2 -3
  388. data/tracks/python/exercises/change/README.md +2 -3
  389. data/tracks/python/exercises/circular-buffer/README.md +2 -3
  390. data/tracks/python/exercises/clock/README.md +2 -3
  391. data/tracks/python/exercises/collatz-conjecture/README.md +2 -3
  392. data/tracks/python/exercises/complex-numbers/README.md +3 -3
  393. data/tracks/python/exercises/connect/README.md +2 -4
  394. data/tracks/python/exercises/crypto-square/README.md +2 -3
  395. data/tracks/python/exercises/crypto-square/crypto_square_test.py +1 -1
  396. data/tracks/python/exercises/custom-set/README.md +17 -3
  397. data/tracks/python/exercises/diamond/README.md +2 -3
  398. data/tracks/python/exercises/difference-of-squares/README.md +2 -3
  399. data/tracks/python/exercises/difference-of-squares/difference_of_squares_test.py +1 -1
  400. data/tracks/python/exercises/diffie-hellman/README.md +2 -3
  401. data/tracks/python/exercises/dominoes/README.md +2 -4
  402. data/tracks/python/exercises/dot-dsl/README.md +20 -5
  403. data/tracks/python/exercises/error-handling/README.md +2 -4
  404. data/tracks/python/exercises/etl/README.md +2 -3
  405. data/tracks/python/exercises/flatten-array/README.md +2 -3
  406. data/tracks/python/exercises/flatten-array/flatten_array_test.py +1 -1
  407. data/tracks/python/exercises/food-chain/README.md +2 -3
  408. data/tracks/python/exercises/forth/README.md +2 -4
  409. data/tracks/python/exercises/gigasecond/README.md +2 -3
  410. data/tracks/python/exercises/gigasecond/gigasecond_test.py +1 -2
  411. data/tracks/python/exercises/go-counting/README.md +2 -4
  412. data/tracks/python/exercises/grade-school/README.md +2 -3
  413. data/tracks/python/exercises/grains/README.md +2 -3
  414. data/tracks/python/exercises/grep/README.md +2 -3
  415. data/tracks/python/exercises/hamming/README.md +2 -3
  416. data/tracks/python/exercises/hamming/hamming_test.py +1 -1
  417. data/tracks/python/exercises/hello-world/README.md +2 -3
  418. data/tracks/python/exercises/hello-world/hello_world_test.py +1 -1
  419. data/tracks/python/exercises/hexadecimal/README.md +2 -3
  420. data/tracks/python/exercises/house/README.md +2 -3
  421. data/tracks/python/exercises/isbn-verifier/README.md +48 -20
  422. data/tracks/python/exercises/isogram/README.md +2 -3
  423. data/tracks/python/exercises/kindergarten-garden/README.md +2 -3
  424. data/tracks/python/exercises/kindergarten-garden/kindergarten_garden_test.py +1 -1
  425. data/tracks/python/exercises/largest-series-product/README.md +2 -3
  426. data/tracks/python/exercises/largest-series-product/largest_series_product_test.py +1 -1
  427. data/tracks/python/exercises/leap/README.md +2 -3
  428. data/tracks/python/exercises/leap/leap_test.py +1 -1
  429. data/tracks/python/exercises/linked-list/README.md +2 -3
  430. data/tracks/python/exercises/list-ops/README.md +2 -4
  431. data/tracks/python/exercises/luhn/README.md +2 -3
  432. data/tracks/python/exercises/markdown/README.md +2 -4
  433. data/tracks/python/exercises/matrix/README.md +2 -3
  434. data/tracks/python/exercises/matrix/example.py +6 -3
  435. data/tracks/python/exercises/matrix/matrix.py +6 -0
  436. data/tracks/python/exercises/matrix/matrix_test.py +25 -15
  437. data/tracks/python/exercises/meetup/README.md +2 -3
  438. data/tracks/python/exercises/meetup/meetup_test.py +1 -2
  439. data/tracks/python/exercises/minesweeper/README.md +2 -4
  440. data/tracks/python/exercises/nth-prime/README.md +2 -3
  441. data/tracks/python/exercises/nucleotide-count/README.md +2 -3
  442. data/tracks/python/exercises/ocr-numbers/README.md +2 -3
  443. data/tracks/python/exercises/octal/README.md +2 -3
  444. data/tracks/python/exercises/palindrome-products/README.md +2 -3
  445. data/tracks/python/exercises/pangram/README.md +2 -3
  446. data/tracks/python/exercises/pangram/pangram_test.py +1 -1
  447. data/tracks/python/exercises/parallel-letter-frequency/README.md +2 -4
  448. data/tracks/python/exercises/pascals-triangle/README.md +2 -3
  449. data/tracks/python/exercises/perfect-numbers/README.md +2 -3
  450. data/tracks/python/exercises/phone-number/README.md +2 -3
  451. data/tracks/python/exercises/pig-latin/README.md +2 -3
  452. data/tracks/python/exercises/pig-latin/pig_latin_test.py +1 -1
  453. data/tracks/python/exercises/point-mutations/README.md +2 -3
  454. data/tracks/python/exercises/poker/README.md +2 -3
  455. data/tracks/python/exercises/pov/README.md +2 -5
  456. data/tracks/python/exercises/prime-factors/README.md +2 -3
  457. data/tracks/python/exercises/prime-factors/prime_factors_test.py +1 -1
  458. data/tracks/python/exercises/protein-translation/README.md +4 -5
  459. data/tracks/python/exercises/proverb/README.md +2 -2
  460. data/tracks/python/exercises/pythagorean-triplet/README.md +2 -3
  461. data/tracks/python/exercises/queen-attack/README.md +2 -3
  462. data/tracks/python/exercises/rail-fence-cipher/README.md +2 -3
  463. data/tracks/python/exercises/rail-fence-cipher/rail_fence_cipher.py +2 -6
  464. data/tracks/python/exercises/raindrops/README.md +2 -3
  465. data/tracks/python/exercises/react/README.md +2 -4
  466. data/tracks/python/exercises/rectangles/README.md +2 -4
  467. data/tracks/python/exercises/reverse-string/README.md +28 -0
  468. data/tracks/python/exercises/reverse-string/reverse_string_test.py +1 -1
  469. data/tracks/python/exercises/rna-transcription/README.md +3 -4
  470. data/tracks/python/exercises/rna-transcription/rna_transcription_test.py +3 -25
  471. data/tracks/python/exercises/robot-name/README.md +2 -3
  472. data/tracks/python/exercises/robot-simulator/README.md +2 -3
  473. data/tracks/python/exercises/robot-simulator/robot_simulator_test.py +1 -1
  474. data/tracks/python/exercises/roman-numerals/README.md +2 -3
  475. data/tracks/python/exercises/rotational-cipher/README.md +2 -3
  476. data/tracks/python/exercises/rotational-cipher/rotational_cipher_test.py +1 -1
  477. data/tracks/python/exercises/run-length-encoding/README.md +2 -3
  478. data/tracks/python/exercises/saddle-points/README.md +2 -3
  479. data/tracks/python/exercises/say/README.md +2 -3
  480. data/tracks/python/exercises/say/say_test.py +1 -1
  481. data/tracks/python/exercises/scale-generator/README.md +2 -4
  482. data/tracks/python/exercises/scrabble-score/README.md +2 -3
  483. data/tracks/python/exercises/scrabble-score/scrabble_score_test.py +1 -1
  484. data/tracks/python/exercises/secret-handshake/README.md +3 -4
  485. data/tracks/python/exercises/series/README.md +2 -3
  486. data/tracks/python/exercises/sieve/README.md +2 -3
  487. data/tracks/python/exercises/sieve/sieve_test.py +1 -1
  488. data/tracks/python/exercises/simple-cipher/README.md +6 -9
  489. data/tracks/python/exercises/simple-linked-list/README.md +2 -3
  490. data/tracks/python/exercises/space-age/README.md +2 -3
  491. data/tracks/python/exercises/space-age/space_age_test.py +1 -1
  492. data/tracks/python/exercises/spiral-matrix/README.md +20 -8
  493. data/tracks/python/exercises/strain/README.md +2 -3
  494. data/tracks/python/exercises/sublist/README.md +2 -4
  495. data/tracks/python/exercises/sublist/sublist_test.py +1 -1
  496. data/tracks/python/exercises/sum-of-multiples/README.md +2 -3
  497. data/tracks/python/exercises/sum-of-multiples/sum_of_multiples_test.py +1 -1
  498. data/tracks/python/exercises/tournament/README.md +2 -4
  499. data/tracks/python/exercises/transpose/README.md +2 -3
  500. data/tracks/python/exercises/tree-building/README.md +2 -4
  501. data/tracks/python/exercises/triangle/README.md +2 -3
  502. data/tracks/python/exercises/trinary/README.md +2 -3
  503. data/tracks/python/exercises/twelve-days/README.md +2 -3
  504. data/tracks/python/exercises/two-bucket/README.md +2 -3
  505. data/tracks/python/exercises/two-fer/README.md +3 -4
  506. data/tracks/python/exercises/variable-length-quantity/README.md +2 -3
  507. data/tracks/python/exercises/word-count/README.md +2 -3
  508. data/tracks/python/exercises/word-search/README.md +2 -4
  509. data/tracks/python/exercises/wordy/README.md +2 -3
  510. data/tracks/python/exercises/zebra-puzzle/README.md +2 -3
  511. data/tracks/python/exercises/zipper/README.md +2 -4
  512. data/tracks/ruby/docs/24pullrequests.md +1 -1
  513. data/tracks/rust/exercises/robot-name/Cargo-example.toml +6 -0
  514. data/tracks/rust/exercises/robot-name/Cargo.toml +0 -1
  515. data/tracks/scala/exercises/beer-song/example.scala +3 -3
  516. data/tracks/scala/exercises/beer-song/src/test/scala/BeerSongTest.scala +29 -30
  517. data/tracks/scala/exercises/binary-search/src/test/scala/BinarySearchTest.scala +3 -3
  518. data/tracks/scala/exercises/book-store/example.scala +1 -1
  519. data/tracks/scala/exercises/book-store/src/test/scala/BookStoreTest.scala +19 -15
  520. data/tracks/scala/testgen/src/main/scala/BeerSongTestGenerator.scala +21 -3
  521. data/tracks/scala/testgen/src/main/scala/BinarySearchTestGenerator.scala +3 -5
  522. data/tracks/scala/testgen/src/main/scala/BookStoreTestGenerator.scala +3 -3
  523. data/tracks/swift/.travis.yml +2 -2
  524. data/tracks/swift/config.json +12 -0
  525. data/tracks/swift/exercises/scale-generator/Package.swift +5 -0
  526. data/tracks/swift/exercises/scale-generator/README.md +65 -0
  527. data/tracks/swift/exercises/scale-generator/Sources/ScaleGenerator.swift +1 -0
  528. data/tracks/swift/exercises/scale-generator/Sources/ScaleGeneratorExample.swift +78 -0
  529. data/tracks/swift/exercises/scale-generator/Tests/LinuxMain.swift +6 -0
  530. data/tracks/swift/exercises/scale-generator/Tests/ScaleGeneratorTests/ScaleGeneratorTests.swift +116 -0
  531. metadata +197 -101
  532. data/problem-specifications/exercises/grains/USE_OLD_SCHEMA +0 -0
  533. data/problem-specifications/exercises/grep/USE_OLD_SCHEMA +0 -0
  534. data/problem-specifications/exercises/house/USE_OLD_SCHEMA +0 -0
  535. data/problem-specifications/exercises/isogram/USE_OLD_SCHEMA +0 -0
  536. data/problem-specifications/exercises/list-ops/USE_OLD_SCHEMA +0 -0
  537. data/problem-specifications/exercises/pov/USE_OLD_SCHEMA +0 -0
  538. data/problem-specifications/exercises/trinary/USE_OLD_SCHEMA +0 -0
  539. data/problem-specifications/exercises/word-search/USE_OLD_SCHEMA +0 -0
  540. data/problem-specifications/exercises/zipper/USE_OLD_SCHEMA +0 -0
  541. data/problem-specifications/old-schema.json +0 -137
  542. data/tracks/c/exercises/bob/.meta/description.md +0 -10
  543. data/tracks/elm/exercises/bob/.meta/description.md +0 -10
  544. data/tracks/perl5/exercises/allergies/cases.json +0 -69
  545. data/tracks/perl5/exercises/anagram/cases.json +0 -56
  546. data/tracks/perl5/exercises/atbash-cipher/cases.json +0 -75
  547. data/tracks/perl5/exercises/beer-song/cases.json +0 -74
  548. data/tracks/perl5/exercises/grains/cases.json +0 -49
  549. data/tracks/perl5/exercises/linked-list/cases.json +0 -54
  550. data/tracks/perl5/exercises/pascals-triangle/cases.json +0 -45
  551. data/tracks/perl5/exercises/point-mutations/cases.json +0 -69
  552. data/tracks/perl5/exercises/prime-factors/cases.json +0 -57
  553. data/tracks/perl5/exercises/proverb/cases.json +0 -52
  554. data/tracks/perl5/exercises/queen-attack/cases.json +0 -182
  555. data/tracks/perl5/exercises/raindrops/cases.json +0 -83
  556. data/tracks/perl5/exercises/triangle/cases.json +0 -82
  557. data/tracks/perl5/exercises/wordy/cases.json +0 -82
  558. data/tracks/python/docs/EXERCISE_README_INSERT.md +0 -23
@@ -4,17 +4,13 @@ before_script:
4
4
  - git clone https://github.com/exercism/problem-specifications.git
5
5
  - bin/fetch-configlet
6
6
  - docker build -t exercism-rakudo-star .
7
- - docker run
8
- --volume $PWD:/exercism
9
- exercism-rakudo-star perl6 -e
10
- '.add(‘.meta/solutions’).dir.first({.extension eq ‘pm6’}).copy(.dir.first({.extension eq ‘pm6’}))
11
- for $*CWD.add(‘exercism/exercises’).dir' # replace stub files with complete solutions from Example.pm6
12
7
  script:
13
8
  - bin/configlet lint .
14
9
  - docker run
15
10
  --volume $PWD:/exercism
16
- exercism-rakudo-star prove /exercism
17
- --exec perl6
18
- --recurse
19
- --directives
20
- --jobs 2
11
+ exercism-rakudo-star /bin/bash -c 'cd /exercism
12
+ && prove exercises/*/.meta/solutions/
13
+ --recurse
14
+ --jobs 2
15
+ && prove t/
16
+ --directives'
@@ -22,9 +22,7 @@ When adding a new exercise, ensure that the exercise is included in the `exercis
22
22
 
23
23
  ## Running The Tests
24
24
 
25
- Set `EXERCISM` as an environment variable (e.g. `export EXERCISM=1` in bash), and run either `prove -re perl6`
26
- to run all tests in all subdirectories, or `prove -e perl6 /path/to/test.t` to run an individual test file.
27
-
25
+ Run `prove -re perl6 exercises/*/.meta/solutions/` to run all exercise tests.
28
26
 
29
27
  ### Perl 6 icon
30
28
  The Perl 6 "Camelia" logo is owned by Larry Wall and is released under version 2.0 of the Artistic License. We are using it to identify the Perl 6 language itself, not any part of Exercism, which we believe to be admissible under fair use. The version of the logo that we are using is a pink, black and white adaptation of the logo found on <http://en.wikipedia.org/wiki/Perl_6>.
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env perl6
2
2
  use v6;
3
3
  use YAML::Parser::LibYAML;
4
+ use nqp;
4
5
  use lib (my $base-dir = $?FILE.IO.resolve.parent.parent).add('lib');
5
6
  use Exercism::Generator;
6
7
 
@@ -64,6 +65,7 @@ sub generate ($exercise) {
64
65
  given $exercise-dir.add("$exercise.t") -> $testfile {
65
66
  $testfile.spurt: .test;
66
67
  $testfile.chmod: 0o755;
68
+ try nqp::symlink("../../$_", ~$exercise-dir.add(".meta/solutions/$_")) given $testfile.basename;
67
69
  }
68
70
  $exercise-dir.add("{.data<exercise>}.pm6").spurt: .stub;
69
71
  $exercise-dir.add('.meta/solutions').mkdir;
@@ -0,0 +1 @@
1
+ ../../accumulate.t
@@ -0,0 +1 @@
1
+ ../../acronym.t
@@ -0,0 +1 @@
1
+ ../../all-your-base.t
@@ -0,0 +1 @@
1
+ ../../allergies.t
@@ -0,0 +1 @@
1
+ ../../anagram.t
@@ -0,0 +1 @@
1
+ ../../atbash-cipher.t
@@ -0,0 +1 @@
1
+ ../../bob.t
@@ -0,0 +1 @@
1
+ ../../clock.t
@@ -0,0 +1 @@
1
+ ../../etl.t
@@ -0,0 +1 @@
1
+ ../../flatten-array.t
@@ -0,0 +1 @@
1
+ ../../grade-school.t
@@ -0,0 +1 @@
1
+ ../../grains.t
@@ -0,0 +1 @@
1
+ ../../hamming.t
@@ -0,0 +1 @@
1
+ ../../hello-world.t
@@ -0,0 +1 @@
1
+ ../../leap.t
@@ -0,0 +1 @@
1
+ ../../linked-list.t
@@ -0,0 +1 @@
1
+ ../../luhn.t
@@ -0,0 +1 @@
1
+ ../../meetup.t
@@ -0,0 +1 @@
1
+ ../../nucleotide-count.t
@@ -0,0 +1 @@
1
+ ../../pangram.t
@@ -0,0 +1 @@
1
+ ../../phone-number.t
@@ -0,0 +1 @@
1
+ ../../raindrops.t
@@ -0,0 +1 @@
1
+ ../../rna-transcription.t
@@ -0,0 +1 @@
1
+ ../../robot-name.t
@@ -0,0 +1 @@
1
+ ../../roman-numerals.t
@@ -0,0 +1 @@
1
+ ../../scrabble-score.t
@@ -0,0 +1 @@
1
+ ../../space-age.t
@@ -0,0 +1 @@
1
+ ../../two-fer.t
@@ -0,0 +1 @@
1
+ ../../word-count.t
@@ -0,0 +1 @@
1
+ ../../wordy.t
@@ -4,10 +4,29 @@
4
4
  {{- with .Hints }}
5
5
  {{ . }}
6
6
  {{ end }}
7
- {{- with .TrackInsert }}
8
- {{ . }}
9
- {{ end }}
10
- {{- with .Spec.Credits -}}
7
+ ## Exception messages
8
+
9
+ Sometimes it is necessary to raise an exception. When you do this, you should include a meaningful error message to
10
+ indicate what the source of the error is. This makes your code more readable and helps significantly with debugging. Not
11
+ every exercise will require you to raise an exception, but for those that do, the tests will only pass if you include
12
+ a message.
13
+
14
+ To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
15
+ `raise Exception`, you shold write:
16
+
17
+ ```python
18
+ raise Exception("Meaningful message indicating the source of the error")
19
+ ```
20
+
21
+ ## Submitting Exercises
22
+
23
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/{{ .Spec.Slug }}` directory.
24
+
25
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
26
+
27
+ For more detailed information about running tests, code style and linting,
28
+ please see the [help page](http://exercism.io/languages/python).
29
+ {{ with .Spec.Credits }}
11
30
  ## Source
12
31
 
13
32
  {{ . }}
@@ -39,12 +39,11 @@ To raise a message with an exception, just write it as an argument to the except
39
39
  raise Exception("Meaningful message indicating the source of the error")
40
40
  ```
41
41
 
42
-
43
42
  ## Submitting Exercises
44
43
 
45
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
44
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/accumulate` directory.
46
45
 
47
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
46
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
48
47
 
49
48
  For more detailed information about running tests, code style and linting,
50
49
  please see the [help page](http://exercism.io/languages/python).
@@ -21,12 +21,11 @@ To raise a message with an exception, just write it as an argument to the except
21
21
  raise Exception("Meaningful message indicating the source of the error")
22
22
  ```
23
23
 
24
-
25
24
  ## Submitting Exercises
26
25
 
27
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
26
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/acronym` directory.
28
27
 
29
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
28
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
30
29
 
31
30
  For more detailed information about running tests, code style and linting,
32
31
  please see the [help page](http://exercism.io/languages/python).
@@ -3,7 +3,7 @@ import unittest
3
3
  from acronym import abbreviate
4
4
 
5
5
 
6
- # Tests adapted from `problem-specifications//canonical-data.json` @ v1.1.0
6
+ # Tests adapted from `problem-specifications//canonical-data.json` @ v1.3.0
7
7
 
8
8
  class AcronymTest(unittest.TestCase):
9
9
  def test_basic(self):
@@ -16,12 +16,9 @@ class AcronymTest(unittest.TestCase):
16
16
  self.assertEqual(abbreviate('First In, First Out'), 'FIFO')
17
17
 
18
18
  def test_all_caps_words(self):
19
- self.assertEqual(abbreviate('PHP: Hypertext Preprocessor'), 'PHP')
20
-
21
- def test_non_acronym_all_caps_word(self):
22
19
  self.assertEqual(abbreviate('GNU Image Manipulation Program'), 'GIMP')
23
20
 
24
- def test_hyphenated(self):
21
+ def test_punctuation_without_whitespace(self):
25
22
  self.assertEqual(
26
23
  abbreviate('Complementary metal-oxide semiconductor'), 'CMOS')
27
24
 
@@ -45,16 +45,14 @@ To raise a message with an exception, just write it as an argument to the except
45
45
  raise Exception("Meaningful message indicating the source of the error")
46
46
  ```
47
47
 
48
-
49
48
  ## Submitting Exercises
50
49
 
51
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
50
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/all-your-base` directory.
52
51
 
53
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
52
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
54
53
 
55
54
  For more detailed information about running tests, code style and linting,
56
55
  please see the [help page](http://exercism.io/languages/python).
57
56
 
58
-
59
57
  ## Submitting Incomplete Solutions
60
58
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -43,12 +43,11 @@ To raise a message with an exception, just write it as an argument to the except
43
43
  raise Exception("Meaningful message indicating the source of the error")
44
44
  ```
45
45
 
46
-
47
46
  ## Submitting Exercises
48
47
 
49
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
48
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/allergies` directory.
50
49
 
51
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
50
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
52
51
 
53
52
  For more detailed information about running tests, code style and linting,
54
53
  please see the [help page](http://exercism.io/languages/python).
@@ -7,7 +7,7 @@ if not hasattr(unittest.TestCase, 'assertCountEqual'):
7
7
  unittest.TestCase.assertCountEqual = unittest.TestCase.assertItemsEqual
8
8
 
9
9
 
10
- # Tests adapted from `problem-specifications//canonical-data.json` @ v1.0.0
10
+ # Tests adapted from `problem-specifications//canonical-data.json` @ v1.1.0
11
11
 
12
12
  class AllergiesTests(unittest.TestCase):
13
13
  def test_no_allergies_means_not_allergic(self):
@@ -45,16 +45,14 @@ To raise a message with an exception, just write it as an argument to the except
45
45
  raise Exception("Meaningful message indicating the source of the error")
46
46
  ```
47
47
 
48
-
49
48
  ## Submitting Exercises
50
49
 
51
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
50
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/alphametics` directory.
52
51
 
53
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
52
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
54
53
 
55
54
  For more detailed information about running tests, code style and linting,
56
55
  please see the [help page](http://exercism.io/languages/python).
57
56
 
58
-
59
57
  ## Submitting Incomplete Solutions
60
58
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -20,12 +20,11 @@ To raise a message with an exception, just write it as an argument to the except
20
20
  raise Exception("Meaningful message indicating the source of the error")
21
21
  ```
22
22
 
23
-
24
23
  ## Submitting Exercises
25
24
 
26
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
25
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/anagram` directory.
27
26
 
28
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
27
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
29
28
 
30
29
  For more detailed information about running tests, code style and linting,
31
30
  please see the [help page](http://exercism.io/languages/python).
@@ -3,20 +3,13 @@ import unittest
3
3
  from anagram import detect_anagrams
4
4
 
5
5
 
6
- # Tests adapted from `problem-specifications//canonical-data.json` @ v1.0.1
6
+ # Tests adapted from `problem-specifications//canonical-data.json` @ v1.2.0
7
7
 
8
8
  class AnagramTests(unittest.TestCase):
9
9
  def test_no_matches(self):
10
10
  candidates = ["hello", "world", "zombies", "pants"]
11
11
  self.assertEqual(detect_anagrams("diaper", candidates), [])
12
12
 
13
- def test_detects_simple_anagram(self):
14
- candidates = ["tan", "stand", "at"]
15
- self.assertEqual(detect_anagrams("ant", candidates), ["tan"])
16
-
17
- def test_does_not_detect_false_positives(self):
18
- self.assertEqual(detect_anagrams("galea", ["eagle"]), [])
19
-
20
13
  def test_detects_two_anagrams(self):
21
14
  candidates = ["stream", "pigeon", "maters"]
22
15
  self.assertEqual(
@@ -37,10 +30,6 @@ class AnagramTests(unittest.TestCase):
37
30
  detect_anagrams("allergy", candidates),
38
31
  ["gallery", "regally", "largely"])
39
32
 
40
- def test_does_not_detect_identical_words(self):
41
- candidates = ["corn", "dark", "Corn", "rank", "CORN", "cron", "park"]
42
- self.assertEqual(detect_anagrams("corn", candidates), ["cron"])
43
-
44
33
  def test_does_not_detect_non_anagrams_with_identical_checksum(self):
45
34
  self.assertEqual(detect_anagrams("mass", ["last"]), [])
46
35
 
@@ -49,7 +38,7 @@ class AnagramTests(unittest.TestCase):
49
38
  self.assertEqual(
50
39
  detect_anagrams("Orchestra", candidates), ["Carthorse"])
51
40
 
52
- def test_detects_anagrams_using_case_insensitive_subjec(self):
41
+ def test_detects_anagrams_using_case_insensitive_subject(self):
53
42
  candidates = ["cashregister", "carthorse", "radishes"]
54
43
  self.assertEqual(
55
44
  detect_anagrams("Orchestra", candidates), ["carthorse"])
@@ -59,9 +48,6 @@ class AnagramTests(unittest.TestCase):
59
48
  self.assertEqual(
60
49
  detect_anagrams("orchestra", candidates), ["Carthorse"])
61
50
 
62
- def test_does_not_detect_a_word_as_its_own_anagram(self):
63
- self.assertEqual(detect_anagrams("banana", ["Banana"]), [])
64
-
65
51
  def test_does_not_detect_a_anagram_if_the_original_word_is_repeated(self):
66
52
  self.assertEqual(detect_anagrams("go", ["go Go GO"]), [])
67
53
 
@@ -11,11 +11,25 @@ For example:
11
11
 
12
12
  Write some code to determine whether a number is an Armstrong number.
13
13
 
14
+ ## Exception messages
15
+
16
+ Sometimes it is necessary to raise an exception. When you do this, you should include a meaningful error message to
17
+ indicate what the source of the error is. This makes your code more readable and helps significantly with debugging. Not
18
+ every exercise will require you to raise an exception, but for those that do, the tests will only pass if you include
19
+ a message.
20
+
21
+ To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
22
+ `raise Exception`, you shold write:
23
+
24
+ ```python
25
+ raise Exception("Meaningful message indicating the source of the error")
26
+ ```
27
+
14
28
  ## Submitting Exercises
15
29
 
16
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
30
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/armstrong-numbers` directory.
17
31
 
18
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
32
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
19
33
 
20
34
  For more detailed information about running tests, code style and linting,
21
35
  please see the [help page](http://exercism.io/languages/python).
@@ -42,12 +42,11 @@ To raise a message with an exception, just write it as an argument to the except
42
42
  raise Exception("Meaningful message indicating the source of the error")
43
43
  ```
44
44
 
45
-
46
45
  ## Submitting Exercises
47
46
 
48
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
47
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/atbash-cipher` directory.
49
48
 
50
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
49
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
51
50
 
52
51
  For more detailed information about running tests, code style and linting,
53
52
  please see the [help page](http://exercism.io/languages/python).
@@ -3,7 +3,7 @@ import unittest
3
3
  from atbash_cipher import decode, encode
4
4
 
5
5
 
6
- # Tests adapted from `problem-specifications//canonical-data.json` @ v1.0.0
6
+ # Tests adapted from `problem-specifications//canonical-data.json` @ v1.1.0
7
7
 
8
8
  class AtbashCipherTest(unittest.TestCase):
9
9
  def test_encode_no(self):
@@ -334,12 +334,11 @@ To raise a message with an exception, just write it as an argument to the except
334
334
  raise Exception("Meaningful message indicating the source of the error")
335
335
  ```
336
336
 
337
-
338
337
  ## Submitting Exercises
339
338
 
340
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
339
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/beer-song` directory.
341
340
 
342
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
341
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
343
342
 
344
343
  For more detailed information about running tests, code style and linting,
345
344
  please see the [help page](http://exercism.io/languages/python).
@@ -44,12 +44,11 @@ To raise a message with an exception, just write it as an argument to the except
44
44
  raise Exception("Meaningful message indicating the source of the error")
45
45
  ```
46
46
 
47
-
48
47
  ## Submitting Exercises
49
48
 
50
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
49
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/binary` directory.
51
50
 
52
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
51
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
53
52
 
54
53
  For more detailed information about running tests, code style and linting,
55
54
  please see the [help page](http://exercism.io/languages/python).
@@ -48,12 +48,11 @@ To raise a message with an exception, just write it as an argument to the except
48
48
  raise Exception("Meaningful message indicating the source of the error")
49
49
  ```
50
50
 
51
-
52
51
  ## Submitting Exercises
53
52
 
54
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
53
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/binary-search` directory.
55
54
 
56
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
55
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
57
56
 
58
57
  For more detailed information about running tests, code style and linting,
59
58
  please see the [help page](http://exercism.io/languages/python).
@@ -67,12 +67,11 @@ To raise a message with an exception, just write it as an argument to the except
67
67
  raise Exception("Meaningful message indicating the source of the error")
68
68
  ```
69
69
 
70
-
71
70
  ## Submitting Exercises
72
71
 
73
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
72
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/binary-search-tree` directory.
74
73
 
75
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
74
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
76
75
 
77
76
  For more detailed information about running tests, code style and linting,
78
77
  please see the [help page](http://exercism.io/languages/python).
@@ -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
 
@@ -25,12 +27,11 @@ To raise a message with an exception, just write it as an argument to the except
25
27
  raise Exception("Meaningful message indicating the source of the error")
26
28
  ```
27
29
 
28
-
29
30
  ## Submitting Exercises
30
31
 
31
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
32
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/bob` directory.
32
33
 
33
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
34
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
34
35
 
35
36
  For more detailed information about running tests, code style and linting,
36
37
  please see the [help page](http://exercism.io/languages/python).
@@ -81,12 +81,11 @@ To raise a message with an exception, just write it as an argument to the except
81
81
  raise Exception("Meaningful message indicating the source of the error")
82
82
  ```
83
83
 
84
-
85
84
  ## Submitting Exercises
86
85
 
87
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
86
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/book-store` directory.
88
87
 
89
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
88
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
90
89
 
91
90
  For more detailed information about running tests, code style and linting,
92
91
  please see the [help page](http://exercism.io/languages/python).
@@ -74,12 +74,11 @@ To raise a message with an exception, just write it as an argument to the except
74
74
  raise Exception("Meaningful message indicating the source of the error")
75
75
  ```
76
76
 
77
-
78
77
  ## Submitting Exercises
79
78
 
80
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
79
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/bowling` directory.
81
80
 
82
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
81
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
83
82
 
84
83
  For more detailed information about running tests, code style and linting,
85
84
  please see the [help page](http://exercism.io/languages/python).
@@ -17,12 +17,11 @@ To raise a message with an exception, just write it as an argument to the except
17
17
  raise Exception("Meaningful message indicating the source of the error")
18
18
  ```
19
19
 
20
-
21
20
  ## Submitting Exercises
22
21
 
23
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
22
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/bracket-push` directory.
24
23
 
25
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
24
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
26
25
 
27
26
  For more detailed information about running tests, code style and linting,
28
27
  please see the [help page](http://exercism.io/languages/python).
@@ -30,12 +30,11 @@ To raise a message with an exception, just write it as an argument to the except
30
30
  raise Exception("Meaningful message indicating the source of the error")
31
31
  ```
32
32
 
33
-
34
33
  ## Submitting Exercises
35
34
 
36
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
35
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/change` directory.
37
36
 
38
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
37
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
39
38
 
40
39
  For more detailed information about running tests, code style and linting,
41
40
  please see the [help page](http://exercism.io/languages/python).
@@ -64,12 +64,11 @@ To raise a message with an exception, just write it as an argument to the except
64
64
  raise Exception("Meaningful message indicating the source of the error")
65
65
  ```
66
66
 
67
-
68
67
  ## Submitting Exercises
69
68
 
70
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
69
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/circular-buffer` directory.
71
70
 
72
- For example, if you're submitting `bob.py` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/python/bob/bob.py`.
71
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
73
72
 
74
73
  For more detailed information about running tests, code style and linting,
75
74
  please see the [help page](http://exercism.io/languages/python).