trackler 2.2.1.99 → 2.2.1.100

Sign up to get free protection for your applications and to get access to all the features.
Files changed (296) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/clock/canonical-data.json +303 -204
  4. data/problem-specifications/exercises/complex-numbers/canonical-data.json +104 -44
  5. data/problem-specifications/exercises/matrix/canonical-data.json +78 -0
  6. data/problem-specifications/exercises/word-count/canonical-data.json +12 -12
  7. data/tracks/bash/config.json +128 -110
  8. data/tracks/c/exercises/word-count/test/test_word_count.c +2 -2
  9. data/tracks/dart/CONTRIBUTING.md +2 -2
  10. data/tracks/dart/docs/EXERCISE_README_INSERT.md +0 -1
  11. data/tracks/dart/docs/INSTALLATION.md +17 -11
  12. data/tracks/fsharp/exercises/acronym/AcronymTest.fs +3 -7
  13. data/tracks/fsharp/exercises/anagram/AnagramTest.fs +1 -21
  14. data/tracks/fsharp/exercises/book-store/BookStoreTest.fs +1 -1
  15. data/tracks/fsharp/exercises/complex-numbers/ComplexNumbersTest.fs +25 -25
  16. data/tracks/fsharp/exercises/custom-set/CustomSetTest.fs +1 -1
  17. data/tracks/fsharp/exercises/food-chain/FoodChainTest.fs +1 -1
  18. data/tracks/fsharp/exercises/gigasecond/GigasecondTest.fs +1 -1
  19. data/tracks/fsharp/exercises/hamming/HammingTest.fs +1 -1
  20. data/tracks/fsharp/exercises/hello-world/HelloWorldTest.fs +1 -1
  21. data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProductTest.fs +1 -1
  22. data/tracks/fsharp/exercises/leap/LeapTest.fs +1 -1
  23. data/tracks/fsharp/exercises/markdown/MarkdownTest.fs +19 -19
  24. data/tracks/fsharp/exercises/minesweeper/MinesweeperTest.fs +27 -27
  25. data/tracks/fsharp/exercises/nth-prime/NthPrimeTest.fs +1 -1
  26. data/tracks/fsharp/exercises/nucleotide-count/NucleotideCountTest.fs +1 -1
  27. data/tracks/fsharp/exercises/pangram/PangramTest.fs +1 -1
  28. data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangleTest.fs +1 -1
  29. data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbersTest.fs +1 -1
  30. data/tracks/fsharp/exercises/phone-number/PhoneNumberTest.fs +11 -3
  31. data/tracks/fsharp/exercises/pig-latin/PigLatinTest.fs +1 -1
  32. data/tracks/fsharp/exercises/protein-translation/Example.fs +2 -2
  33. data/tracks/fsharp/exercises/protein-translation/ProteinTranslation.fs +1 -1
  34. data/tracks/fsharp/exercises/protein-translation/ProteinTranslationTest.fs +94 -60
  35. data/tracks/fsharp/exercises/react/ReactTest.fs +1 -1
  36. data/tracks/fsharp/exercises/rna-transcription/RnaTranscriptionTest.fs +1 -1
  37. data/tracks/fsharp/exercises/roman-numerals/RomanNumeralsTest.fs +1 -1
  38. data/tracks/fsharp/exercises/rotational-cipher/RotationalCipherTest.fs +1 -1
  39. data/tracks/fsharp/exercises/say/Example.fs +1 -1
  40. data/tracks/fsharp/exercises/say/SayTest.fs +21 -24
  41. data/tracks/fsharp/exercises/scrabble-score/ScrabbleScoreTest.fs +1 -1
  42. data/tracks/fsharp/exercises/secret-handshake/Example.fs +2 -2
  43. data/tracks/fsharp/exercises/secret-handshake/SecretHandshake.fs +1 -1
  44. data/tracks/fsharp/exercises/secret-handshake/SecretHandshakeTest.fs +39 -22
  45. data/tracks/fsharp/exercises/sieve/Example.fs +1 -1
  46. data/tracks/fsharp/exercises/sieve/Sieve.fs +1 -1
  47. data/tracks/fsharp/exercises/sieve/SieveTest.fs +19 -21
  48. data/tracks/fsharp/exercises/spiral-matrix/SpiralMatrixTest.fs +1 -1
  49. data/tracks/fsharp/exercises/sum-of-multiples/Example.fs +1 -1
  50. data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiples.fs +1 -1
  51. data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiplesTest.fs +44 -14
  52. data/tracks/fsharp/exercises/twelve-days/TwelveDaysTest.fs +1 -1
  53. data/tracks/fsharp/exercises/two-fer/Example.fs +1 -1
  54. data/tracks/fsharp/exercises/two-fer/TwoFer.fs +1 -1
  55. data/tracks/fsharp/exercises/two-fer/TwoFerTest.fs +4 -4
  56. data/tracks/fsharp/exercises/word-count/Example.fs +2 -2
  57. data/tracks/fsharp/exercises/word-count/WordCount.fs +2 -2
  58. data/tracks/fsharp/exercises/word-count/WordCountTest.fs +80 -100
  59. data/tracks/fsharp/exercises/wordy/Example.fs +2 -3
  60. data/tracks/fsharp/exercises/wordy/Wordy.fs +1 -1
  61. data/tracks/fsharp/exercises/wordy/WordyTest.fs +51 -49
  62. data/tracks/fsharp/exercises/zebra-puzzle/Example.fs +4 -4
  63. data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzleTest.fs +7 -8
  64. data/tracks/fsharp/generators/Common.fs +3 -1
  65. data/tracks/fsharp/generators/Exercise.fs +12 -1
  66. data/tracks/fsharp/generators/Generators.fs +89 -42
  67. data/tracks/fsharp/generators/Generators.fsproj +1 -0
  68. data/tracks/fsharp/generators/Options.fs +14 -7
  69. data/tracks/fsharp/generators/Program.fs +3 -0
  70. data/tracks/fsharp/generators/Rendering.fs +0 -1
  71. data/tracks/fsharp/generators/Track.fs +26 -0
  72. data/tracks/go/exercises/custom-set/.meta/gen.go +16 -14
  73. data/tracks/go/exercises/custom-set/cases_test.go +2 -2
  74. data/tracks/java/exercises/food-chain/.meta/version +1 -0
  75. data/tracks/java/exercises/sieve/.meta/version +1 -0
  76. data/tracks/java/exercises/sieve/src/test/java/SieveTest.java +17 -0
  77. data/tracks/java/exercises/twelve-days/.meta/version +1 -0
  78. data/tracks/java/exercises/twelve-days/src/test/java/TwelveDaysTest.java +15 -3
  79. data/tracks/java/exercises/two-fer/.meta/version +1 -0
  80. data/tracks/java/exercises/two-fer/src/test/java/TwoferTest.java +0 -9
  81. data/tracks/ocaml/config/exercise_readme.go.tmpl +38 -4
  82. data/tracks/ocaml/exercises/acronym/README.md +0 -2
  83. data/tracks/ocaml/exercises/all-your-base/README.md +1 -3
  84. data/tracks/ocaml/exercises/anagram/README.md +0 -1
  85. data/tracks/ocaml/exercises/atbash-cipher/README.md +2 -2
  86. data/tracks/ocaml/exercises/beer-song/README.md +2 -3
  87. data/tracks/ocaml/exercises/binary-search/README.md +0 -1
  88. data/tracks/ocaml/exercises/bob/README.md +2 -1
  89. data/tracks/ocaml/exercises/bowling/README.md +20 -7
  90. data/tracks/ocaml/exercises/bracket-push/README.md +0 -1
  91. data/tracks/ocaml/exercises/change/README.md +1 -2
  92. data/tracks/ocaml/exercises/connect/README.md +1 -3
  93. data/tracks/ocaml/exercises/custom-set/README.md +0 -2
  94. data/tracks/ocaml/exercises/difference-of-squares/README.md +0 -1
  95. data/tracks/ocaml/exercises/dominoes/README.md +3 -5
  96. data/tracks/ocaml/exercises/etl/README.md +3 -2
  97. data/tracks/ocaml/exercises/forth/README.md +0 -2
  98. data/tracks/ocaml/exercises/grade-school/README.md +0 -1
  99. data/tracks/ocaml/exercises/hamming/README.md +0 -1
  100. data/tracks/ocaml/exercises/hangman/README.md +0 -2
  101. data/tracks/ocaml/exercises/hello-world/README.md +0 -1
  102. data/tracks/ocaml/exercises/hexadecimal/README.md +0 -1
  103. data/tracks/ocaml/exercises/leap/README.md +1 -2
  104. data/tracks/ocaml/exercises/list-ops/README.md +0 -2
  105. data/tracks/ocaml/exercises/luhn/README.md +7 -8
  106. data/tracks/ocaml/exercises/meetup/README.md +16 -14
  107. data/tracks/ocaml/exercises/minesweeper/README.md +0 -2
  108. data/tracks/ocaml/exercises/nucleotide-count/README.md +8 -23
  109. data/tracks/ocaml/exercises/palindrome-products/README.md +0 -1
  110. data/tracks/ocaml/exercises/pangram/README.md +1 -2
  111. data/tracks/ocaml/exercises/phone-number/README.md +4 -4
  112. data/tracks/ocaml/exercises/prime-factors/README.md +0 -1
  113. data/tracks/ocaml/exercises/raindrops/README.md +0 -1
  114. data/tracks/ocaml/exercises/react/README.md +0 -2
  115. data/tracks/ocaml/{docs/EXERCISE_README_INSERT.md → exercises/rectangles/README.md} +67 -0
  116. data/tracks/ocaml/exercises/rna-transcription/README.md +1 -2
  117. data/tracks/ocaml/exercises/robot-name/README.md +0 -1
  118. data/tracks/ocaml/exercises/roman-numerals/README.md +1 -2
  119. data/tracks/ocaml/exercises/run-length-encoding/README.md +4 -5
  120. data/tracks/ocaml/exercises/say/README.md +0 -1
  121. data/tracks/ocaml/exercises/space-age/README.md +1 -2
  122. data/tracks/ocaml/exercises/triangle/README.md +8 -6
  123. data/tracks/ocaml/exercises/word-count/README.md +1 -3
  124. data/tracks/ocaml/exercises/zipper/README.md +1 -3
  125. data/tracks/perl6/.travis.yml +1 -1
  126. data/tracks/perl6/bin/README.md +1 -2
  127. data/tracks/perl6/bin/exercise-gen.pl6 +18 -18
  128. data/tracks/perl6/config.json +1 -0
  129. data/tracks/perl6/exercises/accumulate/{example.yaml → .meta/exercise-data.yaml} +0 -0
  130. data/tracks/perl6/exercises/accumulate/{Example.pm6 → .meta/solutions/Accumulate.pm6} +0 -0
  131. data/tracks/perl6/exercises/acronym/{example.yaml → .meta/exercise-data.yaml} +0 -0
  132. data/tracks/perl6/exercises/acronym/{Example.pm6 → .meta/solutions/Acronym.pm6} +0 -0
  133. data/tracks/perl6/exercises/all-your-base/{example.yaml → .meta/exercise-data.yaml} +0 -0
  134. data/tracks/perl6/exercises/all-your-base/{Example.pm6 → .meta/solutions/AllYourBase.pm6} +0 -0
  135. data/tracks/perl6/exercises/allergies/{example.yaml → .meta/exercise-data.yaml} +0 -0
  136. data/tracks/perl6/exercises/allergies/{Example.pm6 → .meta/solutions/Allergies.pm6} +0 -0
  137. data/tracks/perl6/exercises/anagram/{example.yaml → .meta/exercise-data.yaml} +0 -0
  138. data/tracks/perl6/exercises/anagram/{Example.pm6 → .meta/solutions/Anagram.pm6} +0 -0
  139. data/tracks/perl6/exercises/atbash-cipher/{example.yaml → .meta/exercise-data.yaml} +0 -0
  140. data/tracks/perl6/exercises/atbash-cipher/{Example.pm6 → .meta/solutions/AtbashCipher.pm6} +0 -0
  141. data/tracks/perl6/exercises/binary/{Example.pm6 → .meta/solutions/Trinary.pm6} +0 -0
  142. data/tracks/perl6/exercises/bob/{example.yaml → .meta/exercise-data.yaml} +0 -0
  143. data/tracks/perl6/exercises/bob/{Example.pm6 → .meta/solutions/Bob.pm6} +0 -0
  144. data/tracks/perl6/exercises/clock/{example.yaml → .meta/exercise-data.yaml} +0 -0
  145. data/tracks/perl6/exercises/clock/{Example.pm6 → .meta/solutions/Clock.pm6} +0 -0
  146. data/tracks/perl6/exercises/etl/{example.yaml → .meta/exercise-data.yaml} +0 -0
  147. data/tracks/perl6/exercises/etl/{Example.pm6 → .meta/solutions/ETL.pm6} +0 -0
  148. data/tracks/perl6/exercises/flatten-array/{example.yaml → .meta/exercise-data.yaml} +0 -0
  149. data/tracks/perl6/exercises/flatten-array/{Example.pm6 → .meta/solutions/FlattenArray.pm6} +0 -0
  150. data/tracks/perl6/exercises/grade-school/{example.yaml → .meta/exercise-data.yaml} +0 -0
  151. data/tracks/perl6/exercises/grade-school/{Example.pm6 → .meta/solutions/GradeSchool.pm6} +0 -0
  152. data/tracks/perl6/exercises/grains/{example.yaml → .meta/exercise-data.yaml} +0 -0
  153. data/tracks/perl6/exercises/grains/{Example.pm6 → .meta/solutions/Grains.pm6} +0 -0
  154. data/tracks/perl6/exercises/hamming/{example.yaml → .meta/exercise-data.yaml} +0 -0
  155. data/tracks/perl6/exercises/hamming/{Example.pm6 → .meta/solutions/Hamming.pm6} +0 -0
  156. data/tracks/perl6/exercises/hello-world/{example.yaml → .meta/exercise-data.yaml} +0 -0
  157. data/tracks/perl6/exercises/hello-world/{Example.pm6 → .meta/solutions/HelloWorld.pm6} +0 -0
  158. data/tracks/perl6/exercises/leap/{example.yaml → .meta/exercise-data.yaml} +0 -0
  159. data/tracks/perl6/exercises/leap/{Example.pm6 → .meta/solutions/Leap.pm6} +0 -0
  160. data/tracks/perl6/exercises/linked-list/{example.yaml → .meta/exercise-data.yaml} +0 -0
  161. data/tracks/perl6/exercises/linked-list/{Example.pm6 → .meta/solutions/LinkedList.pm6} +0 -0
  162. data/tracks/perl6/exercises/luhn/{example.yaml → .meta/exercise-data.yaml} +0 -0
  163. data/tracks/perl6/exercises/luhn/{Example.pm6 → .meta/solutions/Luhn.pm6} +0 -0
  164. data/tracks/perl6/exercises/meetup/{example.yaml → .meta/exercise-data.yaml} +0 -0
  165. data/tracks/perl6/exercises/meetup/{Example.pm6 → .meta/solutions/Meetup.pm6} +0 -0
  166. data/tracks/perl6/exercises/nucleotide-count/{example.yaml → .meta/exercise-data.yaml} +0 -0
  167. data/tracks/perl6/exercises/nucleotide-count/{Example.pm6 → .meta/solutions/NucleotideCount.pm6} +0 -0
  168. data/tracks/perl6/exercises/pangram/{example.yaml → .meta/exercise-data.yaml} +0 -0
  169. data/tracks/perl6/exercises/pangram/{Example.pm6 → .meta/solutions/Pangram.pm6} +0 -0
  170. data/tracks/perl6/exercises/phone-number/{example.yaml → .meta/exercise-data.yaml} +0 -0
  171. data/tracks/perl6/exercises/phone-number/{Example.pm6 → .meta/solutions/Phone.pm6} +0 -0
  172. data/tracks/perl6/exercises/raindrops/{example.yaml → .meta/exercise-data.yaml} +0 -0
  173. data/tracks/perl6/exercises/raindrops/{Example.pm6 → .meta/solutions/Raindrops.pm6} +0 -0
  174. data/tracks/perl6/exercises/rna-transcription/{example.yaml → .meta/exercise-data.yaml} +0 -0
  175. data/tracks/perl6/exercises/rna-transcription/{Example.pm6 → .meta/solutions/RNA.pm6} +0 -0
  176. data/tracks/perl6/exercises/robot-name/{example.yaml → .meta/exercise-data.yaml} +0 -0
  177. data/tracks/perl6/exercises/robot-name/{Example.pm6 → .meta/solutions/Robot.pm6} +0 -0
  178. data/tracks/perl6/exercises/roman-numerals/{example.yaml → .meta/exercise-data.yaml} +0 -0
  179. data/tracks/perl6/exercises/roman-numerals/{Example.pm6 → .meta/solutions/RomanNumerals.pm6} +0 -0
  180. data/tracks/perl6/exercises/scrabble-score/{example.yaml → .meta/exercise-data.yaml} +0 -0
  181. data/tracks/perl6/exercises/scrabble-score/{Example.pm6 → .meta/solutions/Scrabble.pm6} +0 -0
  182. data/tracks/perl6/exercises/space-age/{example.yaml → .meta/exercise-data.yaml} +0 -0
  183. data/tracks/perl6/exercises/space-age/{Example.pm6 → .meta/solutions/SpaceAge.pm6} +0 -0
  184. data/tracks/perl6/exercises/trinary/{Example.pm6 → .meta/solutions/Trinary.pm6} +0 -0
  185. data/tracks/perl6/exercises/two-fer/{example.yaml → .meta/exercise-data.yaml} +0 -0
  186. data/tracks/perl6/exercises/two-fer/{Example.pm6 → .meta/solutions/TwoFer.pm6} +0 -0
  187. data/tracks/perl6/exercises/word-count/{example.yaml → .meta/exercise-data.yaml} +0 -0
  188. data/tracks/perl6/exercises/word-count/{Example.pm6 → .meta/solutions/WordCount.pm6} +0 -0
  189. data/tracks/perl6/exercises/wordy/{example.yaml → .meta/exercise-data.yaml} +0 -0
  190. data/tracks/perl6/exercises/wordy/{Example.pm6 → .meta/solutions/Wordy.pm6} +0 -0
  191. data/tracks/perl6/t/generated-tests.t +2 -2
  192. data/tracks/python/config.json +12 -0
  193. data/tracks/python/exercises/bowling/.gitignore +0 -0
  194. data/tracks/python/exercises/bowling/bowling.py +11 -0
  195. data/tracks/python/exercises/bowling/bowling_test.py +193 -0
  196. data/tracks/python/exercises/bowling/example.py +149 -0
  197. data/tracks/python/exercises/say/say_test.py +1 -1
  198. data/tracks/ruby/README.md +121 -97
  199. data/tracks/ruby/config/exercise_readme.go.tmpl +23 -4
  200. data/tracks/ruby/exercises/accumulate/{HINTS.md → .meta/hints.md} +0 -0
  201. data/tracks/ruby/exercises/accumulate/README.md +3 -5
  202. data/tracks/ruby/exercises/acronym/README.md +3 -6
  203. data/tracks/ruby/exercises/all-your-base/README.md +4 -7
  204. data/tracks/ruby/exercises/allergies/README.md +3 -6
  205. data/tracks/ruby/exercises/alphametics/README.md +5 -8
  206. data/tracks/ruby/exercises/anagram/README.md +3 -5
  207. data/tracks/ruby/exercises/atbash-cipher/README.md +5 -6
  208. data/tracks/ruby/exercises/beer-song/README.md +5 -7
  209. data/tracks/ruby/exercises/binary-search-tree/README.md +3 -5
  210. data/tracks/ruby/exercises/binary-search/README.md +3 -5
  211. data/tracks/ruby/exercises/binary/README.md +5 -5
  212. data/tracks/ruby/exercises/bob/README.md +3 -5
  213. data/tracks/ruby/exercises/book-store/README.md +3 -5
  214. data/tracks/ruby/exercises/bowling/README.md +23 -11
  215. data/tracks/ruby/exercises/bracket-push/README.md +3 -5
  216. data/tracks/ruby/exercises/change/README.md +3 -5
  217. data/tracks/ruby/exercises/circular-buffer/README.md +16 -11
  218. data/tracks/ruby/exercises/clock/README.md +3 -5
  219. data/tracks/ruby/exercises/collatz-conjecture/README.md +4 -6
  220. data/tracks/ruby/exercises/complex-numbers/README.md +6 -8
  221. data/tracks/ruby/exercises/connect/README.md +4 -7
  222. data/tracks/ruby/exercises/crypto-square/README.md +3 -5
  223. data/tracks/ruby/exercises/custom-set/README.md +3 -6
  224. data/tracks/ruby/exercises/diamond/README.md +9 -11
  225. data/tracks/ruby/exercises/difference-of-squares/README.md +3 -5
  226. data/tracks/ruby/exercises/dominoes/README.md +6 -9
  227. data/tracks/ruby/exercises/etl/README.md +6 -6
  228. data/tracks/ruby/exercises/flatten-array/README.md +5 -8
  229. data/tracks/ruby/exercises/food-chain/README.md +4 -6
  230. data/tracks/ruby/exercises/gigasecond/README.md +3 -5
  231. data/tracks/ruby/exercises/grade-school/README.md +3 -6
  232. data/tracks/ruby/exercises/grains/README.md +3 -6
  233. data/tracks/ruby/exercises/hamming/README.md +3 -5
  234. data/tracks/ruby/exercises/hello-world/README.md +1 -3
  235. data/tracks/ruby/exercises/hexadecimal/README.md +3 -5
  236. data/tracks/ruby/exercises/house/README.md +5 -8
  237. data/tracks/ruby/exercises/isbn-verifier/README.md +4 -6
  238. data/tracks/ruby/exercises/isogram/README.md +5 -6
  239. data/tracks/ruby/exercises/kindergarten-garden/README.md +16 -18
  240. data/tracks/ruby/exercises/largest-series-product/README.md +3 -5
  241. data/tracks/ruby/exercises/leap/README.md +4 -6
  242. data/tracks/ruby/exercises/linked-list/README.md +13 -15
  243. data/tracks/ruby/exercises/list-ops/README.md +3 -6
  244. data/tracks/ruby/exercises/luhn/README.md +10 -12
  245. data/tracks/ruby/exercises/matrix/README.md +9 -9
  246. data/tracks/ruby/exercises/meetup/README.md +19 -18
  247. data/tracks/ruby/exercises/minesweeper/README.md +3 -6
  248. data/tracks/ruby/exercises/nth-prime/README.md +3 -5
  249. data/tracks/ruby/exercises/nucleotide-count/README.md +11 -27
  250. data/tracks/ruby/exercises/ocr-numbers/README.md +9 -11
  251. data/tracks/ruby/exercises/octal/README.md +9 -7
  252. data/tracks/ruby/exercises/palindrome-products/README.md +8 -17
  253. data/tracks/ruby/exercises/pangram/README.md +4 -6
  254. data/tracks/ruby/exercises/pascals-triangle/README.md +5 -7
  255. data/tracks/ruby/exercises/perfect-numbers/README.md +5 -7
  256. data/tracks/ruby/exercises/phone-number/README.md +7 -8
  257. data/tracks/ruby/exercises/pig-latin/README.md +3 -5
  258. data/tracks/ruby/exercises/point-mutations/README.md +3 -5
  259. data/tracks/ruby/exercises/poker/README.md +3 -5
  260. data/tracks/ruby/exercises/prime-factors/README.md +3 -5
  261. data/tracks/ruby/exercises/protein-translation/README.md +7 -10
  262. data/tracks/ruby/exercises/proverb/README.md +17 -14
  263. data/tracks/ruby/exercises/pythagorean-triplet/README.md +6 -8
  264. data/tracks/ruby/exercises/queen-attack/README.md +4 -6
  265. data/tracks/ruby/exercises/rail-fence-cipher/README.md +15 -12
  266. data/tracks/ruby/exercises/raindrops/README.md +3 -5
  267. data/tracks/ruby/exercises/rna-transcription/README.md +4 -6
  268. data/tracks/ruby/exercises/robot-name/{HINTS.md → .meta/hints.md} +0 -0
  269. data/tracks/ruby/exercises/robot-name/README.md +3 -5
  270. data/tracks/ruby/exercises/robot-simulator/README.md +3 -5
  271. data/tracks/ruby/exercises/roman-numerals/README.md +4 -6
  272. data/tracks/ruby/exercises/rotational-cipher/README.md +3 -5
  273. data/tracks/ruby/exercises/run-length-encoding/README.md +7 -9
  274. data/tracks/ruby/exercises/saddle-points/README.md +5 -7
  275. data/tracks/ruby/exercises/say/README.md +3 -5
  276. data/tracks/ruby/exercises/scale-generator/README.md +3 -7
  277. data/tracks/ruby/exercises/scrabble-score/README.md +6 -6
  278. data/tracks/ruby/exercises/secret-handshake/README.md +4 -6
  279. data/tracks/ruby/exercises/series/README.md +3 -5
  280. data/tracks/ruby/exercises/sieve/README.md +3 -5
  281. data/tracks/ruby/exercises/simple-cipher/README.md +7 -11
  282. data/tracks/ruby/exercises/simple-linked-list/README.md +3 -5
  283. data/tracks/ruby/exercises/space-age/README.md +4 -6
  284. data/tracks/ruby/exercises/strain/README.md +3 -5
  285. data/tracks/ruby/exercises/sum-of-multiples/README.md +6 -11
  286. data/tracks/ruby/exercises/tournament/README.md +8 -11
  287. data/tracks/ruby/exercises/transpose/README.md +10 -12
  288. data/tracks/ruby/exercises/triangle/README.md +12 -11
  289. data/tracks/ruby/exercises/trinary/README.md +4 -6
  290. data/tracks/ruby/exercises/twelve-days/README.md +4 -6
  291. data/tracks/ruby/exercises/two-bucket/README.md +13 -15
  292. data/tracks/ruby/exercises/two-fer/README.md +13 -39
  293. data/tracks/ruby/exercises/word-count/README.md +4 -7
  294. data/tracks/ruby/exercises/wordy/README.md +3 -10
  295. metadata +77 -68
  296. data/tracks/ruby/docs/EXERCISE_README_INSERT.md +0 -24
