trackler 2.2.1.4 → 2.2.1.5

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 (442) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/bash/config.json +10 -0
  4. data/tracks/bash/exercises/error-handling/error_handling_test.sh +31 -0
  5. data/tracks/bash/exercises/error-handling/example.sh +9 -0
  6. data/tracks/ceylon/config/maintainers.json +25 -0
  7. data/tracks/chapel/README.md +1 -1
  8. data/tracks/chapel/config/exercise_readme.go.tmpl +16 -0
  9. data/tracks/chapel/config/maintainers.json +5 -0
  10. data/tracks/chapel/config.json +0 -5
  11. data/tracks/coffeescript/config/exercise_readme.go.tmpl +16 -0
  12. data/tracks/coffeescript/config.json +84 -26
  13. data/tracks/coffeescript/exercises/accumulate/README.md +43 -0
  14. data/tracks/coffeescript/exercises/anagram/README.md +21 -0
  15. data/tracks/coffeescript/exercises/atbash-cipher/README.md +42 -0
  16. data/tracks/coffeescript/exercises/beer-song/README.md +335 -0
  17. data/tracks/coffeescript/exercises/binary/README.md +43 -0
  18. data/tracks/coffeescript/exercises/binary-search-tree/README.md +68 -0
  19. data/tracks/coffeescript/exercises/bob/README.md +26 -0
  20. data/tracks/coffeescript/exercises/clock/README.md +21 -0
  21. data/tracks/coffeescript/exercises/hello-world/README.md +29 -0
  22. data/tracks/coffeescript/exercises/hexadecimal/README.md +22 -0
  23. data/tracks/coffeescript/exercises/linked-list/README.md +42 -0
  24. data/tracks/coffeescript/exercises/luhn/README.md +79 -0
  25. data/tracks/coffeescript/exercises/nth-prime/README.md +23 -0
  26. data/tracks/coffeescript/exercises/nucleotide-count/README.md +41 -0
  27. data/tracks/coffeescript/exercises/palindrome-products/README.md +48 -0
  28. data/tracks/coffeescript/exercises/pascals-triangle/README.md +29 -0
  29. data/tracks/coffeescript/exercises/queen-attack/README.md +41 -0
  30. data/tracks/coffeescript/exercises/triangle/README.md +34 -0
  31. data/tracks/coffeescript/exercises/trinary/README.md +36 -0
  32. data/tracks/coffeescript/exercises/word-count/README.md +27 -0
  33. data/tracks/coffeescript/exercises/wordy/README.md +71 -0
  34. data/tracks/coldfusion/config/exercise_readme.go.tmpl +16 -0
  35. data/tracks/coldfusion/config.json +4 -6
  36. data/tracks/coldfusion/exercises/leap/README.md +33 -0
  37. data/tracks/coq/README.md +19 -32
  38. data/tracks/coq/config/exercise_readme.go.tmpl +16 -0
  39. data/tracks/coq/config.json +9 -5
  40. data/tracks/coq/exercises/hello-world/README.md +45 -0
  41. data/tracks/coq/exercises/rna-transcription/README.md +49 -0
  42. data/tracks/coq/exercises/tautology/README.md +33 -0
  43. data/tracks/cpp/config/exercise_readme.go.tmpl +16 -0
  44. data/tracks/cpp/config.json +144 -41
  45. data/tracks/cpp/exercises/allergies/README.md +69 -0
  46. data/tracks/cpp/exercises/anagram/README.md +45 -0
  47. data/tracks/cpp/exercises/atbash-cipher/README.md +66 -0
  48. data/tracks/cpp/exercises/beer-song/README.md +359 -0
  49. data/tracks/cpp/exercises/binary/README.md +67 -0
  50. data/tracks/cpp/exercises/bob/README.md +50 -0
  51. data/tracks/cpp/exercises/clock/README.md +45 -0
  52. data/tracks/cpp/exercises/crypto-square/README.md +106 -0
  53. data/tracks/cpp/exercises/difference-of-squares/README.md +51 -0
  54. data/tracks/cpp/exercises/etl/README.md +83 -0
  55. data/tracks/cpp/exercises/food-chain/README.md +102 -0
  56. data/tracks/cpp/exercises/gigasecond/README.md +43 -0
  57. data/tracks/cpp/exercises/grade-school/README.md +74 -0
  58. data/tracks/cpp/exercises/grains/README.md +66 -0
  59. data/tracks/cpp/exercises/hamming/README.md +74 -0
  60. data/tracks/cpp/exercises/hello-world/README.md +53 -0
  61. data/tracks/cpp/exercises/hexadecimal/README.md +46 -0
  62. data/tracks/cpp/exercises/leap/README.md +65 -0
  63. data/tracks/cpp/exercises/meetup/README.md +62 -0
  64. data/tracks/cpp/exercises/nth-prime/README.md +47 -0
  65. data/tracks/cpp/exercises/nucleotide-count/README.md +65 -0
  66. data/tracks/cpp/exercises/phone-number/README.md +66 -0
  67. data/tracks/cpp/exercises/prime-factors/README.md +68 -0
  68. data/tracks/cpp/exercises/queen-attack/README.md +65 -0
  69. data/tracks/cpp/exercises/raindrops/README.md +56 -0
  70. data/tracks/cpp/exercises/rna-transcription/README.md +57 -0
  71. data/tracks/cpp/exercises/robot-name/README.md +54 -0
  72. data/tracks/cpp/exercises/roman-numerals/README.md +81 -0
  73. data/tracks/cpp/exercises/say/README.md +101 -0
  74. data/tracks/cpp/exercises/scrabble-score/README.md +76 -0
  75. data/tracks/cpp/exercises/series/README.md +59 -0
  76. data/tracks/cpp/exercises/sieve/README.md +66 -0
  77. data/tracks/cpp/exercises/space-age/README.md +56 -0
  78. data/tracks/cpp/exercises/sum-of-multiples/README.md +50 -0
  79. data/tracks/cpp/exercises/triangle/README.md +58 -0
  80. data/tracks/cpp/exercises/trinary/README.md +60 -0
  81. data/tracks/cpp/exercises/word-count/README.md +51 -0
  82. data/tracks/crystal/config.json +69 -3
  83. data/tracks/d/config/exercise_readme.go.tmpl +16 -0
  84. data/tracks/d/config.json +54 -3
  85. data/tracks/d/exercises/bob/README.md +49 -0
  86. data/tracks/d/exercises/circular-buffer/README.md +81 -0
  87. data/tracks/d/exercises/crypto-square/README.md +105 -0
  88. data/tracks/d/exercises/difference-of-squares/README.md +50 -0
  89. data/tracks/d/exercises/etl/README.md +82 -0
  90. data/tracks/d/exercises/gigasecond/README.md +42 -0
  91. data/tracks/d/exercises/hamming/README.md +73 -0
  92. data/tracks/d/exercises/hello-world/README.md +52 -0
  93. data/tracks/d/exercises/leap/README.md +64 -0
  94. data/tracks/d/exercises/nucleotide-count/README.md +64 -0
  95. data/tracks/d/exercises/pangram/README.md +46 -0
  96. data/tracks/d/exercises/raindrops/README.md +55 -0
  97. data/tracks/d/exercises/react/README.md +50 -0
  98. data/tracks/d/exercises/rna-transcription/README.md +56 -0
  99. data/tracks/d/exercises/robot-name/README.md +53 -0
  100. data/tracks/d/exercises/roman-numerals/README.md +80 -0
  101. data/tracks/d/exercises/series/README.md +58 -0
  102. data/tracks/d/exercises/triangle/README.md +57 -0
  103. data/tracks/delphi/config/maintainers.json +25 -0
  104. data/tracks/ecmascript/config/maintainers.json +35 -0
  105. data/tracks/elisp/config/exercise_readme.go.tmpl +16 -0
  106. data/tracks/elisp/config.json +79 -22
  107. data/tracks/elisp/exercises/allergies/README.md +37 -0
  108. data/tracks/elisp/exercises/anagram/README.md +13 -0
  109. data/tracks/elisp/exercises/atbash-cipher/README.md +34 -0
  110. data/tracks/elisp/exercises/binary/README.md +35 -0
  111. data/tracks/elisp/exercises/bob/README.md +18 -0
  112. data/tracks/elisp/exercises/difference-of-squares/README.md +19 -0
  113. data/tracks/elisp/exercises/etl/README.md +51 -0
  114. data/tracks/elisp/exercises/gigasecond/README.md +11 -0
  115. data/tracks/elisp/exercises/grains/README.md +34 -0
  116. data/tracks/elisp/exercises/hamming/README.md +42 -0
  117. data/tracks/elisp/exercises/hello-world/README.md +21 -0
  118. data/tracks/elisp/exercises/leap/README.md +33 -0
  119. data/tracks/elisp/exercises/nucleotide-count/README.md +33 -0
  120. data/tracks/elisp/exercises/perfect-numbers/README.md +24 -0
  121. data/tracks/elisp/exercises/phone-number/README.md +34 -0
  122. data/tracks/elisp/exercises/raindrops/README.md +24 -0
  123. data/tracks/elisp/exercises/rna-transcription/README.md +25 -0
  124. data/tracks/elisp/exercises/robot-name/README.md +22 -0
  125. data/tracks/elisp/exercises/roman-numerals/README.md +49 -0
  126. data/tracks/elisp/exercises/word-count/README.md +19 -0
  127. data/tracks/elixir/config/maintainers.json +35 -0
  128. data/tracks/elm/config/exercise_readme.go.tmpl +16 -0
  129. data/tracks/elm/config.json +96 -5
  130. data/tracks/elm/exercises/accumulate/README.md +65 -0
  131. data/tracks/elm/exercises/allergies/README.md +67 -0
  132. data/tracks/elm/exercises/anagram/README.md +43 -0
  133. data/tracks/elm/exercises/atbash-cipher/README.md +64 -0
  134. data/tracks/elm/exercises/bob/README.md +48 -0
  135. data/tracks/elm/exercises/difference-of-squares/README.md +49 -0
  136. data/tracks/elm/exercises/etl/README.md +81 -0
  137. data/tracks/elm/exercises/gigasecond/README.md +41 -0
  138. data/tracks/elm/exercises/grade-school/README.md +72 -0
  139. data/tracks/elm/exercises/grains/README.md +64 -0
  140. data/tracks/elm/exercises/hamming/README.md +72 -0
  141. data/tracks/elm/exercises/hello-world/README.md +51 -0
  142. data/tracks/elm/exercises/largest-series-product/README.md +50 -0
  143. data/tracks/elm/exercises/leap/README.md +63 -0
  144. data/tracks/elm/exercises/list-ops/README.md +40 -0
  145. data/tracks/elm/exercises/nucleotide-count/README.md +63 -0
  146. data/tracks/elm/exercises/pangram/README.md +45 -0
  147. data/tracks/elm/exercises/phone-number/README.md +64 -0
  148. data/tracks/elm/exercises/raindrops/README.md +54 -0
  149. data/tracks/elm/exercises/rna-transcription/README.md +55 -0
  150. data/tracks/elm/exercises/robot-simulator/README.md +64 -0
  151. data/tracks/elm/exercises/roman-numerals/README.md +79 -0
  152. data/tracks/elm/exercises/run-length-encoding/README.md +60 -0
  153. data/tracks/elm/exercises/say/README.md +99 -0
  154. data/tracks/elm/exercises/scrabble-score/README.md +74 -0
  155. data/tracks/elm/exercises/series/README.md +57 -0
  156. data/tracks/elm/exercises/space-age/README.md +54 -0
  157. data/tracks/elm/exercises/strain/README.md +70 -0
  158. data/tracks/elm/exercises/sublist/README.md +51 -0
  159. data/tracks/elm/exercises/sum-of-multiples/README.md +48 -0
  160. data/tracks/elm/exercises/triangle/README.md +56 -0
  161. data/tracks/elm/exercises/word-count/README.md +49 -0
  162. data/tracks/fortran/config/exercise_readme.go.tmpl +16 -0
  163. data/tracks/fortran/config.json +21 -5
  164. data/tracks/fortran/exercises/bob/README.md +18 -0
  165. data/tracks/fortran/exercises/difference-of-squares/README.md +19 -0
  166. data/tracks/fortran/exercises/hamming/README.md +42 -0
  167. data/tracks/fortran/exercises/hello-world/README.md +21 -0
  168. data/tracks/fortran/exercises/pangram/README.md +15 -0
  169. data/tracks/fortran/exercises/raindrops/README.md +24 -0
  170. data/tracks/fortran/exercises/rna-transcription/README.md +25 -0
  171. data/tracks/go/config/maintainers.json +85 -0
  172. data/tracks/go/config.json +2 -2
  173. data/tracks/groovy/config/exercise_readme.go.tmpl +16 -0
  174. data/tracks/groovy/exercises/difference-of-squares/README.md +33 -0
  175. data/tracks/groovy/exercises/gigasecond/README.md +25 -0
  176. data/tracks/groovy/exercises/grains/README.md +48 -0
  177. data/tracks/groovy/exercises/hamming/README.md +56 -0
  178. data/tracks/groovy/exercises/hello-world/README.md +35 -0
  179. data/tracks/groovy/exercises/leap/README.md +47 -0
  180. data/tracks/groovy/exercises/nth-prime/README.md +29 -0
  181. data/tracks/groovy/exercises/phone-number/README.md +48 -0
  182. data/tracks/groovy/exercises/raindrops/README.md +38 -0
  183. data/tracks/groovy/exercises/rna-transcription/README.md +39 -0
  184. data/tracks/groovy/exercises/robot-name/README.md +36 -0
  185. data/tracks/groovy/exercises/roman-numerals/README.md +63 -0
  186. data/tracks/groovy/exercises/word-count/README.md +33 -0
  187. data/tracks/haxe/config/exercise_readme.go.tmpl +16 -0
  188. data/tracks/haxe/config.json +0 -2
  189. data/tracks/haxe/exercises/bob/README.md +18 -0
  190. data/tracks/haxe/exercises/hello-world/README.md +21 -0
  191. data/tracks/idris/config/exercise_readme.go.tmpl +16 -0
  192. data/tracks/idris/config.json +9 -3
  193. data/tracks/idris/exercises/hamming/README.md +42 -0
  194. data/tracks/idris/exercises/hello-world/README.md +21 -0
  195. data/tracks/idris/exercises/leap/README.md +33 -0
  196. data/tracks/java/config/maintainers.json +45 -0
  197. data/tracks/java/exercises/hello-world/TUTORIAL.md +1 -1
  198. data/tracks/javascript/config/maintainers.json +85 -0
  199. data/tracks/julia/config/exercise_readme.go.tmpl +16 -0
  200. data/tracks/julia/config.json +81 -5
  201. data/tracks/julia/exercises/anagram/README.md +13 -0
  202. data/tracks/julia/exercises/atbash-cipher/README.md +34 -0
  203. data/tracks/julia/exercises/bob/README.md +18 -0
  204. data/tracks/julia/exercises/complex-numbers/README.md +24 -0
  205. data/tracks/julia/exercises/custom-set/README.md +16 -0
  206. data/tracks/julia/exercises/difference-of-squares/README.md +19 -0
  207. data/tracks/julia/exercises/etl/README.md +51 -0
  208. data/tracks/julia/exercises/gigasecond/README.md +11 -0
  209. data/tracks/julia/exercises/hamming/README.md +42 -0
  210. data/tracks/julia/exercises/hello-world/README.md +21 -0
  211. data/tracks/julia/exercises/isogram/README.md +19 -0
  212. data/tracks/julia/exercises/leap/README.md +33 -0
  213. data/tracks/julia/exercises/luhn/README.md +71 -0
  214. data/tracks/julia/exercises/nucleotide-count/README.md +33 -0
  215. data/tracks/julia/exercises/pangram/README.md +15 -0
  216. data/tracks/julia/exercises/pascals-triangle/README.md +21 -0
  217. data/tracks/julia/exercises/raindrops/README.md +24 -0
  218. data/tracks/julia/exercises/rna-transcription/README.md +25 -0
  219. data/tracks/julia/exercises/robot-name/README.md +41 -0
  220. data/tracks/julia/exercises/roman-numerals/README.md +49 -0
  221. data/tracks/julia/exercises/rotational-cipher/README.md +59 -0
  222. data/tracks/julia/exercises/scrabble-score/README.md +44 -0
  223. data/tracks/julia/exercises/secret-handshake/README.md +35 -0
  224. data/tracks/julia/exercises/sieve/README.md +34 -0
  225. data/tracks/julia/exercises/transpose/README.md +65 -0
  226. data/tracks/julia/exercises/trinary/README.md +28 -0
  227. data/tracks/julia/exercises/word-count/README.md +19 -0
  228. data/tracks/lfe/config/exercise_readme.go.tmpl +16 -0
  229. data/tracks/lfe/config.json +125 -33
  230. data/tracks/lfe/exercises/accumulate/README.md +51 -0
  231. data/tracks/lfe/exercises/allergies/README.md +53 -0
  232. data/tracks/lfe/exercises/anagram/README.md +29 -0
  233. data/tracks/lfe/exercises/atbash-cipher/README.md +50 -0
  234. data/tracks/lfe/exercises/bank-account/README.md +46 -0
  235. data/tracks/lfe/exercises/beer-song/README.md +343 -0
  236. data/tracks/lfe/exercises/binary/README.md +51 -0
  237. data/tracks/lfe/exercises/bob/README.md +34 -0
  238. data/tracks/lfe/exercises/circular-buffer/README.md +66 -0
  239. data/tracks/lfe/exercises/clock/README.md +29 -0
  240. data/tracks/lfe/exercises/difference-of-squares/README.md +35 -0
  241. data/tracks/lfe/exercises/etl/README.md +67 -0
  242. data/tracks/lfe/exercises/gigasecond/README.md +27 -0
  243. data/tracks/lfe/exercises/grade-school/README.md +58 -0
  244. data/tracks/lfe/exercises/grains/README.md +50 -0
  245. data/tracks/lfe/exercises/hamming/README.md +58 -0
  246. data/tracks/lfe/exercises/largest-series-product/README.md +36 -0
  247. data/tracks/lfe/exercises/leap/README.md +49 -0
  248. data/tracks/lfe/exercises/luhn/README.md +87 -0
  249. data/tracks/lfe/exercises/meetup/README.md +46 -0
  250. data/tracks/lfe/exercises/nucleotide-count/README.md +49 -0
  251. data/tracks/lfe/exercises/parallel-letter-frequency/README.md +27 -0
  252. data/tracks/lfe/exercises/phone-number/README.md +50 -0
  253. data/tracks/lfe/exercises/rna-transcription/README.md +41 -0
  254. data/tracks/lfe/exercises/robot-simulator/README.md +50 -0
  255. data/tracks/lfe/exercises/series/README.md +43 -0
  256. data/tracks/lfe/exercises/space-age/README.md +40 -0
  257. data/tracks/lfe/exercises/strain/README.md +56 -0
  258. data/tracks/lfe/exercises/sum-of-multiples/README.md +34 -0
  259. data/tracks/lfe/exercises/trinary/README.md +44 -0
  260. data/tracks/lfe/exercises/word-count/README.md +35 -0
  261. data/tracks/lua/config/maintainers.json +35 -0
  262. data/tracks/lua/config.json +225 -3
  263. data/tracks/nasm/config/exercise_readme.go.tmpl +16 -0
  264. data/tracks/nasm/config.json +0 -5
  265. data/tracks/nim/config/exercise_readme.go.tmpl +16 -0
  266. data/tracks/nim/config.json +56 -19
  267. data/tracks/nim/exercises/anagram/README.md +13 -0
  268. data/tracks/nim/exercises/binary/README.md +35 -0
  269. data/tracks/nim/exercises/bob/README.md +18 -0
  270. data/tracks/nim/exercises/difference-of-squares/README.md +19 -0
  271. data/tracks/nim/exercises/hamming/README.md +42 -0
  272. data/tracks/nim/exercises/hello-world/README.md +21 -0
  273. data/tracks/nim/exercises/leap/README.md +33 -0
  274. data/tracks/nim/exercises/nucleotide-count/README.md +33 -0
  275. data/tracks/nim/exercises/queen-attack/README.md +33 -0
  276. data/tracks/nim/exercises/raindrops/README.md +24 -0
  277. data/tracks/nim/exercises/react/README.md +19 -0
  278. data/tracks/nim/exercises/rna-transcription/README.md +25 -0
  279. data/tracks/nim/exercises/triangle/README.md +26 -0
  280. data/tracks/nim/exercises/word-count/README.md +19 -0
  281. data/tracks/objective-c/config/exercise_readme.go.tmpl +16 -0
  282. data/tracks/objective-c/config/maintainers.json +35 -0
  283. data/tracks/objective-c/config.json +168 -47
  284. data/tracks/objective-c/exercises/acronym/README.md +32 -0
  285. data/tracks/objective-c/exercises/all-your-base/README.md +52 -0
  286. data/tracks/objective-c/exercises/allergies/README.md +54 -0
  287. data/tracks/objective-c/exercises/anagram/README.md +30 -0
  288. data/tracks/objective-c/exercises/atbash-cipher/README.md +51 -0
  289. data/tracks/objective-c/exercises/beer-song/README.md +344 -0
  290. data/tracks/objective-c/exercises/binary-search/README.md +58 -0
  291. data/tracks/objective-c/exercises/bob/README.md +35 -0
  292. data/tracks/objective-c/exercises/bracket-push/README.md +27 -0
  293. data/tracks/objective-c/exercises/clock/README.md +30 -0
  294. data/tracks/objective-c/exercises/crypto-square/README.md +91 -0
  295. data/tracks/objective-c/exercises/difference-of-squares/README.md +36 -0
  296. data/tracks/objective-c/exercises/etl/README.md +68 -0
  297. data/tracks/objective-c/exercises/flatten-array/README.md +35 -0
  298. data/tracks/objective-c/exercises/gigasecond/README.md +28 -0
  299. data/tracks/objective-c/exercises/grade-school/README.md +59 -0
  300. data/tracks/objective-c/exercises/hamming/README.md +59 -0
  301. data/tracks/objective-c/exercises/hello-world/README.md +38 -0
  302. data/tracks/objective-c/exercises/isogram/README.md +36 -0
  303. data/tracks/objective-c/exercises/largest-series-product/README.md +37 -0
  304. data/tracks/objective-c/exercises/leap/README.md +50 -0
  305. data/tracks/objective-c/exercises/luhn/README.md +88 -0
  306. data/tracks/objective-c/exercises/meetup/README.md +47 -0
  307. data/tracks/objective-c/exercises/nucleotide-count/README.md +50 -0
  308. data/tracks/objective-c/exercises/pangram/README.md +32 -0
  309. data/tracks/objective-c/exercises/pascals-triangle/README.md +38 -0
  310. data/tracks/objective-c/exercises/perfect-numbers/README.md +41 -0
  311. data/tracks/objective-c/exercises/phone-number/README.md +51 -0
  312. data/tracks/objective-c/exercises/raindrops/README.md +41 -0
  313. data/tracks/objective-c/exercises/rna-transcription/README.md +42 -0
  314. data/tracks/objective-c/exercises/robot-name/README.md +39 -0
  315. data/tracks/objective-c/exercises/roman-numerals/README.md +66 -0
  316. data/tracks/objective-c/exercises/run-length-encoding/README.md +47 -0
  317. data/tracks/objective-c/exercises/scrabble-score/README.md +61 -0
  318. data/tracks/objective-c/exercises/secret-handshake/README.md +52 -0
  319. data/tracks/objective-c/exercises/sieve/README.md +51 -0
  320. data/tracks/objective-c/exercises/space-age/README.md +41 -0
  321. data/tracks/objective-c/exercises/sublist/README.md +38 -0
  322. data/tracks/objective-c/exercises/sum-of-multiples/README.md +35 -0
  323. data/tracks/objective-c/exercises/transpose/README.md +82 -0
  324. data/tracks/objective-c/exercises/triangle/README.md +43 -0
  325. data/tracks/objective-c/exercises/word-count/README.md +36 -0
  326. data/tracks/plsql/config/exercise_readme.go.tmpl +16 -0
  327. data/tracks/plsql/config.json +0 -2
  328. data/tracks/plsql/exercises/binary/README.md +55 -0
  329. data/tracks/plsql/exercises/difference-of-squares/README.md +39 -0
  330. data/tracks/plsql/exercises/gigasecond/README.md +31 -0
  331. data/tracks/plsql/exercises/grains/README.md +54 -0
  332. data/tracks/plsql/exercises/hamming/README.md +62 -0
  333. data/tracks/plsql/exercises/leap/README.md +53 -0
  334. data/tracks/plsql/exercises/nth-prime/README.md +35 -0
  335. data/tracks/plsql/exercises/raindrops/README.md +44 -0
  336. data/tracks/plsql/exercises/rna-transcription/README.md +45 -0
  337. data/tracks/plsql/exercises/roman-numerals/README.md +69 -0
  338. data/tracks/powershell/config.json +8 -5
  339. data/tracks/prolog/config/exercise_readme.go.tmpl +16 -0
  340. data/tracks/prolog/config.json +33 -5
  341. data/tracks/prolog/exercises/anagram/README.md +13 -0
  342. data/tracks/prolog/exercises/binary/README.md +35 -0
  343. data/tracks/prolog/exercises/grains/README.md +34 -0
  344. data/tracks/prolog/exercises/hamming/README.md +42 -0
  345. data/tracks/prolog/exercises/hello-world/README.md +21 -0
  346. data/tracks/prolog/exercises/leap/README.md +33 -0
  347. data/tracks/prolog/exercises/nucleotide-count/README.md +33 -0
  348. data/tracks/prolog/exercises/rna-transcription/README.md +25 -0
  349. data/tracks/prolog/exercises/space-age/README.md +24 -0
  350. data/tracks/prolog/exercises/sum-of-multiples/README.md +18 -0
  351. data/tracks/prolog/exercises/triangle/README.md +26 -0
  352. data/tracks/python/requirements-travis.txt +1 -1
  353. data/tracks/r/config/maintainers.json +35 -0
  354. data/tracks/r/config.json +1 -1
  355. data/tracks/racket/README.md +1 -1
  356. data/tracks/racket/config/exercise_readme.go.tmpl +16 -0
  357. data/tracks/racket/config.json +93 -25
  358. data/tracks/racket/exercises/accumulate/README.md +60 -0
  359. data/tracks/racket/exercises/acronym/README.md +40 -0
  360. data/tracks/racket/exercises/allergies/README.md +62 -0
  361. data/tracks/racket/exercises/anagram/README.md +38 -0
  362. data/tracks/racket/exercises/bob/README.md +43 -0
  363. data/tracks/racket/exercises/difference-of-squares/README.md +44 -0
  364. data/tracks/racket/exercises/etl/README.md +76 -0
  365. data/tracks/racket/exercises/gigasecond/README.md +36 -0
  366. data/tracks/racket/exercises/grains/README.md +59 -0
  367. data/tracks/racket/exercises/grep/README.md +96 -0
  368. data/tracks/racket/exercises/hamming/README.md +67 -0
  369. data/tracks/racket/exercises/hello-world/README.md +46 -0
  370. data/tracks/racket/exercises/leap/README.md +58 -0
  371. data/tracks/racket/exercises/list-ops/README.md +35 -0
  372. data/tracks/racket/exercises/nucleotide-count/README.md +58 -0
  373. data/tracks/racket/exercises/perfect-numbers/README.md +49 -0
  374. data/tracks/racket/exercises/phone-number/README.md +59 -0
  375. data/tracks/racket/exercises/raindrops/README.md +49 -0
  376. data/tracks/racket/exercises/rna-transcription/README.md +50 -0
  377. data/tracks/racket/exercises/roman-numerals/README.md +74 -0
  378. data/tracks/racket/exercises/say/README.md +94 -0
  379. data/tracks/racket/exercises/scrabble-score/README.md +69 -0
  380. data/tracks/racket/exercises/word-count/README.md +44 -0
  381. data/tracks/ruby/exercises/binary-search-tree/.meta/solutions/binary_search_tree.rb +4 -2
  382. data/tracks/ruby/exercises/binary-search-tree/binary_search_tree_test.rb +13 -4
  383. data/tracks/scala/config/maintainers.json +29 -0
  384. data/tracks/scala/exercises/atbash-cipher/example.scala +4 -1
  385. data/tracks/scala/exercises/atbash-cipher/src/test/scala/AtbashCipherTest.scala +64 -0
  386. data/tracks/scala/exercises/roman-numerals/example.scala +2 -2
  387. data/tracks/scala/exercises/roman-numerals/src/test/scala/RomanNumeralsTest.scala +40 -39
  388. data/tracks/scala/testgen/src/main/scala/AtbashCipherTestGenerator.scala +16 -0
  389. data/tracks/scala/testgen/src/main/scala/RomanNumeralsTestGenerator.scala +15 -0
  390. data/tracks/scheme/config/exercise_readme.go.tmpl +16 -0
  391. data/tracks/scheme/config.json +42 -3
  392. data/tracks/scheme/exercises/anagram/README.md +13 -0
  393. data/tracks/scheme/exercises/bob/README.md +18 -0
  394. data/tracks/scheme/exercises/difference-of-squares/README.md +19 -0
  395. data/tracks/scheme/exercises/grains/README.md +34 -0
  396. data/tracks/scheme/exercises/hamming/README.md +42 -0
  397. data/tracks/scheme/exercises/hello-world/README.md +21 -0
  398. data/tracks/scheme/exercises/leap/README.md +33 -0
  399. data/tracks/scheme/exercises/list-ops/README.md +10 -0
  400. data/tracks/scheme/exercises/nucleotide-count/README.md +33 -0
  401. data/tracks/scheme/exercises/phone-number/README.md +34 -0
  402. data/tracks/scheme/exercises/raindrops/README.md +24 -0
  403. data/tracks/scheme/exercises/rna-transcription/README.md +25 -0
  404. data/tracks/scheme/exercises/robot-name/README.md +22 -0
  405. data/tracks/scheme/exercises/scrabble-score/README.md +44 -0
  406. data/tracks/sml/config/maintainers.json +25 -0
  407. data/tracks/typescript/config/exercise_readme.go.tmpl +16 -0
  408. data/tracks/typescript/config/maintainers.json +25 -0
  409. data/tracks/typescript/config.json +0 -2
  410. data/tracks/typescript/exercises/anagram/README.md +39 -0
  411. data/tracks/typescript/exercises/beer-song/README.md +353 -0
  412. data/tracks/typescript/exercises/bob/README.md +44 -0
  413. data/tracks/typescript/exercises/difference-of-squares/README.md +45 -0
  414. data/tracks/typescript/exercises/etl/README.md +77 -0
  415. data/tracks/typescript/exercises/food-chain/README.md +96 -0
  416. data/tracks/typescript/exercises/gigasecond/README.md +37 -0
  417. data/tracks/typescript/exercises/grade-school/README.md +68 -0
  418. data/tracks/typescript/exercises/hamming/README.md +68 -0
  419. data/tracks/typescript/exercises/hello-world/README.md +47 -0
  420. data/tracks/typescript/exercises/leap/README.md +59 -0
  421. data/tracks/typescript/exercises/pangram/README.md +41 -0
  422. data/tracks/typescript/exercises/phone-number/README.md +60 -0
  423. data/tracks/typescript/exercises/raindrops/README.md +50 -0
  424. data/tracks/typescript/exercises/rna-transcription/README.md +51 -0
  425. data/tracks/typescript/exercises/robot-name/README.md +48 -0
  426. data/tracks/typescript/exercises/say/README.md +95 -0
  427. data/tracks/typescript/exercises/scrabble-score/README.md +70 -0
  428. data/tracks/typescript/exercises/space-age/README.md +50 -0
  429. data/tracks/typescript/exercises/word-count/README.md +45 -0
  430. data/tracks/typescript/exercises/wordy/README.md +89 -0
  431. data/tracks/vbnet/config/exercise_readme.go.tmpl +16 -0
  432. data/tracks/vbnet/config.json +28 -12
  433. data/tracks/vbnet/exercises/accumulate/README.md +41 -0
  434. data/tracks/vbnet/exercises/allergies/README.md +43 -0
  435. data/tracks/vbnet/exercises/anagram/README.md +19 -0
  436. data/tracks/vbnet/exercises/atbash-cipher/README.md +40 -0
  437. data/tracks/vbnet/exercises/binary/README.md +41 -0
  438. data/tracks/vbnet/exercises/bob/README.md +24 -0
  439. data/tracks/vbnet/exercises/crypto-square/README.md +80 -0
  440. metadata +401 -4
  441. data/tracks/scala/exercises/atbash-cipher/src/main/scala/Atbash.scala +0 -3
  442. data/tracks/scala/exercises/atbash-cipher/src/test/scala/atbash_test.scala +0 -48
