trackler 2.2.1.104 → 2.2.1.105

Sign up to get free protection for your applications and to get access to all the features.
Files changed (608) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/.travis.yml +41 -1
  4. data/problem-specifications/README.md +5 -5
  5. data/problem-specifications/canonical-schema.json +11 -6
  6. data/problem-specifications/exercises/all-your-base/canonical-data.json +2 -2
  7. data/problem-specifications/exercises/circular-buffer/USE_OLD_SCHEMA +0 -0
  8. data/problem-specifications/exercises/complex-numbers/canonical-data.json +9 -1
  9. data/problem-specifications/exercises/forth/USE_OLD_SCHEMA +0 -0
  10. data/problem-specifications/exercises/grains/USE_OLD_SCHEMA +0 -0
  11. data/problem-specifications/exercises/grep/USE_OLD_SCHEMA +0 -0
  12. data/problem-specifications/exercises/house/USE_OLD_SCHEMA +0 -0
  13. data/problem-specifications/exercises/isogram/USE_OLD_SCHEMA +0 -0
  14. data/problem-specifications/exercises/list-ops/USE_OLD_SCHEMA +0 -0
  15. data/problem-specifications/exercises/pov/USE_OLD_SCHEMA +0 -0
  16. data/problem-specifications/exercises/scale-generator/canonical-data.json +181 -0
  17. data/problem-specifications/exercises/trinary/USE_OLD_SCHEMA +0 -0
  18. data/problem-specifications/exercises/word-search/USE_OLD_SCHEMA +0 -0
  19. data/problem-specifications/exercises/zipper/USE_OLD_SCHEMA +0 -0
  20. data/problem-specifications/old-schema.json +137 -0
  21. data/tracks/bash/config.json +13 -1
  22. data/tracks/bash/exercises/scrabble-score/.meta/version +1 -0
  23. data/tracks/bash/exercises/scrabble-score/README.md +55 -0
  24. data/tracks/bash/exercises/scrabble-score/example.sh +14 -0
  25. data/tracks/bash/exercises/scrabble-score/scrabble_score_test.sh +89 -0
  26. data/tracks/c/config/exercise_readme.go.tmpl +31 -4
  27. data/tracks/c/exercises/all-your-base/README.md +0 -1
  28. data/tracks/c/exercises/beer-song/README.md +1 -1
  29. data/tracks/c/exercises/collatz-conjecture/README.md +1 -1
  30. data/tracks/c/exercises/complex-numbers/README.md +21 -18
  31. data/tracks/c/exercises/nucleotide-count/README.md +2 -2
  32. data/tracks/c/exercises/palindrome-products/README.md +5 -12
  33. data/tracks/c/exercises/pangram/test/test_pangram.c +11 -22
  34. data/tracks/c/exercises/pascals-triangle/README.md +1 -1
  35. data/tracks/c/exercises/phone-number/README.md +1 -1
  36. data/tracks/c/exercises/react/README.md +0 -1
  37. data/tracks/c/exercises/rna-transcription/README.md +2 -2
  38. data/tracks/c/exercises/sublist/README.md +0 -1
  39. data/tracks/c/exercises/sum-of-multiples/README.md +3 -6
  40. data/tracks/ceylon/config/exercise_readme.go.tmpl +15 -4
  41. data/tracks/ceylon/exercises/react/README.md +0 -1
  42. data/tracks/cfml/{docs/EXERCISE_README_INSERT.md → config/exercise-readme-insert.md} +0 -0
  43. data/tracks/cfml/exercises/acronym/AcronymTest.cfc +2 -6
  44. data/tracks/cfml/exercises/acronym/README.md +0 -1
  45. data/tracks/cfml/exercises/anagram/AnagramTest.cfc +0 -16
  46. data/tracks/cfml/exercises/atbash-cipher/README.md +2 -1
  47. data/tracks/cfml/exercises/bob/Bob.cfc +1 -1
  48. data/tracks/cfml/exercises/bob/BobTest.cfc +25 -25
  49. data/tracks/cfml/exercises/bob/README.md +2 -0
  50. data/tracks/cfml/exercises/bob/Solution.cfc +17 -5
  51. data/tracks/cfml/exercises/diamond/Diamond.cfc +1 -1
  52. data/tracks/cfml/exercises/diamond/DiamondTest.cfc +5 -5
  53. data/tracks/cfml/exercises/diamond/README.md +6 -6
  54. data/tracks/cfml/exercises/diamond/Solution.cfc +2 -2
  55. data/tracks/cfml/exercises/flatten-array/FlattenArray.cfc +1 -1
  56. data/tracks/cfml/exercises/flatten-array/FlattenArrayTest.cfc +6 -9
  57. data/tracks/cfml/exercises/flatten-array/README.md +1 -2
  58. data/tracks/cfml/exercises/flatten-array/Solution.cfc +2 -2
  59. data/tracks/cfml/exercises/gigasecond/Gigasecond.cfc +1 -1
  60. data/tracks/cfml/exercises/gigasecond/GigasecondTest.cfc +5 -5
  61. data/tracks/cfml/exercises/gigasecond/Solution.cfc +3 -3
  62. data/tracks/cfml/exercises/grains/README.md +0 -1
  63. data/tracks/cfml/exercises/grains/Solution.cfc +4 -1
  64. data/tracks/cfml/exercises/hamming/HammingTest.cfc +2 -2
  65. data/tracks/cfml/exercises/hello-world/HelloWorld.cfc +1 -1
  66. data/tracks/cfml/exercises/hello-world/HelloWorldTest.cfc +5 -4
  67. data/tracks/cfml/exercises/hello-world/Solution.cfc +1 -1
  68. data/tracks/cfml/exercises/isogram/IsogramTest.cfc +2 -2
  69. data/tracks/cfml/exercises/isogram/README.md +2 -1
  70. data/tracks/cfml/exercises/leap/Leap.cfc +1 -1
  71. data/tracks/cfml/exercises/leap/LeapTest.cfc +14 -22
  72. data/tracks/cfml/exercises/leap/README.md +1 -1
  73. data/tracks/cfml/exercises/leap/Solution.cfc +1 -1
  74. data/tracks/cfml/exercises/luhn/Luhn.cfc +1 -1
  75. data/tracks/cfml/exercises/luhn/LuhnTest.cfc +14 -14
  76. data/tracks/cfml/exercises/luhn/README.md +7 -7
  77. data/tracks/cfml/exercises/luhn/Solution.cfc +6 -6
  78. data/tracks/cfml/exercises/markdown/Markdown.cfc +4 -4
  79. data/tracks/cfml/exercises/markdown/MarkdownTest.cfc +9 -9
  80. data/tracks/cfml/exercises/markdown/Solution.cfc +4 -4
  81. data/tracks/cfml/exercises/nth-prime/NthPrime.cfc +1 -1
  82. data/tracks/cfml/exercises/nth-prime/NthPrimeTest.cfc +5 -5
  83. data/tracks/cfml/exercises/nth-prime/Solution.cfc +4 -4
  84. data/tracks/cfml/exercises/pangram/Pangram.cfc +1 -1
  85. data/tracks/cfml/exercises/pangram/PangramTest.cfc +14 -10
  86. data/tracks/cfml/exercises/pangram/README.md +1 -1
  87. data/tracks/cfml/exercises/pangram/Solution.cfc +4 -4
  88. data/tracks/cfml/exercises/pig-latin/PigLatin.cfc +1 -1
  89. data/tracks/cfml/exercises/pig-latin/PigLatinTest.cfc +35 -23
  90. data/tracks/cfml/exercises/pig-latin/Solution.cfc +4 -4
  91. data/tracks/cfml/exercises/rna-transcription/README.md +2 -2
  92. data/tracks/cfml/exercises/rna-transcription/RnaTranscriptionTest.cfc +0 -12
  93. data/tracks/cfml/exercises/saddle-points/README.md +2 -2
  94. data/tracks/cfml/exercises/saddle-points/SaddlePoints.cfc +1 -1
  95. data/tracks/cfml/exercises/saddle-points/SaddlePointsTest.cfc +5 -5
  96. data/tracks/cfml/exercises/saddle-points/Solution.cfc +10 -10
  97. data/tracks/cfml/exercises/scrabble-score/README.md +3 -1
  98. data/tracks/cfml/exercises/scrabble-score/ScrabbleScore.cfc +1 -1
  99. data/tracks/cfml/exercises/scrabble-score/ScrabbleScoreTest.cfc +11 -11
  100. data/tracks/cfml/exercises/scrabble-score/Solution.cfc +2 -2
  101. data/tracks/cfml/exercises/secret-handshake/README.md +2 -2
  102. data/tracks/cfml/exercises/secret-handshake/SecretHandshake.cfc +1 -1
  103. data/tracks/cfml/exercises/secret-handshake/SecretHandshakeTest.cfc +11 -11
  104. data/tracks/cfml/exercises/secret-handshake/Solution.cfc +6 -6
  105. data/tracks/cfml/exercises/space-age/README.md +1 -2
  106. data/tracks/cfml/exercises/sum-of-multiples/README.md +3 -6
  107. data/tracks/cfml/exercises/sum-of-multiples/SumOfMultiplesTest.cfc +4 -0
  108. data/tracks/cfml/exercises/triangle/README.md +9 -6
  109. data/tracks/cfml/exercises/word-count/README.md +1 -2
  110. data/tracks/cfml/exercises/word-count/Solution.cfc +2 -2
  111. data/tracks/cfml/exercises/word-count/WordCount.cfc +1 -1
  112. data/tracks/cfml/exercises/word-count/WordCountTest.cfc +14 -10
  113. data/tracks/cfml/tasks/GenerateReadme.cfc +2 -2
  114. data/tracks/cfml/tasks/GenerateTests.cfc +17 -4
  115. data/tracks/cfml/tasks/TestAllSolutions.cfc +3 -0
  116. data/tracks/common-lisp/config/exercise_readme.go.tmpl +46 -4
  117. data/tracks/common-lisp/exercises/acronym/README.md +1 -1
  118. data/tracks/common-lisp/exercises/beer-song/README.md +1 -1
  119. data/tracks/common-lisp/exercises/crypto-square/README.md +6 -4
  120. data/tracks/common-lisp/exercises/etl/README.md +2 -2
  121. data/tracks/common-lisp/exercises/isogram/README.md +3 -1
  122. data/tracks/common-lisp/exercises/meetup/README.md +16 -12
  123. data/tracks/common-lisp/exercises/nucleotide-count/README.md +2 -2
  124. data/tracks/common-lisp/exercises/pascals-triangle/README.md +1 -1
  125. data/tracks/common-lisp/exercises/phone-number/README.md +1 -1
  126. data/tracks/common-lisp/exercises/rna-transcription/README.md +2 -2
  127. data/tracks/common-lisp/exercises/space-age/README.md +1 -2
  128. data/tracks/common-lisp/exercises/sublist/README.md +2 -0
  129. data/tracks/crystal/config/exercise_readme.go.tmpl +22 -4
  130. data/tracks/crystal/exercises/acronym/README.md +0 -1
  131. data/tracks/crystal/exercises/atbash-cipher/README.md +2 -1
  132. data/tracks/crystal/exercises/binary/README.md +2 -0
  133. data/tracks/{php → crystal}/exercises/bob/.meta/description.md +0 -0
  134. data/tracks/crystal/exercises/flatten-array/README.md +1 -2
  135. data/tracks/crystal/exercises/forth/README.md +0 -1
  136. data/tracks/crystal/exercises/leap/README.md +1 -1
  137. data/tracks/crystal/exercises/pangram/README.md +1 -1
  138. data/tracks/crystal/exercises/pascals-triangle/README.md +2 -2
  139. data/tracks/crystal/exercises/react/README.md +0 -1
  140. data/tracks/crystal/exercises/rna-transcription/README.md +2 -2
  141. data/tracks/crystal/exercises/roman-numerals/README.md +1 -1
  142. data/tracks/crystal/exercises/run-length-encoding/README.md +4 -4
  143. data/tracks/csharp/config/exercise_readme.go.tmpl +0 -3
  144. data/tracks/csharp/exercises/accumulate/README.md +0 -3
  145. data/tracks/csharp/exercises/acronym/README.md +0 -3
  146. data/tracks/csharp/exercises/all-your-base/README.md +0 -3
  147. data/tracks/csharp/exercises/allergies/README.md +0 -3
  148. data/tracks/csharp/exercises/alphametics/README.md +0 -3
  149. data/tracks/csharp/exercises/anagram/README.md +0 -3
  150. data/tracks/csharp/exercises/armstrong-numbers/README.md +0 -3
  151. data/tracks/csharp/exercises/atbash-cipher/README.md +0 -3
  152. data/tracks/csharp/exercises/bank-account/README.md +0 -3
  153. data/tracks/csharp/exercises/beer-song/README.md +0 -3
  154. data/tracks/csharp/exercises/binary-search-tree/README.md +0 -3
  155. data/tracks/csharp/exercises/binary-search/README.md +0 -3
  156. data/tracks/csharp/exercises/binary/README.md +0 -3
  157. data/tracks/csharp/exercises/bob/README.md +0 -3
  158. data/tracks/csharp/exercises/book-store/README.md +0 -3
  159. data/tracks/csharp/exercises/bowling/README.md +0 -3
  160. data/tracks/csharp/exercises/bracket-push/README.md +0 -3
  161. data/tracks/csharp/exercises/change/README.md +0 -3
  162. data/tracks/csharp/exercises/circular-buffer/README.md +0 -3
  163. data/tracks/csharp/exercises/clock/README.md +0 -3
  164. data/tracks/csharp/exercises/collatz-conjecture/README.md +0 -3
  165. data/tracks/csharp/exercises/complex-numbers/README.md +0 -3
  166. data/tracks/csharp/exercises/connect/README.md +0 -3
  167. data/tracks/csharp/exercises/crypto-square/README.md +0 -3
  168. data/tracks/csharp/exercises/custom-set/README.md +0 -3
  169. data/tracks/csharp/exercises/diamond/README.md +0 -3
  170. data/tracks/csharp/exercises/difference-of-squares/README.md +0 -3
  171. data/tracks/csharp/exercises/diffie-hellman/README.md +0 -3
  172. data/tracks/csharp/exercises/dominoes/README.md +0 -3
  173. data/tracks/csharp/exercises/dot-dsl/README.md +0 -3
  174. data/tracks/csharp/exercises/error-handling/README.md +0 -3
  175. data/tracks/csharp/exercises/etl/README.md +0 -3
  176. data/tracks/csharp/exercises/flatten-array/README.md +0 -3
  177. data/tracks/csharp/exercises/food-chain/README.md +0 -3
  178. data/tracks/csharp/exercises/forth/README.md +0 -3
  179. data/tracks/csharp/exercises/gigasecond/README.md +0 -3
  180. data/tracks/csharp/exercises/go-counting/README.md +0 -3
  181. data/tracks/csharp/exercises/grade-school/README.md +0 -3
  182. data/tracks/csharp/exercises/grains/README.md +0 -3
  183. data/tracks/csharp/exercises/grep/README.md +0 -3
  184. data/tracks/csharp/exercises/hamming/README.md +0 -3
  185. data/tracks/csharp/exercises/hangman/README.md +0 -3
  186. data/tracks/csharp/exercises/hello-world/README.md +0 -3
  187. data/tracks/csharp/exercises/hexadecimal/README.md +0 -3
  188. data/tracks/csharp/exercises/house/README.md +0 -3
  189. data/tracks/csharp/exercises/isbn-verifier/README.md +0 -3
  190. data/tracks/csharp/exercises/isogram/README.md +0 -3
  191. data/tracks/csharp/exercises/kindergarten-garden/README.md +0 -3
  192. data/tracks/csharp/exercises/largest-series-product/README.md +0 -3
  193. data/tracks/csharp/exercises/leap/README.md +0 -3
  194. data/tracks/csharp/exercises/ledger/README.md +0 -3
  195. data/tracks/csharp/exercises/linked-list/README.md +0 -3
  196. data/tracks/csharp/exercises/list-ops/README.md +0 -3
  197. data/tracks/csharp/exercises/luhn/README.md +0 -3
  198. data/tracks/csharp/exercises/markdown/README.md +0 -3
  199. data/tracks/csharp/exercises/matrix/README.md +0 -3
  200. data/tracks/csharp/exercises/meetup/README.md +0 -3
  201. data/tracks/csharp/exercises/minesweeper/README.md +0 -3
  202. data/tracks/csharp/exercises/nth-prime/README.md +0 -3
  203. data/tracks/csharp/exercises/nucleotide-count/README.md +0 -3
  204. data/tracks/csharp/exercises/ocr-numbers/README.md +0 -3
  205. data/tracks/csharp/exercises/octal/README.md +0 -3
  206. data/tracks/csharp/exercises/palindrome-products/README.md +0 -3
  207. data/tracks/csharp/exercises/pangram/README.md +0 -3
  208. data/tracks/csharp/exercises/parallel-letter-frequency/README.md +0 -3
  209. data/tracks/csharp/exercises/pascals-triangle/README.md +0 -3
  210. data/tracks/csharp/exercises/perfect-numbers/README.md +0 -3
  211. data/tracks/csharp/exercises/phone-number/README.md +0 -3
  212. data/tracks/csharp/exercises/pig-latin/README.md +0 -3
  213. data/tracks/csharp/exercises/poker/README.md +0 -3
  214. data/tracks/csharp/exercises/pov/README.md +0 -3
  215. data/tracks/csharp/exercises/prime-factors/README.md +0 -3
  216. data/tracks/csharp/exercises/protein-translation/README.md +0 -3
  217. data/tracks/csharp/exercises/proverb/README.md +0 -3
  218. data/tracks/csharp/exercises/pythagorean-triplet/README.md +0 -3
  219. data/tracks/csharp/exercises/queen-attack/README.md +0 -3
  220. data/tracks/csharp/exercises/rail-fence-cipher/README.md +0 -3
  221. data/tracks/csharp/exercises/raindrops/README.md +0 -3
  222. data/tracks/csharp/exercises/react/README.md +0 -3
  223. data/tracks/csharp/exercises/rectangles/README.md +0 -3
  224. data/tracks/csharp/exercises/reverse-string/README.md +0 -3
  225. data/tracks/csharp/exercises/rna-transcription/README.md +0 -3
  226. data/tracks/csharp/exercises/robot-name/README.md +0 -3
  227. data/tracks/csharp/exercises/robot-simulator/README.md +0 -3
  228. data/tracks/csharp/exercises/roman-numerals/README.md +0 -3
  229. data/tracks/csharp/exercises/rotational-cipher/README.md +0 -3
  230. data/tracks/csharp/exercises/run-length-encoding/README.md +0 -3
  231. data/tracks/csharp/exercises/saddle-points/README.md +0 -3
  232. data/tracks/csharp/exercises/say/README.md +0 -3
  233. data/tracks/csharp/exercises/scale-generator/README.md +0 -3
  234. data/tracks/csharp/exercises/scrabble-score/README.md +0 -3
  235. data/tracks/csharp/exercises/secret-handshake/README.md +0 -3
  236. data/tracks/csharp/exercises/series/README.md +0 -3
  237. data/tracks/csharp/exercises/sgf-parsing/README.md +0 -3
  238. data/tracks/csharp/exercises/sieve/README.md +0 -3
  239. data/tracks/csharp/exercises/simple-cipher/README.md +0 -3
  240. data/tracks/csharp/exercises/simple-linked-list/README.md +0 -3
  241. data/tracks/csharp/exercises/space-age/README.md +0 -3
  242. data/tracks/csharp/exercises/spiral-matrix/README.md +0 -3
  243. data/tracks/csharp/exercises/strain/README.md +0 -3
  244. data/tracks/csharp/exercises/sublist/README.md +0 -3
  245. data/tracks/csharp/exercises/sum-of-multiples/README.md +0 -3
  246. data/tracks/csharp/exercises/tournament/README.md +0 -3
  247. data/tracks/csharp/exercises/transpose/README.md +0 -3
  248. data/tracks/csharp/exercises/tree-building/README.md +0 -3
  249. data/tracks/csharp/exercises/triangle/README.md +0 -3
  250. data/tracks/csharp/exercises/trinary/README.md +0 -3
  251. data/tracks/csharp/exercises/twelve-days/README.md +0 -3
  252. data/tracks/csharp/exercises/two-bucket/README.md +0 -3
  253. data/tracks/csharp/exercises/two-fer/README.md +0 -3
  254. data/tracks/csharp/exercises/variable-length-quantity/README.md +0 -3
  255. data/tracks/csharp/exercises/word-count/README.md +0 -3
  256. data/tracks/csharp/exercises/word-search/README.md +0 -3
  257. data/tracks/csharp/exercises/wordy/README.md +0 -3
  258. data/tracks/csharp/exercises/zebra-puzzle/README.md +0 -3
  259. data/tracks/csharp/exercises/zipper/README.md +0 -3
  260. data/tracks/dart/config/exercise_readme.go.tmpl +9 -4
  261. data/tracks/dart/exercises/anagram/README.md +0 -1
  262. data/tracks/dart/exercises/difference-of-squares/README.md +0 -1
  263. data/tracks/dart/exercises/gigasecond/README.md +0 -1
  264. data/tracks/dart/exercises/hamming/README.md +0 -1
  265. data/tracks/dart/exercises/hello-world/README.md +0 -1
  266. data/tracks/dart/exercises/leap/README.md +0 -1
  267. data/tracks/dart/exercises/phone-number/.meta/hints.md +24 -0
  268. data/tracks/dart/exercises/phone-number/README.md +17 -2
  269. data/tracks/dart/exercises/raindrops/README.md +0 -1
  270. data/tracks/dart/exercises/rna-transcription/README.md +2 -3
  271. data/tracks/dart/exercises/word-count/README.md +0 -1
  272. data/tracks/delphi/config/exercise_readme.go.tmpl +20 -4
  273. data/tracks/delphi/exercises/bank-account/README.md +0 -1
  274. data/tracks/delphi/exercises/minesweeper/README.md +0 -1
  275. data/tracks/delphi/exercises/two-fer/README.md +1 -1
  276. data/tracks/elixir/exercises/all-your-base/all-your-base-test.exs +1 -2
  277. data/tracks/elm/README.md +23 -20
  278. data/tracks/elm/bin/build.sh +1 -1
  279. data/tracks/elm/bin/install-elm-format +2 -2
  280. data/tracks/elm/exercises/accumulate/tests/Tests.elm +2 -2
  281. data/tracks/elm/exercises/all-your-base/AllYourBase.example.elm +10 -10
  282. data/tracks/elm/exercises/all-your-base/tests/Tests.elm +62 -42
  283. data/tracks/elm/exercises/allergies/Allergies.example.elm +1 -1
  284. data/tracks/elm/exercises/allergies/tests/Tests.elm +4 -4
  285. data/tracks/elm/exercises/anagram/Anagram.example.elm +2 -2
  286. data/tracks/elm/exercises/anagram/tests/Tests.elm +2 -2
  287. data/tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm +11 -11
  288. data/tracks/elm/exercises/atbash-cipher/tests/Tests.elm +2 -2
  289. data/tracks/elm/exercises/bob/Bob.example.elm +1 -1
  290. data/tracks/elm/exercises/bob/tests/Tests.elm +5 -5
  291. data/tracks/elm/exercises/collatz-conjecture/tests/Tests.elm +2 -2
  292. data/tracks/elm/exercises/difference-of-squares/DifferenceOfSquares.example.elm +1 -1
  293. data/tracks/elm/exercises/difference-of-squares/tests/Tests.elm +2 -2
  294. data/tracks/elm/exercises/gigasecond/tests/Tests.elm +2 -2
  295. data/tracks/elm/exercises/grade-school/GradeSchool.example.elm +2 -2
  296. data/tracks/elm/exercises/grade-school/tests/Tests.elm +3 -3
  297. data/tracks/elm/exercises/hamming/tests/Tests.elm +1 -1
  298. data/tracks/elm/exercises/hello-world/tests/Tests.elm +1 -1
  299. data/tracks/elm/exercises/isogram/Isogram.example.elm +7 -7
  300. data/tracks/elm/exercises/isogram/tests/Tests.elm +1 -1
  301. data/tracks/elm/exercises/largest-series-product/LargestSeriesProduct.example.elm +4 -4
  302. data/tracks/elm/exercises/largest-series-product/tests/Tests.elm +1 -1
  303. data/tracks/elm/exercises/leap/tests/Tests.elm +1 -1
  304. data/tracks/elm/exercises/list-ops/tests/Tests.elm +1 -1
  305. data/tracks/elm/exercises/nucleotide-count/NucleotideCount.elm +1 -1
  306. data/tracks/elm/exercises/nucleotide-count/tests/Tests.elm +1 -1
  307. data/tracks/elm/exercises/pangram/Pangram.example.elm +2 -2
  308. data/tracks/elm/exercises/pangram/tests/Tests.elm +1 -1
  309. data/tracks/elm/exercises/pascals-triangle/Triangle.example.elm +4 -4
  310. data/tracks/elm/exercises/phone-number/PhoneNumber.example.elm +3 -3
  311. data/tracks/elm/exercises/phone-number/tests/Tests.elm +1 -1
  312. data/tracks/elm/exercises/raindrops/Raindrops.example.elm +4 -4
  313. data/tracks/elm/exercises/raindrops/tests/Tests.elm +1 -1
  314. data/tracks/elm/exercises/rna-transcription/tests/Tests.elm +1 -7
  315. data/tracks/elm/exercises/robot-simulator/RobotSimulator.example.elm +5 -5
  316. data/tracks/elm/exercises/robot-simulator/tests/Tests.elm +65 -65
  317. data/tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm +1 -1
  318. data/tracks/elm/exercises/roman-numerals/tests/Tests.elm +19 -19
  319. data/tracks/elm/exercises/run-length-encoding/RunLengthEncoding.elm +1 -1
  320. data/tracks/elm/exercises/run-length-encoding/RunLengthEncoding.example.elm +2 -2
  321. data/tracks/elm/exercises/run-length-encoding/RunLengthEncodingPropertyChecks.elm +3 -3
  322. data/tracks/elm/exercises/run-length-encoding/tests/Tests.elm +2 -2
  323. data/tracks/elm/exercises/say/Say.example.elm +4 -4
  324. data/tracks/elm/exercises/say/tests/Tests.elm +2 -2
  325. data/tracks/elm/exercises/scrabble-score/ScrabbleScore.example.elm +16 -16
  326. data/tracks/elm/exercises/scrabble-score/tests/Tests.elm +1 -1
  327. data/tracks/elm/exercises/series/Series.example.elm +5 -5
  328. data/tracks/elm/exercises/series/tests/Tests.elm +2 -2
  329. data/tracks/elm/exercises/space-age/SpaceAge.elm +9 -8
  330. data/tracks/elm/exercises/space-age/SpaceAge.example.elm +3 -2
  331. data/tracks/elm/exercises/space-age/tests/Tests.elm +1 -1
  332. data/tracks/elm/exercises/strain/tests/Tests.elm +3 -3
  333. data/tracks/elm/exercises/sublist/Sublist.elm +1 -1
  334. data/tracks/elm/exercises/sublist/Sublist.example.elm +6 -6
  335. data/tracks/elm/exercises/sublist/tests/Tests.elm +2 -2
  336. data/tracks/elm/exercises/sum-of-multiples/tests/Tests.elm +1 -1
  337. data/tracks/elm/exercises/triangle/tests/Tests.elm +2 -2
  338. data/tracks/elm/exercises/word-count/WordCount.example.elm +2 -2
  339. data/tracks/elm/exercises/word-count/tests/Tests.elm +2 -2
  340. data/tracks/factor/config/exercise_readme.go.tmpl +12 -4
  341. data/tracks/factor/exercises/isogram/README.md +4 -3
  342. data/tracks/factor/exercises/leap/README.md +1 -1
  343. data/tracks/factor/exercises/two-fer/README.md +3 -32
  344. data/tracks/fsharp/config.json +10 -0
  345. data/tracks/fsharp/exercises/Exercises.sln +6 -0
  346. data/tracks/fsharp/exercises/rational-numbers/Example.fs +46 -0
  347. data/tracks/fsharp/exercises/rational-numbers/Program.fs +1 -0
  348. data/tracks/fsharp/exercises/rational-numbers/README.md +29 -0
  349. data/tracks/fsharp/exercises/rational-numbers/RationalNumbers.fs +19 -0
  350. data/tracks/fsharp/exercises/rational-numbers/RationalNumbers.fsproj +23 -0
  351. data/tracks/fsharp/exercises/rational-numbers/RationalNumbersTest.fs +153 -0
  352. data/tracks/fsharp/exercises/two-bucket/Example.fs +49 -57
  353. data/tracks/fsharp/exercises/two-bucket/TwoBucketTest.fs +40 -25
  354. data/tracks/fsharp/exercises/variable-length-quantity/Example.fs +21 -17
  355. data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantityTest.fs +85 -42
  356. data/tracks/fsharp/exercises/word-search/Example.fs +20 -14
  357. data/tracks/fsharp/exercises/word-search/WordSearch.fs +1 -1
  358. data/tracks/fsharp/exercises/word-search/WordSearchTest.fs +303 -48
  359. data/tracks/fsharp/generators/Formatting.fs +7 -2
  360. data/tracks/fsharp/generators/Generators.fs +97 -2
  361. data/tracks/fsharp/generators/Templates/_AssertEqualWithin.liquid +1 -0
  362. data/tracks/go/config.json +14 -0
  363. data/tracks/go/exercises/all-your-base/.meta/gen.go +2 -2
  364. data/tracks/go/exercises/all-your-base/cases_test.go +2 -2
  365. data/tracks/go/exercises/rectangles/.meta/gen.go +57 -0
  366. data/tracks/go/exercises/rectangles/README.md +85 -0
  367. data/tracks/go/exercises/rectangles/cases_test.go +134 -0
  368. data/tracks/go/exercises/rectangles/example.go +51 -0
  369. data/tracks/go/exercises/rectangles/rectangles_test.go +22 -0
  370. data/tracks/go/exercises/reverse-string/.meta/gen.go +4 -2
  371. data/tracks/go/exercises/reverse-string/cases_test.go +4 -2
  372. data/tracks/go/exercises/reverse-string/reverse_string_test.go +12 -1
  373. data/tracks/haskell/exercises/matrix/package.yaml +1 -1
  374. data/tracks/haskell/exercises/matrix/test/Tests.hs +1 -1
  375. data/tracks/java/config.json +12 -0
  376. data/tracks/java/config/exercise_readme.go.tmpl +10 -4
  377. data/tracks/java/exercises/all-your-base/README.md +0 -1
  378. data/tracks/java/exercises/alphametics/README.md +0 -1
  379. data/tracks/java/exercises/bank-account/README.md +0 -1
  380. data/tracks/java/exercises/complex-numbers/src/test/java/ComplexNumberTest.java +17 -15
  381. data/tracks/java/exercises/custom-set/README.md +0 -1
  382. data/tracks/java/exercises/diamond/.meta/version +1 -1
  383. data/tracks/java/exercises/diamond/src/test/java/DiamondPrinterTest.java +9 -11
  384. data/tracks/java/exercises/forth/README.md +0 -11
  385. data/tracks/java/exercises/list-ops/README.md +0 -1
  386. data/tracks/java/exercises/markdown/README.md +0 -1
  387. data/tracks/java/exercises/minesweeper/README.md +0 -1
  388. data/tracks/java/exercises/palindrome-products/.meta/src/reference/java/PalindromeCalculator.java +9 -0
  389. data/tracks/java/exercises/palindrome-products/.meta/version +1 -0
  390. data/tracks/java/exercises/palindrome-products/src/test/java/PalindromeCalculatorTest.java +110 -15
  391. data/tracks/java/exercises/parallel-letter-frequency/README.md +0 -1
  392. data/tracks/java/exercises/pig-latin/.meta/src/reference/java/PigLatinTranslator.java +16 -0
  393. data/tracks/java/exercises/pig-latin/.meta/version +1 -0
  394. data/tracks/java/exercises/pig-latin/src/test/java/PigLatinTranslatorTest.java +15 -1
  395. data/tracks/java/exercises/prime-factors/.meta/version +1 -1
  396. data/tracks/java/exercises/rational-numbers/.meta/src/reference/java/Rational.java +128 -0
  397. data/tracks/java/exercises/rational-numbers/.meta/version +1 -0
  398. data/tracks/java/exercises/rational-numbers/README.md +47 -0
  399. data/tracks/java/exercises/rational-numbers/build.gradle +17 -0
  400. data/tracks/java/exercises/rational-numbers/src/main/java/Rational.java +40 -0
  401. data/tracks/java/exercises/rational-numbers/src/test/java/RationalTest.java +288 -0
  402. data/tracks/java/exercises/rectangles/README.md +0 -1
  403. data/tracks/java/exercises/settings.gradle +1 -0
  404. data/tracks/java/exercises/sublist/README.md +0 -1
  405. data/tracks/java/exercises/tournament/README.md +0 -1
  406. data/tracks/java/exercises/two-fer/README.md +1 -1
  407. data/tracks/java/exercises/word-search/README.md +0 -1
  408. data/tracks/lua/config/exercise_readme.go.tmpl +9 -4
  409. data/tracks/lua/exercises/all-your-base/README.md +0 -1
  410. data/tracks/lua/exercises/alphametics/README.md +0 -1
  411. data/tracks/lua/exercises/bank-account/README.md +0 -1
  412. data/tracks/lua/exercises/custom-set/README.md +0 -1
  413. data/tracks/lua/exercises/isbn-verifier/README.md +1 -1
  414. data/tracks/lua/exercises/list-ops/README.md +0 -1
  415. data/tracks/lua/exercises/minesweeper/README.md +0 -1
  416. data/tracks/lua/exercises/protein-translation/README.md +2 -2
  417. data/tracks/lua/exercises/react/README.md +0 -1
  418. data/tracks/lua/exercises/rectangles/README.md +0 -1
  419. data/tracks/lua/exercises/reverse-string/README.md +1 -1
  420. data/tracks/lua/exercises/rna-transcription/README.md +1 -1
  421. data/tracks/lua/exercises/sublist/README.md +0 -1
  422. data/tracks/lua/exercises/tournament/README.md +0 -1
  423. data/tracks/lua/exercises/word-search/README.md +0 -1
  424. data/tracks/perl5/bin/exercise-gen.pl +4 -1
  425. data/tracks/perl5/exercises/bob/bob.t +9 -15
  426. data/tracks/perl5/exercises/bob/example.yaml +0 -4
  427. data/tracks/perl5/exercises/hello-world/example.yaml +0 -4
  428. data/tracks/perl5/exercises/hello-world/hello-world.t +9 -15
  429. data/tracks/perl5/exercises/leap/example.yaml +0 -4
  430. data/tracks/perl5/exercises/leap/leap.t +9 -15
  431. data/tracks/perl5/exercises/luhn/luhn.t +9 -13
  432. data/tracks/perl5/exercises/phone-number/phone-number.t +9 -13
  433. data/tracks/perl5/templates/test.mustache +10 -18
  434. data/tracks/perl6/bin/exercise-gen.pl6 +12 -2
  435. data/tracks/perl6/config/exercise_readme.go.tmpl +18 -4
  436. data/tracks/perl6/exercises/all-your-base/README.md +0 -1
  437. data/tracks/perl6/exercises/raindrops/.meta/exercise-data.yaml +2 -2
  438. data/tracks/perl6/exercises/raindrops/raindrops.t +57 -21
  439. data/tracks/perl6/exercises/two-fer/README.md +1 -1
  440. data/tracks/php/.travis.yml +1 -0
  441. data/tracks/php/exercises/bob/README.md +2 -0
  442. data/tracks/php/exercises/bob/bob_test.php +4 -1
  443. data/tracks/php/exercises/bob/example.php +4 -0
  444. data/tracks/php/exercises/connect/example.php +3 -4
  445. data/tracks/python/config.json +12 -12
  446. data/tracks/python/exercises/beer-song/beer_song.py +1 -5
  447. data/tracks/python/exercises/beer-song/beer_song_test.py +376 -57
  448. data/tracks/python/exercises/beer-song/example.py +18 -13
  449. data/tracks/r/config/exercise_readme.go.tmpl +9 -4
  450. data/tracks/r/exercises/allergies/README.md +0 -1
  451. data/tracks/r/exercises/beer-song/README.md +2 -2
  452. data/tracks/r/exercises/collatz-conjecture/README.md +1 -1
  453. data/tracks/r/exercises/diamond/README.md +6 -6
  454. data/tracks/r/exercises/grains/README.md +0 -1
  455. data/tracks/r/exercises/isogram/README.md +2 -1
  456. data/tracks/r/exercises/leap/README.md +1 -1
  457. data/tracks/r/exercises/luhn/README.md +7 -7
  458. data/tracks/r/exercises/nucleotide-count/README.md +8 -22
  459. data/tracks/r/exercises/pangram/README.md +1 -1
  460. data/tracks/r/exercises/pascals-triangle/README.md +2 -2
  461. data/tracks/r/exercises/perfect-numbers/README.md +2 -2
  462. data/tracks/r/exercises/phone-number/README.md +4 -3
  463. data/tracks/r/exercises/rna-transcription/README.md +2 -2
  464. data/tracks/r/exercises/rotational-cipher/README.md +2 -1
  465. data/tracks/r/exercises/scrabble-score/README.md +3 -1
  466. data/tracks/r/exercises/secret-handshake/README.md +2 -2
  467. data/tracks/r/exercises/space-age/README.md +1 -1
  468. data/tracks/r/exercises/sum-of-multiples/README.md +3 -6
  469. data/tracks/r/exercises/tournament/README.md +5 -6
  470. data/tracks/r/exercises/triangle/README.md +9 -6
  471. data/tracks/r/exercises/word-count/README.md +1 -2
  472. data/tracks/rust/.gitignore +1 -0
  473. data/tracks/rust/exercises/reverse-string/.meta/hints.md +3 -0
  474. data/tracks/rust/exercises/reverse-string/README.md +5 -0
  475. data/tracks/rust/exercises/reverse-string/tests/reverse-string.rs +7 -0
  476. data/tracks/scala/config/exercise_readme.go.tmpl +10 -4
  477. data/tracks/scala/exercises/accumulate/README.md +0 -3
  478. data/tracks/scala/exercises/acronym/README.md +0 -1
  479. data/tracks/scala/exercises/acronym/src/test/scala/AcronymTest.scala +6 -12
  480. data/tracks/scala/exercises/all-your-base/README.md +1 -2
  481. data/tracks/scala/exercises/all-your-base/example.scala +5 -4
  482. data/tracks/scala/exercises/all-your-base/src/test/scala/AllYourBaseTest.scala +26 -27
  483. data/tracks/scala/exercises/allergies/README.md +0 -1
  484. data/tracks/scala/exercises/allergies/src/test/scala/AllergiesTest.scala +1 -1
  485. data/tracks/scala/exercises/alphametics/README.md +2 -3
  486. data/tracks/scala/exercises/alphametics/example.scala +25 -25
  487. data/tracks/scala/exercises/alphametics/src/test/scala/AlphameticsTest.scala +58 -42
  488. data/tracks/scala/exercises/anagram/src/test/scala/AnagramTest.scala +4 -30
  489. data/tracks/scala/exercises/atbash-cipher/README.md +2 -1
  490. data/tracks/scala/exercises/atbash-cipher/src/test/scala/AtbashCipherTest.scala +18 -14
  491. data/tracks/scala/exercises/bank-account/README.md +0 -1
  492. data/tracks/scala/exercises/beer-song/README.md +2 -2
  493. data/tracks/scala/exercises/binary/README.md +2 -0
  494. data/tracks/scala/exercises/bob/example.scala +11 -0
  495. data/tracks/scala/exercises/bob/src/test/scala/BobTest.scala +3 -2
  496. data/tracks/scala/exercises/book-store/README.md +5 -5
  497. data/tracks/scala/exercises/bowling/README.md +20 -6
  498. data/tracks/scala/exercises/change/README.md +1 -1
  499. data/tracks/scala/exercises/collatz-conjecture/README.md +4 -3
  500. data/tracks/scala/exercises/connect/README.md +1 -2
  501. data/tracks/scala/exercises/crypto-square/README.md +10 -8
  502. data/tracks/scala/exercises/custom-set/README.md +0 -1
  503. data/tracks/scala/exercises/dominoes/README.md +3 -4
  504. data/tracks/scala/exercises/etl/README.md +3 -1
  505. data/tracks/scala/exercises/flatten-array/README.md +7 -8
  506. data/tracks/scala/exercises/food-chain/README.md +1 -1
  507. data/tracks/scala/exercises/forth/README.md +0 -1
  508. data/tracks/scala/exercises/grade-school/README.md +0 -1
  509. data/tracks/scala/exercises/grains/README.md +0 -1
  510. data/tracks/scala/exercises/house/README.md +2 -3
  511. data/tracks/scala/exercises/isogram/README.md +2 -1
  512. data/tracks/scala/exercises/kindergarten-garden/README.md +13 -13
  513. data/tracks/scala/exercises/leap/README.md +1 -1
  514. data/tracks/scala/exercises/lens-person/README.md +1 -2
  515. data/tracks/scala/exercises/linked-list/README.md +10 -10
  516. data/tracks/scala/exercises/luhn/README.md +7 -7
  517. data/tracks/scala/exercises/matrix/README.md +6 -4
  518. data/tracks/scala/exercises/meetup/README.md +16 -13
  519. data/tracks/scala/exercises/minesweeper/README.md +0 -1
  520. data/tracks/scala/exercises/nucleotide-count/README.md +8 -22
  521. data/tracks/scala/exercises/ocr-numbers/README.md +6 -6
  522. data/tracks/scala/exercises/octal/README.md +6 -2
  523. data/tracks/scala/exercises/palindrome-products/README.md +15 -16
  524. data/tracks/scala/exercises/pangram/README.md +1 -1
  525. data/tracks/scala/exercises/parallel-letter-frequency/README.md +0 -1
  526. data/tracks/scala/exercises/pascals-triangle/README.md +2 -2
  527. data/tracks/scala/exercises/perfect-numbers/README.md +2 -2
  528. data/tracks/scala/exercises/phone-number/README.md +4 -3
  529. data/tracks/scala/exercises/protein-translation/README.md +5 -6
  530. data/tracks/scala/exercises/pythagorean-triplet/README.md +3 -3
  531. data/tracks/scala/exercises/queen-attack/README.md +1 -1
  532. data/tracks/scala/exercises/rail-fence-cipher/README.md +12 -7
  533. data/tracks/scala/exercises/rna-transcription/README.md +2 -2
  534. data/tracks/scala/exercises/roman-numerals/README.md +1 -1
  535. data/tracks/scala/exercises/run-length-encoding/README.md +4 -4
  536. data/tracks/scala/exercises/saddle-points/README.md +2 -2
  537. data/tracks/scala/exercises/scrabble-score/README.md +3 -1
  538. data/tracks/scala/exercises/secret-handshake/README.md +2 -2
  539. data/tracks/scala/exercises/sgf-parsing/README.md +4 -5
  540. data/tracks/scala/exercises/simple-cipher/README.md +5 -7
  541. data/tracks/scala/exercises/space-age/README.md +1 -1
  542. data/tracks/scala/exercises/spiral-matrix/README.md +2 -2
  543. data/tracks/scala/exercises/sublist/README.md +0 -1
  544. data/tracks/scala/exercises/sum-of-multiples/README.md +3 -6
  545. data/tracks/scala/exercises/triangle/README.md +9 -6
  546. data/tracks/scala/exercises/trinary/README.md +1 -1
  547. data/tracks/scala/exercises/variable-length-quantity/README.md +6 -7
  548. data/tracks/scala/exercises/word-count/README.md +1 -2
  549. data/tracks/scala/exercises/wordy/README.md +0 -5
  550. data/tracks/scala/exercises/zipper/README.md +1 -2
  551. data/tracks/scala/testgen/src/main/scala/AcronymTestGenerator.scala +1 -1
  552. data/tracks/scala/testgen/src/main/scala/AllYourBaseTestGenerator.scala +3 -5
  553. data/tracks/scala/testgen/src/main/scala/AllergiesTestGenerator.scala +8 -5
  554. data/tracks/scala/testgen/src/main/scala/{AlphametricsTestGenerator.scala → AlphameticsTestGenerator.scala} +5 -5
  555. data/tracks/scala/testgen/src/main/scala/AnagramTestGenerator.scala +1 -1
  556. data/tracks/scala/testgen/src/main/scala/AtbashCipherTestGenerator.scala +1 -1
  557. data/tracks/scala/testgen/src/main/scala/BobTestGenerator.scala +4 -3
  558. data/tracks/scala/testgen/src/main/scala/testgen/TestSuiteBuilder.scala +35 -0
  559. data/tracks/sml/config/exercise_readme.go.tmpl +29 -4
  560. data/tracks/sml/exercises/accumulate/README.md +2 -2
  561. data/tracks/sml/exercises/all-your-base/README.md +13 -10
  562. data/tracks/sml/exercises/atbash-cipher/README.md +2 -1
  563. data/tracks/sml/exercises/collatz-conjecture/README.md +1 -1
  564. data/tracks/sml/exercises/diamond/README.md +6 -6
  565. data/tracks/sml/exercises/leap/README.md +1 -1
  566. data/tracks/sml/exercises/list-ops/README.md +0 -1
  567. data/tracks/sml/exercises/nth-prime/README.md +1 -1
  568. data/tracks/sml/exercises/pangram/README.md +1 -1
  569. data/tracks/sml/exercises/perfect-numbers/README.md +2 -2
  570. data/tracks/sml/exercises/phone-number/README.md +4 -3
  571. data/tracks/sml/exercises/rna-transcription/README.md +2 -2
  572. data/tracks/sml/exercises/roman-numerals/README.md +1 -1
  573. data/tracks/sml/exercises/sum-of-multiples/README.md +3 -6
  574. data/tracks/sml/exercises/two-fer/README.md +2 -31
  575. data/tracks/vimscript/config/exercise_readme.go.tmpl +8 -4
  576. data/tracks/vimscript/exercises/allergies/README.md +0 -1
  577. data/tracks/vimscript/exercises/atbash-cipher/README.md +2 -1
  578. data/tracks/vimscript/exercises/beer-song/README.md +2 -2
  579. data/tracks/vimscript/exercises/etl/README.md +3 -1
  580. data/tracks/vimscript/exercises/leap/README.md +1 -1
  581. data/tracks/vimscript/exercises/nucleotide-count/README.md +8 -22
  582. data/tracks/vimscript/exercises/pangram/README.md +1 -1
  583. data/tracks/vimscript/exercises/phone-number/README.md +4 -3
  584. data/tracks/vimscript/exercises/rna-transcription/README.md +2 -2
  585. data/tracks/vimscript/exercises/roman-numerals/README.md +1 -1
  586. data/tracks/vimscript/exercises/scrabble-score/README.md +3 -1
  587. data/tracks/vimscript/exercises/triangle/README.md +9 -6
  588. data/tracks/vimscript/exercises/word-count/README.md +1 -2
  589. metadata +44 -78
  590. data/tracks/c/docs/EXERCISE_README_INSERT.md +0 -30
  591. data/tracks/ceylon/config/exercise-readme-insert.md +0 -1
  592. data/tracks/common-lisp/docs/EXERCISE_README_INSERT.md +0 -45
  593. data/tracks/crystal/docs/EXERCISE_README_INSERT.md +0 -21
  594. data/tracks/dart/docs/EXERCISE_README_INSERT.md +0 -8
  595. data/tracks/delphi/docs/EXERCISE_README_INSERT.md +0 -19
  596. data/tracks/factor/docs/EXERCISE_README_INSERT.md +0 -12
  597. data/tracks/java/config/exercise-readme-insert.md +0 -9
  598. data/tracks/lua/docs/EXERCISE_README_INSERT.md +0 -8
  599. data/tracks/perl6/docs/EXERCISE_README_INSERT.md +0 -17
  600. data/tracks/r/docs/EXERCISE_README_INSERT.md +0 -8
  601. data/tracks/rust/exercises/binary-search/Cargo.lock +0 -4
  602. data/tracks/rust/exercises/collatz-conjecture/Cargo.lock +0 -4
  603. data/tracks/rust/exercises/isbn-verifier/Cargo.lock +0 -4
  604. data/tracks/rust/exercises/two-bucket/Cargo.lock +0 -4
  605. data/tracks/scala/docs/EXERCISE_README_INSERT.md +0 -9
  606. data/tracks/scala/exercises/bob/.meta/description.md +0 -10
  607. data/tracks/sml/docs/EXERCISE_README_INSERT.md +0 -28
  608. data/tracks/vimscript/docs/EXERCISE_README_INSERT.md +0 -7
