trackler 2.2.1.99 → 2.2.1.100

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 (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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8a4f6ff506d46fc8e5cd2158613f444181e5a9f4
4
- data.tar.gz: 8248291e3689c6087c3e8d6c82de286eb754c6d3
3
+ metadata.gz: d0139492d80a929dd82a2c17d9a2630d26ea631b
4
+ data.tar.gz: 937fe9cc198cf09749d0edb6bf5d0f32430a63ce
5
5
  SHA512:
6
- metadata.gz: 19d9955f95e594ff280c3ceaf97cbb0a7583860bc892e01380953f95cd4861150bb8c00a9c0a222e18f3f31601f296f4e7bfa659c05e59a9a3943e5ac16a3033
7
- data.tar.gz: 6804eab9031cad8febe3ab5fe3e49d03eb4eb95eaf50ad0401791d79b4c23bcf3dab914ef6023dac7ea5b364c22b0bfea717c6887404bc3d02c62a7b9eeaa1a2
6
+ metadata.gz: ce246028cbe65b42575ea7a4171a79a95fb0a0c86edb43970cf5b76345f9d058e3922a2bacc0fc3fe38a29e76391163a62eeeb3d709a3e7c3893327d3a4918ee
7
+ data.tar.gz: 59a8ea0ec5f56db2a814f3b8f135566b24e360b81130ed28e8141cd63299fa38e3a69120abcc5150740b0dcd3d4d4ddf494102795a61366a36cb0eb62127030c
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.2.1.99"
2
+ VERSION = "2.2.1.100"
3
3
  end
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "exercise": "clock",
3
- "version": "1.0.1",
3
+ "version": "2.2.1",
4
4
  "comments": [
5
5
  "Most languages require constructing a clock with initial values,",
6
- "adding a positive or negative number of minutes, and testing equality",
7
- "in some language-native way. Some languages require separate add and",
8
- "subtract functions. Negative and out of range values are generally",
9
- "expected to wrap around rather than represent errors."
6
+ "adding or subtracting some number of minutes, and testing equality",
7
+ "in some language-native way. Negative and out of range values are",
8
+ "generally expected to wrap around rather than represent errors."
10
9
  ],
11
10
  "cases": [
12
11
  {
@@ -15,134 +14,172 @@
15
14
  {
16
15
  "description": "on the hour",
17
16
  "property": "create",
18
- "hour": 8,
19
- "minute": 0,
17
+ "input": {
18
+ "hour": 8,
19
+ "minute": 0
20
+ },
20
21
  "expected": "08:00"
21
22
  },
22
23
  {
23
24
  "description": "past the hour",
24
25
  "property": "create",
25
- "hour": 11,
26
- "minute": 9,
26
+ "input": {
27
+ "hour": 11,
28
+ "minute": 9
29
+ },
27
30
  "expected": "11:09"
28
31
  },
29
32
  {
30
33
  "description": "midnight is zero hours",
31
34
  "property": "create",
32
- "hour": 24,
33
- "minute": 0,
35
+ "input": {
36
+ "hour": 24,
37
+ "minute": 0
38
+ },
34
39
  "expected": "00:00"
35
40
  },
36
41
  {
37
42
  "description": "hour rolls over",
38
43
  "property": "create",
39
- "hour": 25,
40
- "minute": 0,
44
+ "input": {
45
+ "hour": 25,
46
+ "minute": 0
47
+ },
41
48
  "expected": "01:00"
42
49
  },
43
50
  {
44
51
  "description": "hour rolls over continuously",
45
52
  "property": "create",
46
- "hour": 100,
47
- "minute": 0,
53
+ "input": {
54
+ "hour": 100,
55
+ "minute": 0
56
+ },
48
57
  "expected": "04:00"
49
58
  },
50
59
  {
51
60
  "description": "sixty minutes is next hour",
52
61
  "property": "create",
53
- "hour": 1,
54
- "minute": 60,
62
+ "input": {
63
+ "hour": 1,
64
+ "minute": 60
65
+ },
55
66
  "expected": "02:00"
56
67
  },
57
68
  {
58
69
  "description": "minutes roll over",
59
70
  "property": "create",
60
- "hour": 0,
61
- "minute": 160,
71
+ "input": {
72
+ "hour": 0,
73
+ "minute": 160
74
+ },
62
75
  "expected": "02:40"
63
76
  },
64
77
  {
65
78
  "description": "minutes roll over continuously",
66
79
  "property": "create",
67
- "hour": 0,
68
- "minute": 1723,
80
+ "input": {
81
+ "hour": 0,
82
+ "minute": 1723
83
+ },
69
84
  "expected": "04:43"
70
85
  },
71
86
  {
72
87
  "description": "hour and minutes roll over",
73
88
  "property": "create",
74
- "hour": 25,
75
- "minute": 160,
89
+ "input": {
90
+ "hour": 25,
91
+ "minute": 160
92
+ },
76
93
  "expected": "03:40"
77
94
  },
78
95
  {
79
96
  "description": "hour and minutes roll over continuously",
80
97
  "property": "create",
81
- "hour": 201,
82
- "minute": 3001,
98
+ "input": {
99
+ "hour": 201,
100
+ "minute": 3001
101
+ },
83
102
  "expected": "11:01"
84
103
  },
85
104
  {
86
105
  "description": "hour and minutes roll over to exactly midnight",
87
106
  "property": "create",
88
- "hour": 72,
89
- "minute": 8640,
107
+ "input": {
108
+ "hour": 72,
109
+ "minute": 8640
110
+ },
90
111
  "expected": "00:00"
91
112
  },
92
113
  {
93
114
  "description": "negative hour",
94
115
  "property": "create",
95
- "hour": -1,
96
- "minute": 15,
116
+ "input": {
117
+ "hour": -1,
118
+ "minute": 15
119
+ },
97
120
  "expected": "23:15"
98
121
  },
99
122
  {
100
123
  "description": "negative hour rolls over",
101
124
  "property": "create",
102
- "hour": -25,
103
- "minute": 0,
125
+ "input": {
126
+ "hour": -25,
127
+ "minute": 0
128
+ },
104
129
  "expected": "23:00"
105
130
  },
106
131
  {
107
132
  "description": "negative hour rolls over continuously",
108
133
  "property": "create",
109
- "hour": -91,
110
- "minute": 0,
134
+ "input": {
135
+ "hour": -91,
136
+ "minute": 0
137
+ },
111
138
  "expected": "05:00"
112
139
  },
113
140
  {
114
141
  "description": "negative minutes",
115
142
  "property": "create",
116
- "hour": 1,
117
- "minute": -40,
143
+ "input": {
144
+ "hour": 1,
145
+ "minute": -40
146
+ },
118
147
  "expected": "00:20"
119
148
  },
120
149
  {
121
150
  "description": "negative minutes roll over",
122
151
  "property": "create",
123
- "hour": 1,
124
- "minute": -160,
152
+ "input": {
153
+ "hour": 1,
154
+ "minute": -160
155
+ },
125
156
  "expected": "22:20"
126
157
  },
127
158
  {
128
159
  "description": "negative minutes roll over continuously",
129
160
  "property": "create",
130
- "hour": 1,
131
- "minute": -4820,
161
+ "input": {
162
+ "hour": 1,
163
+ "minute": -4820
164
+ },
132
165
  "expected": "16:40"
133
166
  },
134
167
  {
135
168
  "description": "negative hour and minutes both roll over",
136
169
  "property": "create",
137
- "hour": -25,
138
- "minute": -160,
170
+ "input": {
171
+ "hour": -25,
172
+ "minute": -160
173
+ },
139
174
  "expected": "20:20"
140
175
  },
141
176
  {
142
177
  "description": "negative hour and minutes both roll over continuously",
143
178
  "property": "create",
144
- "hour": -121,
145
- "minute": -5810,
179
+ "input": {
180
+ "hour": -121,
181
+ "minute": -5810
182
+ },
146
183
  "expected": "22:10"
147
184
  }
148
185
  ]
@@ -153,65 +190,81 @@
153
190
  {
154
191
  "description": "add minutes",
155
192
  "property": "add",
156
- "hour": 10,
157
- "minute": 0,
158
- "add": 3,
193
+ "input": {
194
+ "hour": 10,
195
+ "minute": 0,
196
+ "value": 3
197
+ },
159
198
  "expected": "10:03"
160
199
  },
161
200
  {
162
201
  "description": "add no minutes",
163
202
  "property": "add",
164
- "hour": 6,
165
- "minute": 41,
166
- "add": 0,
203
+ "input": {
204
+ "hour": 6,
205
+ "minute": 41,
206
+ "value": 0
207
+ },
167
208
  "expected": "06:41"
168
209
  },
169
210
  {
170
211
  "description": "add to next hour",
171
212
  "property": "add",
172
- "hour": 0,
173
- "minute": 45,
174
- "add": 40,
213
+ "input": {
214
+ "hour": 0,
215
+ "minute": 45,
216
+ "value": 40
217
+ },
175
218
  "expected": "01:25"
176
219
  },
177
220
  {
178
221
  "description": "add more than one hour",
179
222
  "property": "add",
180
- "hour": 10,
181
- "minute": 0,
182
- "add": 61,
223
+ "input": {
224
+ "hour": 10,
225
+ "minute": 0,
226
+ "value": 61
227
+ },
183
228
  "expected": "11:01"
184
229
  },
185
230
  {
186
231
  "description": "add more than two hours with carry",
187
232
  "property": "add",
188
- "hour": 0,
189
- "minute": 45,
190
- "add": 160,
233
+ "input": {
234
+ "hour": 0,
235
+ "minute": 45,
236
+ "value": 160
237
+ },
191
238
  "expected": "03:25"
192
239
  },
193
240
  {
194
241
  "description": "add across midnight",
195
242
  "property": "add",
196
- "hour": 23,
197
- "minute": 59,
198
- "add": 2,
243
+ "input": {
244
+ "hour": 23,
245
+ "minute": 59,
246
+ "value": 2
247
+ },
199
248
  "expected": "00:01"
200
249
  },
201
250
  {
202
251
  "description": "add more than one day (1500 min = 25 hrs)",
203
252
  "property": "add",
204
- "hour": 5,
205
- "minute": 32,
206
- "add": 1500,
253
+ "input": {
254
+ "hour": 5,
255
+ "minute": 32,
256
+ "value": 1500
257
+ },
207
258
  "expected": "06:32"
208
259
  },
209
260
  {
210
261
  "description": "add more than two days",
211
262
  "property": "add",
212
- "hour": 1,
213
- "minute": 1,
214
- "add": 3500,
263
+ "input": {
264
+ "hour": 1,
265
+ "minute": 1,
266
+ "value": 3500
267
+ },
215
268
  "expected": "11:21"
216
269
  }
217
270
  ]
@@ -221,66 +274,82 @@
221
274
  "cases": [
222
275
  {
223
276
  "description": "subtract minutes",
224
- "property": "add",
225
- "hour": 10,
226
- "minute": 3,
227
- "add": -3,
277
+ "property": "subtract",
278
+ "input": {
279
+ "hour": 10,
280
+ "minute": 3,
281
+ "value": 3
282
+ },
228
283
  "expected": "10:00"
229
284
  },
230
285
  {
231
286
  "description": "subtract to previous hour",
232
- "property": "add",
233
- "hour": 10,
234
- "minute": 3,
235
- "add": -30,
287
+ "property": "subtract",
288
+ "input": {
289
+ "hour": 10,
290
+ "minute": 3,
291
+ "value": 30
292
+ },
236
293
  "expected": "09:33"
237
294
  },
238
295
  {
239
296
  "description": "subtract more than an hour",
240
- "property": "add",
241
- "hour": 10,
242
- "minute": 3,
243
- "add": -70,
297
+ "property": "subtract",
298
+ "input": {
299
+ "hour": 10,
300
+ "minute": 3,
301
+ "value": 70
302
+ },
244
303
  "expected": "08:53"
245
304
  },
246
305
  {
247
306
  "description": "subtract across midnight",
248
- "property": "add",
249
- "hour": 0,
250
- "minute": 3,
251
- "add": -4,
307
+ "property": "subtract",
308
+ "input": {
309
+ "hour": 0,
310
+ "minute": 3,
311
+ "value": 4
312
+ },
252
313
  "expected": "23:59"
253
314
  },
254
315
  {
255
316
  "description": "subtract more than two hours",
256
- "property": "add",
257
- "hour": 0,
258
- "minute": 0,
259
- "add": -160,
317
+ "property": "subtract",
318
+ "input": {
319
+ "hour": 0,
320
+ "minute": 0,
321
+ "value": 160
322
+ },
260
323
  "expected": "21:20"
261
324
  },
262
325
  {
263
326
  "description": "subtract more than two hours with borrow",
264
- "property": "add",
265
- "hour": 6,
266
- "minute": 15,
267
- "add": -160,
327
+ "property": "subtract",
328
+ "input": {
329
+ "hour": 6,
330
+ "minute": 15,
331
+ "value": 160
332
+ },
268
333
  "expected": "03:35"
269
334
  },
270
335
  {
271
336
  "description": "subtract more than one day (1500 min = 25 hrs)",
272
- "property": "add",
273
- "hour": 5,
274
- "minute": 32,
275
- "add": -1500,
337
+ "property": "subtract",
338
+ "input": {
339
+ "hour": 5,
340
+ "minute": 32,
341
+ "value": 1500
342
+ },
276
343
  "expected": "04:32"
277
344
  },
278
345
  {
279
346
  "description": "subtract more than two days",
280
- "property": "add",
281
- "hour": 2,
282
- "minute": 20,
283
- "add": -3000,
347
+ "property": "subtract",
348
+ "input": {
349
+ "hour": 2,
350
+ "minute": 20,
351
+ "value": 3000
352
+ },
284
353
  "expected": "00:20"
285
354
  }
286
355
  ]
@@ -291,195 +360,225 @@
291
360
  {
292
361
  "description": "clocks with same time",
293
362
  "property": "equal",
294
- "clock1": {
295
- "hour": 15,
296
- "minute": 37
297
- },
298
- "clock2": {
299
- "hour": 15,
300
- "minute": 37
363
+ "input": {
364
+ "clock1": {
365
+ "hour": 15,
366
+ "minute": 37
367
+ },
368
+ "clock2": {
369
+ "hour": 15,
370
+ "minute": 37
371
+ }
301
372
  },
302
373
  "expected": true
303
374
  },
304
375
  {
305
376
  "description": "clocks a minute apart",
306
377
  "property": "equal",
307
- "clock1": {
308
- "hour": 15,
309
- "minute": 36
310
- },
311
- "clock2": {
312
- "hour": 15,
313
- "minute": 37
378
+ "input": {
379
+ "clock1": {
380
+ "hour": 15,
381
+ "minute": 36
382
+ },
383
+ "clock2": {
384
+ "hour": 15,
385
+ "minute": 37
386
+ }
314
387
  },
315
388
  "expected": false
316
389
  },
317
390
  {
318
391
  "description": "clocks an hour apart",
319
392
  "property": "equal",
320
- "clock1": {
321
- "hour": 14,
322
- "minute": 37
323
- },
324
- "clock2": {
325
- "hour": 15,
326
- "minute": 37
393
+ "input": {
394
+ "clock1": {
395
+ "hour": 14,
396
+ "minute": 37
397
+ },
398
+ "clock2": {
399
+ "hour": 15,
400
+ "minute": 37
401
+ }
327
402
  },
328
403
  "expected": false
329
404
  },
330
405
  {
331
406
  "description": "clocks with hour overflow",
332
407
  "property": "equal",
333
- "clock1": {
334
- "hour": 10,
335
- "minute": 37
336
- },
337
- "clock2": {
338
- "hour": 34,
339
- "minute": 37
408
+ "input": {
409
+ "clock1": {
410
+ "hour": 10,
411
+ "minute": 37
412
+ },
413
+ "clock2": {
414
+ "hour": 34,
415
+ "minute": 37
416
+ }
340
417
  },
341
418
  "expected": true
342
419
  },
343
420
  {
344
421
  "description": "clocks with hour overflow by several days",
345
422
  "property": "equal",
346
- "clock1": {
347
- "hour": 3,
348
- "minute": 11
349
- },
350
- "clock2": {
351
- "hour": 99,
352
- "minute": 11
423
+ "input": {
424
+ "clock1": {
425
+ "hour": 3,
426
+ "minute": 11
427
+ },
428
+ "clock2": {
429
+ "hour": 99,
430
+ "minute": 11
431
+ }
353
432
  },
354
433
  "expected": true
355
434
  },
356
435
  {
357
436
  "description": "clocks with negative hour",
358
437
  "property": "equal",
359
- "clock1": {
360
- "hour": 22,
361
- "minute": 40
362
- },
363
- "clock2": {
364
- "hour": -2,
365
- "minute": 40
438
+ "input": {
439
+ "clock1": {
440
+ "hour": 22,
441
+ "minute": 40
442
+ },
443
+ "clock2": {
444
+ "hour": -2,
445
+ "minute": 40
446
+ }
366
447
  },
367
448
  "expected": true
368
449
  },
369
450
  {
370
451
  "description": "clocks with negative hour that wraps",
371
452
  "property": "equal",
372
- "clock1": {
373
- "hour": 17,
374
- "minute": 3
375
- },
376
- "clock2": {
377
- "hour": -31,
378
- "minute": 3
453
+ "input": {
454
+ "clock1": {
455
+ "hour": 17,
456
+ "minute": 3
457
+ },
458
+ "clock2": {
459
+ "hour": -31,
460
+ "minute": 3
461
+ }
379
462
  },
380
463
  "expected": true
381
464
  },
382
465
  {
383
466
  "description": "clocks with negative hour that wraps multiple times",
384
467
  "property": "equal",
385
- "clock1": {
386
- "hour": 13,
387
- "minute": 49
388
- },
389
- "clock2": {
390
- "hour": -83,
391
- "minute": 49
468
+ "input": {
469
+ "clock1": {
470
+ "hour": 13,
471
+ "minute": 49
472
+ },
473
+ "clock2": {
474
+ "hour": -83,
475
+ "minute": 49
476
+ }
392
477
  },
393
478
  "expected": true
394
479
  },
395
480
  {
396
481
  "description": "clocks with minute overflow",
397
482
  "property": "equal",
398
- "clock1": {
399
- "hour": 0,
400
- "minute": 1
401
- },
402
- "clock2": {
403
- "hour": 0,
404
- "minute": 1441
483
+ "input": {
484
+ "clock1": {
485
+ "hour": 0,
486
+ "minute": 1
487
+ },
488
+ "clock2": {
489
+ "hour": 0,
490
+ "minute": 1441
491
+ }
405
492
  },
406
493
  "expected": true
407
494
  },
408
495
  {
409
496
  "description": "clocks with minute overflow by several days",
410
497
  "property": "equal",
411
- "clock1": {
412
- "hour": 2,
413
- "minute": 2
414
- },
415
- "clock2": {
416
- "hour": 2,
417
- "minute": 4322
498
+ "input": {
499
+ "clock1": {
500
+ "hour": 2,
501
+ "minute": 2
502
+ },
503
+ "clock2": {
504
+ "hour": 2,
505
+ "minute": 4322
506
+ }
418
507
  },
419
508
  "expected": true
420
509
  },
421
510
  {
422
511
  "description": "clocks with negative minute",
423
512
  "property": "equal",
424
- "clock1": {
425
- "hour": 2,
426
- "minute": 40
427
- },
428
- "clock2": {
429
- "hour": 3,
430
- "minute": -20
513
+ "input": {
514
+ "clock1": {
515
+ "hour": 2,
516
+ "minute": 40
517
+ },
518
+ "clock2": {
519
+ "hour": 3,
520
+ "minute": -20
521
+ }
431
522
  },
432
523
  "expected": true
433
524
  },
434
525
  {
435
526
  "description": "clocks with negative minute that wraps",
436
527
  "property": "equal",
437
- "clock1": {
438
- "hour": 4,
439
- "minute": 10
440
- },
441
- "clock2": {
442
- "hour": 5,
443
- "minute": -1490
528
+ "input": {
529
+ "clock1": {
530
+ "hour": 4,
531
+ "minute": 10
532
+ },
533
+ "clock2": {
534
+ "hour": 5,
535
+ "minute": -1490
536
+ }
444
537
  },
445
538
  "expected": true
446
539
  },
447
540
  {
448
541
  "description": "clocks with negative minute that wraps multiple times",
449
542
  "property": "equal",
450
- "clock1": {
451
- "hour": 6,
452
- "minute": 15
453
- },
454
- "clock2": {
455
- "hour": 6,
456
- "minute": -4305
543
+ "input": {
544
+ "clock1": {
545
+ "hour": 6,
546
+ "minute": 15
547
+ },
548
+ "clock2": {
549
+ "hour": 6,
550
+ "minute": -4305
551
+ }
457
552
  },
458
553
  "expected": true
459
554
  },
460
555
  {
461
556
  "description": "clocks with negative hours and minutes",
462
557
  "property": "equal",
463
- "clock1": {
464
- "hour": 7,
465
- "minute": 32
466
- },
467
- "clock2": {
468
- "hour": -12,
469
- "minute": -268
558
+ "input": {
559
+ "clock1": {
560
+ "hour": 7,
561
+ "minute": 32
562
+ },
563
+ "clock2": {
564
+ "hour": -12,
565
+ "minute": -268
566
+ }
470
567
  },
471
568
  "expected": true
472
569
  },
473
570
  {
474
571
  "description": "clocks with negative hours and minutes that wrap",
475
572
  "property": "equal",
476
- "clock1": {
477
- "hour": 18,
478
- "minute": 7
479
- },
480
- "clock2": {
481
- "hour": -54,
482
- "minute": -11513
573
+ "input": {
574
+ "clock1": {
575
+ "hour": 18,
576
+ "minute": 7
577
+ },
578
+ "clock2": {
579
+ "hour": -54,
580
+ "minute": -11513
581
+ }
483
582
  },
484
583
  "expected": true
485
584
  }