@@ -63,7 +63,7 @@ class SayTest(unittest.TestCase):
63
63
  "three hundred and twenty-one thousand "
64
64
  "one hundred and twenty-three"))
65
65
 
66
- def test_number_to_large(self):
66
+ def test_number_too_large(self):
67
67
  with self.assertRaisesWithMessage(ValueError):
68
68
  say(1e12)
69
69
 
@@ -7,20 +7,20 @@ Exercism Exercises in Ruby
7
7
 
8
8
  ## Setup
9
9
 
10
- You'll need a recent (2.1+) version of Ruby, but that's it. Minitest ships with
11
- the language, so you're all set.
10
+ You'll need a recent (2.1+) version of Ruby, but that's it. Minitest ships
11
+ with the language, so you're all set.
12
12
 
13
13
  ## Anatomy of an Exercise
14
14
 
15
15
  The files for an exercise live in `exercises/<slug>`. The slug for an exercise
16
- is a unique nickname composed of a-z (lowercase) and -, e.g. `clock` or
16
+ is a unique nickname composed of a-z (lowercase) and -, e.g. `clock` or
17
17
  `atbash-cipher`. Inside its directory, each exercise has:
18
18
 
19
19
  * a test suite, `<exercise_name>_test.rb`
20
20
  * an example solution, `.meta/solutions/<exercise_name>.rb`
