trackler 2.1.0.48 → 2.1.0.49

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 (1053) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +88 -82
  3. data/CONTRIBUTING.md +5 -5
  4. data/fixtures/{common → problem-specifications}/exercises/apple/canonical-data.json +0 -0
  5. data/fixtures/{common → problem-specifications}/exercises/apple/description.md +0 -0
  6. data/fixtures/{common → problem-specifications}/exercises/apple/metadata.yml +0 -0
  7. data/fixtures/{common → problem-specifications}/exercises/banana/description.md +0 -0
  8. data/fixtures/{common → problem-specifications}/exercises/banana/metadata.yml +0 -0
  9. data/fixtures/{common → problem-specifications}/exercises/cherry/description.md +0 -0
  10. data/fixtures/{common → problem-specifications}/exercises/cherry/metadata.yml +0 -0
  11. data/fixtures/{common → problem-specifications}/exercises/dog/description.md +0 -0
  12. data/fixtures/{common → problem-specifications}/exercises/dog/metadata.yml +0 -0
  13. data/fixtures/{common → problem-specifications}/exercises/fish/.deprecated +0 -0
  14. data/fixtures/{common → problem-specifications}/exercises/fish/canonical-data.json +0 -0
  15. data/fixtures/{common → problem-specifications}/exercises/fish/description.md +0 -0
  16. data/fixtures/{common → problem-specifications}/exercises/fish/metadata.yml +0 -0
  17. data/fixtures/{common → problem-specifications}/exercises/hello-world/description.md +0 -0
  18. data/fixtures/{common → problem-specifications}/exercises/hello-world/metadata.yml +0 -0
  19. data/fixtures/{common → problem-specifications}/exercises/imbe/description.md +0 -0
  20. data/fixtures/{common → problem-specifications}/exercises/imbe/metadata.yml +0 -0
  21. data/fixtures/{common → problem-specifications}/exercises/mango/canonical-data.json +0 -0
  22. data/fixtures/{common → problem-specifications}/exercises/mango/description.md +0 -0
  23. data/fixtures/{common → problem-specifications}/exercises/mango/metadata.yml +0 -0
  24. data/fixtures/{common → problem-specifications}/exercises/no-metadata/description.md +0 -0
  25. data/fixtures/{common → problem-specifications}/exercises/one/description.md +0 -0
  26. data/fixtures/{common → problem-specifications}/exercises/one/metadata.yml +0 -0
  27. data/fixtures/{common → problem-specifications}/exercises/three/description.md +0 -0
  28. data/fixtures/{common → problem-specifications}/exercises/three/metadata.yml +0 -0
  29. data/fixtures/{common → problem-specifications}/exercises/two/description.md +0 -0
  30. data/fixtures/{common → problem-specifications}/exercises/two/metadata.yml +0 -0
  31. data/fixtures/tracks/animal/exercises/fish/included-via-symlink.txt +1 -0
  32. data/lib/trackler/guaranteed_file.rb +3 -3
  33. data/lib/trackler/specification.rb +4 -4
  34. data/lib/trackler/specifications.rb +1 -1
  35. data/lib/trackler/version.rb +1 -1
  36. data/{common → problem-specifications}/.gitignore +0 -0
  37. data/{common → problem-specifications}/.travis.yml +0 -0
  38. data/{common → problem-specifications}/CONTRIBUTING.md +11 -51
  39. data/{common → problem-specifications}/LICENSE +0 -0
  40. data/{common → problem-specifications}/README.md +2 -9
  41. data/{common → problem-specifications}/TOPICS.txt +0 -0
  42. data/{common → problem-specifications}/bin/check_required_files_present +0 -0
  43. data/{common → problem-specifications}/bin/transfer_blurb_to_description.rb +2 -2
  44. data/{common → problem-specifications}/canonical-schema.json +0 -0
  45. data/{common → problem-specifications}/exercises/accumulate/description.md +0 -0
  46. data/{common → problem-specifications}/exercises/accumulate/metadata.yml +0 -0
  47. data/{common → problem-specifications}/exercises/acronym/canonical-data.json +0 -0
  48. data/{common → problem-specifications}/exercises/acronym/description.md +0 -0
  49. data/{common → problem-specifications}/exercises/acronym/metadata.yml +0 -0
  50. data/{common → problem-specifications}/exercises/all-your-base/canonical-data.json +0 -0
  51. data/{common → problem-specifications}/exercises/all-your-base/description.md +0 -0
  52. data/{common → problem-specifications}/exercises/all-your-base/metadata.yml +0 -0
  53. data/{common → problem-specifications}/exercises/allergies/canonical-data.json +0 -0
  54. data/{common → problem-specifications}/exercises/allergies/description.md +0 -0
  55. data/{common → problem-specifications}/exercises/allergies/metadata.yml +0 -0
  56. data/{common → problem-specifications}/exercises/alphametics/canonical-data.json +0 -0
  57. data/{common → problem-specifications}/exercises/alphametics/description.md +0 -0
  58. data/{common → problem-specifications}/exercises/alphametics/metadata.yml +0 -0
  59. data/{common → problem-specifications}/exercises/anagram/canonical-data.json +0 -0
  60. data/{common → problem-specifications}/exercises/anagram/description.md +0 -0
  61. data/{common → problem-specifications}/exercises/anagram/metadata.yml +0 -0
  62. data/{common → problem-specifications}/exercises/atbash-cipher/canonical-data.json +0 -0
  63. data/{common → problem-specifications}/exercises/atbash-cipher/description.md +0 -0
  64. data/{common → problem-specifications}/exercises/atbash-cipher/metadata.yml +0 -0
  65. data/{common → problem-specifications}/exercises/bank-account/description.md +0 -0
  66. data/{common → problem-specifications}/exercises/bank-account/metadata.yml +0 -0
  67. data/{common → problem-specifications}/exercises/beer-song/canonical-data.json +0 -0
  68. data/{common → problem-specifications}/exercises/beer-song/description.md +0 -0
  69. data/{common → problem-specifications}/exercises/beer-song/metadata.yml +0 -0
  70. data/{common → problem-specifications}/exercises/binary-search-tree/description.md +0 -0
  71. data/{common → problem-specifications}/exercises/binary-search-tree/metadata.yml +0 -0
  72. data/{common → problem-specifications}/exercises/binary-search/canonical-data.json +2 -2
  73. data/{common → problem-specifications}/exercises/binary-search/description.md +0 -0
  74. data/{common → problem-specifications}/exercises/binary-search/metadata.yml +0 -0
  75. data/{common → problem-specifications}/exercises/binary/.deprecated +1 -1
  76. data/{common → problem-specifications}/exercises/binary/canonical-data.json +0 -0
  77. data/{common → problem-specifications}/exercises/binary/description.md +0 -0
  78. data/{common → problem-specifications}/exercises/binary/metadata.yml +0 -0
  79. data/{common → problem-specifications}/exercises/bob/canonical-data.json +0 -0
  80. data/{common → problem-specifications}/exercises/bob/description.md +0 -0
  81. data/{common → problem-specifications}/exercises/bob/metadata.yml +0 -0
  82. data/{common → problem-specifications}/exercises/book-store/canonical-data.json +0 -0
  83. data/{common → problem-specifications}/exercises/book-store/description.md +0 -0
  84. data/{common → problem-specifications}/exercises/book-store/metadata.yml +0 -0
  85. data/{common → problem-specifications}/exercises/bowling/canonical-data.json +0 -0
  86. data/{common → problem-specifications}/exercises/bowling/description.md +0 -0
  87. data/{common → problem-specifications}/exercises/bowling/metadata.yml +0 -0
  88. data/{common → problem-specifications}/exercises/bracket-push/canonical-data.json +0 -0
  89. data/{common → problem-specifications}/exercises/bracket-push/description.md +0 -0
  90. data/{common → problem-specifications}/exercises/bracket-push/metadata.yml +0 -0
  91. data/{common → problem-specifications}/exercises/change/canonical-data.json +0 -0
  92. data/{common → problem-specifications}/exercises/change/description.md +0 -0
  93. data/{common → problem-specifications}/exercises/change/metadata.yml +0 -0
  94. data/{common → problem-specifications}/exercises/circular-buffer/canonical-data.json +0 -0
  95. data/{common → problem-specifications}/exercises/circular-buffer/description.md +0 -0
  96. data/{common → problem-specifications}/exercises/circular-buffer/metadata.yml +0 -0
  97. data/{common → problem-specifications}/exercises/clock/canonical-data.json +0 -0
  98. data/{common → problem-specifications}/exercises/clock/description.md +0 -0
  99. data/{common → problem-specifications}/exercises/clock/metadata.yml +0 -0
  100. data/{common → problem-specifications}/exercises/collatz-conjecture/canonical-data.json +2 -2
  101. data/{common → problem-specifications}/exercises/collatz-conjecture/description.md +0 -0
  102. data/{common → problem-specifications}/exercises/collatz-conjecture/metadata.yml +0 -0
  103. data/problem-specifications/exercises/complex-numbers/canonical-data.json +270 -0
  104. data/problem-specifications/exercises/complex-numbers/description.md +3 -0
  105. data/problem-specifications/exercises/complex-numbers/metadata.yml +4 -0
  106. data/{common → problem-specifications}/exercises/connect/canonical-data.json +0 -0
  107. data/{common → problem-specifications}/exercises/connect/description.md +0 -0
  108. data/{common → problem-specifications}/exercises/connect/metadata.yml +0 -0
  109. data/{common → problem-specifications}/exercises/counter/.deprecated +1 -1
  110. data/{common → problem-specifications}/exercises/counter/description.md +1 -1
  111. data/{common → problem-specifications}/exercises/counter/metadata.yml +0 -0
  112. data/{common → problem-specifications}/exercises/crypto-square/canonical-data.json +0 -0
  113. data/{common → problem-specifications}/exercises/crypto-square/description.md +0 -0
  114. data/{common → problem-specifications}/exercises/crypto-square/metadata.yml +0 -0
  115. data/{common → problem-specifications}/exercises/custom-set/canonical-data.json +0 -0
  116. data/{common → problem-specifications}/exercises/custom-set/description.md +0 -0
  117. data/{common → problem-specifications}/exercises/custom-set/metadata.yml +0 -0
  118. data/{common → problem-specifications}/exercises/diamond/canonical-data.json +0 -0
  119. data/{common → problem-specifications}/exercises/diamond/description.md +0 -0
  120. data/{common → problem-specifications}/exercises/diamond/metadata.yml +0 -0
  121. data/{common → problem-specifications}/exercises/difference-of-squares/canonical-data.json +0 -0
  122. data/{common → problem-specifications}/exercises/difference-of-squares/description.md +0 -0
  123. data/{common → problem-specifications}/exercises/difference-of-squares/metadata.yml +0 -0
  124. data/{common → problem-specifications}/exercises/diffie-hellman/description.md +0 -0
  125. data/{common → problem-specifications}/exercises/diffie-hellman/metadata.yml +0 -0
  126. data/{common → problem-specifications}/exercises/dominoes/canonical-data.json +0 -0
  127. data/{common → problem-specifications}/exercises/dominoes/description.md +0 -0
  128. data/{common → problem-specifications}/exercises/dominoes/metadata.yml +0 -0
  129. data/{common → problem-specifications}/exercises/dot-dsl/description.md +0 -0
  130. data/{common → problem-specifications}/exercises/dot-dsl/metadata.yml +0 -0
  131. data/{common → problem-specifications}/exercises/error-handling/description.md +0 -0
  132. data/{common → problem-specifications}/exercises/error-handling/metadata.yml +0 -0
  133. data/{common → problem-specifications}/exercises/etl/canonical-data.json +0 -0
  134. data/{common → problem-specifications}/exercises/etl/description.md +0 -0
  135. data/{common → problem-specifications}/exercises/etl/metadata.yml +0 -0
  136. data/{common → problem-specifications}/exercises/flatten-array/canonical-data.json +0 -0
  137. data/{common → problem-specifications}/exercises/flatten-array/description.md +0 -0
  138. data/{common → problem-specifications}/exercises/flatten-array/metadata.yml +0 -0
  139. data/{common → problem-specifications}/exercises/food-chain/canonical-data.json +0 -0
  140. data/{common → problem-specifications}/exercises/food-chain/description.md +0 -0
  141. data/{common → problem-specifications}/exercises/food-chain/metadata.yml +0 -0
  142. data/{common → problem-specifications}/exercises/forth/canonical-data.json +10 -1
  143. data/{common → problem-specifications}/exercises/forth/description.md +0 -0
  144. data/{common → problem-specifications}/exercises/forth/metadata.yml +0 -0
  145. data/{common → problem-specifications}/exercises/gigasecond/canonical-data.json +0 -0
  146. data/{common → problem-specifications}/exercises/gigasecond/description.md +0 -0
  147. data/{common → problem-specifications}/exercises/gigasecond/metadata.yml +0 -0
  148. data/{common → problem-specifications}/exercises/go-counting/description.md +0 -0
  149. data/{common → problem-specifications}/exercises/go-counting/metadata.yml +0 -0
  150. data/{common → problem-specifications}/exercises/grade-school/description.md +0 -0
  151. data/{common → problem-specifications}/exercises/grade-school/metadata.yml +0 -0
  152. data/{common → problem-specifications}/exercises/grains/canonical-data.json +0 -0
  153. data/{common → problem-specifications}/exercises/grains/description.md +0 -0
  154. data/{common → problem-specifications}/exercises/grains/metadata.yml +0 -0
  155. data/{common → problem-specifications}/exercises/grep/canonical-data.json +0 -0
  156. data/{common → problem-specifications}/exercises/grep/description.md +0 -0
  157. data/{common → problem-specifications}/exercises/grep/metadata.yml +0 -0
  158. data/{common → problem-specifications}/exercises/hamming/canonical-data.json +8 -8
  159. data/{common → problem-specifications}/exercises/hamming/description.md +0 -0
  160. data/{common → problem-specifications}/exercises/hamming/metadata.yml +0 -0
  161. data/{common → problem-specifications}/exercises/hangman/description.md +0 -0
  162. data/{common → problem-specifications}/exercises/hangman/metadata.yml +0 -0
  163. data/{common → problem-specifications}/exercises/hello-world/canonical-data.json +0 -0
  164. data/{common → problem-specifications}/exercises/hello-world/description.md +0 -0
  165. data/{common → problem-specifications}/exercises/hello-world/metadata.yml +0 -0
  166. data/{common/exercises/octal → problem-specifications/exercises/hexadecimal}/.deprecated +1 -1
  167. data/{common → problem-specifications}/exercises/hexadecimal/description.md +0 -0
  168. data/{common → problem-specifications}/exercises/hexadecimal/metadata.yml +0 -0
  169. data/{common → problem-specifications}/exercises/house/description.md +0 -0
  170. data/{common → problem-specifications}/exercises/house/metadata.yml +0 -0
  171. data/{common → problem-specifications}/exercises/isogram/canonical-data.json +0 -0
  172. data/{common → problem-specifications}/exercises/isogram/description.md +0 -0
  173. data/{common → problem-specifications}/exercises/isogram/metadata.yml +0 -0
  174. data/{common → problem-specifications}/exercises/kindergarten-garden/canonical-data.json +0 -0
  175. data/{common → problem-specifications}/exercises/kindergarten-garden/description.md +0 -0
  176. data/{common → problem-specifications}/exercises/kindergarten-garden/metadata.yml +0 -0
  177. data/{common → problem-specifications}/exercises/largest-series-product/canonical-data.json +0 -0
  178. data/{common → problem-specifications}/exercises/largest-series-product/description.md +0 -0
  179. data/{common → problem-specifications}/exercises/largest-series-product/metadata.yml +0 -0
  180. data/{common → problem-specifications}/exercises/leap/canonical-data.json +0 -0
  181. data/{common → problem-specifications}/exercises/leap/description.md +0 -0
  182. data/{common → problem-specifications}/exercises/leap/metadata.yml +0 -0
  183. data/{common → problem-specifications}/exercises/ledger/description.md +0 -0
  184. data/{common → problem-specifications}/exercises/ledger/metadata.yml +0 -0
  185. data/{common → problem-specifications}/exercises/lens-person/description.md +0 -0
  186. data/{common → problem-specifications}/exercises/lens-person/metadata.yml +0 -0
  187. data/{common → problem-specifications}/exercises/linked-list/description.md +0 -0
  188. data/{common → problem-specifications}/exercises/linked-list/metadata.yml +0 -0
  189. data/{common → problem-specifications}/exercises/list-ops/canonical-data.json +0 -0
  190. data/{common → problem-specifications}/exercises/list-ops/description.md +0 -0
  191. data/{common → problem-specifications}/exercises/list-ops/metadata.yml +0 -0
  192. data/{common → problem-specifications}/exercises/luhn/canonical-data.json +0 -0
  193. data/{common → problem-specifications}/exercises/luhn/description.md +0 -0
  194. data/{common → problem-specifications}/exercises/luhn/metadata.yml +0 -0
  195. data/{common → problem-specifications}/exercises/markdown/canonical-data.json +0 -0
  196. data/{common → problem-specifications}/exercises/markdown/description.md +0 -0
  197. data/{common → problem-specifications}/exercises/markdown/metadata.yml +0 -0
  198. data/{common → problem-specifications}/exercises/matrix/description.md +0 -0
  199. data/{common → problem-specifications}/exercises/matrix/metadata.yml +0 -0
  200. data/{common → problem-specifications}/exercises/meetup/canonical-data.json +0 -0
  201. data/{common → problem-specifications}/exercises/meetup/description.md +0 -0
  202. data/{common → problem-specifications}/exercises/meetup/metadata.yml +0 -0
  203. data/{common → problem-specifications}/exercises/minesweeper/canonical-data.json +0 -0
  204. data/{common → problem-specifications}/exercises/minesweeper/description.md +0 -0
  205. data/{common → problem-specifications}/exercises/minesweeper/metadata.yml +0 -0
  206. data/{common → problem-specifications}/exercises/nth-prime/canonical-data.json +0 -0
  207. data/{common → problem-specifications}/exercises/nth-prime/description.md +0 -0
  208. data/{common → problem-specifications}/exercises/nth-prime/metadata.yml +0 -0
  209. data/{common → problem-specifications}/exercises/nucleotide-codons/.deprecated +1 -1
  210. data/{common → problem-specifications}/exercises/nucleotide-codons/description.md +0 -0
  211. data/{common → problem-specifications}/exercises/nucleotide-codons/metadata.yml +0 -0
  212. data/{common → problem-specifications}/exercises/nucleotide-count/canonical-data.json +0 -0
  213. data/{common → problem-specifications}/exercises/nucleotide-count/description.md +0 -0
  214. data/{common → problem-specifications}/exercises/nucleotide-count/metadata.yml +0 -0
  215. data/{common → problem-specifications}/exercises/ocr-numbers/canonical-data.json +0 -0
  216. data/{common → problem-specifications}/exercises/ocr-numbers/description.md +0 -0
  217. data/{common → problem-specifications}/exercises/ocr-numbers/metadata.yml +0 -0
  218. data/{common/exercises/hexadecimal → problem-specifications/exercises/octal}/.deprecated +1 -1
  219. data/{common → problem-specifications}/exercises/octal/description.md +0 -0
  220. data/{common → problem-specifications}/exercises/octal/metadata.yml +0 -0
  221. data/{common → problem-specifications}/exercises/paasio/description.md +0 -0
  222. data/{common → problem-specifications}/exercises/paasio/metadata.yml +0 -0
  223. data/{common → problem-specifications}/exercises/palindrome-products/description.md +0 -0
  224. data/{common → problem-specifications}/exercises/palindrome-products/metadata.yml +0 -0
  225. data/{common → problem-specifications}/exercises/pangram/canonical-data.json +2 -2
  226. data/{common → problem-specifications}/exercises/pangram/description.md +2 -2
  227. data/{common → problem-specifications}/exercises/pangram/metadata.yml +0 -0
  228. data/{common → problem-specifications}/exercises/parallel-letter-frequency/description.md +0 -0
  229. data/{common → problem-specifications}/exercises/parallel-letter-frequency/metadata.yml +0 -0
  230. data/{common → problem-specifications}/exercises/pascals-triangle/canonical-data.json +0 -0
  231. data/{common → problem-specifications}/exercises/pascals-triangle/description.md +0 -0
  232. data/{common → problem-specifications}/exercises/pascals-triangle/metadata.yml +0 -0
  233. data/{common → problem-specifications}/exercises/perfect-numbers/canonical-data.json +0 -0
  234. data/{common → problem-specifications}/exercises/perfect-numbers/description.md +0 -0
  235. data/{common → problem-specifications}/exercises/perfect-numbers/metadata.yml +0 -0
  236. data/{common → problem-specifications}/exercises/phone-number/canonical-data.json +0 -0
  237. data/{common → problem-specifications}/exercises/phone-number/description.md +12 -10
  238. data/{common → problem-specifications}/exercises/phone-number/metadata.yml +0 -0
  239. data/{common → problem-specifications}/exercises/pig-latin/canonical-data.json +0 -0
  240. data/{common → problem-specifications}/exercises/pig-latin/description.md +0 -0
  241. data/{common → problem-specifications}/exercises/pig-latin/metadata.yml +0 -0
  242. data/{common → problem-specifications}/exercises/point-mutations/.deprecated +1 -1
  243. data/{common → problem-specifications}/exercises/point-mutations/description.md +0 -0
  244. data/{common → problem-specifications}/exercises/point-mutations/metadata.yml +0 -0
  245. data/{common → problem-specifications}/exercises/poker/canonical-data.json +0 -0
  246. data/{common → problem-specifications}/exercises/poker/description.md +0 -0
  247. data/{common → problem-specifications}/exercises/poker/metadata.yml +0 -0
  248. data/{common → problem-specifications}/exercises/pov/canonical-data.json +0 -0
  249. data/{common → problem-specifications}/exercises/pov/description.md +0 -0
  250. data/{common → problem-specifications}/exercises/pov/metadata.yml +0 -0
  251. data/{common → problem-specifications}/exercises/prime-factors/canonical-data.json +0 -0
  252. data/{common → problem-specifications}/exercises/prime-factors/description.md +0 -0
  253. data/{common → problem-specifications}/exercises/prime-factors/metadata.yml +0 -0
  254. data/{common → problem-specifications}/exercises/protein-translation/description.md +0 -0
  255. data/{common → problem-specifications}/exercises/protein-translation/metadata.yml +0 -0
  256. data/{common → problem-specifications}/exercises/proverb/description.md +0 -0
  257. data/{common → problem-specifications}/exercises/proverb/metadata.yml +0 -0
  258. data/{common → problem-specifications}/exercises/pythagorean-triplet/description.md +0 -0
  259. data/{common → problem-specifications}/exercises/pythagorean-triplet/metadata.yml +0 -0
  260. data/{common → problem-specifications}/exercises/queen-attack/canonical-data.json +0 -0
  261. data/{common → problem-specifications}/exercises/queen-attack/description.md +0 -0
  262. data/{common → problem-specifications}/exercises/queen-attack/metadata.yml +0 -0
  263. data/{common → problem-specifications}/exercises/rail-fence-cipher/canonical-data.json +0 -0
  264. data/{common → problem-specifications}/exercises/rail-fence-cipher/description.md +0 -0
  265. data/{common → problem-specifications}/exercises/rail-fence-cipher/metadata.yml +0 -0
  266. data/{common → problem-specifications}/exercises/raindrops/canonical-data.json +0 -0
  267. data/{common → problem-specifications}/exercises/raindrops/description.md +0 -0
  268. data/{common → problem-specifications}/exercises/raindrops/metadata.yml +0 -0
  269. data/{common → problem-specifications}/exercises/react/canonical-data.json +0 -0
  270. data/{common → problem-specifications}/exercises/react/description.md +0 -0
  271. data/{common → problem-specifications}/exercises/react/metadata.yml +0 -0
  272. data/{common → problem-specifications}/exercises/rectangles/canonical-data.json +0 -0
  273. data/{common → problem-specifications}/exercises/rectangles/description.md +0 -0
  274. data/{common → problem-specifications}/exercises/rectangles/metadata.yml +0 -0
  275. data/{common → problem-specifications}/exercises/rna-transcription/canonical-data.json +0 -0
  276. data/{common → problem-specifications}/exercises/rna-transcription/description.md +0 -0
  277. data/{common → problem-specifications}/exercises/rna-transcription/metadata.yml +0 -0
  278. data/{common → problem-specifications}/exercises/robot-name/description.md +0 -0
  279. data/{common → problem-specifications}/exercises/robot-name/metadata.yml +0 -0
  280. data/{common → problem-specifications}/exercises/robot-simulator/canonical-data.json +0 -0
  281. data/{common → problem-specifications}/exercises/robot-simulator/description.md +0 -0
  282. data/{common → problem-specifications}/exercises/robot-simulator/metadata.yml +0 -0
  283. data/{common → problem-specifications}/exercises/roman-numerals/canonical-data.json +0 -0
  284. data/{common → problem-specifications}/exercises/roman-numerals/description.md +0 -0
  285. data/{common → problem-specifications}/exercises/roman-numerals/metadata.yml +0 -0
  286. data/{common → problem-specifications}/exercises/rotational-cipher/canonical-data.json +0 -0
  287. data/{common → problem-specifications}/exercises/rotational-cipher/description.md +0 -0
  288. data/{common → problem-specifications}/exercises/rotational-cipher/metadata.yml +0 -0
  289. data/{common → problem-specifications}/exercises/run-length-encoding/canonical-data.json +0 -0
  290. data/{common → problem-specifications}/exercises/run-length-encoding/description.md +0 -0
  291. data/{common → problem-specifications}/exercises/run-length-encoding/metadata.yml +0 -0
  292. data/{common → problem-specifications}/exercises/saddle-points/canonical-data.json +0 -0
  293. data/{common → problem-specifications}/exercises/saddle-points/description.md +0 -0
  294. data/{common → problem-specifications}/exercises/saddle-points/metadata.yml +0 -0
  295. data/{common → problem-specifications}/exercises/say/canonical-data.json +0 -0
  296. data/{common → problem-specifications}/exercises/say/description.md +0 -0
  297. data/{common → problem-specifications}/exercises/say/metadata.yml +0 -0
  298. data/{common → problem-specifications}/exercises/scale-generator/description.md +0 -0
  299. data/{common → problem-specifications}/exercises/scale-generator/metadata.yml +0 -0
  300. data/{common → problem-specifications}/exercises/scrabble-score/canonical-data.json +0 -0
  301. data/{common → problem-specifications}/exercises/scrabble-score/description.md +0 -0
  302. data/{common → problem-specifications}/exercises/scrabble-score/metadata.yml +0 -0
  303. data/{common → problem-specifications}/exercises/secret-handshake/canonical-data.json +2 -2
  304. data/{common → problem-specifications}/exercises/secret-handshake/description.md +0 -0
  305. data/{common → problem-specifications}/exercises/secret-handshake/metadata.yml +0 -0
  306. data/{common → problem-specifications}/exercises/series/description.md +0 -0
  307. data/{common → problem-specifications}/exercises/series/metadata.yml +0 -0
  308. data/{common → problem-specifications}/exercises/sgf-parsing/description.md +0 -0
  309. data/{common → problem-specifications}/exercises/sgf-parsing/metadata.yml +0 -0
  310. data/{common → problem-specifications}/exercises/sieve/canonical-data.json +0 -0
  311. data/{common → problem-specifications}/exercises/sieve/description.md +0 -0
  312. data/{common → problem-specifications}/exercises/sieve/metadata.yml +0 -0
  313. data/{common → problem-specifications}/exercises/simple-cipher/description.md +0 -0
  314. data/{common → problem-specifications}/exercises/simple-cipher/metadata.yml +0 -0
  315. data/{common → problem-specifications}/exercises/simple-linked-list/description.md +0 -0
  316. data/{common → problem-specifications}/exercises/simple-linked-list/metadata.yml +0 -0
  317. data/{common → problem-specifications}/exercises/space-age/canonical-data.json +0 -0
  318. data/{common → problem-specifications}/exercises/space-age/description.md +0 -0
  319. data/{common → problem-specifications}/exercises/space-age/metadata.yml +0 -0
  320. data/problem-specifications/exercises/spiral-matrix/canonical-data.json +52 -0
  321. data/problem-specifications/exercises/spiral-matrix/description.md +22 -0
  322. data/problem-specifications/exercises/spiral-matrix/metadata.yml +4 -0
  323. data/{common → problem-specifications}/exercises/strain/description.md +0 -0
  324. data/{common → problem-specifications}/exercises/strain/metadata.yml +0 -0
  325. data/{common → problem-specifications}/exercises/sublist/canonical-data.json +0 -0
  326. data/{common → problem-specifications}/exercises/sublist/description.md +0 -0
  327. data/{common → problem-specifications}/exercises/sublist/metadata.yml +0 -0
  328. data/{common → problem-specifications}/exercises/sum-of-multiples/canonical-data.json +0 -0
  329. data/{common → problem-specifications}/exercises/sum-of-multiples/description.md +0 -0
  330. data/{common → problem-specifications}/exercises/sum-of-multiples/metadata.yml +0 -0
  331. data/{common → problem-specifications}/exercises/tournament/canonical-data.json +0 -0
  332. data/{common → problem-specifications}/exercises/tournament/description.md +0 -0
  333. data/{common → problem-specifications}/exercises/tournament/metadata.yml +0 -0
  334. data/{common → problem-specifications}/exercises/transpose/canonical-data.json +0 -0
  335. data/{common → problem-specifications}/exercises/transpose/description.md +0 -0
  336. data/{common → problem-specifications}/exercises/transpose/metadata.yml +0 -0
  337. data/{common → problem-specifications}/exercises/tree-building/description.md +0 -0
  338. data/{common → problem-specifications}/exercises/tree-building/metadata.yml +0 -0
  339. data/{common → problem-specifications}/exercises/triangle/canonical-data.json +1 -1
  340. data/{common → problem-specifications}/exercises/triangle/description.md +0 -0
  341. data/{common → problem-specifications}/exercises/triangle/metadata.yml +0 -0
  342. data/{common → problem-specifications}/exercises/trinary/.deprecated +1 -1
  343. data/{common → problem-specifications}/exercises/trinary/canonical-data.json +0 -0
  344. data/{common → problem-specifications}/exercises/trinary/description.md +0 -0
  345. data/{common → problem-specifications}/exercises/trinary/metadata.yml +0 -0
  346. data/{common → problem-specifications}/exercises/twelve-days/description.md +0 -0
  347. data/{common → problem-specifications}/exercises/twelve-days/metadata.yml +0 -0
  348. data/{common → problem-specifications}/exercises/two-bucket/canonical-data.json +0 -0
  349. data/{common → problem-specifications}/exercises/two-bucket/description.md +0 -0
  350. data/{common → problem-specifications}/exercises/two-bucket/metadata.yml +0 -0
  351. data/{common → problem-specifications}/exercises/two-fer/canonical-data.json +0 -0
  352. data/{common → problem-specifications}/exercises/two-fer/description.md +0 -0
  353. data/{common → problem-specifications}/exercises/two-fer/metadata.yml +0 -0
  354. data/{common → problem-specifications}/exercises/variable-length-quantity/canonical-data.json +0 -0
  355. data/{common → problem-specifications}/exercises/variable-length-quantity/description.md +0 -0
  356. data/{common → problem-specifications}/exercises/variable-length-quantity/metadata.yml +0 -0
  357. data/{common → problem-specifications}/exercises/word-count/canonical-data.json +0 -0
  358. data/{common → problem-specifications}/exercises/word-count/description.md +0 -0
  359. data/{common → problem-specifications}/exercises/word-count/metadata.yml +0 -0
  360. data/{common → problem-specifications}/exercises/word-search/canonical-data.json +0 -0
  361. data/{common → problem-specifications}/exercises/word-search/description.md +0 -0
  362. data/{common → problem-specifications}/exercises/word-search/metadata.yml +0 -0
  363. data/{common → problem-specifications}/exercises/wordy/canonical-data.json +0 -0
  364. data/{common → problem-specifications}/exercises/wordy/description.md +0 -0
  365. data/{common → problem-specifications}/exercises/wordy/metadata.yml +0 -0
  366. data/{common → problem-specifications}/exercises/zebra-puzzle/description.md +0 -0
  367. data/{common → problem-specifications}/exercises/zebra-puzzle/metadata.yml +0 -0
  368. data/{common → problem-specifications}/exercises/zipper/description.md +0 -0
  369. data/{common → problem-specifications}/exercises/zipper/metadata.yml +0 -0
  370. data/{common → problem-specifications}/package.json +2 -2
  371. data/{common → problem-specifications}/yarn.lock +0 -0
  372. data/trackler.gemspec +1 -1
  373. data/tracks/bash/config.json +7 -0
  374. data/tracks/bash/exercises/pangram/example.sh +7 -0
  375. data/tracks/bash/exercises/pangram/pangram_tests.sh +47 -0
  376. data/tracks/c/config.json +19 -0
  377. data/tracks/c/exercises/acronym/makefile +15 -0
  378. data/tracks/c/exercises/acronym/src/example.c +44 -0
  379. data/tracks/c/exercises/acronym/src/example.h +6 -0
  380. data/tracks/c/exercises/acronym/test/test_acronym.c +68 -0
  381. data/tracks/c/exercises/acronym/test/vendor/unity.c +1300 -0
  382. data/tracks/c/exercises/acronym/test/vendor/unity.h +274 -0
  383. data/tracks/c/exercises/acronym/test/vendor/unity_internals.h +701 -0
  384. data/tracks/c/exercises/isogram/makefile +15 -0
  385. data/tracks/c/exercises/isogram/src/example.c +26 -0
  386. data/tracks/c/exercises/isogram/src/example.h +8 -0
  387. data/tracks/c/exercises/isogram/test/test_isogram.c +66 -0
  388. data/tracks/c/exercises/isogram/test/vendor/unity.c +1300 -0
  389. data/tracks/c/exercises/isogram/test/vendor/unity.h +274 -0
  390. data/tracks/c/exercises/isogram/test/vendor/unity_internals.h +701 -0
  391. data/tracks/{dartlang → chapel}/.gitignore +0 -0
  392. data/tracks/{dartlang → chapel}/.travis.yml +0 -0
  393. data/tracks/{dartlang → chapel}/LICENSE +0 -0
  394. data/tracks/chapel/README.md +11 -0
  395. data/tracks/{dartlang → chapel}/bin/fetch-configlet +0 -0
  396. data/tracks/{dartlang → chapel}/config.json +3 -3
  397. data/tracks/{dartlang → chapel}/docs/ABOUT.md +0 -0
  398. data/tracks/{dartlang → chapel}/docs/EXERCISE_README_INSERT.md +0 -0
  399. data/tracks/{dartlang → chapel}/docs/INSTALLATION.md +0 -0
  400. data/tracks/{dartlang → chapel}/docs/LEARNING.md +0 -0
  401. data/tracks/{dartlang → chapel}/docs/RESOURCES.md +0 -0
  402. data/tracks/{dartlang → chapel}/docs/TESTS.md +0 -0
  403. data/tracks/{dartlang/img → chapel/exercises}/.keep +0 -0
  404. data/tracks/chapel/img/.keep +0 -0
  405. data/tracks/clojurescript/README.md +1 -1
  406. data/tracks/clojurescript/config.json +1 -1
  407. data/tracks/coffeescript/config.json +1 -1
  408. data/tracks/coldfusion/config.json +1 -1
  409. data/tracks/coq/README.md +1 -1
  410. data/tracks/coq/config.json +1 -1
  411. data/tracks/coq/docs/EXERCISE_README_INSERT.md +1 -1
  412. data/tracks/cpp/CMakeLists.txt +1 -0
  413. data/tracks/cpp/config.json +8 -0
  414. data/tracks/cpp/exercises/allergies/CMakeLists.txt +52 -0
  415. data/tracks/cpp/exercises/allergies/allergies_test.cpp +148 -0
  416. data/tracks/cpp/exercises/allergies/example.cpp +30 -0
  417. data/tracks/cpp/exercises/allergies/example.h +36 -0
  418. data/tracks/csharp/build.ps1 +2 -2
  419. data/tracks/csharp/build.sh +2 -2
  420. data/tracks/csharp/exercises/all-your-base/AllYourBase.cs +1 -1
  421. data/tracks/csharp/exercises/all-your-base/AllYourBaseTest.cs +103 -102
  422. data/tracks/csharp/exercises/all-your-base/Example.cs +1 -1
  423. data/tracks/csharp/exercises/beer-song/BeerSongTest.cs +322 -322
  424. data/tracks/csharp/exercises/bob/BobTest.cs +2 -0
  425. data/tracks/csharp/exercises/book-store/BookStore.cs +1 -1
  426. data/tracks/csharp/exercises/book-store/BookStoreTest.cs +42 -28
  427. data/tracks/csharp/exercises/book-store/Example.cs +5 -5
  428. data/tracks/csharp/exercises/food-chain/FoodChainTest.cs +96 -96
  429. data/tracks/csharp/exercises/nth-prime/NthPrimeTest.cs +1 -2
  430. data/tracks/csharp/exercises/perfect-numbers/PerfectNumbersTest.cs +2 -3
  431. data/tracks/csharp/exercises/transpose/Example.cs +14 -14
  432. data/tracks/csharp/exercises/transpose/TransposeTest.cs +34 -44
  433. data/tracks/csharp/exercises/wordy/WordyTest.cs +2 -3
  434. data/tracks/csharp/generators/Exercise.cs +23 -0
  435. data/tracks/csharp/generators/ExerciseCollection.cs +33 -0
  436. data/tracks/csharp/generators/Exercises/Acronym.cs +6 -0
  437. data/tracks/csharp/generators/Exercises/AllYourBase.cs +22 -0
  438. data/tracks/csharp/generators/Exercises/AtbashCipher.cs +6 -0
  439. data/tracks/csharp/generators/Exercises/BeerSong.cs +11 -0
  440. data/tracks/csharp/generators/Exercises/Bob.cs +2 -16
  441. data/tracks/csharp/generators/Exercises/BookStore.cs +16 -0
  442. data/tracks/csharp/generators/Exercises/FoodChain.cs +16 -0
  443. data/tracks/csharp/generators/Exercises/HelloWorld.cs +6 -0
  444. data/tracks/csharp/generators/Exercises/Isogram.cs +6 -0
  445. data/tracks/csharp/generators/Exercises/Leap.cs +11 -0
  446. data/tracks/csharp/generators/Exercises/Luhn.cs +11 -0
  447. data/tracks/csharp/generators/Exercises/NthPrime.cs +13 -0
  448. data/tracks/csharp/generators/Exercises/PerfectNumbers.cs +21 -0
  449. data/tracks/csharp/generators/Exercises/PigLatin.cs +6 -0
  450. data/tracks/csharp/generators/Exercises/Raindrops.cs +6 -0
  451. data/tracks/csharp/generators/Exercises/RomanNumerals.cs +15 -0
  452. data/tracks/csharp/generators/Exercises/RotationalCipher.cs +6 -0
  453. data/tracks/csharp/generators/Exercises/Transpose.cs +19 -0
  454. data/tracks/csharp/generators/Exercises/Wordy.cs +13 -0
  455. data/tracks/csharp/generators/Generators.csproj +8 -2
  456. data/tracks/csharp/generators/{Data → Input}/CanonicalData.cs +1 -3
  457. data/tracks/csharp/generators/Input/CanonicalDataCase.cs +37 -0
  458. data/tracks/csharp/generators/Input/CanonicalDataCaseJsonConverter.cs +43 -0
  459. data/tracks/csharp/generators/{Data → Input}/CanonicalDataCasesJsonConverter.cs +6 -11
  460. data/tracks/csharp/generators/{Data → Input}/CanonicalDataParser.cs +1 -1
  461. data/tracks/csharp/generators/Output/BooleanTestMethodGenerator.cs +13 -0
  462. data/tracks/csharp/generators/Output/EqualityTestMethodGenerator.cs +10 -0
  463. data/tracks/csharp/generators/Output/ExceptionTestMethodGenerator.cs +12 -0
  464. data/tracks/csharp/generators/Output/NameExtensions.cs +35 -0
  465. data/tracks/csharp/generators/Output/TestClass.cs +12 -0
  466. data/tracks/csharp/generators/Output/TestClass.liquid +20 -0
  467. data/tracks/csharp/generators/Output/TestClassFile.cs +22 -0
  468. data/tracks/csharp/generators/Output/TestClassGenerator.cs +30 -0
  469. data/tracks/csharp/generators/Output/TestClassRenderer.cs +26 -0
  470. data/tracks/csharp/generators/Output/TestMethod.cs +10 -0
  471. data/tracks/csharp/generators/Output/TestMethodGenerator.cs +95 -0
  472. data/tracks/csharp/generators/Output/UnescapedValue.cs +11 -0
  473. data/tracks/csharp/generators/Output/ValueFormatter.cs +100 -0
  474. data/tracks/csharp/generators/Program.cs +10 -42
  475. data/tracks/csharp/generators/Properties/launchSettings.json +7 -0
  476. data/tracks/csharp/generators/{Methods/TestedMethodType.cs → TestedMethodType.cs} +1 -1
  477. data/tracks/{dlang → d}/.gitignore +0 -0
  478. data/tracks/{dlang → d}/.travis.yml +0 -0
  479. data/tracks/{dlang → d}/LICENSE +0 -0
  480. data/tracks/{dlang → d}/README.md +1 -1
  481. data/tracks/{dlang → d}/bin/fetch-configlet +0 -0
  482. data/tracks/{dlang → d}/bin/test-all-exercises +0 -0
  483. data/tracks/{dlang → d}/bin/test-exercise +0 -0
  484. data/tracks/{dlang → d}/config.json +2 -2
  485. data/tracks/{dlang → d}/docs/ABOUT.md +0 -0
  486. data/tracks/{dlang → d}/docs/EXERCISE_README_INSERT.md +0 -0
  487. data/tracks/{dlang → d}/docs/INSTALLATION.md +0 -0
  488. data/tracks/{dlang → d}/docs/LEARNING.md +0 -0
  489. data/tracks/{dlang → d}/docs/RESOURCES.md +0 -0
  490. data/tracks/{dlang → d}/docs/TESTS.md +0 -0
  491. data/tracks/{dlang → d}/exercises/bob/dub.sdl +0 -0
  492. data/tracks/{dlang → d}/exercises/bob/example/bob.d +0 -0
  493. data/tracks/{dlang → d}/exercises/bob/source/bob.d +0 -0
  494. data/tracks/{dlang → d}/exercises/circular-buffer/dub.sdl +0 -0
  495. data/tracks/{dlang → d}/exercises/circular-buffer/example/circular_buffer.d +1 -1
  496. data/tracks/{dlang → d}/exercises/circular-buffer/source/circular_buffer.d +2 -2
  497. data/tracks/{dlang → d}/exercises/crypto-square/dub.sdl +0 -0
  498. data/tracks/{dlang → d}/exercises/crypto-square/example/crypto_square.d +0 -0
  499. data/tracks/{dlang → d}/exercises/crypto-square/source/crypto_square.d +0 -0
  500. data/tracks/{dlang → d}/exercises/difference-of-squares/dub.sdl +0 -0
  501. data/tracks/{dlang → d}/exercises/difference-of-squares/example/difference_of_squares.d +0 -0
  502. data/tracks/{dlang → d}/exercises/difference-of-squares/source/difference_of_squares.d +0 -0
  503. data/tracks/{dlang → d}/exercises/etl/dub.sdl +0 -0
  504. data/tracks/{dlang → d}/exercises/etl/example/etl.d +2 -1
  505. data/tracks/{dlang → d}/exercises/etl/source/etl.d +0 -0
  506. data/tracks/{dlang → d}/exercises/gigasecond/dub.sdl +0 -0
  507. data/tracks/{dlang → d}/exercises/gigasecond/example/gigasecond.d +0 -0
  508. data/tracks/{dlang → d}/exercises/gigasecond/source/gigasecond.d +0 -0
  509. data/tracks/{dlang → d}/exercises/hamming/dub.sdl +0 -0
  510. data/tracks/{dlang → d}/exercises/hamming/example/hamming.d +2 -1
  511. data/tracks/{dlang → d}/exercises/hamming/source/hamming.d +2 -0
  512. data/tracks/{dlang → d}/exercises/hello-world/dub.sdl +0 -0
  513. data/tracks/{dlang → d}/exercises/hello-world/example/hello_world.d +0 -0
  514. data/tracks/{dlang → d}/exercises/hello-world/source/hello_world.d +0 -0
  515. data/tracks/{dlang → d}/exercises/leap/dub.sdl +0 -0
  516. data/tracks/{dlang → d}/exercises/leap/example/leap.d +0 -0
  517. data/tracks/{dlang → d}/exercises/leap/source/leap.d +0 -0
  518. data/tracks/{dlang → d}/exercises/nucleotide-count/dub.sdl +0 -0
  519. data/tracks/{dlang → d}/exercises/nucleotide-count/example/nucleotide_count.d +2 -1
  520. data/tracks/{dlang → d}/exercises/nucleotide-count/source/nucleotide_count.d +2 -0
  521. data/tracks/{dlang → d}/exercises/pangram/dub.sdl +0 -0
  522. data/tracks/{dlang → d}/exercises/pangram/example/pangram.d +0 -0
  523. data/tracks/{dlang → d}/exercises/pangram/source/pangram.d +0 -0
  524. data/tracks/{dlang → d}/exercises/raindrops/dub.sdl +0 -0
  525. data/tracks/{dlang → d}/exercises/raindrops/example/raindrops.d +0 -0
  526. data/tracks/{dlang → d}/exercises/raindrops/source/raindrops.d +0 -0
  527. data/tracks/{dlang → d}/exercises/react/dub.sdl +0 -0
  528. data/tracks/{dlang → d}/exercises/react/example/react.d +0 -0
  529. data/tracks/{dlang → d}/exercises/react/source/react.d +0 -0
  530. data/tracks/{dlang → d}/exercises/rna-transcription/dub.sdl +0 -0
  531. data/tracks/{dlang → d}/exercises/rna-transcription/example/rna_transcription.d +4 -1
  532. data/tracks/{dlang → d}/exercises/rna-transcription/source/rna_transcription.d +1 -1
  533. data/tracks/{dlang → d}/exercises/robot-name/dub.sdl +0 -0
  534. data/tracks/{dlang → d}/exercises/robot-name/example/robot_name.d +0 -0
  535. data/tracks/{dlang → d}/exercises/robot-name/source/robot_name.d +0 -0
  536. data/tracks/{dlang → d}/exercises/roman-numerals/dub.sdl +0 -0
  537. data/tracks/{dlang → d}/exercises/roman-numerals/example/roman_numerals.d +0 -0
  538. data/tracks/{dlang → d}/exercises/roman-numerals/source/roman_numerals.d +0 -0
  539. data/tracks/{dlang → d}/exercises/series/dub.sdl +0 -0
  540. data/tracks/{dlang → d}/exercises/series/example/series.d +1 -1
  541. data/tracks/{dlang → d}/exercises/series/source/series.d +1 -1
  542. data/tracks/{dlang → d}/exercises/triangle/dub.sdl +0 -0
  543. data/tracks/{dlang → d}/exercises/triangle/example/triangle.d +1 -2
  544. data/tracks/{dlang → d}/exercises/triangle/source/triangle.d +1 -3
  545. data/tracks/{dlang → d}/img/icon.png +0 -0
  546. data/tracks/{dartlang → dart}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  547. data/tracks/dart/.gitignore +24 -0
  548. data/tracks/dart/.travis.yml +27 -0
  549. data/tracks/dart/LICENSE +21 -0
  550. data/tracks/{dartlang → dart}/README.md +1 -1
  551. data/tracks/dart/analysis_options.yaml +7 -0
  552. data/tracks/dart/bin/fetch-configlet +32 -0
  553. data/tracks/dart/config.json +79 -0
  554. data/tracks/dart/docs/ABOUT.md +0 -0
  555. data/tracks/dart/docs/EXERCISE_README_INSERT.md +0 -0
  556. data/tracks/dart/docs/INSTALLATION.md +0 -0
  557. data/tracks/dart/docs/LEARNING.md +0 -0
  558. data/tracks/dart/docs/RESOURCES.md +0 -0
  559. data/tracks/dart/docs/TESTS.md +0 -0
  560. data/tracks/dart/exercises/bob/lib/bob.dart +3 -0
  561. data/tracks/dart/exercises/bob/lib/example.dart +17 -0
  562. data/tracks/dart/exercises/bob/pubspec.lock +281 -0
  563. data/tracks/dart/exercises/bob/pubspec.yaml +3 -0
  564. data/tracks/dart/exercises/bob/test/bob_test.dart +118 -0
  565. data/tracks/dart/exercises/difference-of-squares/lib/difference_of_squares.dart +3 -0
  566. data/tracks/dart/exercises/difference-of-squares/lib/example.dart +13 -0
  567. data/tracks/dart/exercises/difference-of-squares/pubspec.lock +281 -0
  568. data/tracks/dart/exercises/difference-of-squares/pubspec.yaml +3 -0
  569. data/tracks/dart/exercises/difference-of-squares/test/difference_of_squares_test.dart +50 -0
  570. data/tracks/dart/exercises/gigasecond/lib/example.dart +7 -0
  571. data/tracks/dart/exercises/gigasecond/lib/gigasecond.dart +3 -0
  572. data/tracks/dart/exercises/gigasecond/pubspec.lock +281 -0
  573. data/tracks/dart/exercises/gigasecond/pubspec.yaml +3 -0
  574. data/tracks/dart/exercises/gigasecond/test/gigasecond_test.dart +39 -0
  575. data/tracks/dart/exercises/hamming/lib/example.dart +17 -0
  576. data/tracks/dart/exercises/hamming/lib/hamming.dart +3 -0
  577. data/tracks/dart/exercises/hamming/pubspec.lock +281 -0
  578. data/tracks/dart/exercises/hamming/pubspec.yaml +3 -0
  579. data/tracks/dart/exercises/hamming/test/hamming_test.dart +54 -0
  580. data/tracks/dart/exercises/hello-world/lib/example.dart +3 -0
  581. data/tracks/dart/exercises/hello-world/lib/hello_world.dart +5 -0
  582. data/tracks/dart/exercises/hello-world/pubspec.lock +281 -0
  583. data/tracks/dart/exercises/hello-world/pubspec.yaml +3 -0
  584. data/tracks/dart/exercises/hello-world/test/hello_world_test.dart +24 -0
  585. data/tracks/dart/exercises/leap/lib/example.dart +13 -0
  586. data/tracks/dart/exercises/leap/lib/leap.dart +3 -0
  587. data/tracks/dart/exercises/leap/pubspec.lock +281 -0
  588. data/tracks/dart/exercises/leap/pubspec.yaml +3 -0
  589. data/tracks/dart/exercises/leap/test/leap_test.dart +30 -0
  590. data/tracks/dart/exercises/rna-transcription/lib/example.dart +18 -0
  591. data/tracks/dart/exercises/rna-transcription/lib/rna_transcription.dart +3 -0
  592. data/tracks/dart/exercises/rna-transcription/pubspec.lock +281 -0
  593. data/tracks/dart/exercises/rna-transcription/pubspec.yaml +3 -0
  594. data/tracks/dart/exercises/rna-transcription/test/rna_transcription_test.dart +48 -0
  595. data/tracks/dart/img/.keep +0 -0
  596. data/tracks/dart/img/icon.png +0 -0
  597. data/tracks/dart/img/icon.svg +37 -0
  598. data/tracks/dart/pubspec.lock +287 -0
  599. data/tracks/dart/pubspec.yaml +8 -0
  600. data/tracks/dart/test/exercises_test.dart +90 -0
  601. data/tracks/dart/tool/create-exercise +124 -0
  602. data/tracks/delphi/README.md +1 -1
  603. data/tracks/delphi/exercises/bank-account/uBankAccountTests.pas +12 -10
  604. data/tracks/delphi/exercises/hamming/uHammingExample.pas +5 -5
  605. data/tracks/delphi/exercises/hamming/uHammingTests.pas +46 -48
  606. data/tracks/ecmascript/.babelrc +3 -0
  607. data/tracks/ecmascript/config.json +25 -1
  608. data/tracks/ecmascript/exercises/accumulate/package.json +59 -11
  609. data/tracks/ecmascript/exercises/acronym/package.json +59 -11
  610. data/tracks/ecmascript/exercises/all-your-base/package.json +59 -11
  611. data/tracks/ecmascript/exercises/allergies/package.json +59 -11
  612. data/tracks/ecmascript/exercises/alphametics/alphametics.spec.js +95 -0
  613. data/tracks/ecmascript/exercises/alphametics/example.js +99 -0
  614. data/tracks/ecmascript/exercises/alphametics/package.json +122 -0
  615. data/tracks/ecmascript/exercises/anagram/package.json +59 -11
  616. data/tracks/ecmascript/exercises/atbash-cipher/package.json +59 -11
  617. data/tracks/ecmascript/exercises/beer-song/package.json +59 -11
  618. data/tracks/ecmascript/exercises/binary-search-tree/package.json +59 -11
  619. data/tracks/ecmascript/exercises/binary-search/package.json +59 -11
  620. data/tracks/ecmascript/exercises/binary/package.json +59 -11
  621. data/tracks/ecmascript/exercises/bob/package.json +59 -11
  622. data/tracks/ecmascript/exercises/bracket-push/package.json +59 -11
  623. data/tracks/ecmascript/exercises/circular-buffer/package.json +59 -11
  624. data/tracks/ecmascript/exercises/clock/package.json +59 -11
  625. data/tracks/ecmascript/exercises/connect/package.json +59 -11
  626. data/tracks/ecmascript/exercises/crypto-square/package.json +59 -11
  627. data/tracks/ecmascript/exercises/custom-set/package.json +59 -11
  628. data/tracks/ecmascript/exercises/diamond/package.json +59 -11
  629. data/tracks/ecmascript/exercises/difference-of-squares/package.json +59 -11
  630. data/tracks/ecmascript/exercises/etl/package.json +59 -11
  631. data/tracks/ecmascript/exercises/flatten-array/example.js +11 -0
  632. data/tracks/ecmascript/exercises/flatten-array/flatten-array.spec.js +41 -0
  633. data/tracks/ecmascript/exercises/flatten-array/package.json +74 -0
  634. data/tracks/ecmascript/exercises/food-chain/package.json +59 -11
  635. data/tracks/ecmascript/exercises/gigasecond/package.json +59 -11
  636. data/tracks/ecmascript/exercises/grade-school/package.json +59 -11
  637. data/tracks/ecmascript/exercises/grains/package.json +59 -11
  638. data/tracks/ecmascript/exercises/hamming/package.json +59 -11
  639. data/tracks/ecmascript/exercises/hello-world/package.json +59 -11
  640. data/tracks/ecmascript/exercises/hexadecimal/package.json +59 -11
  641. data/tracks/ecmascript/exercises/isogram/package.json +59 -11
  642. data/tracks/ecmascript/exercises/kindergarten-garden/package.json +59 -11
  643. data/tracks/ecmascript/exercises/largest-series-product/package.json +59 -11
  644. data/tracks/ecmascript/exercises/leap/package.json +59 -11
  645. data/tracks/ecmascript/exercises/linked-list/package.json +59 -11
  646. data/tracks/ecmascript/exercises/list-ops/example.js +77 -0
  647. data/tracks/ecmascript/exercises/list-ops/list-ops.spec.js +133 -0
  648. data/tracks/ecmascript/exercises/list-ops/package.json +74 -0
  649. data/tracks/ecmascript/exercises/luhn/package.json +59 -11
  650. data/tracks/ecmascript/exercises/matrix/package.json +59 -11
  651. data/tracks/ecmascript/exercises/meetup/package.json +59 -11
  652. data/tracks/ecmascript/exercises/nth-prime/package.json +59 -11
  653. data/tracks/ecmascript/exercises/ocr-numbers/package.json +59 -11
  654. data/tracks/ecmascript/exercises/octal/package.json +59 -11
  655. data/tracks/ecmascript/exercises/package.json +6 -8
  656. data/tracks/ecmascript/exercises/palindrome-products/package.json +59 -11
  657. data/tracks/ecmascript/exercises/pangram/package.json +59 -11
  658. data/tracks/ecmascript/exercises/pascals-triangle/package.json +59 -11
  659. data/tracks/ecmascript/exercises/perfect-numbers/package.json +59 -11
  660. data/tracks/ecmascript/exercises/phone-number/package.json +59 -11
  661. data/tracks/ecmascript/exercises/pig-latin/package.json +59 -11
  662. data/tracks/ecmascript/exercises/prime-factors/package.json +59 -11
  663. data/tracks/ecmascript/exercises/pythagorean-triplet/package.json +59 -11
  664. data/tracks/ecmascript/exercises/queen-attack/package.json +59 -11
  665. data/tracks/ecmascript/exercises/raindrops/package.json +59 -11
  666. data/tracks/ecmascript/exercises/rna-transcription/package.json +59 -11
  667. data/tracks/ecmascript/exercises/robot-name/package.json +59 -11
  668. data/tracks/ecmascript/exercises/robot-simulator/package.json +59 -11
  669. data/tracks/ecmascript/exercises/roman-numerals/package.json +59 -11
  670. data/tracks/ecmascript/exercises/saddle-points/package.json +59 -11
  671. data/tracks/ecmascript/exercises/say/package.json +59 -11
  672. data/tracks/ecmascript/exercises/scrabble-score/package.json +59 -11
  673. data/tracks/ecmascript/exercises/secret-handshake/package.json +59 -11
  674. data/tracks/ecmascript/exercises/series/package.json +59 -11
  675. data/tracks/ecmascript/exercises/sieve/package.json +59 -11
  676. data/tracks/ecmascript/exercises/simple-cipher/package.json +59 -11
  677. data/tracks/ecmascript/exercises/space-age/package.json +59 -11
  678. data/tracks/ecmascript/exercises/strain/package.json +59 -11
  679. data/tracks/ecmascript/exercises/sum-of-multiples/package.json +59 -11
  680. data/tracks/ecmascript/exercises/triangle/package.json +59 -11
  681. data/tracks/ecmascript/exercises/trinary/package.json +59 -11
  682. data/tracks/ecmascript/exercises/two-bucket/package.json +59 -11
  683. data/tracks/ecmascript/exercises/word-count/package.json +59 -11
  684. data/tracks/ecmascript/exercises/wordy/package.json +59 -11
  685. data/tracks/ecmascript/package-lock.json +2835 -0
  686. data/tracks/ecmascript/package.json +59 -11
  687. data/tracks/elixir/config.json +7 -0
  688. data/tracks/elixir/exercises/collatz-conjecture/collatz_conjecture.exs +12 -0
  689. data/tracks/elixir/exercises/collatz-conjecture/collatz_conjecture_test.exs +54 -0
  690. data/tracks/elixir/exercises/collatz-conjecture/example.exs +20 -0
  691. data/tracks/erlang/.github/stale.yml +2 -0
  692. data/tracks/erlang/exercises/rna-transcription/test/rna_transcription_tests.erl +3 -3
  693. data/tracks/factor/docs/INSTALLATION.md +27 -18
  694. data/tracks/factor/docs/TESTS.md +10 -6
  695. data/tracks/fortran/README.md +1 -1
  696. data/tracks/fortran/config.json +1 -1
  697. data/tracks/go/exercises/clock/.meta/gen.go +58 -65
  698. data/tracks/go/exercises/clock/cases_test.go +0 -4
  699. data/tracks/go/gen/gen.go +4 -0
  700. data/tracks/go/gen/property.go +70 -0
  701. data/tracks/groovy/README.md +1 -1
  702. data/tracks/groovy/config.json +2 -4
  703. data/tracks/groovy/exercises/roman-numerals/Example.groovy +10 -10
  704. data/tracks/groovy/exercises/roman-numerals/Roman.groovy +33 -0
  705. data/tracks/groovy/exercises/roman-numerals/RomanSpec.groovy +35 -0
  706. data/tracks/haskell/bin/test-example +7 -3
  707. data/tracks/haskell/bin/test-stub +5 -1
  708. data/tracks/haskell/config.json +6 -0
  709. data/tracks/haskell/exercises/pangram/package.yaml +1 -1
  710. data/tracks/haskell/exercises/pangram/test/Tests.hs +1 -1
  711. data/tracks/haskell/exercises/simple-linked-list/test/Tests.hs +4 -4
  712. data/tracks/haskell/exercises/spiral-matrix/examples/success-standard/package.yaml +16 -0
  713. data/tracks/haskell/exercises/spiral-matrix/examples/success-standard/src/Spiral.hs +17 -0
  714. data/tracks/haskell/exercises/spiral-matrix/package.yaml +20 -0
  715. data/tracks/haskell/exercises/spiral-matrix/src/Spiral.hs +4 -0
  716. data/tracks/haskell/exercises/spiral-matrix/stack.yaml +1 -0
  717. data/tracks/haskell/exercises/spiral-matrix/test/Tests.hs +40 -0
  718. data/tracks/haxe/README.md +1 -1
  719. data/tracks/haxe/config.json +1 -1
  720. data/tracks/java/CONTRIBUTING.md +8 -0
  721. data/tracks/java/POLICIES.md +2 -2
  722. data/tracks/java/README.md +9 -9
  723. data/tracks/java/config.json +40 -5
  724. data/tracks/java/docs/ABOUT.md +1 -1
  725. data/tracks/java/docs/MAINTAINING.md +1 -1
  726. data/tracks/java/exercises/bank-account/HINTS.md +11 -0
  727. data/tracks/java/exercises/bank-account/build.gradle +18 -0
  728. data/tracks/java/exercises/bank-account/src/example/java/BankAccount.java +53 -0
  729. data/tracks/java/exercises/bank-account/src/example/java/BankAccountActionInvalidException.java +6 -0
  730. data/tracks/java/exercises/bank-account/src/main/java/BankAccountActionInvalidException.java +6 -0
  731. data/tracks/java/exercises/bank-account/src/test/java/BankAccountTest.java +201 -0
  732. data/tracks/java/exercises/clock/{HINT.md → HINTS.md} +0 -0
  733. data/tracks/java/exercises/food-chain/build.gradle +17 -0
  734. data/tracks/java/exercises/food-chain/src/example/java/FoodChain.java +77 -0
  735. data/tracks/java/exercises/food-chain/src/main/java/.keep +0 -0
  736. data/tracks/java/exercises/food-chain/src/test/java/FoodChainTest.java +204 -0
  737. data/tracks/java/exercises/hamming/src/test/java/HammingTest.java +68 -26
  738. data/tracks/java/exercises/hello-world/HINTS.md +4 -0
  739. data/tracks/java/exercises/hello-world/TUTORIAL.md +111 -395
  740. data/tracks/java/exercises/hello-world/src/example/java/Greeter.java +7 -0
  741. data/tracks/java/exercises/hello-world/src/main/java/{HelloWorld.java → Greeter.java} +4 -2
  742. data/tracks/java/exercises/hello-world/src/test/java/GreeterTest.java +12 -0
  743. data/tracks/java/exercises/isogram/{HINT.md → HINTS.md} +0 -0
  744. data/tracks/java/exercises/kindergarten-garden/src/test/java/KindergartenGardenTest.java +4 -4
  745. data/tracks/java/exercises/minesweeper/src/example/java/MinesweeperBoard.java +5 -41
  746. data/tracks/java/exercises/minesweeper/src/test/java/MinesweeperBoardTest.java +39 -90
  747. data/tracks/java/exercises/palindrome-products/src/test/java/PalindromeCalculatorTest.java +3 -1
  748. data/tracks/java/exercises/pangram/src/test/java/PangramCheckerTest.java +8 -18
  749. data/tracks/java/exercises/perfect-numbers/src/test/java/NaturalNumberTest.java +0 -1
  750. data/tracks/java/exercises/poker/build.gradle +18 -0
  751. data/tracks/java/exercises/poker/src/example/java/Card.java +25 -0
  752. data/tracks/java/exercises/poker/src/example/java/Hand.java +104 -0
  753. data/tracks/java/exercises/poker/src/example/java/Poker.java +27 -0
  754. data/tracks/java/exercises/poker/src/main/java/Poker.java +2 -0
  755. data/tracks/java/exercises/poker/src/test/java/PokerTest.java +164 -0
  756. data/tracks/java/exercises/settings.gradle +5 -0
  757. data/tracks/java/exercises/simple-cipher/{HINT.md → HINTS.md} +0 -0
  758. data/tracks/java/exercises/transpose/build.gradle +17 -0
  759. data/tracks/java/exercises/transpose/src/example/java/Transpose.java +41 -0
  760. data/tracks/java/exercises/transpose/src/main/java/.keep +0 -0
  761. data/tracks/java/exercises/transpose/src/test/java/TransposeTest.java +264 -0
  762. data/tracks/java/exercises/two-fer/HINTS.md +38 -0
  763. data/tracks/java/exercises/two-fer/build.gradle +17 -0
  764. data/tracks/java/exercises/two-fer/src/example/java/Twofer.java +5 -0
  765. data/tracks/java/exercises/two-fer/src/main/java/Twofer.java +5 -0
  766. data/tracks/java/exercises/two-fer/src/test/java/TwoferTest.java +41 -0
  767. data/tracks/javascript/config.json +9 -0
  768. data/tracks/javascript/exercises/hello-world/HINTS.md +10 -27
  769. data/tracks/javascript/exercises/hello-world/hello-world.js +1 -1
  770. data/tracks/javascript/exercises/hello-world/hello-world.spec.js +2 -10
  771. data/tracks/javascript/exercises/phone-number/example.js +2 -2
  772. data/tracks/javascript/exercises/phone-number/phone-number.spec.js +51 -46
  773. data/tracks/javascript/exercises/simple-linked-list/example.js +119 -0
  774. data/tracks/javascript/exercises/simple-linked-list/simple-linked-list.spec.js +160 -0
  775. data/tracks/julia/config.json +11 -0
  776. data/tracks/julia/exercises/complex-numbers/HINTS.md +11 -0
  777. data/tracks/julia/exercises/complex-numbers/complex-numbers.jl +0 -0
  778. data/tracks/julia/exercises/complex-numbers/example.jl +41 -0
  779. data/tracks/julia/exercises/complex-numbers/runtests.jl +74 -0
  780. data/tracks/kotlin/README.md +8 -8
  781. data/tracks/kotlin/bin/journey-test.sh +1 -1
  782. data/tracks/kotlin/exercises/allergies/src/example/kotlin/Allergen.kt +1 -0
  783. data/tracks/kotlin/exercises/hamming/src/test/kotlin/HammingTest.kt +64 -14
  784. data/tracks/kotlin/exercises/hello-world/TUTORIAL.md +1 -2
  785. data/tracks/kotlin/exercises/pangram/src/test/kotlin/PangramTest.kt +5 -9
  786. data/tracks/kotlin/exercises/phone-number/src/example/kotlin/PhoneNumber.kt +1 -1
  787. data/tracks/kotlin/exercises/phone-number/src/test/kotlin/PhoneNumberTest.kt +21 -13
  788. data/tracks/kotlin/exercises/rna-transcription/src/test/kotlin/RnaTranscriptionTest.kt +15 -18
  789. data/tracks/kotlin/gradle/wrapper/gradle-wrapper.jar +0 -0
  790. data/tracks/kotlin/gradle/wrapper/gradle-wrapper.properties +2 -2
  791. data/tracks/nasm/config.json +1 -1
  792. data/tracks/nim/README.md +2 -2
  793. data/tracks/nim/config.json +1 -1
  794. data/tracks/ocaml/exercises/all-your-base/test.ml +8 -8
  795. data/tracks/ocaml/exercises/bowling/test.ml +14 -15
  796. data/tracks/ocaml/exercises/hamming/test.ml +3 -3
  797. data/tracks/ocaml/tools/test-generator/templates/ocaml/bowling/test.ml +1 -1
  798. data/tracks/perl5/.travis.yml +1 -1
  799. data/tracks/perl5/README.md +1 -1
  800. data/tracks/perl5/bin/README.md +35 -0
  801. data/tracks/perl5/bin/cpanfile +4 -0
  802. data/tracks/perl5/bin/exercise-gen.pl +60 -0
  803. data/tracks/perl5/config.json +7 -0
  804. data/tracks/perl5/docs/INSTALLATION.md +23 -3
  805. data/tracks/perl5/exercises/bob/Bob.pm +4 -17
  806. data/tracks/perl5/exercises/bob/Example.pm +10 -11
  807. data/tracks/perl5/exercises/bob/bob.t +198 -51
  808. data/tracks/perl5/exercises/bob/example.yaml +41 -0
  809. data/tracks/perl5/exercises/hello-world/Example.pm +10 -0
  810. data/tracks/perl5/exercises/hello-world/HelloWorld.pm +10 -0
  811. data/tracks/perl5/exercises/hello-world/example.yaml +33 -0
  812. data/tracks/perl5/exercises/hello-world/hello-world.t +64 -0
  813. data/tracks/perl5/exercises/leap/Example.pm +9 -8
  814. data/tracks/perl5/exercises/leap/Leap.pm +11 -0
  815. data/tracks/perl5/exercises/leap/example.yaml +41 -0
  816. data/tracks/perl5/exercises/leap/leap.t +74 -17
  817. data/tracks/perl5/templates/module.mustache +8 -0
  818. data/tracks/perl5/templates/test.mustache +58 -0
  819. data/tracks/perl6/.travis.yml +1 -1
  820. data/tracks/perl6/README.md +1 -1
  821. data/tracks/perl6/bin/README.md +3 -3
  822. data/tracks/perl6/bin/exercise-gen.pl6 +2 -2
  823. data/tracks/perl6/exercises/all-your-base/all-your-base.t +6 -4
  824. data/tracks/perl6/exercises/allergies/allergies.t +6 -4
  825. data/tracks/perl6/exercises/anagram/anagram.t +6 -4
  826. data/tracks/perl6/exercises/atbash-cipher/atbash-cipher.t +6 -4
  827. data/tracks/perl6/exercises/bob/bob.t +6 -4
  828. data/tracks/perl6/exercises/clock/clock.t +6 -4
  829. data/tracks/perl6/exercises/flatten-array/flatten-array.t +6 -4
  830. data/tracks/perl6/exercises/grains/grains.t +6 -4
  831. data/tracks/perl6/exercises/hello-world/hello-world.t +6 -4
  832. data/tracks/perl6/exercises/leap/leap.t +6 -4
  833. data/tracks/perl6/exercises/luhn/luhn.t +6 -4
  834. data/tracks/perl6/exercises/phone-number/phone-number.t +6 -4
  835. data/tracks/perl6/exercises/raindrops/raindrops.t +6 -4
  836. data/tracks/perl6/exercises/rna-transcription/rna-transcription.t +15 -13
  837. data/tracks/perl6/exercises/scrabble-score/scrabble-score.t +6 -4
  838. data/tracks/perl6/exercises/space-age/space-age.t +6 -4
  839. data/tracks/perl6/exercises/word-count/word-count.t +6 -4
  840. data/tracks/perl6/exercises/wordy/wordy.t +6 -4
  841. data/tracks/perl6/templates/test.mustache +8 -7
  842. data/tracks/plsql/config.json +1 -1
  843. data/tracks/prolog/README.md +6 -6
  844. data/tracks/prolog/config.json +1 -1
  845. data/tracks/r/bin/run_tests.R +18 -10
  846. data/tracks/r/exercises/anagram/test_anagram.R +1 -1
  847. data/tracks/r/exercises/bob/test_bob.R +1 -1
  848. data/tracks/r/exercises/difference-of-squares/test_difference-of-squares.R +1 -1
  849. data/tracks/r/exercises/grains/test_grains.R +1 -1
  850. data/tracks/r/exercises/hamming/test_hamming.R +1 -1
  851. data/tracks/r/exercises/hello-world/test_hello-world.R +1 -1
  852. data/tracks/r/exercises/isogram/test_isogram.R +1 -1
  853. data/tracks/r/exercises/largest-series-product/test_largest-series-product.R +1 -1
  854. data/tracks/r/exercises/leap/test_leap.R +1 -1
  855. data/tracks/r/exercises/luhn/test_luhn.R +1 -1
  856. data/tracks/r/exercises/pascals-triangle/test_pascals-triangle.R +1 -1
  857. data/tracks/r/exercises/perfect-numbers/example.R +17 -1
  858. data/tracks/r/exercises/perfect-numbers/test_perfect-numbers.R +50 -33
  859. data/tracks/r/exercises/phone-number/test_phone-number.R +1 -1
  860. data/tracks/r/exercises/prime-factors/test_prime-factors.R +1 -1
  861. data/tracks/r/exercises/raindrops/test_raindrops.R +1 -1
  862. data/tracks/r/exercises/rna-transcription/test_rna-transcription.R +9 -9
  863. data/tracks/r/exercises/rotational-cipher/test_rotational-cipher.R +1 -1
  864. data/tracks/r/exercises/scrabble-score/test_scrabble-score.R +1 -1
  865. data/tracks/r/exercises/secret-handshake/test_secret-handshake.R +1 -1
  866. data/tracks/r/exercises/sieve/test_sieve.R +1 -1
  867. data/tracks/r/exercises/space-age/test_space-age.R +1 -1
  868. data/tracks/r/exercises/sum-of-multiples/test_sum-of-multiples.R +1 -1
  869. data/tracks/r/exercises/tournament/test_tournament.R +1 -1
  870. data/tracks/r/exercises/word-count/test_word-count.R +1 -1
  871. data/tracks/ruby/README.md +9 -9
  872. data/tracks/ruby/config.json +12 -0
  873. data/tracks/ruby/exercises/collatz-conjecture/.meta/.version +1 -0
  874. data/tracks/ruby/exercises/collatz-conjecture/.meta/generator/collatz_conjecture_case.rb +31 -0
  875. data/tracks/ruby/exercises/collatz-conjecture/.meta/solutions/collatz_conjecture.rb +22 -0
  876. data/tracks/ruby/exercises/collatz-conjecture/collatz_conjecture_test.rb +58 -0
  877. data/tracks/ruby/lib/generator/command_line.rb +6 -7
  878. data/tracks/ruby/lib/generator/command_line/generator_optparser.rb +2 -2
  879. data/tracks/ruby/lib/generator/files/metadata_files.rb +3 -3
  880. data/tracks/ruby/lib/generator/files/track_files.rb +22 -3
  881. data/tracks/ruby/lib/generator/implementation.rb +7 -5
  882. data/tracks/ruby/lib/generator/repository.rb +12 -0
  883. data/tracks/ruby/lib/generator/template_values.rb +1 -1
  884. data/tracks/ruby/lib/helper.rb +1 -1
  885. data/tracks/ruby/test/generator/command_line/generator_optparser_test.rb +2 -2
  886. data/tracks/ruby/test/generator/command_line_test.rb +2 -2
  887. data/tracks/ruby/test/generator/files/metadata_files_test.rb +2 -2
  888. data/tracks/ruby/test/generator/files/track_files_test.rb +9 -4
  889. data/tracks/ruby/test/generator/implementation_test.rb +11 -4
  890. data/tracks/ruby/test/generator/repository_test.rb +10 -0
  891. data/tracks/ruby/test/generator/template_values_test.rb +2 -4
  892. data/tracks/rust/exercises/bob/Cargo.toml +1 -1
  893. data/tracks/rust/exercises/bob/example.rs +4 -3
  894. data/tracks/rust/exercises/bob/tests/bob.rs +110 -9
  895. data/tracks/scala/config.json +0 -1
  896. data/tracks/scala/exercises/anagram/example.scala +7 -7
  897. data/tracks/scala/exercises/anagram/src/test/scala/AnagramTest.scala +73 -46
  898. data/tracks/scala/exercises/etl/example.scala +1 -1
  899. data/tracks/scala/exercises/etl/src/test/scala/EtlTest.scala +20 -34
  900. data/tracks/scala/exercises/grains/src/test/scala/GrainsTest.scala +21 -14
  901. data/tracks/scala/exercises/secret-handshake/example.scala +3 -3
  902. data/tracks/scala/exercises/secret-handshake/src/test/scala/SecretHandshakeTest.scala +28 -29
  903. data/tracks/scala/exercises/sieve/example.scala +1 -1
  904. data/tracks/scala/exercises/sieve/src/test/scala/SieveTest.scala +25 -23
  905. data/tracks/scala/exercises/triangle/example.scala +6 -22
  906. data/tracks/scala/exercises/triangle/src/test/scala/TriangleTest.scala +66 -19
  907. data/tracks/scala/testgen/src/main/scala/AnagramTestGenerator.scala +15 -0
  908. data/tracks/scala/testgen/src/main/scala/EtlTestGenerator.scala +52 -0
  909. data/tracks/scala/testgen/src/main/scala/GrainsTestGenerator.scala +50 -0
  910. data/tracks/scala/testgen/src/main/scala/SecretHandshakeTestGenerator.scala +15 -0
  911. data/tracks/scala/testgen/src/main/scala/SieveTestGenerator.scala +15 -0
  912. data/tracks/scala/testgen/src/main/scala/TriangleTestGenerator.scala +37 -0
  913. data/tracks/scala/testgen/src/main/scala/testgen/TestSuiteBuilder.scala +3 -0
  914. data/tracks/scheme/README.org +2 -2
  915. data/tracks/scheme/config.json +1 -1
  916. data/tracks/smalltalk/.gitignore +4 -0
  917. data/tracks/smalltalk/.travis.yml +5 -0
  918. data/tracks/smalltalk/LICENSE +21 -0
  919. data/tracks/smalltalk/README.md +11 -0
  920. data/tracks/smalltalk/bin/fetch-configlet +32 -0
  921. data/tracks/smalltalk/config.json +16 -0
  922. data/tracks/smalltalk/docs/ABOUT.md +0 -0
  923. data/tracks/smalltalk/docs/EXERCISE_README_INSERT.md +0 -0
  924. data/tracks/smalltalk/docs/INSTALLATION.md +0 -0
  925. data/tracks/smalltalk/docs/LEARNING.md +0 -0
  926. data/tracks/smalltalk/docs/RESOURCES.md +0 -0
  927. data/tracks/smalltalk/docs/TESTS.md +0 -0
  928. data/tracks/smalltalk/exercises/.keep +0 -0
  929. data/tracks/smalltalk/img/.keep +0 -0
  930. data/tracks/sml/config.json +1 -8
  931. data/tracks/tcl/README.md +1 -1
  932. data/tracks/tcl/config.json +1 -1
  933. data/tracks/teco/config.json +1 -1
  934. data/tracks/typescript/Makefile +1 -1
  935. data/tracks/typescript/appveyor.yml +18 -0
  936. data/tracks/typescript/common/package.json +7 -7
  937. data/tracks/typescript/common/tsconfig.json +1 -0
  938. data/tracks/typescript/common/yarn.lock +718 -1152
  939. data/tracks/typescript/config.json +45 -42
  940. data/tracks/typescript/exercises/anagram/package.json +7 -7
  941. data/tracks/typescript/exercises/anagram/tsconfig.json +1 -0
  942. data/tracks/typescript/exercises/anagram/yarn.lock +718 -1152
  943. data/tracks/typescript/exercises/beer-song/package.json +7 -7
  944. data/tracks/typescript/exercises/beer-song/tsconfig.json +1 -0
  945. data/tracks/typescript/exercises/beer-song/yarn.lock +718 -1152
  946. data/tracks/typescript/exercises/bob/package.json +7 -7
  947. data/tracks/typescript/exercises/bob/tsconfig.json +1 -0
  948. data/tracks/typescript/exercises/bob/yarn.lock +718 -1152
  949. data/tracks/typescript/exercises/difference-of-squares/package.json +7 -7
  950. data/tracks/typescript/exercises/difference-of-squares/tsconfig.json +1 -0
  951. data/tracks/typescript/exercises/difference-of-squares/yarn.lock +718 -1152
  952. data/tracks/typescript/exercises/etl/package.json +7 -7
  953. data/tracks/typescript/exercises/etl/tsconfig.json +1 -0
  954. data/tracks/typescript/exercises/etl/yarn.lock +718 -1152
  955. data/tracks/typescript/exercises/food-chain/package.json +7 -7
  956. data/tracks/typescript/exercises/food-chain/tsconfig.json +1 -0
  957. data/tracks/typescript/exercises/food-chain/yarn.lock +718 -1152
  958. data/tracks/typescript/exercises/gigasecond/package.json +7 -7
  959. data/tracks/typescript/exercises/gigasecond/tsconfig.json +1 -0
  960. data/tracks/typescript/exercises/gigasecond/yarn.lock +718 -1152
  961. data/tracks/typescript/exercises/grade-school/package.json +7 -7
  962. data/tracks/typescript/exercises/grade-school/tsconfig.json +1 -0
  963. data/tracks/typescript/exercises/grade-school/yarn.lock +718 -1152
  964. data/tracks/typescript/exercises/hamming/package.json +7 -7
  965. data/tracks/typescript/exercises/hamming/tsconfig.json +1 -0
  966. data/tracks/typescript/exercises/hamming/yarn.lock +718 -1152
  967. data/tracks/typescript/exercises/hello-world/package.json +7 -7
  968. data/tracks/typescript/exercises/hello-world/tsconfig.json +1 -0
  969. data/tracks/typescript/exercises/hello-world/yarn.lock +718 -1152
  970. data/tracks/typescript/exercises/leap/package.json +7 -7
  971. data/tracks/typescript/exercises/leap/tsconfig.json +1 -0
  972. data/tracks/typescript/exercises/leap/yarn.lock +718 -1152
  973. data/tracks/typescript/exercises/pangram/package.json +7 -7
  974. data/tracks/typescript/exercises/pangram/tsconfig.json +1 -0
  975. data/tracks/typescript/exercises/pangram/yarn.lock +718 -1152
  976. data/tracks/typescript/exercises/phone-number/package.json +7 -7
  977. data/tracks/typescript/exercises/phone-number/tsconfig.json +1 -0
  978. data/tracks/typescript/exercises/phone-number/yarn.lock +718 -1152
  979. data/tracks/typescript/exercises/raindrops/package.json +7 -7
  980. data/tracks/typescript/exercises/raindrops/tsconfig.json +1 -0
  981. data/tracks/typescript/exercises/raindrops/yarn.lock +718 -1152
  982. data/tracks/typescript/exercises/rna-transcription/package.json +7 -7
  983. data/tracks/typescript/exercises/rna-transcription/tsconfig.json +1 -0
  984. data/tracks/typescript/exercises/rna-transcription/yarn.lock +718 -1152
  985. data/tracks/typescript/exercises/robot-name/package.json +7 -7
  986. data/tracks/typescript/exercises/robot-name/robot-name.test.ts +0 -5
  987. data/tracks/typescript/exercises/robot-name/tsconfig.json +1 -0
  988. data/tracks/typescript/exercises/robot-name/yarn.lock +718 -1152
  989. data/tracks/typescript/exercises/say/package.json +7 -7
  990. data/tracks/typescript/exercises/say/tsconfig.json +1 -0
  991. data/tracks/typescript/exercises/say/yarn.lock +718 -1152
  992. data/tracks/typescript/exercises/scrabble-score/package.json +7 -7
  993. data/tracks/typescript/exercises/scrabble-score/scrabble-score.example.ts +1 -1
  994. data/tracks/typescript/exercises/scrabble-score/tsconfig.json +1 -0
  995. data/tracks/typescript/exercises/scrabble-score/yarn.lock +718 -1152
  996. data/tracks/typescript/exercises/space-age/package.json +7 -7
  997. data/tracks/typescript/exercises/space-age/tsconfig.json +1 -0
  998. data/tracks/typescript/exercises/space-age/yarn.lock +718 -1152
  999. data/tracks/typescript/exercises/word-count/package.json +7 -7
  1000. data/tracks/typescript/exercises/word-count/tsconfig.json +1 -0
  1001. data/tracks/typescript/exercises/word-count/yarn.lock +718 -1152
  1002. data/tracks/typescript/exercises/wordy/package.json +7 -7
  1003. data/tracks/typescript/exercises/wordy/tsconfig.json +1 -0
  1004. data/tracks/typescript/exercises/wordy/yarn.lock +718 -1152
  1005. data/tracks/vimscript/exercises/rna-transcription/example.vim +1 -1
  1006. data/tracks/vimscript/exercises/rna-transcription/rna_transcription.vader +40 -16
  1007. data/tracks/vimscript/exercises/rna-transcription/rna_transcription.vim +2 -4
  1008. metadata +670 -497
  1009. data/fixtures/tracks/animal/exercises/fish/included-via-symlink.txt +0 -1
  1010. data/tracks/csharp/generators/Classes/TestClass.cs +0 -15
  1011. data/tracks/csharp/generators/Classes/TestClassNameTransformer.cs +0 -9
  1012. data/tracks/csharp/generators/Classes/TestClassRenderer.cs +0 -40
  1013. data/tracks/csharp/generators/Classes/TestedClassNameTransformer.cs +0 -9
  1014. data/tracks/csharp/generators/Data/CanonicalDataCase.cs +0 -24
  1015. data/tracks/csharp/generators/Data/CanonicalDataCaseJsonConverter.cs +0 -32
  1016. data/tracks/csharp/generators/Data/CanonicalDataValue.cs +0 -24
  1017. data/tracks/csharp/generators/Data/ExerciseCollection.cs +0 -23
  1018. data/tracks/csharp/generators/Exercises/AcronymExercise.cs +0 -20
  1019. data/tracks/csharp/generators/Exercises/AtbashCipherExercise.cs +0 -20
  1020. data/tracks/csharp/generators/Exercises/BeerSongExercise.cs +0 -33
  1021. data/tracks/csharp/generators/Exercises/BooleanExercise.cs +0 -14
  1022. data/tracks/csharp/generators/Exercises/EqualityExercise.cs +0 -19
  1023. data/tracks/csharp/generators/Exercises/Exercise.cs +0 -81
  1024. data/tracks/csharp/generators/Exercises/FoodChainExercise.cs +0 -27
  1025. data/tracks/csharp/generators/Exercises/HelloWorldExercise.cs +0 -9
  1026. data/tracks/csharp/generators/Exercises/IsogramExercise.cs +0 -9
  1027. data/tracks/csharp/generators/Exercises/LeapExercise.cs +0 -9
  1028. data/tracks/csharp/generators/Exercises/LuhnExercise.cs +0 -9
  1029. data/tracks/csharp/generators/Exercises/NthPrimeExercise.cs +0 -22
  1030. data/tracks/csharp/generators/Exercises/PerfectNumbersExercise.cs +0 -29
  1031. data/tracks/csharp/generators/Exercises/PigLatinExercise.cs +0 -9
  1032. data/tracks/csharp/generators/Exercises/RaindropsExercise.cs +0 -20
  1033. data/tracks/csharp/generators/Exercises/RomanNumeralsExercise.cs +0 -30
  1034. data/tracks/csharp/generators/Exercises/RotationalCipherExercise.cs +0 -23
  1035. data/tracks/csharp/generators/Exercises/WordyExercise.cs +0 -20
  1036. data/tracks/csharp/generators/Helpers/StringExtensions.cs +0 -8
  1037. data/tracks/csharp/generators/Helpers/To.cs +0 -13
  1038. data/tracks/csharp/generators/Methods/BooleanTestMethodGenerator.cs +0 -32
  1039. data/tracks/csharp/generators/Methods/EqualityTestMethodGenerator.cs +0 -49
  1040. data/tracks/csharp/generators/Methods/ExceptionTestMethodGenerator.cs +0 -30
  1041. data/tracks/csharp/generators/Methods/TestMethod.cs +0 -12
  1042. data/tracks/csharp/generators/Methods/TestMethodData.cs +0 -12
  1043. data/tracks/csharp/generators/Methods/TestMethodGenerator.cs +0 -80
  1044. data/tracks/csharp/generators/Methods/TestMethodNameTransformer.cs +0 -23
  1045. data/tracks/csharp/generators/Methods/TestMethodOptions.cs +0 -15
  1046. data/tracks/csharp/generators/Methods/TestMethodRenderer.cs +0 -26
  1047. data/tracks/csharp/generators/Methods/TestedMethodNameTransformer.cs +0 -9
  1048. data/tracks/groovy/exercises/roman-numerals/RomanTest.groovy +0 -96
  1049. data/tracks/java/exercises/hello-world/GETTING_STARTED.md +0 -54
  1050. data/tracks/java/exercises/hello-world/HINT.md +0 -7
  1051. data/tracks/java/exercises/hello-world/src/example/java/HelloWorld.java +0 -9
  1052. data/tracks/java/exercises/hello-world/src/test/java/HelloWorldTest.java +0 -32
  1053. data/tracks/kotlin/exercises/allergies/src/example/kotlin/Allergen.kt +0 -10