@@ -4,133 +4,190 @@
4
4
  "test_pattern": "_spec.cr",
5
5
  "exercises": [
6
6
  {
7
+ "uuid": "4078cf4d-4361-4c55-aa18-63a3fe269be1",
7
8
  "slug": "hello-world",
9
+ "core": false,
10
+ "unlocked_by": null,
8
11
  "difficulty": 1,
9
12
  "topics": [
10
13
 
11
14
  ]
12
15
  },
13
16
  {
17
+ "uuid": "080b6ab1-576f-4566-a065-5aae761f51af",
14
18
  "slug": "hamming",
19
+ "core": false,
20
+ "unlocked_by": null,
15
21
  "difficulty": 1,
16
22
  "topics": [
17
23
 
18
24
  ]
19
25
  },
20
26
  {
27
+ "uuid": "16228cbe-49ff-4d15-b121-d84b40a56a66",
21
28
  "slug": "gigasecond",
29
+ "core": false,
30
+ "unlocked_by": null,
22
31
  "difficulty": 1,
23
32
  "topics": [
24
33
 
25
34
  ]
26
35
  },
27
36
  {
37
+ "uuid": "99e661d7-7094-400f-a31d-48cf96d2cbc6",
28
38
  "slug": "rna-transcription",
39
+ "core": false,
40
+ "unlocked_by": null,
29
41
  "difficulty": 1,
30
42
  "topics": [
31
43
 
32
44
  ]
33
45
  },
34
46
  {
47
+ "uuid": "7ad02ecf-036c-4510-b6ad-93bf1d5f0d28",
35
48
  "slug": "bob",
49
+ "core": false,
50
+ "unlocked_by": null,
36
51
  "difficulty": 1,
37
52
  "topics": [
38
53
 
39
54
  ]
40
55
  },
41
56
  {
57
+ "uuid": "a1a95816-b9e8-480e-beca-477531cdaa4c",
42
58
  "slug": "raindrops",
59
+ "core": false,
60
+ "unlocked_by": null,
43
61
  "difficulty": 1,
44
62
  "topics": [
45
63
 
46
64
  ]
47
65
  },
48
66
  {
67
+ "uuid": "607eb4f7-2650-47e1-81b9-a6fc2f0367cd",
49
68
  "slug": "leap",
69
+ "core": false,
70
+ "unlocked_by": null,
50
71
  "difficulty": 1,
51
72
  "topics": [
52
73
 
53
74
  ]
54
75
  },
55
76
  {
77
+ "uuid": "19298c02-b34f-4f11-aad6-5da4838967a0",
56
78
  "slug": "difference-of-squares",
79
+ "core": false,
80
+ "unlocked_by": null,
57
81
  "difficulty": 1,
58
82
  "topics": [
59
83
 
60
84
  ]
61
85
  },
62
86
  {
87
+ "uuid": "1546e974-866e-4d4d-bec5-d08f91c47fa3",
63
88
  "slug": "pangram",
89
+ "core": false,
90
+ "unlocked_by": null,
64
91
  "difficulty": 1,
65
92
  "topics": [
66
93
 
67
94
  ]
68
95
  },
69
96
  {
97
+ "uuid": "ec55356b-61ab-4164-94d0-791133718fa8",
70
98
  "slug": "largest-series-product",
99
+ "core": false,
100
+ "unlocked_by": null,
71
101
  "difficulty": 1,
72
102
  "topics": [
73
103
 
74
104
  ]
75
105
  },
76
106
  {
107
+ "uuid": "b8a4ccaa-4676-4921-baad-ec194a429b75",
77
108
  "slug": "bracket-push",
109
+ "core": false,
110
+ "unlocked_by": null,
78
111
  "difficulty": 1,
79
112
  "topics": [
80
113
 
81
114
  ]
82
115
  },
83
116
  {
117
+ "uuid": "a2e06a49-1311-47eb-8d57-6fbc5abbe7e2",
84
118
  "slug": "sieve",
119
+ "core": false,
120
+ "unlocked_by": null,
85
121
  "difficulty": 1,
86
122
  "topics": [
87
123
 
88
124
  ]
89
125
  },
90
126
  {
127
+ "uuid": "45a2591a-493d-4bab-be64-847243b4554b",
91
128
  "slug": "roman-numerals",
129
+ "core": false,
130
+ "unlocked_by": null,
92
131
  "difficulty": 1,
93
132
  "topics": [
94
133
 
95
134
  ]
96
135
  },
97
136
  {
137
+ "uuid": "7dc99d5e-95af-4f91-85d4-ddb4c9dbb758",
98
138
  "slug": "atbash-cipher",
139
+ "core": false,
140
+ "unlocked_by": null,
99
141
  "difficulty": 1,
100
142
  "topics": [
101
143
 
102
144
  ]
103
145
  },
104
146
  {
147
+ "uuid": "2df0796e-951d-4f10-8a2e-5c54f2443f10",
105
148
  "slug": "anagram",
149
+ "core": false,
150
+ "unlocked_by": null,
106
151
  "difficulty": 1,
107
152
  "topics": [
108
153
 
109
154
  ]
110
155
  },
111
156
  {
157
+ "uuid": "2da645e4-7e72-4377-a7ac-184b67ff8a63",
112
158
  "slug": "react",
159
+ "core": false,
160
+ "unlocked_by": null,
113
161
  "difficulty": 1,
114
162
  "topics": [
115
163
 
116
164
  ]
117
165
  },
118
166
  {
167
+ "uuid": "5373e713-f2ab-4b1e-b934-92969174bc48",
119
168
  "slug": "acronym",
169
+ "core": false,
170
+ "unlocked_by": null,
120
171
  "difficulty": 1,
121
172
  "topics": [
122
173
 
123
174
  ]
124
175
  },
125
176
  {
177
+ "uuid": "d0c862a3-7d1f-4081-b378-f631ccf54fac",
126
178
  "slug": "binary",
179
+ "core": false,
180
+ "unlocked_by": null,
127
181
  "difficulty": 1,
128
182
  "topics": [
129
183
 
130
184
  ]
131
185
  },
132
186
  {
187
+ "uuid": "415605d8-cc98-4eb1-9467-5c970e69f137",
133
188
  "slug": "binary-search-tree",
189
+ "core": false,
190
+ "unlocked_by": null,
134
191
  "difficulty": 1,
135
192
  "topics": [
136
193
  "data structures",
@@ -140,36 +197,45 @@
140
197
  ]
141
198
  },
142
199
  {
200
+ "uuid": "bed338cd-2308-4a15-9225-699d1d09ed49",
143
201
  "slug": "run-length-encoding",
202
+ "core": false,
203
+ "unlocked_by": null,
144
204
  "difficulty": 1,
145
205
  "topics": [
146
206
 
147
207
  ]
148
208
  },
149
209
  {
210
+ "uuid": "1f04c451-a96a-4299-9386-6774b08f55ed",
150
211
  "slug": "pascals-triangle",
212
+ "core": false,
213
+ "unlocked_by": null,
151
214
  "difficulty": 1,
152
215
  "topics": [
153
216
 
154
217
  ]
155
218
  },
156
219
  {
220
+ "uuid": "c85a6334-2f76-44ce-8ca5-0e997cc65d03",
157
221
  "slug": "forth",
222
+ "core": false,
223
+ "unlocked_by": null,
158
224
  "difficulty": 3,
159
225
  "topics": [
160
226
 
161
227
  ]
162
228
  },
163
229
  {
230
+ "uuid": "85b2450c-727d-4b84-9904-02c37f385610",
164
231
  "slug": "flatten-array",
232
+ "core": false,
233
+ "unlocked_by": null,
165
234
  "difficulty": 1,
166
235
  "topics": [
167
236
 
168
237
  ]
169
238
  }
170
- ],
171
- "deprecated": [
172
-
173
239
  ],
