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
@@ -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/clock` 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).
@@ -45,12 +45,11 @@ 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/collatz-conjecture` 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).
@@ -35,6 +35,7 @@ Assume the programming language you are using does not have an implementation of
35
35
 
36
36
  See [Emulating numeric types](https://docs.python.org/2/reference/datamodel.html#emulating-numeric-types) for help on operator overloading.
37
37
 
38
+
38
39
  ## Exception messages
39
40
 
40
41
  Sometimes it is necessary to raise an exception. When you do this, you should include a meaningful error message to
@@ -49,12 +50,11 @@ To raise a message with an exception, just write it as an argument to the except
49
50
  raise Exception("Meaningful message indicating the source of the error")
50
51
  ```
51
52
 
52
-
53
53
  ## Submitting Exercises
54
54
 
55
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
55
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/complex-numbers` directory.
56
56
 
57
- 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`.
57
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
58
58
 
59
59
  For more detailed information about running tests, code style and linting,
60
60
  please see the [help page](http://exercism.io/languages/python).
@@ -44,16 +44,14 @@ 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/connect` 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).
56
55
 
57
-
58
56
  ## Submitting Incomplete Solutions
59
57
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -83,12 +83,11 @@ To raise a message with an exception, just write it as an argument to the except
83
83
  raise Exception("Meaningful message indicating the source of the error")
84
84
  ```
85
85
 
86
-
87
86
  ## Submitting Exercises
88
87
 
89
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
88
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/crypto-square` directory.
90
89
 
91
- 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`.
90
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
92
91
 
93
92
  For more detailed information about running tests, code style and linting,
94
93
  please see the [help page](http://exercism.io/languages/python).
@@ -3,7 +3,7 @@ import unittest
3
3
  from crypto_square import encode
4
4
 
5
5
 
6
- # Tests adapted from `problem-specifications//canonical-data.json` @ v3.1.0
6
+ # Tests adapted from `problem-specifications//canonical-data.json` @ v3.2.0
7
7
 
8
8
  class CryptoSquareTest(unittest.TestCase):
9
9
  def test_empty_string(self):
@@ -1,4 +1,4 @@
1
- # Custom-Set
1
+ # Custom Set
2
2
 
3
3
  Create a custom set type.
4
4
 
@@ -7,11 +7,25 @@ type, like a set. In this exercise you will define your own set. How it
7
7
  works internally doesn't matter, as long as it behaves like a set of
8
8
  unique elements.
9
9
 
10
+ ## Exception messages
11
+
12
+ Sometimes it is necessary to raise an exception. When you do this, you should include a meaningful error message to
13
+ indicate what the source of the error is. This makes your code more readable and helps significantly with debugging. Not
14
+ every exercise will require you to raise an exception, but for those that do, the tests will only pass if you include
15
+ a message.
16
+
17
+ To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
18
+ `raise Exception`, you shold write:
19
+
20
+ ```python
21
+ raise Exception("Meaningful message indicating the source of the error")
22
+ ```
23
+
10
24
  ## Submitting Exercises
11
25
 
12
- 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/custom-set` directory.
13
27
 
14
- 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`.
15
29
 
16
30
  For more detailed information about running tests, code style and linting,