@@ -1,3 +1,5 @@
1
+ // This file was auto-generated based on version 1.0.0 of the canonical data.
2
+
1
3
  using Xunit;
2
4
 
3
5
  public class BobTest
@@ -3,7 +3,7 @@
3
3
 
4
4
  public static class BookStore
5
5
  {
6
- public static double CalculateTotalCost(List<int> books)
6
+ public static double Total(IEnumerable<int> books)
7
7
  {
8
8
  throw new NotImplementedException("You need to implement this function.");
9
9
  }
@@ -1,83 +1,97 @@
1
- using System.Collections.Generic;
2
- using System.Linq;
1
+ // This file was auto-generated based on version 1.0.1 of the canonical data.
2
+
3
3
  using Xunit;
4
4
 
5
5
  public class BookStoreTest
6
6
  {
7
7
  [Fact]
8
- public void Basket_with_single_book()
8
+ public void Only_a_single_book()
9
9
  {
10
- Assert.Equal(8, BookStore.CalculateTotalCost(MakeList(1)));
10
+ var input = new[] { 1 };
11
+ Assert.Equal(8, BookStore.Total(input));
11
12
  }
12
13
 
13
14
  [Fact(Skip = "Remove to run test")]
14
- public void Basket_with_two_of_same_book()
15
+ public void Two_of_the_same_book()
15
16
  {
16
- Assert.Equal(16, BookStore.CalculateTotalCost(MakeList(2, 2)));
17
+ var input = new[] { 2, 2 };
18
+ Assert.Equal(16, BookStore.Total(input));
17
19
  }
18
20
 
19
21
  [Fact(Skip = "Remove to run test")]
20
22
  public void Empty_basket()
21
23
  {
22
- Assert.Equal(0, BookStore.CalculateTotalCost(MakeList()));
24
+ var input = new int[0];
25
+ Assert.Equal(0, BookStore.Total(input));
23
26
  }
24
27
 
25
28
  [Fact(Skip = "Remove to run test")]
26
- public void Basket_with_two_different_books()
29
+ public void Two_different_books()
27
30
  {
28
- Assert.Equal(15.2, BookStore.CalculateTotalCost(MakeList(1, 2)));
31
+ var input = new[] { 1, 2 };
32
+ Assert.Equal(15.2, BookStore.Total(input));
29
33
  }
30
34
 
31
35
  [Fact(Skip = "Remove to run test")]
32
- public void Basket_with_three_different_books()
36
+ public void Three_different_books()
33
37
  {
34
- Assert.Equal(21.6, BookStore.CalculateTotalCost(MakeList(1, 2, 3)));
38
+ var input = new[] { 1, 2, 3 };
39
+ Assert.Equal(21.6, BookStore.Total(input));
35
40
  }
36
41
 
37
42
  [Fact(Skip = "Remove to run test")]
38
- public void Basket_with_four_different_books()
43
+ public void Four_different_books()
39
44
  {
40
- Assert.Equal(25.6, BookStore.CalculateTotalCost(MakeList(1, 2, 3, 4)));
45
+ var input = new[] { 1, 2, 3, 4 };
46
+ Assert.Equal(25.6, BookStore.Total(input));
41
47
  }
42
48
 
43
49
  [Fact(Skip = "Remove to run test")]
44
- public void Basket_with_five_different_books()
50
+ public void Five_different_books()
45
51
  {
46
- Assert.Equal(30, BookStore.CalculateTotalCost(MakeList(1, 2, 3, 4, 5)));
52
+ var input = new[] { 1, 2, 3, 4, 5 };
53
+ Assert.Equal(30, BookStore.Total(input));
47
54
  }
48
55
 
49
56
  [Fact(Skip = "Remove to run test")]
50
- public void Basket_with_eight_books()
57
+ public void Two_groups_of_four_is_cheaper_than_group_of_five_plus_group_of_three()
51
58
  {
52
- Assert.Equal(51.20, BookStore.CalculateTotalCost(MakeList(1, 1, 2, 2, 3, 3, 4, 5)));
59
+ var input = new[] { 1, 1, 2, 2, 3, 3, 4, 5 };
60
+ Assert.Equal(51.2, BookStore.Total(input));
53
61
  }
54
62
 
55
63
  [Fact(Skip = "Remove to run test")]
56
- public void Basket_with_nine_books()
64
+ public void Group_of_four_plus_group_of_two_is_cheaper_than_two_groups_of_three()
57
65
  {
58
- Assert.Equal(55.60, BookStore.CalculateTotalCost(MakeList(1, 1, 2, 2, 3, 3, 4, 4, 5)));
66
+ var input = new[] { 1, 1, 2, 2, 3, 4 };
67
+ Assert.Equal(40.8, BookStore.Total(input));
59
68
  }
60
69
 
61
70
  [Fact(Skip = "Remove to run test")]
62
- public void Basket_with_ten_books()
71
+ public void Two_each_of_first_4_books_and_1_copy_each_of_rest()
63
72
  {
64
- Assert.Equal(60, BookStore.CalculateTotalCost(MakeList(1, 1, 2, 2, 3, 3, 4, 4, 5, 5)));
73
+ var input = new[] { 1, 1, 2, 2, 3, 3, 4, 4, 5 };
74
+ Assert.Equal(55.6, BookStore.Total(input));
65
75
  }
66
76
 
67
77
  [Fact(Skip = "Remove to run test")]
68
- public void Basket_with_eleven_books()
78
+ public void Two_copies_of_each_book()
69
79
  {
70
- Assert.Equal(68, BookStore.CalculateTotalCost(MakeList(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 1)));
80
+ var input = new[] { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5 };
81
+ Assert.Equal(60, BookStore.Total(input));
71
82
  }
72
83
 
73
84
  [Fact(Skip = "Remove to run test")]
74
- public void Basket_with_twelve_books()
85
+ public void Three_copies_of_first_book_and_2_each_of_remaining()
75
86
  {
76
- Assert.Equal(75.20, BookStore.CalculateTotalCost(MakeList(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 1, 2)));
87
+ var input = new[] { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 1 };
88
+ Assert.Equal(68, BookStore.Total(input));
77
89
  }
78
90
 
79
- private static List<int> MakeList(params int[] values)
91
+ [Fact(Skip = "Remove to run test")]
92
+ public void Three_each_of_first_2_books_and_2_each_of_remaining_books()
80
93
  {
81
- return values.ToList();
94
+ var input = new[] { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 1, 2 };
95
+ Assert.Equal(75.2, BookStore.Total(input));
82
96
  }
83
- }
97
+ }
@@ -4,14 +4,14 @@
4
4
 