21
21
 
22
- where `<exercise_name>` is the underscored version of the exercise's slug, e.g.,
23
- `clock` or `atbash_cipher`.
22
+ where `<exercise_name>` is the underscored version of the exercise's slug,
23
+ e.g., `clock` or `atbash_cipher`.
24
24
 
25
25
  If the exercise has a test generator, the directory will also contain:
26
26
 
@@ -33,42 +33,42 @@ A few exercises use a custom test template:
33
33
 
34
34
  ### BookKeeping::VERSION
35
35
 
36
- For some, even perhaps many, of the exercises, you will find a reference
37
- to the `BookKeeping` module, but this is only included when tests have
38
- been generated; see [Generated Test Suites](#generated-test-suites).
39
- This `VERSION` number helps make sure exercise solvers and exercise
40
- reviewers know which revision of the test suite they are talking
41
- about, and it theoretically helps avoid reviewer feedback like
42
- *"Your solution doesn't make the tests pass,"* if they are looking
43
- at a different version of the tests than the solver used.
36
+ For some, even perhaps many, of the exercises, you will find a reference to
37
+ the `BookKeeping` module, but this is only included when tests have been
38
+ generated; see [Generated Test Suites](#generated-test-suites). This
39
+ `VERSION` number helps make sure exercise solvers and exercise reviewers know
40
+ which revision of the test suite they are talking about, and it theoretically
41
+ helps avoid reviewer feedback like *"Your solution doesn't make the tests
42
+ pass,"* if they are looking at a different version of the tests than the
43
+ solver used.
44
44
 
45
45
  ### Canonical Data
46
46
 
47
47
  **Most exercises can be generated from shared inputs/outputs, called canonical
48
- data (see [Generated Test Suites](#generated-test-suites) below).** To find out
49
- whether a test has canonical data, check
50
- the [problem-specifications repo](https://github.com/exercism/problem-specifications/tree/master/exercises).
48
+ data (see [Generated Test Suites](#generated-test-suites) below).** To find
49
+ out whether a test has canonical data, check the
50
+ [problem-specifications repo](https://github.com/exercism/problem-specifications/tree/master/exercises).
51
51
 
52
52
  ## Running the Tests
53
53
 
54
- Run the tests using `rake`, rather than `ruby path/to/the_test.rb`. `rake` knows
55
- to look for the example solution and to disable skips. Just tell `rake` the name
56
- of your problem and you are set:
54
+ Run the tests using `rake`, rather than `ruby path/to/the_test.rb`. `rake`
55
+ knows to look for the example solution and to disable skips. Just tell `rake`
56
+ the name of your problem and you are set:
57
57
 
58
58
  ```sh
59
59
  rake test:clock
60
60
  ```
61
61
 
62
- To pass arguments to the test command, like `-p` for example, you can run
63
- the following:
62
+ To pass arguments to the test command, like `-p` for example, you can run the
63
+ following:
64
64
 
65
65
  ```sh
66
66
  rake test:clock -- -p
67
67
  ```
68
68
 
69
69
  To run a subset of the tests, use a regular expression. For example, if tests
70
- exist that are named identical_to_4_places, and identical, then we can run both
71
- tests with
70
+ exist that are named identical_to_4_places, and identical, then we can run
71
+ both tests with
72
72
 
73
73
  ```sh
74
74
  rake test:hamming -- -p -n="/identical/"
@@ -93,13 +93,16 @@ some do not. To find out whether an exercise has a generator, run
93
93
  In addition to a usage message, the `-h` flag lists all exercises with a
94
94
  generator. If a generator is available for your exercise, you can
95
95
 
96
- * [Regenerate the test suite](#regenerating-an-exercise) based on updated canonical data
96
+ * [Regenerate the test suite](#regenerating-an-exercise) based on
97
+ updated canonical data
97
98
  * [Make changes to a generated exercise](#changing-a-generated-exercise)
98
99
 
99
- If not, you will need to [implement a new generator](#implementing-a-generator)
100
+ If not, you will need to
101
+ [implement a new generator](#implementing-a-generator).
100
102
 
101
- Generated exercises depend on the [the shared metadata][problem-specifications], which must be
102
- cloned to the same directory that contains your clone of the ruby repository:
103
+ Generated exercises depend on the
104
+ [the shared metadata][problem-specifications], which must be cloned to the
105
+ same directory that contains your clone of the ruby repository:
103
106
 
104
107
  ```
105
108
  tree -L 1 ~/code/exercism
@@ -109,20 +112,21 @@ tree -L 1 ~/code/exercism
109
112
 
110
113
  #### Regenerating a Test Suite
111
114
 
112
- From time to time, the [canonical data](https://github.com/exercism/problem-specifications/tree/master/exercises)
113
- for an exercise's tests changes, and we need to keep the Ruby version's
114
- tests synced up. Regenerating these tests is a quick and easy way to help
115
- maintain the track and get involved!
115
+ From time to time, the
116
+ [canonical data](https://github.com/exercism/problem-specifications/tree/master/exercises)
117
+ for an exercise's tests changes, and we need to keep the Ruby version's tests
118
+ synced up. Regenerating these tests is a quick and easy way to help maintain
119
+ the track and get involved!
116
120
 
117
- If it's your first time cloning/contributing to the repository, you'll
118
- need to install any dependencies via `bundle`:
121
+ If it's your first time cloning/contributing to the repository, you'll need to
122
+ install any dependencies via `bundle`:
119
123
 
120
124
  ```bash
121
125
  bundle install
122
126
  ```
123
127
 
124
- Be sure that you're working on the most up-to-date version of the repo.
125
- From the root of your copy of the repository:
128
+ Be sure that you're working on the most up-to-date version of the repo. From
129
+ the root of your copy of the repository:
126
130
 
127
131
  ```bash
128
132
  # Add the exercism repo as upstream if you haven't yet:
@@ -136,14 +140,15 @@ git checkout master
136
140
  git merge upstream/master
137
141
  ```
138
142
 
139
- Depending on your git workflow preferences and the state of your local
140
- repo, you may want to do some rebasing.
143
+ Depending on your git workflow preferences and the state of your local repo,
144
+ you may want to do some rebasing.
141
145
  [See the rebasing documentation for more information.](https://help.github.com/articles/about-git-rebase/)
142
146
 
143
- The generator also depends on the presence of Exercism's `problem-specifications`
144
- repository (see the file tree in the section above). Make sure you've got
145
- an *up-to-date* version of the specifications in a `problem-specifications`
146
- folder that's in a parallel directory to your local copy of the `ruby` repository.
147
+ The generator also depends on the presence of Exercism's
148
+ `problem-specifications` repository (see the file tree in the section above).
149
+ Make sure you've got an *up-to-date* version of the specifications in a
150
+ `problem-specifications` folder that's in a parallel directory to your local
151
+ copy of the `ruby` repository.
147
152
 
148
153
  To check which problems have possibly been updated, run:
149
154
 
@@ -151,14 +156,14 @@ To check which problems have possibly been updated, run:
151
156
  bin/generate --all
152
157
  ```
153
158
 
154
- This will autogenerate all of the test cases for which generators exist.
155
- Use `git diff` (or your preferred method) to find out which test files
156
- have changed. Some exercises will update because someone updated the
157
- description or other exercise metadata. Others will change because the
158
- actual test suite has changed. If you find that an exercise's test suite
159
- (i.e. the actual tests, not just the line at the test data version number
160
- at the top of the tests) has changed, be sure to use `generate` to update
161
- the [BookKeeping::VERSION](#bookkeeping-version) number by running:
159
+ This will autogenerate all of the test cases for which generators exist. Use
160
+ `git diff` (or your preferred method) to find out which test files have
161
+ changed. Some exercises will update because someone updated the description
162
+ or other exercise metadata. Others will change because the actual test suite
163
+ has changed. If you find that an exercise's test suite (i.e. the actual
164
+ tests, not just the line at the test data version number at the top of the
165
+ tests) has changed, be sure to use `generate` to update the
166
+ [BookKeeping::VERSION](#bookkeeping-version) number by running:
162
167
 
163
168
  ```bash
164
169
  bin/generate --update <exercise-slug>
@@ -166,23 +171,24 @@ bin/generate --update <exercise-slug>
166
171
 
167
172
  Once everything has been regenerated and updated, you're almost ready to
168
173
  submit your changes via pull request. Please be sure to only update one
169
- exercise per pull request. Also, please follow the guidelines in the
170
- [Pull Requests](#pull-requests) section, being sure to follow the pattern
171
- of `<slug>: Regenerate Tests`, where slug is the slug of the exercise that
172
- your pull request is regenerating.
174
+ exercise per pull request. Also, please follow the guidelines in the [Pull
175
+ Requests](#pull-requests) section, being sure to follow the pattern of
176
+ `<slug>: Regenerate Tests`, where slug is the slug of the exercise that your
177
+ pull request is regenerating.
173
178
 
174
179
  #### Changing a Generated Exercise
175
180
 
176
- Do not edit `<slug>/<exercise_name>_test.rb`. Any changes you make will
177
- be overwritten when the test suite is regenerated.
181
+ Do not edit `<slug>/<exercise_name>_test.rb`. Any changes you make will be
182
+ overwritten when the test suite is regenerated.
178
183
 
179
184
  There are two reasons why a test suite might change:
180
185
 
181
- 1. the tests need to change (an incorrect expectation, a missing edge case, etc)
186
+ 1. the tests need to change (an incorrect expectation, a missing edge case,
187
+ etc)
182
188
  1. there might be issues with the style or boilerplate
183
189
 
184
- In the first case, the changes need to be made to the `canonical-data.json` file for
185
- the exercise, which lives in the problem-specifications repository.
190
+ In the first case, the changes need to be made to the `canonical-data.json`
191
+ file for the exercise, which lives in the problem-specifications repository.
186
192
 
187
193
  ```
188
194
  ../problem-specifications/exercises/<slug>/
@@ -191,19 +197,19 @@ the exercise, which lives in the problem-specifications repository.
191
197
  └── metadata.yml
192
198
  ```
193
199
 
194
- This change will need to be submitted as a pull request to the problem-specifications
195
- repository. This pull request needs to be merged before you can regenerate the
196
- exercise.
200
+ This change will need to be submitted as a pull request to the
201
+ problem-specifications repository. This pull request needs to be merged before
202
+ you can regenerate the exercise.
197
203
 
198
204
  Changes that don't have to do directly with the test inputs and outputs should
199
- be made to the exercise's test case generator, discussed
200
- in [implementing a new generator](#implementing-a-generator), next. Then you
201
- can regenerate the exercise with `bin/generate <slug>`.
205
+ be made to the exercise's test case generator, discussed in
206
+ [implementing a new generator](#implementing-a-generator), next. Then you can
207
+ regenerate the exercise with `bin/generate <slug>`.
202
208
 
203
209
  #### Implementing a Generator
204
210
 
205
- An exercise's test case generator class produces the code that goes inside
206
- the minitest `test_<whatever>` methods. An exercise's generator lives in
211
+ An exercise's test case generator class produces the code that goes inside the
212
+ minitest `test_<whatever>` methods. An exercise's generator lives in
207
213
  `exercises/<slug>/.meta/generator/<exercise_name>_case.rb`.
208
214
 
209
215
  The test case generator is a derived class of `ExerciseCase` (in
@@ -224,27 +230,30 @@ class <ExerciseName>Case < Generator::ExerciseCase
224
230
  end
225
231
  ```
226
232
 
227
- where `<ExerciseName>` is the CamelCased version of the exercise's slug. This is
228
- important, since the generator script will infer the name of the class from
233
+ where `<ExerciseName>` is the CamelCased version of the exercise's slug. This
234
+ is important, since the generator script will infer the name of the class from
229
235
  `<slug>`.
230
236
 
231
237
  This class must provide the methods used by the test
232
238
  template. A
233
- [default template](https://github.com/exercism/ruby/blob/master/lib/generator/test_template.erb) that
234
- most exercises can (and do) use lives in `lib/generator/test_template.erb`. The
235
- base class provides methods for the default template for everything except
236
- `#workload`.
239
+ [default template](https://github.com/exercism/ruby/blob/master/lib/generator/test_template.erb)
240
+ that most exercises can (and do) use lives in
241
+ `lib/generator/test_template.erb`. The base class provides methods for the
242
+ default template for everything except `#workload`.
237
243
 
238
244
  `#workload` generates the code for the body of a test, including the assertion
239
245
  and any setup required. The base class provides a variety of
240
- [assertion](https://github.com/exercism/ruby/blob/master/lib/generator/exercise_case/assertion.rb) and
241
- [helper](https://github.com/exercism/ruby/blob/master/lib/generator/exercise_case.rb) methods.
242
- Beyond that, you can implement any helper methods that you need
243
- as private methods in your derived class. See below for more information
244
- about [the intention of #workload](#workload-philosophy)
246
+ [assertion](https://github.com/exercism/ruby/blob/master/lib/generator/exercise_case/assertion.rb)
247
+ and
248
+ [helper](https://github.com/exercism/ruby/blob/master/lib/generator/exercise_case.rb)
249
+ methods.
245
250
 
246
- You don't have to do anything other than implement `#workload` to use the default
247
- template.
251
+ Beyond that, you can implement any helper methods that you need as private
252
+ methods in your derived class. See below for more information about
253
+ [the intention of #workload](#workload-philosophy)
254
+
255
+ You don't have to do anything other than implement `#workload` to use the
256
+ default template.
248
257
 
249
258
  If you really must add additional logic to the view template, you can use a
250
259
  custom template. Copy `lib/generator/test_template.erb` to
@@ -262,6 +271,7 @@ in a clear and consistent manner. Illustrate the purpose of the individual
262
271
  elements of the assertion by using meaningful variable names.
263
272
 
264
273
  Example output from the `workload` method:
274
+
265
275
  ```ruby
266
276
  detector = Anagram.new('allergy')
267
277
  anagrams = detector.match(["gallery", "ballerina", "regally", "clergy", "largely", "leading"])
@@ -269,7 +279,6 @@ expected = ["gallery", "largely", "regally"]
269
279
  assert_equal expected, anagrams.sort
270
280
  ```
271
281
 
272
-
273
282
  ## Pull Requests
274
283
 
275
284
  We welcome pull requests that provide fixes to existing test suites (missing
@@ -281,13 +290,13 @@ change.
281
290
  Please submit changes to a single problem per pull request unless you're
282
291
  submitting a general change across many of the problems (e.g. formatting).
283
292
 
284
- You can run (some) of the same checks that we run by running the
285
- following tool in your terminal:
293
+ You can run (some) of the same checks that we run by running the following
294
+ tool in your terminal:
286
295
 
287
296
  bin/local-status-check
288
297
 
289
- If you would like to have these run right before you push your commits,
290
- you can activate the hook by running this tool in your terminal:
298
+ If you would like to have these run right before you push your commits, you
299
+ can activate the hook by running this tool in your terminal:
291
300
 
292
301
  bin/setup-git-hoooks
293
302
 
@@ -295,28 +304,34 @@ Thank you so much for contributing! :sparkles:
295
304
 
296
305
  ### Style Guide
297
306
 
298
- We have created a minimal set of guidelines for the testing files, which
299
- you can take advantage of by installing the `rubocop` gem. It will use
300
- the configuration file located in the root folder, `.rubocop.yml`. When
301
- you edit your code, you can simply run `rubocop -D`. It will ignore
302
- your example solution, but will gently suggest style for your test code.
307
+ We have created a minimal set of guidelines for the testing files, which you
308
+ can take advantage of by installing the `rubocop` gem. It will use the
309
+ configuration file located in the root folder, `.rubocop.yml`. When you edit
310
+ your code, you can simply run `rubocop -D`. It will ignore your example
311
+ solution, but will gently suggest style for your test code.
303
312
 
304
313
  The `-D` option that is suggested is provided to give you the ability to
305
- easily ignore the Cops that you think should be ignored. This is easily
306
- done by doing `# rubocop:disable CopName`, where the `CopName` is replaced
314
+ easily ignore the Cops that you think should be ignored. This is easily done
315
+ by doing `# rubocop:disable CopName`, where the `CopName` is replaced
307
316
  appropriately.
308
317
 
309
318
  For more complete information, see [Rubocop](http://batsov.com/rubocop/).
310
319
 
311
320
  While `lib/generator/exercise_case.rb` provides helper functions as discussed
312
- above, it remains the responsibility of an exercise's generator to interpret its
313
- canonical-data.json data in a stylistically correct manner, e.g. converting
314
- string indices to integer indices.
321
+ above, it remains the responsibility of an exercise's generator to interpret
322
+ its canonical-data.json data in a stylistically correct manner, e.g.
323
+ converting string indices to integer indices.
315
324
 
316
325
  ## READMEs
317
326
 
327
+ <<<<<<< HEAD
318
328
  All exercises must have a README.md file, but should not be created manually. The READMEs
319
329
  are constructed using shared metadata, which lives in the [problem-specifications][] repo.
330
+ =======
331
+ Do not add a README or README.md file to the exercise's directory. The READMEs
332
+ are constructed using shared metadata, which lives in the
333
+ [problem-specifications][] repo.
334
+ >>>>>>> Whitespace and wrapping, not integral to this PR
320
335
 
321
336
  Use the `configlet` tool to generate a README from shared metadata:
322
337
 
@@ -326,15 +341,24 @@ Use the `configlet` tool to generate a README from shared metadata:
326
341
 
327
342
  ## Contributing Guide
328
343
 
329
- For an in-depth discussion of how exercism language tracks and exercises work, please see the
344
+ If adding a new exercise:
345
+
346
+ * a [generator](#implementing-a-generator) should be implemented.
347
+ * a minimal, partial, solution should be able to be pushed, in order to create a
348
+ WIP pull request.
349
+
350
+ For an in-depth discussion of how exercism language tracks and exercises work,
351
+ please see the
330
352
  [contributing guide](https://github.com/exercism/x-api/blob/master/CONTRIBUTING.md#the-exercise-data).
331
353
 
332
354
  If you're just getting started and looking for a helpful way to get involved,
333
- take a look at [regenerating the test suites](#regenerating-a-test-suite),
355
+ take a look at
356
+ [regenerating the test suites](#regenerating-a-test-suite),
334
357
  [porting an exercise from another language](https://github.com/exercism/docs/blob/master/you-can-help/implement-an-exercise-from-specification.md),
335
358
  or [creating an automated test generator](#implementing-a-generator).
336
359
 
337
360
  ## Ruby icon
338
- The Ruby icon is the Vienna.rb logo, and is used with permission. Thanks Floor Dress :)
361
+ The Ruby icon is the Vienna.rb logo, and is used with permission. Thanks Floor
362
+ Dress :)
339
363
 
340
364
  [problem-specifications]: https://github.com/exercism/problem-specifications
@@ -4,10 +4,29 @@
4
4
  {{- with .Hints }}
5
5
  {{ . }}
6
6
  {{ end }}
7
- {{- with .TrackInsert }}
8
- {{ . }}
9
- {{ end }}
10
- {{- with .Spec.Credits -}}
7
+ * * * *
8
+
9
+ For installation and learning resources, refer to the
10
+ [exercism help page](http://exercism.io/languages/ruby).
11
+
12
+ For running the tests provided, you will need the Minitest gem. Open a
13
+ terminal window and run the following command to install minitest:
14
+
15
+ gem install minitest
16
+
17
+ If you would like color output, you can `require 'minitest/pride'` in
18
+ the test file, or note the alternative instruction, below, for running
19
+ the test file.
20
+
21
+ Run the tests from the exercise directory using the following command:
22
+
23
+ ruby {{ .Spec.SnakeCaseName }}_test.rb
24
+
25
+ To include color from the command line:
26
+
27
+ ruby -r minitest/pride {{ .Spec.SnakeCaseName }}_test.rb
28
+
29
+ {{ with .Spec.Credits }}
11
30
  ## Source
12
31
 
13
32
  {{ . }}
@@ -54,15 +54,13 @@ If you would like color output, you can `require 'minitest/pride'` in
54
54
  the test file, or note the alternative instruction, below, for running
55
55
  the test file.
56
56
 
57
- In order to run the test, you can run the test file from the exercise
58
- directory. For example, if the test suite is called
59
- `hello_world_test.rb`, you can run the following command:
57
+ Run the tests from the exercise directory using the following command:
60
58
 
61
- ruby hello_world_test.rb
59
+ ruby accumulate_test.rb
62
60
 
63
61
  To include color from the command line:
64
62
 
65
- ruby -r minitest/pride hello_world_test.rb
63
+ ruby -r minitest/pride accumulate_test.rb
66
64
 
67
65
 
68
66
  ## Source