174
240
  "foregone": [
175
241
 
@@ -0,0 +1,16 @@
1
+ # {{ .Spec.Name }}
2
+
3
+ {{ .Spec.Description -}}
4
+ {{- with .Hints }}
5
+ {{ . }}
6
+ {{ end }}
7
+ {{- with .TrackInsert }}
8
+ {{ . }}
9
+ {{ end }}
10
+ {{- with .Spec.Credits -}}
11
+ ## Source
12
+
13
+ {{ . }}
14
+ {{ end }}
15
+ ## Submitting Incomplete Solutions
16
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
data/tracks/d/config.json CHANGED
@@ -6,21 +6,30 @@
6
6
  "active": true,
7
7
  "exercises": [
8
8
  {
9
+ "uuid": "a91c2216-9331-4485-ae4b-190ee9e2a7f8",
9
10
  "slug": "hello-world",
11
+ "core": false,
12
+ "unlocked_by": null,
10
13
  "difficulty": 1,
11
14
  "topics": [
12
15
  "language basics"
13
16
  ]
14
17
  },
15
18
  {
19
+ "uuid": "9f52d6a7-1002-4614-afc3-cce03187c59b",
16
20
  "slug": "leap",
21
+ "core": false,
22
+ "unlocked_by": null,
17
23
  "difficulty": 1,
18
24
  "topics": [
19
25
  "language basics"
20
26
  ]
21
27
  },
22
28
  {
29
+ "uuid": "8c976f92-fcfa-45f0-9bd1-2353822e51e8",
23
30
  "slug": "gigasecond",
31
+ "core": false,
32
+ "unlocked_by": null,
24
33
  "difficulty": 1,
25
34
  "topics": [
26
35
  "language basics",
@@ -28,7 +37,10 @@
28
37
  ]
29
38
  },
30
39
  {
40
+ "uuid": "208f9a34-bdf2-4c2b-b102-f0ef1a5d04fe",
31
41
  "slug": "rna-transcription",
42
+ "core": false,
43
+ "unlocked_by": null,
32
44
  "difficulty": 2,
33
45
  "topics": [
34
46
  "string manipulation",
@@ -37,7 +49,10 @@
37
49
  ]
38
50
  },
39
51
  {
52
+ "uuid": "f6d21f86-b4d3-4dec-b830-8e19e1018548",
40
53
  "slug": "raindrops",
54
+ "core": false,
55
+ "unlocked_by": null,
41
56
  "difficulty": 1,
42
57
  "topics": [
43
58
  "language basics",
@@ -45,7 +60,10 @@
45
60
  ]
46
61
  },
47
62
  {
63
+ "uuid": "99ee69a6-2c0f-4c7c-86f9-bee1633b4f51",
48
64
  "slug": "bob",
65
+ "core": false,
66
+ "unlocked_by": null,
49
67
  "difficulty": 2,
50
68
  "topics": [
51
69
  "string manipulation",
@@ -53,7 +71,10 @@
53
71
  ]
54
72
  },
55
73
  {
74
+ "uuid": "dc631076-1eb8-4120-bd8f-dccf33df9a3f",
56
75
  "slug": "etl",
76
+ "core": false,
77
+ "unlocked_by": null,
57
78
  "difficulty": 2,
58
79
  "topics": [
59
80
  "string manipulation",
@@ -62,7 +83,10 @@
62
83
  ]
63
84
  },
64
85
  {
86
+ "uuid": "87c87444-2349-40ab-a9a3-c0f0d2e200d6",
65
87
  "slug": "hamming",
88
+ "core": false,
89
+ "unlocked_by": null,
66
90
  "difficulty": 2,
67
91
  "topics": [
68
92
  "error handling",
@@ -70,7 +94,10 @@
70
94
  ]
71
95
  },
72
96
  {
97
+ "uuid": "23b23ac0-62ef-4a22-b634-d64206c8a226",
73
98
  "slug": "nucleotide-count",
99
+ "core": false,
100
+ "unlocked_by": null,
74
101
  "difficulty": 3,
75
102
  "topics": [
76
103
  "classes",
@@ -79,7 +106,10 @@
79
106
  ]
80
107
  },
81
108
  {
109
+ "uuid": "d7dd5df3-ff36-47ee-88db-e0f974a4cb19",
82
110
  "slug": "robot-name",
111
+ "core": false,
112
+ "unlocked_by": null,
83
113
  "difficulty": 3,
84
114
  "topics": [
85
115
  "classes",
@@ -87,7 +117,10 @@
87
117
  ]
88
118
  },
89
119
  {
120
+ "uuid": "d6c67e30-c950-40b6-b6db-0fa6df5652af",
90
121
  "slug": "difference-of-squares",
122
+ "core": false,
123
+ "unlocked_by": null,
91
124
  "difficulty": 2,
92
125
  "topics": [
93
126
  "control-flow (foreach)",
@@ -97,7 +130,10 @@
97
130
  ]
98
131
  },
99
132
  {
133
+ "uuid": "5647c00e-d4be-4546-bac3-6a3e1670c2a1",
100
134
  "slug": "roman-numerals",
135
+ "core": false,
136
+ "unlocked_by": null,
101
137
  "difficulty": 3,
102
138
  "topics": [
103
139
  "string manipulation",
@@ -106,7 +142,10 @@
106
142
  ]
107
143
  },
108
144
  {
145
+ "uuid": "14c3c478-9dc1-470b-8517-35c3ceac3f47",
109
146
  "slug": "series",
147
+ "core": false,
148
+ "unlocked_by": null,
110
149
  "difficulty": 3,
111
150
  "topics": [
112
151
  "string manipulation",
@@ -114,7 +153,10 @@
114
153
  ]
115
154
  },
116
155
  {
156
+ "uuid": "c9acd967-fc2a-4c74-b584-2572ce690e71",
117
157
  "slug": "triangle",
158
+ "core": false,
159
+ "unlocked_by": null,
118
160
  "difficulty": 2,
119
161
  "topics": [
120
162
  "language basics",
@@ -122,7 +164,10 @@
122
164
  ]
123
165
  },
124
166
  {
167
+ "uuid": "45afc532-3f6c-4b9e-90f6-c53a79551af1",
125
168
  "slug": "crypto-square",
169
+ "core": false,
170
+ "unlocked_by": null,
126
171
  "difficulty": 3,
127
172
  "topics": [
128
173
  "string manipulation",
@@ -131,7 +176,10 @@
131
176
  ]
132
177
  },
133
178
  {
179
+ "uuid": "2ba799a8-eab9-44a0-9b31-a10e72baa38b",
134
180
  "slug": "circular-buffer",
181
+ "core": false,
182
+ "unlocked_by": null,
135
183
  "difficulty": 4,
136
184
  "topics": [
137
185
  "class templates",
@@ -139,7 +187,10 @@
139
187
  ]
140
188
  },
141
189
  {
190
+ "uuid": "a4cf4571-1f97-438c-9c02-3fe7c52ee25f",
142
191
  "slug": "pangram",
192
+ "core": false,
193
+ "unlocked_by": null,
143
194
  "difficulty": 1,
144
195
  "topics": [
145
196
  "language basics",
@@ -148,7 +199,10 @@
148
199
  ]
149
200
  },
150
201
  {
202
+ "uuid": "31dd1e53-2b5e-4d40-ac4c-a68fe5e6635c",
151
203
  "slug": "react",
204
+ "core": false,
205
+ "unlocked_by": null,
152
206
  "difficulty": 10,
153
207
  "topics": [
154
208
  "reactive programming",
@@ -158,9 +212,6 @@
158
212
  "delegates"
159
213
  ]
160
214
  }
161
- ],
162
- "deprecated": [
163
-
164
215
  ],
165
216
  "foregone": [
166
217
 
@@ -0,0 +1,49 @@
1
+ # Bob
2
+
3
+ Bob is a lackadaisical teenager. In conversation, his responses are very limited.
4
+
5
+ Bob answers 'Sure.' if you ask him a question.
6
+
7
+ He answers 'Whoa, chill out!' if you yell at him.
8
+
9
+ He says 'Fine. Be that way!' if you address him without actually saying
10
+ anything.
11
+
12
+ He answers 'Whatever.' to anything else.
13
+
14
+ ## Getting Started
15
+
16
+ Make sure you have read [D page](http://exercism.io/languages/dlang) on
17
+ exercism.io. This covers the basic information on setting up the development
18
+ environment expected by the exercises.
19
+
20
+ ## Passing the Tests
21
+
22
+ Get the first test compiling, linking and passing by following the [three
23
+ rules of test-driven development](http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd).
24
+ Create just enough structure by declaring namespaces, functions, classes,
25
+ etc., to satisfy any compiler errors and get the test to fail. Then write
26
+ just enough code to get the test to pass. Once you've done that,
27
+ uncomment the next test by moving the following line past the next test.
28
+
29
+ ```D
30
+ static if (all_tests_enabled)
31
+ ```
32
+
33
+ This may result in compile errors as new constructs may be invoked that
34
+ you haven't yet declared or defined. Again, fix the compile errors minimally
35
+ to get a failing test, then change the code minimally to pass the test,
36
+ refactor your implementation for readability and expressiveness and then
37
+ go on to the next test.
38
+
39
+ Try to use standard D facilities in preference to writing your own
40
+ low-level algorithms or facilities by hand. [DRefLanguage](https://dlang.org/spec/spec.html)
41
+ and [DReference](https://dlang.org/phobos/index.html) are references to the D language and D standard library.
42
+
43
+
44
+ ## Source
45
+
46
+ Inspired by the 'Deaf Grandma' exercise in Chris Pine's Learn to Program tutorial. [http://pine.fm/LearnToProgram/?Chapter=06](http://pine.fm/LearnToProgram/?Chapter=06)
47
+
48
+ ## Submitting Incomplete Solutions
49
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,81 @@
1
+ # Circular Buffer
2
+
3
+ A circular buffer, cyclic buffer or ring buffer is a data structure that
4
+ uses a single, fixed-size buffer as if it were connected end-to-end.
5
+
6
+ A circular buffer first starts empty and of some predefined length. For
7
+ example, this is a 7-element buffer:
8
+
9
+ [ ][ ][ ][ ][ ][ ][ ]
10
+
11
+ Assume that a 1 is written into the middle of the buffer (exact starting
12
+ location does not matter in a circular buffer):
13
+
14
+ [ ][ ][ ][1][ ][ ][ ]
15
+
16
+ Then assume that two more elements are added — 2 & 3 — which get
17
+ appended after the 1:
18
+
19
+ [ ][ ][ ][1][2][3][ ]
20
+
21
+ If two elements are then removed from the buffer, the oldest values
22
+ inside the buffer are removed. The two elements removed, in this case,
23
+ are 1 & 2, leaving the buffer with just a 3:
24
+
25
+ [ ][ ][ ][ ][ ][3][ ]
26
+
27
+ If the buffer has 7 elements then it is completely full:
28
+
29
+ [6][7][8][9][3][4][5]
30
+
31
+ When the buffer is full an error will be raised, alerting the client
32
+ that further writes are blocked until a slot becomes free.
33
+
34
+ The client can opt to overwrite the oldest data with a forced write. In
35
+ this case, two more elements — A & B — are added and they overwrite the
36
+ 3 & 4:
37
+
38
+ [6][7][8][9][A][B][5]
39
+
40
+ Finally, if two elements are now removed then what would be returned is
41
+ not 3 & 4 but 5 & 6 because A & B overwrote the 3 & the 4 yielding the
42
+ buffer with:
43
+
44
+ [ ][7][8][9][A][B][ ]
45
+
46
+ ## Getting Started
47
+
48
+ Make sure you have read [D page](http://exercism.io/languages/dlang) on
49
+ exercism.io. This covers the basic information on setting up the development
50
+ environment expected by the exercises.
51
+
52
+ ## Passing the Tests
53
+
54
+ Get the first test compiling, linking and passing by following the [three
55
+ rules of test-driven development](http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd).
56
+ Create just enough structure by declaring namespaces, functions, classes,
57
+ etc., to satisfy any compiler errors and get the test to fail. Then write
58
+ just enough code to get the test to pass. Once you've done that,
59
+ uncomment the next test by moving the following line past the next test.
60
+
61
+ ```D
62
+ static if (all_tests_enabled)
63
+ ```
64
+
65
+ This may result in compile errors as new constructs may be invoked that
66
+ you haven't yet declared or defined. Again, fix the compile errors minimally
67
+ to get a failing test, then change the code minimally to pass the test,
68
+ refactor your implementation for readability and expressiveness and then
69
+ go on to the next test.
70
+
71
+ Try to use standard D facilities in preference to writing your own
72
+ low-level algorithms or facilities by hand. [DRefLanguage](https://dlang.org/spec/spec.html)
73
+ and [DReference](https://dlang.org/phobos/index.html) are references to the D language and D standard library.
74
+
75
+
76
+ ## Source
77
+
78
+ Wikipedia [http://en.wikipedia.org/wiki/Circular_buffer](http://en.wikipedia.org/wiki/Circular_buffer)
79
+
80
+ ## Submitting Incomplete Solutions
81
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,105 @@
1
+ # Crypto Square
2
+
3
+ Implement the classic method for composing secret messages called a square code.
4
+
5
+ Given an English text, output the encoded version of that text.
6
+
7
+ First, the input is normalized: the spaces and punctuation are removed
8
+ from the English text and the message is downcased.
9
+
10
+ Then, the normalized characters are broken into rows. These rows can be
11
+ regarded as forming a rectangle when printed with intervening newlines.
12
+
13
+ For example, the sentence
14
+
15
+ > If man was meant to stay on the ground, god would have given us roots.
16
+
17
+ is normalized to:
18
+
19
+ > ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots
20
+
21
+ The plaintext should be organized in to a rectangle. The size of the
22
+ rectangle (`r x c`) should be decided by the length of the message,
23
+ such that `c >= r` and `c - r <= 1`, where `c` is the number of columns
24
+ and `r` is the number of rows.
25
+
26
+ Our normalized text is 54 characters long, dictating a rectangle with
27
+ `c = 8` and `r = 7`:
28
+
29
+ ```plain
30
+ ifmanwas
31
+ meanttos
32
+ tayonthe
33
+ groundgo
34
+ dwouldha
35
+ vegivenu
36
+ sroots
37
+ ```
38
+
39
+ The coded message is obtained by reading down the columns going left to
40
+ right.
41
+
42
+ The message above is coded as:
43
+
44
+ ```plain
45
+ imtgdvsfearwermayoogoanouuiontnnlvtwttddesaohghnsseoau
46
+ ```
47
+
48
+ Output the encoded text in chunks. Phrases that fill perfect squares
49
+ `(r X r)` should be output in `r`-length chunks separated by spaces.
50
+ Imperfect squares will have `n` empty spaces. Those spaces should be distributed evenly across the last `n` rows.
51
+
52
+ ```plain
53
+ imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau
54
+ ```
55
+
56
+ Notice that were we to stack these, we could visually decode the
57
+ cyphertext back in to the original message:
58
+
59
+ ```plain
60
+ imtgdvs
61
+ fearwer
62
+ mayoogo
63
+ anouuio
64
+ ntnnlvt
65
+ wttddes
66
+ aohghn
67
+ sseoau
68
+ ```
69
+
70
+ ## Getting Started
71
+
72
+ Make sure you have read [D page](http://exercism.io/languages/dlang) on
73
+ exercism.io. This covers the basic information on setting up the development
74
+ environment expected by the exercises.
75
+
76
+ ## Passing the Tests
77
+
78
+ Get the first test compiling, linking and passing by following the [three
79
+ rules of test-driven development](http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd).
80
+ Create just enough structure by declaring namespaces, functions, classes,
81
+ etc., to satisfy any compiler errors and get the test to fail. Then write
82
+ just enough code to get the test to pass. Once you've done that,
83
+ uncomment the next test by moving the following line past the next test.
84
+
85
+ ```D
86
+ static if (all_tests_enabled)
87
+ ```
88
+
89
+ This may result in compile errors as new constructs may be invoked that
90
+ you haven't yet declared or defined. Again, fix the compile errors minimally
91
+ to get a failing test, then change the code minimally to pass the test,
92
+ refactor your implementation for readability and expressiveness and then
93
+ go on to the next test.
94
+
95
+ Try to use standard D facilities in preference to writing your own
96
+ low-level algorithms or facilities by hand. [DRefLanguage](https://dlang.org/spec/spec.html)
97
+ and [DReference](https://dlang.org/phobos/index.html) are references to the D language and D standard library.
98
+
99
+
100
+ ## Source
101
+
102
+ J Dalbey's Programming Practice problems [http://users.csc.calpoly.edu/~jdalbey/103/Projects/ProgrammingPractice.html](http://users.csc.calpoly.edu/~jdalbey/103/Projects/ProgrammingPractice.html)
103
+
104
+ ## Submitting Incomplete Solutions
105
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.