5
5
  public static class BookStore
6
6
  {
7
- public static double CalculateTotalCost(List<int> books)
7
+ public static double Total(IEnumerable<int> books)
8
8
  {
9
- return CalculateTotalCost(books, 0);
9
+ return Total(books, 0);
10
10
  }
11
11
 
12
- private static double CalculateTotalCost(List<int> books, double priceSoFar)
12
+ private static double Total(IEnumerable<int> books, double priceSoFar)
13
13
  {
14
- if (books.Count == 0)
14
+ if (!books.Any())
15
15
  {
16
16
  return priceSoFar;
17
17
  }
@@ -33,7 +33,7 @@ private static double CalculateTotalCost(List<int> books, double priceSoFar)
33
33
  remaining.Remove(item);
34
34
  }
35
35
 
36
- var price = CalculateTotalCost(remaining.ToList(), priceSoFar + CostPerGroup(i));
36
+ var price = Total(remaining.ToList(), priceSoFar + CostPerGroup(i));
37
37
  minPrice = Math.Min(minPrice, price);
38
38
  }
39
39
 
@@ -8,7 +8,7 @@ public class FoodChainTest
8
8
  public void Fly()
9
9
  {
10
10
  var expected =
11
- "I know an old lady who swallowed a fly.\n"+
11
+ "I know an old lady who swallowed a fly.\n" +
12
12
  "I don't know why she swallowed the fly. Perhaps she'll die.";
13
13
  Assert.Equal(expected, FoodChain.Verse(1));
14
14
  }