17
31
  please see the [help page](http://exercism.io/languages/python).
@@ -66,12 +66,11 @@ To raise a message with an exception, just write it as an argument to the except
66
66
  raise Exception("Meaningful message indicating the source of the error")
67
67
  ```
68
68
 
69
-
70
69
  ## Submitting Exercises
71
70
 
72
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
71
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/diamond` directory.
73
72
 
74
- 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`.
73
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
75
74
 
76
75
  For more detailed information about running tests, code style and linting,
77
76
  please see the [help page](http://exercism.io/languages/python).
@@ -26,12 +26,11 @@ To raise a message with an exception, just write it as an argument to the except
26
26
  raise Exception("Meaningful message indicating the source of the error")
27
27
  ```
28
28
 
29
-
30
29
  ## Submitting Exercises
31
30
 
32
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
31
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/difference-of-squares` directory.
33
32
 
34
- 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`.
33
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
35
34
 
36
35
  For more detailed information about running tests, code style and linting,
37
36
  please see the [help page](http://exercism.io/languages/python).
@@ -3,7 +3,7 @@ import unittest
3
3
  from difference_of_squares import difference, square_of_sum, sum_of_squares
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.2.0
7
7
 
8
8
  class DifferenceOfSquaresTest(unittest.TestCase):
9
9
  def test_square_of_sum_1(self):
@@ -68,12 +68,11 @@ To raise a message with an exception, just write it as an argument to the except
68
68
  raise Exception("Meaningful message indicating the source of the error")
69
69
  ```
70
70
 
71
-
72
71
  ## Submitting Exercises
73
72
 
74
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
73
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/diffie-hellman` directory.
75
74
 
76
- 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`.
75
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
77
76
 
78
77
  For more detailed information about running tests, code style and linting,
79
78
  please see the [help page](http://exercism.io/languages/python).
@@ -28,16 +28,14 @@ To raise a message with an exception, just write it as an argument to the except
28
28
  raise Exception("Meaningful message indicating the source of the error")
29
29
  ```
30
30
 
31
-
32
31
  ## Submitting Exercises
33
32
 
34
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
33
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/dominoes` directory.
35
34
 
36
- 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`.
35
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
37
36
 
38
37
  For more detailed information about running tests, code style and linting,
39
38
  please see the [help page](http://exercism.io/languages/python).
40
39
 
41
-
42
40
  ## Submitting Incomplete Solutions
43
41
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -1,4 +1,4 @@
1
- # Dot Dsl
1
+ # DOT DSL
2
2
 
3
3
  Write a Domain Specific Language similar to the Graphviz dot language.
4
4
 
@@ -39,14 +39,29 @@ The implementations of `Node` and `Edge` provided in `dot_dsl.py`.
39
39
 
40
40
  Observe the test cases in `dot_dsl_test.py` to understand the DSL's design.
41
41
 
42
+
43
+ ## Exception messages
44
+
45
+ Sometimes it is necessary to raise an exception. When you do this, you should include a meaningful error message to
46
+ indicate what the source of the error is. This makes your code more readable and helps significantly with debugging. Not
47
+ every exercise will require you to raise an exception, but for those that do, the tests will only pass if you include
48
+ a message.
49
+
50
+ To raise a message with an exception, just write it as an argument to the exception type. For example, instead of
51
+ `raise Exception`, you shold write:
52
+
53
+ ```python
54
+ raise Exception("Meaningful message indicating the source of the error")
55
+ ```
56
+
42
57
  ## Submitting Exercises
43
58
 
44
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
59
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/dot-dsl` directory.
45
60
 
46
- 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`.
61
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
47
62
 
48
- For more detailed information about running tests, code style and linting, please see the [help page](http://exercism.io/languages/python).
63
+ For more detailed information about running tests, code style and linting,
64
+ please see the [help page](http://exercism.io/languages/python).
49
65
 
50
66
  ## Submitting Incomplete Solutions
51
-
52
67
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -33,16 +33,14 @@ To raise a message with an exception, just write it as an argument to the except
33
33
  raise Exception("Meaningful message indicating the source of the error")
34
34
  ```
35
35
 
36
-
37
36
  ## Submitting Exercises
38
37
 
39
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
38
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/error-handling` directory.
40
39
 
41
- 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`.
40
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
42
41
 
43
42
  For more detailed information about running tests, code style and linting,
44
43
  please see the [help page](http://exercism.io/languages/python).
45
44
 
46
-
47
45
  ## Submitting Incomplete Solutions
48
46
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -60,12 +60,11 @@ To raise a message with an exception, just write it as an argument to the except
60
60
  raise Exception("Meaningful message indicating the source of the error")
61
61
  ```
62
62
 
63
-
64
63
  ## Submitting Exercises
65
64
 
66
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
65
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/etl` directory.
67
66
 
68
- 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`.
67
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
69
68
 
70
69
  For more detailed information about running tests, code style and linting,
71
70
  please see the [help page](http://exercism.io/languages/python).
@@ -24,12 +24,11 @@ To raise a message with an exception, just write it as an argument to the except
24
24
  raise Exception("Meaningful message indicating the source of the error")
25
25
  ```
26
26
 
27
-
28
27
  ## Submitting Exercises
29
28
 
30
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
29
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/flatten-array` directory.
31
30
 
32
- 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`.
31
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
33
32
 
34
33
  For more detailed information about running tests, code style and linting,
35
34
  please see the [help page](http://exercism.io/languages/python).
@@ -3,7 +3,7 @@ import unittest
3
3
  from flatten_array import flatten
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.2.0
7
7
 
8
8
  class FlattenArrayTests(unittest.TestCase):
9
9
 
@@ -77,12 +77,11 @@ To raise a message with an exception, just write it as an argument to the except
77
77
  raise Exception("Meaningful message indicating the source of the error")
78
78
  ```
79
79
 
80
-
81
80
  ## Submitting Exercises
82
81
 
83
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
82
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/food-chain` directory.
84
83
 
85
- 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`.
84
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
86
85
 
87
86
  For more detailed information about running tests, code style and linting,
88
87
  please see the [help page](http://exercism.io/languages/python).
@@ -39,16 +39,14 @@ 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/forth` 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).
51
50
 
52
-
53
51
  ## Submitting Incomplete Solutions
54
52
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -18,12 +18,11 @@ To raise a message with an exception, just write it as an argument to the except
18
18
  raise Exception("Meaningful message indicating the source of the error")
19
19
  ```
20
20
 
21
-
22
21
  ## Submitting Exercises
23
22
 
24
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
23
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/gigasecond` directory.
25
24
 
26
- 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`.
25
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
27
26
 
28
27
  For more detailed information about running tests, code style and linting,
29
28
  please see the [help page](http://exercism.io/languages/python).
@@ -1,11 +1,10 @@
1
1
  import unittest
2
-
3
2
  from datetime import datetime
4
3
 
5
4
  from gigasecond import add_gigasecond
6
5
 
7
6
 
8
- # Tests adapted from `problem-specifications//canonical-data.json` @ v1.0.0
7
+ # Tests adapted from `problem-specifications//canonical-data.json` @ v1.1.0
9
8
 
10
9
  class GigasecondTest(unittest.TestCase):
11
10
  def test_date_only_specification_of_time(self):
@@ -47,16 +47,14 @@ To raise a message with an exception, just write it as an argument to the except
47
47
  raise Exception("Meaningful message indicating the source of the error")
48
48
  ```
49
49
 
50
-
51
50
  ## Submitting Exercises
52
51
 
53
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
52
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/go-counting` directory.
54
53
 
55
- 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`.
54
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
56
55
 
57
56
  For more detailed information about running tests, code style and linting,
58
57
  please see the [help page](http://exercism.io/languages/python).
59
58
 
60
-
61
59
  ## Submitting Incomplete Solutions
62
60
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -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/grade-school` 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).
@@ -40,12 +40,11 @@ To raise a message with an exception, just write it as an argument to the except
40
40
  raise Exception("Meaningful message indicating the source of the error")
41
41
  ```
42
42
 
43
-
44
43
  ## Submitting Exercises
45
44
 
46
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
45
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/grains` directory.
47
46
 
48
- 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`.
47
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
49
48
 
50
49
  For more detailed information about running tests, code style and linting,
51
50
  please see the [help page](http://exercism.io/languages/python).
@@ -78,12 +78,11 @@ To raise a message with an exception, just write it as an argument to the except
78
78
  raise Exception("Meaningful message indicating the source of the error")
79
79
  ```
80
80
 
81
-
82
81
  ## Submitting Exercises
83
82
 
84
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
83
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/grep` directory.
85
84
 
86
- 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`.
85
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
87
86
 
88
87
  For more detailed information about running tests, code style and linting,
89
88
  please see the [help page](http://exercism.io/languages/python).
@@ -49,12 +49,11 @@ To raise a message with an exception, just write it as an argument to the except
49
49
  raise Exception("Meaningful message indicating the source of the error")
50
50
  ```
51
51
 
52
-
53
52
  ## Submitting Exercises
54
53
 
55
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
54
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/hamming` directory.
56
55
 
57
- 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`.
56
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
58
57
 
59
58
  For more detailed information about running tests, code style and linting,
60
59
  please see the [help page](http://exercism.io/languages/python).
@@ -3,7 +3,7 @@ import unittest
3
3
  import hamming
4
4
 
5
5
 
6
- # Tests adapted from `problem-specifications//canonical-data.json` @ v2.0.1
6
+ # Tests adapted from `problem-specifications//canonical-data.json` @ v2.1.0
7
7
 
8
8
  class HammingTest(unittest.TestCase):
9
9
 
@@ -28,12 +28,11 @@ To raise a message with an exception, just write it as an argument to the except
28
28
  raise Exception("Meaningful message indicating the source of the error")
29
29
  ```
30
30
 
31
-
32
31
  ## Submitting Exercises
33
32
 
34
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
33
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/hello-world` directory.
35
34
 
36
- 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`.
35
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
37
36
 
38
37
  For more detailed information about running tests, code style and linting,
39
38
  please see the [help page](http://exercism.io/languages/python).
@@ -3,7 +3,7 @@ import unittest
3
3
  import hello_world
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 HelloWorldTests(unittest.TestCase):
9
9
  def test_hello(self):
@@ -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/hexadecimal` 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).
@@ -119,12 +119,11 @@ To raise a message with an exception, just write it as an argument to the except
119
119
  raise Exception("Meaningful message indicating the source of the error")
120
120
  ```
121
121
 
122
-
123
122
  ## Submitting Exercises
124
123
 
125
- Note that, when trying to submit an exercise, make sure the solution is in the `exercism/python/<exerciseName>` directory.
124
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/house` directory.
126
125
 
127
- 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`.
126
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
128
127
 
129
128
  For more detailed information about running tests, code style and linting,
130
129
  please see the [help page](http://exercism.io/languages/python).