@@ -1,18 +1,23 @@
1
- def song(first, last=0):
2
- verses = ''
3
- for number in reversed(range(last, first + 1)):
4
- verses += verse(number) + '\n'
5
-
6
- return verses
1
+ def recite(start, take=1):
2
+ results = []
3
+ for i in range(start, start - take, -1):
4
+ results.extend(verse(i))
5
+ if i > start - take + 1:
6
+ results.append('')
7
+ return results
7
8
 
8
9
 
9
10
  def verse(number):
10
- return ''.join([
11
- "{} of beer on the wall, ".format(_bottles(number).capitalize()),
12
- "{} of beer.\n".format(_bottles(number)),
13
- _action(number),
14
- _next_bottle(number),
15
- ])
11
+ return [
12
+ ''.join([
13
+ "{} of beer on the wall, ".format(_bottles(number).capitalize()),
14
+ "{} of beer.".format(_bottles(number))
15
+ ]),
16
+ ''.join([
17
+ _action(number),
18
+ _next_bottle(number)
19
+ ])
20
+ ]
16
21
 
17
22
 
18
23
  def _action(current_verse):
@@ -25,7 +30,7 @@ def _action(current_verse):
25
30
 
26
31
 
27
32
  def _next_bottle(current_verse):
28
- return "{} of beer on the wall.\n".format(
33
+ return "{} of beer on the wall.".format(
29
34
  _bottles(_next_verse(current_verse)),
30
35
  )
31
36
 
@@ -4,10 +4,15 @@
4
4
  {{- with .Hints }}
5
5
  {{ . }}
6
6
  {{ end }}
7
- {{- with .TrackInsert }}
8
- {{ . }}
9
- {{ end }}
10
- {{- with .Spec.Credits -}}
7
+ ## Installation
8
+ See [this guide](https://github.com/exercism/xr/blob/master/docs/INSTALLATION.md) for instructions on how to setup your local R environment.
9
+
10
+ ## How to implement your solution
11
+ In each problem folder, there is a file named `<exercise_name>.R` containing a function that returns a `NULL` value. Place your implementation inside the body of the function.
12
+
13
+ ## How to run tests
14
+ Inside of RStudio, simply execute the `test_<exercise_name>.R` script. This can be conveniently done with [testthat's `auto_test` function](https://www.rdocumentation.org/packages/testthat/topics/auto_test). Because exercism code and tests are in the same folder, use this same path for both `code_path` and `test_path` parameters. On the command-line, you can also run `Rscript test_<exercise_name>.R`.
15
+ {{ with .Spec.Credits }}
11
16
  ## Source
12
17
 
13
18
  {{ . }}
@@ -29,7 +29,6 @@ allergens that score 256, 512, 1024, etc.). Your program should
29
29
  ignore those components of the score. For example, if the allergy
30
30
  score is 257, your program should only report the eggs (1) allergy.
31
31
 
32
-
33
32
  ## Installation
34
33
  See [this guide](https://github.com/exercism/xr/blob/master/docs/INSTALLATION.md) for instructions on how to setup your local R environment.
35
34
 
@@ -1,10 +1,10 @@
1
1
  # Beer Song
2
2
 
3
- Produce the lyrics to that beloved classic, that field-trip favorite: 99 Bottles of Beer on the Wall.
3
+ Recite the lyrics to that beloved classic, that field-trip favorite: 99 Bottles of Beer on the Wall.
4
4
 
5
5
  Note that not all verses are identical.
6
6
 
7
- ```plain
7
+ ```text
8
8
  99 bottles of beer on the wall, 99 bottles of beer.
9
9
  Take one down and pass it around, 98 bottles of beer on the wall.
10
10
 
@@ -10,6 +10,7 @@ always reach 1 eventually.
10
10
  Given a number n, return the number of steps required to reach 1.
11
11
 
12
12
  ## Examples
13
+
13
14
  Starting with n = 12, the steps would be as follows:
14
15
 
15
16
  0. 12
@@ -25,7 +26,6 @@ Starting with n = 12, the steps would be as follows:
25
26
 
26
27
  Resulting in 9 steps. So for input n = 12, the return value would be 9.
27
28
 
28
-
29
29
  ## Installation
30
30
  See [this guide](https://github.com/exercism/xr/blob/master/docs/INSTALLATION.md) for instructions on how to setup your local R environment.
31
31
 
@@ -1,7 +1,7 @@
1
1
  # Diamond
2
2
 
3
- The diamond kata takes as its input a letter, and outputs it in a diamond
4
- shape. Given a letter, it prints a diamond starting with 'A', with the
3
+ The diamond kata takes as its input a letter, and outputs it in a diamond
4
+ shape. Given a letter, it prints a diamond starting with 'A', with the
5
5
  supplied letter at the widest point.
6
6
 
7
7
  ## Requirements
@@ -15,7 +15,7 @@ supplied letter at the widest point.
15
15
  * The diamond has a square shape (width equals height).
16
16
  * The letters form a diamond shape.
17
17
  * The top half has the letters in ascending order.
18
- * The bottom half has the letters in descending order.
18
+ * The bottom half has the letters in descending order.
19
19
  * The four corners (containing the spaces) are triangles.
20
20
 
21
21
  ## Examples
@@ -24,13 +24,13 @@ In the following examples, spaces are indicated by `·` characters.
24
24
 
25
25
  Diamond for letter 'A':
26
26
 
27
- ```plain
27
+ ```text
28
28
  A
29
29
  ```
30
30
 
31
31
  Diamond for letter 'C':
32
32
 
33
- ```plain
33
+ ```text
34
34
  ··A··
35
35
  ·B·B·
36
36
  C···C
@@ -40,7 +40,7 @@ C···C
40
40
 
41
41
  Diamond for letter 'E':
42
42
 
43
- ```plain
43
+ ```text
44
44
  ····A····
45
45
  ···B·B···
46
46
  ··C···C··
@@ -15,7 +15,6 @@ Write code that shows:
15
15
  - how many grains were on each square, and
16
16
  - the total number of grains
17
17
 
18
-
19
18
  ## For bonus points
20
19
 
21
20
  Did you get the tests passing and the code clean? If you want to, these
@@ -2,13 +2,14 @@
2
2
 
3
3
  Determine if a word or phrase is an isogram.
4
4
 
5
- An isogram (also known as a "nonpattern word") is a word or phrase without a repeating letter.
5
+ An isogram (also known as a "nonpattern word") is a word or phrase without a repeating letter, however spaces and hyphens are allowed to appear multiple times.
6
6
 
7
7
  Examples of isograms:
8
8
 
9
9
  - lumberjacks
10
10
  - background
11
11
  - downstream
12
+ - six-year-old
12
13
 
13
14
  The word *isograms*, however, is not an isogram, because the s repeats.
14
15
 
@@ -4,7 +4,7 @@ Given a year, report if it is a leap year.
4
4
 
5
5
  The tricky thing here is that a leap year in the Gregorian calendar occurs:
6
6
 
7
- ```plain
7
+ ```text
8
8
  on every year that is evenly divisible by 4
9
9
  except every year that is evenly divisible by 100
10
10
  unless the year is also evenly divisible by 400
@@ -18,27 +18,27 @@ are disallowed.
18
18
 
19
19
  ## Example 1: valid credit card number
20
20
 
21
- ```
21
+ ```text
22
22
  4539 1488 0343 6467
23
23
  ```
24
24
 
25
25
  The first step of the Luhn algorithm is to double every second digit,
26
26
  starting from the right. We will be doubling
27
27
 
28
- ```
28
+ ```text
29
29
  4_3_ 1_8_ 0_4_ 6_6_
30
30
  ```
31
31
 
32
32
  If doubling the number results in a number greater than 9 then subtract 9
33
33
  from the product. The results of our doubling:
34
34
 
35
- ```
35
+ ```text
36
36
  8569 2478 0383 3437
37
37
  ```
38
38
 
39
39
  Then sum all of the digits:
40
40
 
41
- ```
41
+ ```text
42
42
  8+5+6+9+2+4+7+8+0+3+8+3+3+4+3+7 = 80
43
43
  ```
44
44
 
@@ -46,19 +46,19 @@ If the sum is evenly divisible by 10, then the number is valid. This number is v
46
46
 
47
47
  ## Example 2: invalid credit card number
48
48
 
49
- ```
49
+ ```text
50
50
  8273 1232 7352 0569
51
51
  ```
52
52
 
53
53
  Double the second digits, starting from the right
54
54
 
55
- ```
55
+ ```text
56
56
  7253 2262 5312 0539
57
57
  ```
58
58
 
59
59
  Sum the digits
60
60
 
61
- ```
61
+ ```text
62
62
  7+2+5+3+2+2+6+2+5+3+1+2+0+5+3+9 = 57
63
63
  ```
64
64
 
@@ -1,30 +1,16 @@
1
1
  # Nucleotide Count
2
2
 
3
- Given a DNA string, compute how many times each nucleotide occurs in the string.
3
+ Given a single stranded DNA string, compute how many times each nucleotide occurs in the string.
4
4
 
5
- DNA is represented by an alphabet of the following symbols: 'A', 'C',
6
- 'G', and 'T'.
7
-
8
- Each symbol represents a nucleotide, which is a fancy name for the
9
- particular molecules that happen to make up a large part of DNA.
10
-
11
- Shortest intro to biochemistry EVAR:
5
+ The genetic language of every living thing on the planet is DNA.
6
+ DNA is a large molecule that is built from an extremely long sequence of individual elements called nucleotides.
7
+ 4 types exist in DNA and these differ only slightly and can be represented as the following symbols: 'A' for adenine, 'C' for cytosine, 'G' for guanine, and 'T' thymine.
12
8
 
9
+ Here is an analogy:
13
10
  - twigs are to birds nests as
14
- - nucleotides are to DNA and RNA as
15
- - amino acids are to proteins as
16
- - sugar is to starch as
17
- - oh crap lipids
18
-
19
- I'm not going to talk about lipids because they're crazy complex.
20
-
21
- So back to nucleotides.
22
-
23
- DNA contains four types of them: adenine (`A`), cytosine (`C`), guanine
24
- (`G`), and thymine (`T`).
25
-
26
- RNA contains a slightly different set of nucleotides, but we don't care
27
- about that for now.
11
+ - nucleotides are to DNA as
12
+ - legos are to lego houses as
13
+ - words are to sentences as...
28
14
 
29
15
  ## Installation
30
16
  See [this guide](https://github.com/exercism/xr/blob/master/docs/INSTALLATION.md) for instructions on how to setup your local R environment.
@@ -2,7 +2,7 @@
2
2
 
3
3
  Determine if a sentence is a pangram. A pangram (Greek: παν γράμμα, pan gramma,
4
4
  "every letter") is a sentence using every letter of the alphabet at least once.
5
- The best known English pangram is:
5
+ The best known English pangram is:
6
6
  > The quick brown fox jumps over the lazy dog.
7
7
 
8
8
  The alphabet used consists of ASCII letters `a` to `z`, inclusive, and is case
@@ -1,11 +1,11 @@
1
- # Pascals Triangle
1
+ # Pascal's Triangle
2
2
 
3
3
  Compute Pascal's triangle up to a given number of rows.
4
4
 
5
5
  In Pascal's Triangle each number is computed by adding the numbers to
6
6
  the right and left of the current position in the previous row.
7
7
 
8
- ```plain
8
+ ```text
9
9
  1
10
10
  1 1
11
11
  1 2 1
@@ -5,7 +5,7 @@ Nicomachus' (60 - 120 CE) classification scheme for natural numbers.
5
5
 
6
6
  The Greek mathematician [Nicomachus](https://en.wikipedia.org/wiki/Nicomachus) devised a classification scheme for natural numbers, identifying each as belonging uniquely to the categories of **perfect**, **abundant**, or **deficient** based on their [aliquot sum](https://en.wikipedia.org/wiki/Aliquot_sum). The aliquot sum is defined as the sum of the factors of a number not including the number itself. For example, the aliquot sum of 15 is (1 + 3 + 5) = 9
7
7
 
8
- - **Perfect**: aliquot sum = number
8
+ - **Perfect**: aliquot sum = number
9
9
  - 6 is a perfect number because (1 + 2 + 3) = 6
10
10
  - 28 is a perfect number because (1 + 2 + 4 + 7 + 14) = 28
11
11
  - **Abundant**: aliquot sum > number
@@ -14,7 +14,7 @@ The Greek mathematician [Nicomachus](https://en.wikipedia.org/wiki/Nicomachus) d
14
14
  - **Deficient**: aliquot sum < number
15
15
  - 8 is a deficient number because (1 + 2 + 4) = 7
16
16
  - Prime numbers are deficient
17
-
17
+
18
18
  Implement a way to determine whether a given number is **perfect**. Depending on your language track, you may also need to implement a way to determine whether a given number is **abundant** or **deficient**.
19
19
 
20
20
  ## Installation
@@ -6,14 +6,15 @@ The **North American Numbering Plan (NANP)** is a telephone numbering system use
6
6
 
7
7
  NANP numbers are ten-digit numbers consisting of a three-digit Numbering Plan Area code, commonly known as *area code*, followed by a seven-digit local number. The first three digits of the local number represent the *exchange code*, followed by the unique four-digit number which is the *subscriber number*.
8
8
 
9
-
10
9
  The format is usually represented as
11
- ```
10
+
11
+ ```text
12
12
  (NXX)-NXX-XXXX
13
13
  ```
14
+
14
15
  where `N` is any digit from 2 through 9 and `X` is any digit from 0 through 9.
15
16
 
16
- Your task is to clean up differently formated telephone numbers by removing punctuation and the country code (1) if present.
17
+ Your task is to clean up differently formatted telephone numbers by removing punctuation and the country code (1) if present.
17
18
 
18
19
  For example, the inputs
19
20
  - `+1 (613)-995-0253`
@@ -1,4 +1,4 @@
1
- # Rna Transcription
1
+ # RNA Transcription
2
2
 
3
3
  Given a DNA strand, return its RNA complement (per RNA transcription).
4
4
 
@@ -29,7 +29,7 @@ Inside of RStudio, simply execute the `test_<exercise_name>.R` script. This can
29
29
 
30
30
  ## Source
31
31
 
32
- Rosalind [http://rosalind.info/problems/rna](http://rosalind.info/problems/rna)
32
+ Hyperphysics [http://hyperphysics.phy-astr.gsu.edu/hbase/Organic/transcription.html](http://hyperphysics.phy-astr.gsu.edu/hbase/Organic/transcription.html)
33
33
 
34
34
  ## Submitting Incomplete Solutions
35
35
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -13,7 +13,7 @@ The most commonly used rotational cipher is `ROT13`.
13
13
 
14
14
  A `ROT13` on the Latin alphabet would be as follows:
15
15
 
16
- ```plain
16
+ ```text
17
17
  Plain: abcdefghijklmnopqrstuvwxyz
18
18
  Cipher: nopqrstuvwxyzabcdefghijklm
19
19
  ```
@@ -23,6 +23,7 @@ It is stronger than the Atbash cipher because it has 27 possible keys, and 25 us
23
23
  Ciphertext is written out in the same formatting as the input including spaces and punctuation.
24
24
 
25
25
  ## Examples
26
+
26
27
  - ROT5 `omg` gives `trl`
27
28
  - ROT0 `c` gives `c`
28
29
  - ROT26 `Cool` gives `Cool`
@@ -6,7 +6,7 @@ Given a word, compute the scrabble score for that word.
6
6
 
7
7
  You'll need these:
8
8
 
9
- ```plain
9
+ ```text
10
10
  Letter Value
11
11
  A, E, I, O, U, L, N, R, S, T 1
12
12
  D, G 2
@@ -18,6 +18,7 @@ Q, Z 10
18
18
  ```
19
19
 
20
20
  ## Examples
21
+
21
22
  "cabbage" should be scored as worth 14 points:
22
23
 
23
24
  - 3 points for C
@@ -34,6 +35,7 @@ And to total:
34
35
  - = 14
35
36
 
36
37
  ## Extensions
38
+
37
39
  - You can play a double or a triple letter.
38
40
  - You can play a double or a triple word.
39
41
 
@@ -6,7 +6,7 @@
6
6
  You and your fellow cohort of those in the "know" when it comes to
7
7
  binary decide to come up with a secret "handshake".
8
8
 
9
- ```
9
+ ```text
10
10
  1 = wink
11
11
  10 = double blink
12
12
  100 = close your eyes
@@ -39,7 +39,7 @@ Inside of RStudio, simply execute the `test_<exercise_name>.R` script. This can
39
39
 
40
40
  ## Source
41
41
 
42
- Bert, in Mary Poppins [http://www.imdb.com/character/ch0011238/quotes](http://www.imdb.com/character/ch0011238/quotes)
42
+ Bert, in Mary Poppins [http://www.imdb.com/title/tt0058331/quotes/qt0437047](http://www.imdb.com/title/tt0058331/quotes/qt0437047)
43
43
 
44
44
  ## Submitting Incomplete Solutions
45
45
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -12,7 +12,7 @@ Given an age in seconds, calculate how old someone would be on:
12
12
  - Neptune: orbital period 164.79132 Earth years
13
13
 
14
14
  So if you were told someone were 1,000,000,000 seconds old, you should
15
- be able to say that they're 31 Earth-years old.
15
+ be able to say that they're 31.69 Earth-years old.
16
16
 
17
17
  If you're wondering why Pluto didn't make the cut, go watch [this
18
18
  youtube video](http://www.youtube.com/watch?v=Z_2gbGXzFbs).
@@ -1,16 +1,13 @@
1
1
  # Sum Of Multiples
2
2
 
3
- Given a number, find the sum of all the multiples of particular numbers up to
3
+ Given a number, find the sum of all the unique multiples of particular numbers up to
4
4
  but not including that number.
5
5
 
6
- If we list all the natural numbers up to but not including 20 that are
7
- multiples of either 3 or 5, we get 3, 5, 6 and 9, 10, 12, 15, and 18.
6
+ If we list all the natural numbers below 20 that are multiples of 3 or 5,
7
+ we get 3, 5, 6, 9, 10, 12, 15, and 18.
8
8
 
9
9
  The sum of these multiples is 78.
10
10
 
11
- Given a number, find the sum of the multiples of a given set of numbers,
12
- up to but not including that number.
13
-
14
11
  ## Installation
15
12
  See [this guide](https://github.com/exercism/xr/blob/master/docs/INSTALLATION.md) for instructions on how to setup your local R environment.
16
13