@@ -17,9 +17,9 @@ public void Fly()
17
17
  public void Spider()
18
18
  {
19
19
  var expected =
20
- "I know an old lady who swallowed a spider.\n"+
21
- "It wriggled and jiggled and tickled inside her.\n"+
22
- "She swallowed the spider to catch the fly.\n"+
20
+ "I know an old lady who swallowed a spider.\n" +
21
+ "It wriggled and jiggled and tickled inside her.\n" +
22
+ "She swallowed the spider to catch the fly.\n" +
23
23
  "I don't know why she swallowed the fly. Perhaps she'll die.";
24
24
  Assert.Equal(expected, FoodChain.Verse(2));
25
25
  }
@@ -28,10 +28,10 @@ public void Spider()
28
28
  public void Bird()
29
29
  {
30
30
  var expected =
31
- "I know an old lady who swallowed a bird.\n"+
32
- "How absurd to swallow a bird!\n"+
33
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n"+
34
- "She swallowed the spider to catch the fly.\n"+
31
+ "I know an old lady who swallowed a bird.\n" +
32
+ "How absurd to swallow a bird!\n" +
33
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n" +
34
+ "She swallowed the spider to catch the fly.\n" +
35
35
  "I don't know why she swallowed the fly. Perhaps she'll die.";
36
36
  Assert.Equal(expected, FoodChain.Verse(3));
37
37
  }
@@ -40,11 +40,11 @@ public void Bird()
40
40
  public void Cat()
41
41
  {
42
42
  var expected =
43
- "I know an old lady who swallowed a cat.\n"+
44
- "Imagine that, to swallow a cat!\n"+
45
- "She swallowed the cat to catch the bird.\n"+
46
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n"+
47
- "She swallowed the spider to catch the fly.\n"+
43
+ "I know an old lady who swallowed a cat.\n" +
44
+ "Imagine that, to swallow a cat!\n" +
45
+ "She swallowed the cat to catch the bird.\n" +
46
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n" +
47
+ "She swallowed the spider to catch the fly.\n" +
48
48
  "I don't know why she swallowed the fly. Perhaps she'll die.";
49
49
  Assert.Equal(expected, FoodChain.Verse(4));
50
50
  }
@@ -53,12 +53,12 @@ public void Cat()
53
53
  public void Dog()
54
54
  {
55
55
  var expected =
56
- "I know an old lady who swallowed a dog.\n"+
57
- "What a hog, to swallow a dog!\n"+
58
- "She swallowed the dog to catch the cat.\n"+
59
- "She swallowed the cat to catch the bird.\n"+
60
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n"+
61
- "She swallowed the spider to catch the fly.\n"+
56
+ "I know an old lady who swallowed a dog.\n" +
57
+ "What a hog, to swallow a dog!\n" +
58
+ "She swallowed the dog to catch the cat.\n" +
59
+ "She swallowed the cat to catch the bird.\n" +
60
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n" +
61
+ "She swallowed the spider to catch the fly.\n" +
62
62
  "I don't know why she swallowed the fly. Perhaps she'll die.";
63
63
  Assert.Equal(expected, FoodChain.Verse(5));
64
64
  }
@@ -67,13 +67,13 @@ public void Dog()
67
67
  public void Goat()
68
68
  {
69
69
  var expected =
70
- "I know an old lady who swallowed a goat.\n"+
71
- "Just opened her throat and swallowed a goat!\n"+
72
- "She swallowed the goat to catch the dog.\n"+
73
- "She swallowed the dog to catch the cat.\n"+
74
- "She swallowed the cat to catch the bird.\n"+
75
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n"+
76
- "She swallowed the spider to catch the fly.\n"+
70
+ "I know an old lady who swallowed a goat.\n" +
71
+ "Just opened her throat and swallowed a goat!\n" +
72
+ "She swallowed the goat to catch the dog.\n" +
73
+ "She swallowed the dog to catch the cat.\n" +
74
+ "She swallowed the cat to catch the bird.\n" +
75
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n" +
76
+ "She swallowed the spider to catch the fly.\n" +
77
77
  "I don't know why she swallowed the fly. Perhaps she'll die.";
78
78
  Assert.Equal(expected, FoodChain.Verse(6));
79
79
  }
@@ -82,14 +82,14 @@ public void Goat()
82
82
  public void Cow()
83
83
  {
84
84
  var expected =
85
- "I know an old lady who swallowed a cow.\n"+
86
- "I don't know how she swallowed a cow!\n"+
87
- "She swallowed the cow to catch the goat.\n"+
88
- "She swallowed the goat to catch the dog.\n"+
89
- "She swallowed the dog to catch the cat.\n"+
90
- "She swallowed the cat to catch the bird.\n"+
91
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n"+
92
- "She swallowed the spider to catch the fly.\n"+
85
+ "I know an old lady who swallowed a cow.\n" +
86
+ "I don't know how she swallowed a cow!\n" +
87
+ "She swallowed the cow to catch the goat.\n" +
88
+ "She swallowed the goat to catch the dog.\n" +
89
+ "She swallowed the dog to catch the cat.\n" +
90
+ "She swallowed the cat to catch the bird.\n" +
91
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n" +
92
+ "She swallowed the spider to catch the fly.\n" +
93
93
  "I don't know why she swallowed the fly. Perhaps she'll die.";
94
94
  Assert.Equal(expected, FoodChain.Verse(7));
95
95
  }
@@ -98,7 +98,7 @@ public void Cow()
98
98
  public void Horse()
99
99
  {
100
100
  var expected =
101
- "I know an old lady who swallowed a horse.\n"+
101
+ "I know an old lady who swallowed a horse.\n" +
102
102
  "She's dead, of course!";
103
103
  Assert.Equal(expected, FoodChain.Verse(8));
104
104
  }
@@ -107,18 +107,18 @@ public void Horse()
107
107
  public void Multiple_verses()
108
108
  {
109
109
  var expected =
110
- "I know an old lady who swallowed a fly.\n"+
111
- "I don't know why she swallowed the fly. Perhaps she'll die.\n"+
112
- "\n"+
113
- "I know an old lady who swallowed a spider.\n"+
114
- "It wriggled and jiggled and tickled inside her.\n"+
115
- "She swallowed the spider to catch the fly.\n"+
116
- "I don't know why she swallowed the fly. Perhaps she'll die.\n"+
117
- "\n"+
118
- "I know an old lady who swallowed a bird.\n"+
119
- "How absurd to swallow a bird!\n"+
120
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n"+
121
- "She swallowed the spider to catch the fly.\n"+
110
+ "I know an old lady who swallowed a fly.\n" +
111
+ "I don't know why she swallowed the fly. Perhaps she'll die.\n" +
112
+ "\n" +
113
+ "I know an old lady who swallowed a spider.\n" +
114
+ "It wriggled and jiggled and tickled inside her.\n" +
115
+ "She swallowed the spider to catch the fly.\n" +
116
+ "I don't know why she swallowed the fly. Perhaps she'll die.\n" +
117
+ "\n" +
118
+ "I know an old lady who swallowed a bird.\n" +
119
+ "How absurd to swallow a bird!\n" +
120
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n" +
121
+ "She swallowed the spider to catch the fly.\n" +
122
122
  "I don't know why she swallowed the fly. Perhaps she'll die.";
123
123
  Assert.Equal(expected, FoodChain.Verse(1, 3));
124
124
  }
@@ -127,55 +127,55 @@ public void Multiple_verses()
127
127
  public void Full_song()
128
128
  {
129
129
  var expected =
130
- "I know an old lady who swallowed a fly.\n"+
131
- "I don't know why she swallowed the fly. Perhaps she'll die.\n"+
132
- "\n"+
133
- "I know an old lady who swallowed a spider.\n"+
134
- "It wriggled and jiggled and tickled inside her.\n"+
135
- "She swallowed the spider to catch the fly.\n"+
136
- "I don't know why she swallowed the fly. Perhaps she'll die.\n"+
137
- "\n"+
138
- "I know an old lady who swallowed a bird.\n"+
139
- "How absurd to swallow a bird!\n"+
140
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n"+
141
- "She swallowed the spider to catch the fly.\n"+
142
- "I don't know why she swallowed the fly. Perhaps she'll die.\n"+
143
- "\n"+
144
- "I know an old lady who swallowed a cat.\n"+
145
- "Imagine that, to swallow a cat!\n"+
146
- "She swallowed the cat to catch the bird.\n"+
147
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n"+
148
- "She swallowed the spider to catch the fly.\n"+
149
- "I don't know why she swallowed the fly. Perhaps she'll die.\n"+
150
- "\n"+
151
- "I know an old lady who swallowed a dog.\n"+
152
- "What a hog, to swallow a dog!\n"+
153
- "She swallowed the dog to catch the cat.\n"+
154
- "She swallowed the cat to catch the bird.\n"+
155
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n"+
156
- "She swallowed the spider to catch the fly.\n"+
157
- "I don't know why she swallowed the fly. Perhaps she'll die.\n"+
158
- "\n"+
159
- "I know an old lady who swallowed a goat.\n"+
160
- "Just opened her throat and swallowed a goat!\n"+
161
- "She swallowed the goat to catch the dog.\n"+
162
- "She swallowed the dog to catch the cat.\n"+
163
- "She swallowed the cat to catch the bird.\n"+
164
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n"+
165
- "She swallowed the spider to catch the fly.\n"+
166
- "I don't know why she swallowed the fly. Perhaps she'll die.\n"+
167
- "\n"+
168
- "I know an old lady who swallowed a cow.\n"+
169
- "I don't know how she swallowed a cow!\n"+
170
- "She swallowed the cow to catch the goat.\n"+
171
- "She swallowed the goat to catch the dog.\n"+
172
- "She swallowed the dog to catch the cat.\n"+
173
- "She swallowed the cat to catch the bird.\n"+
174
- "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n"+
175
- "She swallowed the spider to catch the fly.\n"+
176
- "I don't know why she swallowed the fly. Perhaps she'll die.\n"+
177
- "\n"+
178
- "I know an old lady who swallowed a horse.\n"+
130
+ "I know an old lady who swallowed a fly.\n" +
131
+ "I don't know why she swallowed the fly. Perhaps she'll die.\n" +
132
+ "\n" +
133
+ "I know an old lady who swallowed a spider.\n" +
134
+ "It wriggled and jiggled and tickled inside her.\n" +
135
+ "She swallowed the spider to catch the fly.\n" +
136
+ "I don't know why she swallowed the fly. Perhaps she'll die.\n" +
137
+ "\n" +
138
+ "I know an old lady who swallowed a bird.\n" +
139
+ "How absurd to swallow a bird!\n" +
140
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n" +
141
+ "She swallowed the spider to catch the fly.\n" +
142
+ "I don't know why she swallowed the fly. Perhaps she'll die.\n" +
143
+ "\n" +
144
+ "I know an old lady who swallowed a cat.\n" +
145
+ "Imagine that, to swallow a cat!\n" +
146
+ "She swallowed the cat to catch the bird.\n" +
147
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n" +
148
+ "She swallowed the spider to catch the fly.\n" +
149
+ "I don't know why she swallowed the fly. Perhaps she'll die.\n" +
150
+ "\n" +
151
+ "I know an old lady who swallowed a dog.\n" +
152
+ "What a hog, to swallow a dog!\n" +
153
+ "She swallowed the dog to catch the cat.\n" +
154
+ "She swallowed the cat to catch the bird.\n" +
155
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n" +
156
+ "She swallowed the spider to catch the fly.\n" +
157
+ "I don't know why she swallowed the fly. Perhaps she'll die.\n" +
158
+ "\n" +
159
+ "I know an old lady who swallowed a goat.\n" +
160
+ "Just opened her throat and swallowed a goat!\n" +
161
+ "She swallowed the goat to catch the dog.\n" +
162
+ "She swallowed the dog to catch the cat.\n" +
163
+ "She swallowed the cat to catch the bird.\n" +
164
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n" +
165
+ "She swallowed the spider to catch the fly.\n" +
166
+ "I don't know why she swallowed the fly. Perhaps she'll die.\n" +
167
+ "\n" +
168
+ "I know an old lady who swallowed a cow.\n" +
169
+ "I don't know how she swallowed a cow!\n" +
170
+ "She swallowed the cow to catch the goat.\n" +
171
+ "She swallowed the goat to catch the dog.\n" +
172
+ "She swallowed the dog to catch the cat.\n" +
173
+ "She swallowed the cat to catch the bird.\n" +
174
+ "She swallowed the bird to catch the spider that wriggled and jiggled and tickled inside her.\n" +
175
+ "She swallowed the spider to catch the fly.\n" +
176
+ "I don't know why she swallowed the fly. Perhaps she'll die.\n" +
177
+ "\n" +
178
+ "I know an old lady who swallowed a horse.\n" +
179
179
  "She's dead, of course!";
180
180
  Assert.Equal(expected, FoodChain.Verse(1, 8));
181
181
  }
@@ -1,7 +1,6 @@
1
1
  // This file was auto-generated based on version 1.0.0 of the canonical data.
2
2
 
3
3
  using Xunit;
4
- using System;
5
4
 
6
5
  public class NthPrimeTest
7
6
  {
@@ -32,6 +31,6 @@ public void Big_prime()
32
31
  [Fact(Skip = "Remove to run test")]
33
32
  public void There_is_no_zeroth_prime()
34
33
  {
35
- Assert.Throws<ArgumentOutOfRangeException>(() => NthPrime.Prime(0));
34
+ Assert.Throws<System.ArgumentOutOfRangeException>(() => NthPrime.Prime(0));
36
35
  }
37
36
  }
@@ -1,7 +1,6 @@
1
1
  // This file was auto-generated based on version 1.0.1 of the canonical data.
2
2
 
3
3
  using Xunit;
4
- using System;
5
4
 
6
5
  public class PerfectNumbersTest
7
6
  {
@@ -74,12 +73,12 @@ public void Edge_case_no_factors_other_than_itself_is_classified_correctly()
74
73
  [Fact(Skip = "Remove to run test")]
75
74
  public void Zero_is_rejected_not_a_natural_number_()
76
75
  {
77
- Assert.Throws<ArgumentOutOfRangeException>(() => PerfectNumbers.Classify(0));
76
+ Assert.Throws<System.ArgumentOutOfRangeException>(() => PerfectNumbers.Classify(0));
78
77
  }
79
78
 
80
79
  [Fact(Skip = "Remove to run test")]
81
80
  public void Negative_integer_is_rejected_not_a_natural_number_()
82
81
  {
83
- Assert.Throws<ArgumentOutOfRangeException>(() => PerfectNumbers.Classify(-1));
82
+ Assert.Throws<System.ArgumentOutOfRangeException>(() => PerfectNumbers.Classify(-1));
84
83
  }
85
84
  }