trackler 2.2.1.45 → 2.2.1.46

Sign up to get free protection for your applications and to get access to all the features.
Files changed (508) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/complex-numbers/description.md +27 -0
  4. data/problem-specifications/exercises/crypto-square/canonical-data.json +39 -43
  5. data/problem-specifications/exercises/crypto-square/description.md +6 -4
  6. data/problem-specifications/exercises/hamming/canonical-data.json +5 -5
  7. data/problem-specifications/exercises/kindergarten-garden/description.md +10 -10
  8. data/problem-specifications/exercises/leap/canonical-data.json +2 -2
  9. data/problem-specifications/exercises/markdown/canonical-data.json +2 -2
  10. data/problem-specifications/exercises/nucleotide-count/canonical-data.json +12 -1
  11. data/problem-specifications/exercises/pangram/canonical-data.json +7 -1
  12. data/problem-specifications/exercises/queen-attack/canonical-data.json +83 -26
  13. data/problem-specifications/exercises/space-age/description.md +1 -2
  14. data/problem-specifications/exercises/zipper/canonical-data.json +671 -0
  15. data/tracks/bash/config.json +13 -1
  16. data/tracks/bash/exercises/atbash-cipher/README.md +45 -0
  17. data/tracks/bash/exercises/atbash-cipher/atbash_cipher_tests.sh +73 -0
  18. data/tracks/bash/exercises/atbash-cipher/example.sh +14 -0
  19. data/tracks/bash/exercises/gigasecond/.meta/hints.md +33 -0
  20. data/tracks/bash/exercises/two-fer/README.md +0 -22
  21. data/tracks/c/exercises/allergies/src/allergies.h +9 -9
  22. data/tracks/c/exercises/allergies/src/example.c +2 -2
  23. data/tracks/c/exercises/allergies/src/example.h +9 -9
  24. data/tracks/c/exercises/allergies/test/test_allergies.c +34 -34
  25. data/tracks/c/exercises/clock/test/test_clock.c +0 -52
  26. data/tracks/c/exercises/meetup/test/test_meetup.c +604 -114
  27. data/tracks/c/exercises/nucleotide-count/src/example.c +10 -10
  28. data/tracks/c/exercises/palindrome-products/src/example.c +8 -8
  29. data/tracks/c/exercises/palindrome-products/src/example.h +5 -5
  30. data/tracks/c/exercises/palindrome-products/test/test_palindrome_products.c +8 -6
  31. data/tracks/c/exercises/robot-simulator/src/example.c +19 -19
  32. data/tracks/c/exercises/robot-simulator/src/robot_simulator.h +24 -24
  33. data/tracks/c/exercises/robot-simulator/test/test_robot_simulator.c +35 -34
  34. data/tracks/c/exercises/series/src/example.c +10 -10
  35. data/tracks/c/exercises/series/src/series.h +5 -5
  36. data/tracks/c/exercises/series/test/test_series.c +77 -30
  37. data/tracks/c/exercises/sieve/src/example.c +17 -17
  38. data/tracks/c/exercises/sieve/src/sieve.h +2 -2
  39. data/tracks/c/exercises/sieve/test/test_sieve.c +6 -6
  40. data/tracks/c/exercises/space-age/src/example.c +1 -1
  41. data/tracks/c/exercises/space-age/src/example.h +3 -3
  42. data/tracks/c/exercises/space-age/test/test_space_age.c +2 -0
  43. data/tracks/c/exercises/sum-of-multiples/src/example.c +3 -1
  44. data/tracks/c/exercises/sum-of-multiples/test/test_sum_of_multiples.c +17 -0
  45. data/tracks/c/exercises/triangle/src/example.c +4 -4
  46. data/tracks/c/exercises/triangle/src/example.h +4 -4
  47. data/tracks/c/exercises/triangle/src/triangle.h +1 -1
  48. data/tracks/c/exercises/triangle/test/test_triangle.c +18 -16
  49. data/tracks/c/exercises/word-count/src/example.c +24 -24
  50. data/tracks/c/exercises/word-count/src/word_count.h +3 -3
  51. data/tracks/c/exercises/word-count/test/test_word_count.c +139 -139
  52. data/tracks/cfml/exercises/acronym/README.md +31 -0
  53. data/tracks/cfml/exercises/atbash-cipher/README.md +50 -0
  54. data/tracks/cfml/exercises/bob/README.md +34 -0
  55. data/tracks/cfml/exercises/diamond/README.md +75 -0
  56. data/tracks/cfml/exercises/difference-of-squares/README.md +35 -0
  57. data/tracks/cfml/exercises/flatten-array/README.md +34 -0
  58. data/tracks/cfml/exercises/gigasecond/README.md +27 -0
  59. data/tracks/cfml/exercises/grains/README.md +50 -0
  60. data/tracks/cfml/exercises/hamming/README.md +58 -0
  61. data/tracks/cfml/exercises/hello-world/README.md +37 -0
  62. data/tracks/cfml/exercises/isogram/README.md +35 -0
  63. data/tracks/cfml/exercises/largest-series-product/README.md +36 -0
  64. data/tracks/cfml/exercises/leap/README.md +16 -0
  65. data/tracks/cfml/exercises/luhn/README.md +87 -0
  66. data/tracks/cfml/exercises/markdown/README.md +34 -0
  67. data/tracks/cfml/exercises/nth-prime/README.md +31 -0
  68. data/tracks/cfml/exercises/pangram/README.md +31 -0
  69. data/tracks/cfml/exercises/pig-latin/README.md +40 -0
  70. data/tracks/cfml/exercises/raindrops/README.md +40 -0
  71. data/tracks/cfml/exercises/rna-transcription/README.md +41 -0
  72. data/tracks/cfml/exercises/saddle-points/README.md +49 -0
  73. data/tracks/cfml/exercises/scrabble-score/README.md +60 -0
  74. data/tracks/cfml/exercises/secret-handshake/README.md +51 -0
  75. data/tracks/cfml/exercises/space-age/README.md +41 -0
  76. data/tracks/cfml/exercises/sum-of-multiples/README.md +34 -0
  77. data/tracks/cfml/exercises/triangle/README.md +42 -0
  78. data/tracks/cfml/exercises/word-count/README.md +35 -0
  79. data/tracks/clojure/config.json +10 -0
  80. data/tracks/clojure/exercises/spiral-matrix/README.md +32 -0
  81. data/tracks/clojure/exercises/spiral-matrix/project.clj +4 -0
  82. data/tracks/clojure/exercises/spiral-matrix/src/example.clj +11 -0
  83. data/tracks/clojure/exercises/spiral-matrix/src/spiral_matrix.clj +3 -0
  84. data/tracks/clojure/exercises/spiral-matrix/test/spiral_matrix_test.clj +58 -0
  85. data/tracks/common-lisp/config.json +20 -0
  86. data/tracks/common-lisp/exercises/hello-world/README.md +68 -0
  87. data/tracks/common-lisp/exercises/hello-world/example.lisp +9 -0
  88. data/tracks/common-lisp/exercises/hello-world/hello-world-test.lisp +21 -0
  89. data/tracks/common-lisp/exercises/hello-world/hello-world.lisp +6 -0
  90. data/tracks/common-lisp/exercises/perfect-numbers/README.md +72 -0
  91. data/tracks/common-lisp/exercises/perfect-numbers/example.lisp +17 -0
  92. data/tracks/common-lisp/exercises/perfect-numbers/perfect-numbers-test.lisp +56 -0
  93. data/tracks/common-lisp/exercises/perfect-numbers/perfect-numbers.lisp +7 -0
  94. data/tracks/cpp/.travis.yml +34 -14
  95. data/tracks/cpp/docs/INSTALLATION.md +17 -28
  96. data/tracks/cpp/docs/TESTS.md +13 -21
  97. data/tracks/crystal/config.json +10 -0
  98. data/tracks/crystal/exercises/triangle/spec/triangle_spec.cr +60 -0
  99. data/tracks/crystal/exercises/triangle/src/example.cr +31 -0
  100. data/tracks/crystal/exercises/triangle/src/triangle.cr +1 -0
  101. data/tracks/crystal/generator/spec/remote_data_file_spec.cr +0 -1
  102. data/tracks/crystal/generator/src/generators/triangle.cr +38 -0
  103. data/tracks/crystal/generator/src/remote_data_file.cr +1 -1
  104. data/tracks/csharp/exercises/difference-of-squares/DifferenceOfSquares.cs +4 -4
  105. data/tracks/csharp/exercises/difference-of-squares/DifferenceOfSquaresTest.cs +22 -27
  106. data/tracks/csharp/exercises/difference-of-squares/Example.cs +5 -5
  107. data/tracks/csharp/exercises/error-handling/ErrorHandlingTest.cs +4 -4
  108. data/tracks/csharp/exercises/flatten-array/Example.cs +1 -1
  109. data/tracks/csharp/exercises/flatten-array/FlattenArray.cs +1 -1
  110. data/tracks/csharp/exercises/flatten-array/FlattenArrayTest.cs +106 -72
  111. data/tracks/csharp/exercises/largest-series-product/LargestSeriesProductTest.cs +24 -98
  112. data/tracks/csharp/exercises/minesweeper/Example.cs +3 -3
  113. data/tracks/csharp/exercises/minesweeper/Minesweeper.cs +1 -1
  114. data/tracks/csharp/exercises/minesweeper/MinesweeperTest.cs +155 -57
  115. data/tracks/csharp/generators/Exercises/DifferenceOfSquares.cs +25 -0
  116. data/tracks/csharp/generators/Exercises/FlattenArray.cs +36 -0
  117. data/tracks/csharp/generators/Exercises/LargestSeriesProduct.cs +18 -0
  118. data/tracks/csharp/generators/Exercises/Minesweeper.cs +32 -0
  119. data/tracks/d/docs/EXERCISE_README_INSERT.md +1 -1
  120. data/tracks/d/exercises/bob/README.md +1 -1
  121. data/tracks/d/exercises/circular-buffer/README.md +1 -1
  122. data/tracks/d/exercises/crypto-square/README.md +1 -1
  123. data/tracks/d/exercises/difference-of-squares/README.md +1 -1
  124. data/tracks/d/exercises/etl/README.md +1 -1
  125. data/tracks/d/exercises/gigasecond/README.md +1 -1
  126. data/tracks/d/exercises/hamming/README.md +1 -1
  127. data/tracks/d/exercises/hello-world/README.md +1 -1
  128. data/tracks/d/exercises/leap/README.md +1 -1
  129. data/tracks/d/exercises/nucleotide-count/README.md +1 -1
  130. data/tracks/d/exercises/pangram/README.md +1 -1
  131. data/tracks/d/exercises/raindrops/README.md +1 -1
  132. data/tracks/d/exercises/react/README.md +1 -1
  133. data/tracks/d/exercises/rna-transcription/README.md +1 -1
  134. data/tracks/d/exercises/robot-name/README.md +1 -1
  135. data/tracks/d/exercises/roman-numerals/README.md +1 -1
  136. data/tracks/d/exercises/series/README.md +1 -1
  137. data/tracks/d/exercises/triangle/README.md +1 -1
  138. data/tracks/dart/CONTRIBUTING.md +61 -0
  139. data/tracks/dart/README.md +10 -47
  140. data/tracks/dart/config.json +13 -1
  141. data/tracks/dart/exercises/anagram/README.md +10 -0
  142. data/tracks/dart/exercises/bob/README.md +11 -0
  143. data/tracks/dart/exercises/difference-of-squares/README.md +11 -0
  144. data/tracks/dart/exercises/gigasecond/README.md +11 -0
  145. data/tracks/dart/exercises/gigasecond/test/gigasecond_test.dart +56 -33
  146. data/tracks/dart/exercises/hamming/README.md +11 -0
  147. data/tracks/dart/exercises/hamming/lib/example.dart +2 -2
  148. data/tracks/dart/exercises/hamming/test/hamming_test.dart +41 -24
  149. data/tracks/dart/exercises/hello-world/README.md +11 -0
  150. data/tracks/dart/exercises/leap/README.md +12 -1
  151. data/tracks/dart/exercises/phone-number/README.md +56 -0
  152. data/tracks/dart/exercises/phone-number/lib/example.dart +45 -0
  153. data/tracks/dart/exercises/phone-number/lib/phone_number.dart +3 -0
  154. data/tracks/dart/exercises/phone-number/pubspec.lock +293 -0
  155. data/tracks/dart/exercises/phone-number/pubspec.yaml +3 -0
  156. data/tracks/dart/exercises/phone-number/test/phone_number_test.dart +66 -0
  157. data/tracks/dart/exercises/raindrops/README.md +35 -0
  158. data/tracks/dart/exercises/rna-transcription/README.md +11 -0
  159. data/tracks/dart/exercises/word-count/README.md +14 -3
  160. data/tracks/delphi/docs/RESOURCES.md +10 -11
  161. data/tracks/elixir/exercises/hello-world/hello_world.exs +1 -1
  162. data/tracks/elixir/exercises/secret-handshake/README.md +3 -5
  163. data/tracks/elm/exercises/isogram/Isogram.example.elm +4 -4
  164. data/tracks/erlang/config.json +10 -0
  165. data/tracks/erlang/exercises/sieve/README.md +88 -0
  166. data/tracks/erlang/exercises/sieve/include/exercism.hrl +11 -0
  167. data/tracks/erlang/exercises/sieve/rebar.config +30 -0
  168. data/tracks/erlang/exercises/sieve/src/example.erl +16 -0
  169. data/tracks/erlang/exercises/sieve/src/sieve.app.src +9 -0
  170. data/tracks/erlang/exercises/sieve/src/sieve.erl +8 -0
  171. data/tracks/erlang/exercises/sieve/test/sieve_tests.erl +38 -0
  172. data/tracks/fsharp/.gitignore +2 -1
  173. data/tracks/fsharp/exercises/crypto-square/CryptoSquareTest.fs +10 -6
  174. data/tracks/fsharp/exercises/leap/LeapTest.fs +2 -2
  175. data/tracks/fsharp/exercises/pangram/PangramTest.fs +5 -1
  176. data/tracks/fsharp/exercises/queen-attack/QueenAttackTest.fs +7 -7
  177. data/tracks/fsharp/exercises/run-length-encoding/Example.fs +2 -2
  178. data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncodingTest.fs +42 -30
  179. data/tracks/fsharp/generators/Generators.fs +21 -8
  180. data/tracks/gnu-apl/test.apl +4 -4
  181. data/tracks/go/README.md +1 -2
  182. data/tracks/go/config/maintainers.json +5 -6
  183. data/tracks/groovy/config.json +23 -0
  184. data/tracks/groovy/exercises/binary-search/BinarySearch.groovy +14 -0
  185. data/tracks/groovy/exercises/binary-search/BinarySearchSpec.groovy +56 -0
  186. data/tracks/groovy/exercises/binary-search/Example.groovy +43 -0
  187. data/tracks/groovy/exercises/binary-search/README.md +59 -0
  188. data/tracks/groovy/exercises/triangle/Example.groovy +23 -0
  189. data/tracks/groovy/exercises/triangle/README.md +42 -0
  190. data/tracks/groovy/exercises/triangle/Triangle.groovy +15 -0
  191. data/tracks/groovy/exercises/triangle/TriangleSpec.groovy +66 -0
  192. data/tracks/haskell/config.json +9 -0
  193. data/tracks/haskell/exercises/all-your-base/package.yaml +1 -1
  194. data/tracks/haskell/exercises/all-your-base/test/Tests.hs +18 -18
  195. data/tracks/haskell/exercises/bowling/package.yaml +1 -1
  196. data/tracks/haskell/exercises/bowling/test/Tests.hs +9 -9
  197. data/tracks/haskell/exercises/change/package.yaml +1 -1
  198. data/tracks/haskell/exercises/change/test/Tests.hs +5 -0
  199. data/tracks/haskell/exercises/complex-numbers/README.md +92 -0
  200. data/tracks/haskell/exercises/complex-numbers/examples/success-standard/package.yaml +16 -0
  201. data/tracks/haskell/exercises/complex-numbers/examples/success-standard/src/ComplexNumbers.hs +50 -0
  202. data/tracks/haskell/exercises/complex-numbers/package.yaml +20 -0
  203. data/tracks/haskell/exercises/complex-numbers/src/ComplexNumbers.hs +45 -0
  204. data/tracks/haskell/exercises/complex-numbers/stack.yaml +1 -0
  205. data/tracks/haskell/exercises/complex-numbers/test/Tests.hs +194 -0
  206. data/tracks/haskell/exercises/crypto-square/package.yaml +1 -1
  207. data/tracks/haskell/exercises/crypto-square/test/Tests.hs +20 -12
  208. data/tracks/haskell/exercises/dominoes/package.yaml +1 -1
  209. data/tracks/haskell/exercises/forth/package.yaml +1 -1
  210. data/tracks/haskell/exercises/forth/test/Tests.hs +4 -3
  211. data/tracks/haskell/exercises/hamming/package.yaml +1 -1
  212. data/tracks/haskell/exercises/hamming/test/Tests.hs +6 -6
  213. data/tracks/haskell/exercises/isogram/package.yaml +1 -1
  214. data/tracks/haskell/exercises/isogram/test/Tests.hs +2 -2
  215. data/tracks/haskell/exercises/leap/package.yaml +1 -1
  216. data/tracks/haskell/exercises/leap/test/Tests.hs +1 -1
  217. data/tracks/haskell/exercises/pascals-triangle/package.yaml +1 -1
  218. data/tracks/haskell/exercises/pig-latin/examples/success-standard/src/PigLatin.hs +2 -0
  219. data/tracks/haskell/exercises/pig-latin/package.yaml +1 -1
  220. data/tracks/haskell/exercises/pig-latin/test/Tests.hs +8 -0
  221. data/tracks/haskell/exercises/queen-attack/package.yaml +1 -1
  222. data/tracks/haskell/exercises/rna-transcription/package.yaml +1 -1
  223. data/tracks/haskell/exercises/rna-transcription/test/Tests.hs +8 -8
  224. data/tracks/haskell/exercises/robot-simulator/package.yaml +1 -1
  225. data/tracks/haskell/exercises/secret-handshake/package.yaml +1 -1
  226. data/tracks/haskell/exercises/secret-handshake/test/Tests.hs +0 -3
  227. data/tracks/haskell/exercises/sum-of-multiples/package.yaml +1 -1
  228. data/tracks/haskell/exercises/sum-of-multiples/test/Tests.hs +4 -0
  229. data/tracks/haskell/exercises/zipper/package.yaml +1 -1
  230. data/tracks/haskell/exercises/zipper/test/Tests.hs +23 -0
  231. data/tracks/java/config.json +85 -13
  232. data/tracks/java/config/maintainers.json +1 -1
  233. data/tracks/java/exercises/accumulate/README.md +0 -3
  234. data/tracks/java/exercises/acronym/.meta/.version +1 -0
  235. data/tracks/java/exercises/acronym/README.md +0 -1
  236. data/tracks/java/exercises/acronym/src/test/java/AcronymTest.java +0 -3
  237. data/tracks/java/exercises/all-your-base/.meta/.version +1 -0
  238. data/tracks/java/exercises/all-your-base/README.md +1 -1
  239. data/tracks/java/exercises/all-your-base/src/test/java/BaseConverterTest.java +0 -3
  240. data/tracks/java/exercises/allergies/README.md +0 -1
  241. data/tracks/java/exercises/atbash-cipher/README.md +2 -1
  242. data/tracks/java/exercises/beer-song/README.md +1 -1
  243. data/tracks/java/exercises/binary/README.md +2 -0
  244. data/tracks/java/exercises/book-store/README.md +5 -5
  245. data/tracks/java/exercises/bowling/README.md +20 -6
  246. data/tracks/java/exercises/change/.meta/.version +1 -0
  247. data/tracks/java/exercises/change/README.md +1 -1
  248. data/tracks/java/exercises/change/src/test/java/ChangeCalculatorTest.java +0 -3
  249. data/tracks/java/exercises/circular-buffer/README.md +13 -6
  250. data/tracks/java/exercises/clock/.meta/.version +1 -0
  251. data/tracks/java/exercises/clock/src/test/java/ClockAddTest.java +0 -3
  252. data/tracks/java/exercises/clock/src/test/java/ClockCreationTest.java +0 -3
  253. data/tracks/java/exercises/clock/src/test/java/ClockEqualTest.java +0 -3
  254. data/tracks/java/exercises/collatz-conjecture/.meta/.version +1 -0
  255. data/tracks/java/exercises/collatz-conjecture/README.md +1 -1
  256. data/tracks/java/exercises/collatz-conjecture/src/test/java/CollatzCalculatorTest.java +0 -3
  257. data/tracks/java/exercises/complex-numbers/README.md +27 -0
  258. data/tracks/java/exercises/crypto-square/README.md +10 -8
  259. data/tracks/java/exercises/diamond/.meta/.version +1 -0
  260. data/tracks/java/exercises/diamond/README.md +6 -6
  261. data/tracks/java/exercises/diamond/src/test/java/DiamondPrinterTest.java +0 -3
  262. data/tracks/java/exercises/difference-of-squares/.meta/.version +1 -0
  263. data/tracks/java/exercises/difference-of-squares/src/test/java/DifferenceOfSquaresCalculatorTest.java +0 -3
  264. data/tracks/java/exercises/etl/README.md +2 -0
  265. data/tracks/java/exercises/flatten-array/.meta/.version +1 -0
  266. data/tracks/java/exercises/flatten-array/README.md +1 -2
  267. data/tracks/java/exercises/flatten-array/src/test/java/FlattenerTest.java +0 -3
  268. data/tracks/java/exercises/food-chain/README.md +1 -1
  269. data/tracks/java/exercises/forth/.meta/.version +1 -0
  270. data/tracks/java/exercises/forth/src/test/java/ForthEvaluatorTest.java +0 -3
  271. data/tracks/java/exercises/grade-school/README.md +0 -1
  272. data/tracks/java/exercises/hamming/.meta/.version +1 -0
  273. data/tracks/java/exercises/hamming/src/test/java/HammingTest.java +0 -3
  274. data/tracks/java/exercises/house/README.md +1 -2
  275. data/tracks/java/exercises/isogram/README.md +2 -1
  276. data/tracks/java/exercises/kindergarten-garden/README.md +13 -13
  277. data/tracks/java/exercises/linked-list/README.md +10 -10
  278. data/tracks/java/exercises/list-ops/.meta/.version +1 -0
  279. data/tracks/java/exercises/list-ops/README.md +4 -0
  280. data/tracks/java/exercises/list-ops/src/test/java/ListOpsTest.java +0 -3
  281. data/tracks/java/exercises/luhn/README.md +7 -7
  282. data/tracks/java/exercises/matrix/README.md +6 -4
  283. data/tracks/java/exercises/meetup/README.md +1 -2
  284. data/tracks/java/exercises/minesweeper/.meta/.version +1 -0
  285. data/tracks/java/exercises/minesweeper/src/test/java/MinesweeperBoardTest.java +0 -3
  286. data/tracks/java/exercises/nucleotide-count/README.md +8 -22
  287. data/tracks/java/exercises/ocr-numbers/README.md +5 -5
  288. data/tracks/java/exercises/octal/README.md +6 -2
  289. data/tracks/java/exercises/palindrome-products/README.md +15 -16
  290. data/tracks/java/exercises/pangram/.meta/.version +1 -0
  291. data/tracks/java/exercises/pangram/README.md +1 -1
  292. data/tracks/java/exercises/pangram/src/test/java/PangramCheckerTest.java +0 -3
  293. data/tracks/java/exercises/pascals-triangle/.meta/.version +1 -0
  294. data/tracks/java/exercises/pascals-triangle/README.md +1 -1
  295. data/tracks/java/exercises/pascals-triangle/src/test/java/PascalsTriangleGeneratorTest.java +0 -3
  296. data/tracks/java/exercises/perfect-numbers/.meta/.version +1 -0
  297. data/tracks/java/exercises/perfect-numbers/README.md +2 -2
  298. data/tracks/java/exercises/perfect-numbers/src/test/java/NaturalNumberTest.java +0 -3
  299. data/tracks/java/exercises/phone-number/README.md +3 -2
  300. data/tracks/java/exercises/pythagorean-triplet/README.md +3 -3
  301. data/tracks/java/exercises/queen-attack/README.md +1 -1
  302. data/tracks/java/exercises/rectangles/README.md +7 -7
  303. data/tracks/java/exercises/rna-transcription/.meta/.version +1 -0
  304. data/tracks/java/exercises/rna-transcription/src/test/java/RnaTranscriptionTest.java +0 -3
  305. data/tracks/java/exercises/roman-numerals/README.md +1 -1
  306. data/tracks/java/exercises/rotational-cipher/README.md +2 -1
  307. data/tracks/java/exercises/run-length-encoding/README.md +4 -4
  308. data/tracks/java/exercises/saddle-points/.meta/.version +1 -0
  309. data/tracks/java/exercises/saddle-points/README.md +1 -1
  310. data/tracks/java/exercises/saddle-points/src/test/java/MatrixTest.java +0 -3
  311. data/tracks/java/exercises/scrabble-score/.meta/.version +1 -0
  312. data/tracks/java/exercises/scrabble-score/README.md +3 -1
  313. data/tracks/java/exercises/scrabble-score/src/test/java/ScrabbleScoreTest.java +0 -3
  314. data/tracks/java/exercises/secret-handshake/README.md +1 -1
  315. data/tracks/java/exercises/simple-cipher/README.md +1 -1
  316. data/tracks/java/exercises/simple-linked-list/src/test/java/SimpleLinkedListTest.java +25 -25
  317. data/tracks/java/exercises/space-age/README.md +1 -1
  318. data/tracks/java/exercises/spiral-matrix/.meta/.version +1 -0
  319. data/tracks/java/exercises/spiral-matrix/README.md +2 -2
  320. data/tracks/java/exercises/spiral-matrix/src/test/java/SpiralMatrixBuilderTest.java +0 -3
  321. data/tracks/java/exercises/sum-of-multiples/README.md +0 -3
  322. data/tracks/java/exercises/tournament/README.md +6 -5
  323. data/tracks/java/exercises/transpose/README.md +7 -7
  324. data/tracks/java/exercises/triangle/README.md +9 -6
  325. data/tracks/java/exercises/trinary/README.md +1 -1
  326. data/tracks/java/exercises/twelve-days/README.md +1 -1
  327. data/tracks/java/exercises/two-fer/README.md +1 -2
  328. data/tracks/java/exercises/word-count/README.md +1 -2
  329. data/tracks/java/exercises/word-search/.meta/.version +1 -0
  330. data/tracks/java/exercises/word-search/README.md +1 -1
  331. data/tracks/java/exercises/word-search/src/test/java/WordSearcherTest.java +0 -3
  332. data/tracks/java/exercises/wordy/README.md +0 -5
  333. data/tracks/javascript/config.json +13 -0
  334. data/tracks/javascript/docs/TESTS.md +1 -1
  335. data/tracks/javascript/exercises/diffie-hellman/example.js +1 -1
  336. data/tracks/javascript/exercises/hello-world/example.js +2 -3
  337. data/tracks/javascript/exercises/meetup/example.js +24 -27
  338. data/tracks/javascript/exercises/meetup/meetup.spec.js +0 -6
  339. data/tracks/javascript/exercises/nucleotide-count/nucleotide-count.spec.js +1 -1
  340. data/tracks/javascript/exercises/protein-translation/README.md +73 -0
  341. data/tracks/javascript/exercises/protein-translation/example.js +68 -0
  342. data/tracks/javascript/exercises/protein-translation/protein-translation.spec.js +63 -0
  343. data/tracks/julia/README.md +1 -1
  344. data/tracks/kotlin/config.json +11 -0
  345. data/tracks/kotlin/exercises/acronym/README.md +0 -1
  346. data/tracks/kotlin/exercises/all-your-base/README.md +1 -1
  347. data/tracks/kotlin/exercises/allergies/README.md +0 -1
  348. data/tracks/kotlin/exercises/atbash-cipher/README.md +2 -1
  349. data/tracks/kotlin/exercises/beer-song/README.md +1 -1
  350. data/tracks/kotlin/exercises/binary/README.md +2 -0
  351. data/tracks/kotlin/exercises/change/README.md +1 -1
  352. data/tracks/kotlin/exercises/collatz-conjecture/README.md +1 -1
  353. data/tracks/kotlin/exercises/complex-numbers/README.md +27 -0
  354. data/tracks/kotlin/exercises/diamond/README.md +6 -6
  355. data/tracks/kotlin/exercises/etl/README.md +2 -0
  356. data/tracks/kotlin/exercises/flatten-array/README.md +1 -2
  357. data/tracks/kotlin/exercises/grade-school/README.md +0 -1
  358. data/tracks/kotlin/exercises/grains/README.md +0 -1
  359. data/tracks/kotlin/exercises/hello-world/.meta/hints.md +4 -0
  360. data/tracks/kotlin/exercises/hello-world/.meta/src/reference/kotlin/HelloWorld.kt +2 -2
  361. data/tracks/kotlin/exercises/hello-world/README.md +6 -0
  362. data/tracks/kotlin/exercises/hello-world/TUTORIAL.md +32 -434
  363. data/tracks/kotlin/exercises/hello-world/src/main/kotlin/HelloWorld.kt +1 -1
  364. data/tracks/kotlin/exercises/hello-world/src/test/kotlin/HelloWorldTest.kt +2 -21
  365. data/tracks/kotlin/exercises/isogram/README.md +2 -1
  366. data/tracks/kotlin/exercises/leap/README.md +1 -1
  367. data/tracks/kotlin/exercises/linked-list/README.md +10 -10
  368. data/tracks/kotlin/exercises/luhn/README.md +7 -7
  369. data/tracks/kotlin/exercises/meetup/README.md +1 -2
  370. data/tracks/kotlin/exercises/nucleotide-count/README.md +8 -22
  371. data/tracks/kotlin/exercises/pangram/README.md +1 -1
  372. data/tracks/kotlin/exercises/pascals-triangle/README.md +1 -1
  373. data/tracks/kotlin/exercises/perfect-numbers/README.md +2 -2
  374. data/tracks/kotlin/exercises/phone-number/README.md +3 -2
  375. data/tracks/kotlin/exercises/roman-numerals/README.md +1 -1
  376. data/tracks/kotlin/exercises/rotational-cipher/README.md +2 -1
  377. data/tracks/kotlin/exercises/saddle-points/README.md +1 -1
  378. data/tracks/kotlin/exercises/scrabble-score/README.md +3 -1
  379. data/tracks/kotlin/exercises/secret-handshake/README.md +1 -1
  380. data/tracks/kotlin/exercises/settings.gradle +1 -0
  381. data/tracks/kotlin/exercises/space-age/README.md +1 -2
  382. data/tracks/kotlin/exercises/spiral-matrix/README.md +2 -2
  383. data/tracks/kotlin/exercises/sum-of-multiples/README.md +0 -3
  384. data/tracks/kotlin/exercises/triangle/README.md +9 -6
  385. data/tracks/kotlin/exercises/two-fer/.meta/src/reference/kotlin/Twofer.kt +3 -0
  386. data/tracks/kotlin/exercises/two-fer/README.md +50 -0
  387. data/tracks/kotlin/exercises/two-fer/build.gradle +28 -0
  388. data/tracks/kotlin/exercises/two-fer/src/main/kotlin/.keep +0 -0
  389. data/tracks/kotlin/exercises/two-fer/src/test/kotlin/TwoferTest.kt +31 -0
  390. data/tracks/kotlin/exercises/word-count/README.md +1 -2
  391. data/tracks/ocaml/exercises/pangram/test.ml +3 -1
  392. data/tracks/perl5/.travis.yml +3 -1
  393. data/tracks/php/Makefile +2 -2
  394. data/tracks/php/README.md +4 -4
  395. data/tracks/php/config.json +15 -0
  396. data/tracks/php/exercises/transpose/example.php +30 -0
  397. data/tracks/php/exercises/transpose/transpose_test.php +116 -0
  398. data/tracks/php/{phpcs-xphp.xml → phpcs-php.xml} +0 -0
  399. data/tracks/python/.travis.yml +1 -1
  400. data/tracks/python/config.json +199 -39
  401. data/tracks/python/exercises/acronym/acronym_test.py +1 -1
  402. data/tracks/python/exercises/allergies/allergies_test.py +1 -1
  403. data/tracks/python/exercises/alphametics/alphametics_test.py +1 -1
  404. data/tracks/python/exercises/anagram/anagram_test.py +1 -1
  405. data/tracks/python/exercises/atbash-cipher/atbash_cipher_test.py +1 -1
  406. data/tracks/python/exercises/bob/bob.py +1 -1
  407. data/tracks/python/exercises/bob/bob_test.py +1 -1
  408. data/tracks/python/exercises/book-store/book_store_test.py +1 -1
  409. data/tracks/python/exercises/bracket-push/bracket_push.py +1 -1
  410. data/tracks/python/exercises/bracket-push/bracket_push_test.py +1 -1
  411. data/tracks/python/exercises/collatz-conjecture/collatz_conjecture_test.py +1 -1
  412. data/tracks/python/exercises/diamond/diamond_test.py +1 -1
  413. data/tracks/python/exercises/difference-of-squares/difference_of_squares_test.py +1 -1
  414. data/tracks/python/exercises/diffie-hellman/README.md +58 -0
  415. data/tracks/python/exercises/diffie-hellman/diffie_hellman.py +10 -0
  416. data/tracks/python/exercises/diffie-hellman/diffie_hellman_test.py +87 -0
  417. data/tracks/python/exercises/diffie-hellman/example.py +13 -0
  418. data/tracks/python/exercises/etl/etl_test.py +1 -1
  419. data/tracks/python/exercises/food-chain/README.md +81 -0
  420. data/tracks/python/exercises/food-chain/example.py +45 -0
  421. data/tracks/python/exercises/food-chain/food_chain.py +2 -0
  422. data/tracks/python/exercises/food-chain/food_chain_test.py +109 -0
  423. data/tracks/python/exercises/forth/README.md +43 -0
  424. data/tracks/python/exercises/forth/example.py +58 -0
  425. data/tracks/python/exercises/forth/forth.py +2 -0
  426. data/tracks/python/exercises/forth/forth_test.py +254 -0
  427. data/tracks/python/exercises/gigasecond/gigasecond_test.py +1 -1
  428. data/tracks/python/exercises/grep/grep_test.py +1 -1
  429. data/tracks/python/exercises/hello-world/hello_world_test.py +1 -1
  430. data/tracks/python/exercises/isogram/isogram_test.py +10 -10
  431. data/tracks/python/exercises/largest-series-product/largest_series_product_test.py +1 -1
  432. data/tracks/python/exercises/leap/leap_test.py +5 -5
  433. data/tracks/python/exercises/luhn/luhn_test.py +16 -16
  434. data/tracks/python/exercises/markdown/README.md +30 -0
  435. data/tracks/python/exercises/markdown/example.py +80 -0
  436. data/tracks/python/exercises/markdown/markdown.py +71 -0
  437. data/tracks/python/exercises/markdown/markdown_test.py +51 -0
  438. data/tracks/python/exercises/meetup/meetup_test.py +1 -1
  439. data/tracks/python/exercises/nth-prime/nth_prime_test.py +1 -1
  440. data/tracks/python/exercises/pascals-triangle/pascals_triangle_test.py +2 -2
  441. data/tracks/python/exercises/perfect-numbers/perfect_numbers_test.py +11 -11
  442. data/tracks/python/exercises/phone-number/phone_number_test.py +1 -1
  443. data/tracks/python/exercises/prime-factors/prime_factors_test.py +1 -1
  444. data/tracks/python/exercises/pythagorean-triplet/pythagorean_triplet_test.py +3 -3
  445. data/tracks/python/exercises/queen-attack/queen_attack_test.py +8 -8
  446. data/tracks/python/exercises/rail-fence-cipher/rail_fence_cipher_test.py +1 -1
  447. data/tracks/python/exercises/rectangles/rectangles_test.py +1 -1
  448. data/tracks/python/exercises/robot-simulator/robot_simulator.py +9 -1
  449. data/tracks/python/exercises/roman-numerals/roman_numerals_test.py +1 -1
  450. data/tracks/python/exercises/run-length-encoding/run_length_encoding_test.py +1 -1
  451. data/tracks/python/exercises/say/say_test.py +1 -1
  452. data/tracks/python/exercises/scrabble-score/scrabble_score_test.py +1 -1
  453. data/tracks/python/exercises/series/series.py +1 -1
  454. data/tracks/python/exercises/sieve/sieve_test.py +1 -1
  455. data/tracks/python/exercises/sublist/sublist_test.py +1 -1
  456. data/tracks/python/exercises/tournament/tournament_test.py +1 -1
  457. data/tracks/python/exercises/transpose/transpose_test.py +1 -1
  458. data/tracks/python/exercises/two-bucket/example.py +49 -54
  459. data/tracks/python/exercises/two-bucket/two_bucket_test.py +1 -1
  460. data/tracks/python/exercises/variable-length-quantity/variable_length_quantity_test.py +1 -1
  461. data/tracks/rust/config.json +24 -0
  462. data/tracks/rust/exercises/collatz-conjecture/Cargo.lock +4 -0
  463. data/tracks/rust/exercises/collatz-conjecture/Cargo.toml +3 -0
  464. data/tracks/rust/exercises/collatz-conjecture/README.md +65 -0
  465. data/tracks/rust/exercises/collatz-conjecture/example.rs +19 -0
  466. data/tracks/rust/exercises/collatz-conjecture/src/lib.rs +4 -0
  467. data/tracks/rust/exercises/collatz-conjecture/tests/collatz-conjecture.rs +32 -0
  468. data/tracks/rust/exercises/decimal/.gitignore +7 -0
  469. data/tracks/rust/exercises/decimal/.meta/description.md +19 -0
  470. data/tracks/rust/exercises/decimal/.meta/metadata.yml +3 -0
  471. data/tracks/rust/exercises/decimal/Cargo-example.toml +9 -0
  472. data/tracks/rust/exercises/decimal/Cargo.toml +6 -0
  473. data/tracks/rust/exercises/decimal/README.md +59 -0
  474. data/tracks/rust/exercises/decimal/example.rs +187 -0
  475. data/tracks/rust/exercises/decimal/src/lib.rs +10 -0
  476. data/tracks/rust/exercises/decimal/tests/decimal.rs +332 -0
  477. data/tracks/sml/exercises/accumulate/README.md +9 -1
  478. data/tracks/swift/exercises/luhn/Sources/LuhnExample.swift +17 -26
  479. data/tracks/swift/exercises/luhn/Tests/LinuxMain.swift +1 -1
  480. data/tracks/swift/exercises/luhn/Tests/LuhnTests/LuhnTests.swift +59 -35
  481. data/tracks/typescript/config.json +34 -0
  482. data/tracks/typescript/exercises/binary-search/README.md +67 -0
  483. data/tracks/typescript/exercises/binary-search/binary-search.example.ts +42 -0
  484. data/tracks/typescript/exercises/binary-search/binary-search.test.ts +27 -0
  485. data/tracks/typescript/exercises/binary-search/binary-search.ts +3 -0
  486. data/tracks/typescript/exercises/binary-search/package.json +36 -0
  487. data/tracks/typescript/exercises/binary-search/tsconfig.json +22 -0
  488. data/tracks/typescript/exercises/binary-search/tslint.json +127 -0
  489. data/tracks/typescript/exercises/binary-search/yarn.lock +2305 -0
  490. data/tracks/typescript/exercises/pascals-triangle/README.md +47 -0
  491. data/tracks/typescript/exercises/pascals-triangle/package.json +36 -0
  492. data/tracks/typescript/exercises/pascals-triangle/pascals-triangle.example.ts +32 -0
  493. data/tracks/typescript/exercises/pascals-triangle/pascals-triangle.test.ts +28 -0
  494. data/tracks/typescript/exercises/pascals-triangle/pascals-triangle.ts +2 -0
  495. data/tracks/typescript/exercises/pascals-triangle/tsconfig.json +22 -0
  496. data/tracks/typescript/exercises/pascals-triangle/tslint.json +127 -0
  497. data/tracks/typescript/exercises/pascals-triangle/yarn.lock +2305 -0
  498. data/tracks/typescript/exercises/rotational-cipher/README.md +63 -0
  499. data/tracks/typescript/exercises/rotational-cipher/package.json +36 -0
  500. data/tracks/typescript/exercises/rotational-cipher/rotational-cipher.example.ts +19 -0
  501. data/tracks/typescript/exercises/rotational-cipher/rotational-cipher.test.ts +56 -0
  502. data/tracks/typescript/exercises/rotational-cipher/rotational-cipher.ts +1 -0
  503. data/tracks/typescript/exercises/rotational-cipher/tsconfig.json +22 -0
  504. data/tracks/typescript/exercises/rotational-cipher/tslint.json +127 -0
  505. data/tracks/typescript/exercises/rotational-cipher/yarn.lock +2305 -0
  506. metadata +171 -5
  507. data/tracks/javascript/exercises/twelve-days/package.json +0 -69
  508. data/tracks/kotlin/exercises/hello-world/GETTING_STARTED.md +0 -50
@@ -0,0 +1,25 @@
1
+ using Generators.Input;
2
+ using System;
3
+
4
+ namespace Generators.Exercises
5
+ {
6
+ public class DifferenceOfSquares : Exercise
7
+ {
8
+ protected override void UpdateCanonicalData(CanonicalData canonicalData)
9
+ {
10
+ foreach (var canonicalDataCase in canonicalData.Cases)
11
+ switch(canonicalDataCase.Property)
12
+ {
13
+ case "squareOfSum":
14
+ canonicalDataCase.Property = "CalculateSquareOfSum";
15
+ break;
16
+ case "sumOfSquares":
17
+ canonicalDataCase.Property = "CalculateSumOfSquares";
18
+ break;
19
+ case "differenceOfSquares":
20
+ canonicalDataCase.Property = "CalculateDifferenceOfSquares";
21
+ break;
22
+ }
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,36 @@
1
+ using Generators.Input;
2
+ using Generators.Output;
3
+ using System.Collections;
4
+
5
+ namespace Generators.Exercises
6
+ {
7
+ public class FlattenArray : Exercise
8
+ {
9
+ protected override void UpdateCanonicalData(CanonicalData canonicalData)
10
+ {
11
+ foreach (var canonicalDataCase in canonicalData.Cases)
12
+ {
13
+ canonicalDataCase.UseVariablesForInput = true;
14
+ canonicalDataCase.UseVariableForExpected = true;
15
+
16
+ string stringInput = canonicalDataCase.Properties["input"].ToString();
17
+
18
+ // We skip reformatting of pure int arrays.
19
+ if(stringInput.Contains("System.Int32"))
20
+ continue;
21
+
22
+ string properInput = ToProperObjArray(stringInput);
23
+
24
+ canonicalDataCase.Properties["input"] = new UnescapedValue(properInput);
25
+ }
26
+ }
27
+
28
+ private string ToProperObjArray(string input)
29
+ {
30
+ string res = input.Replace("System.Int32", "");
31
+ res = res.Replace("]", "}");
32
+ res = res.Replace("[", "new object[] {");
33
+ return res;
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,18 @@
1
+ using Generators.Input;
2
+
3
+ namespace Generators.Exercises
4
+ {
5
+ public class LargestSeriesProduct : Exercise
6
+ {
7
+ protected override void UpdateCanonicalData(CanonicalData canonicalData)
8
+ {
9
+ foreach (var canonicalDataCase in canonicalData.Cases)
10
+ {
11
+ canonicalDataCase.Property = "GetLargestProduct";
12
+
13
+ var caseInputLessThanZero = (long)canonicalDataCase.Expected == -1;
14
+ canonicalDataCase.ExceptionThrown = caseInputLessThanZero ? typeof(System.ArgumentException) : null;
15
+ }
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,32 @@
1
+ using Generators.Input;
2
+ using Generators.Output;
3
+
4
+ namespace Generators.Exercises
5
+ {
6
+ public class Minesweeper : Exercise
7
+ {
8
+ protected override void UpdateCanonicalData(CanonicalData canonicalData)
9
+ {
10
+ foreach (var canonicalDataCase in canonicalData.Cases)
11
+ {
12
+ canonicalDataCase.UseVariablesForInput = true;
13
+ canonicalDataCase.UseVariableForExpected = true;
14
+
15
+ canonicalDataCase.Properties["input"] = ToMultiLineString(canonicalDataCase.Properties["input"]);
16
+ canonicalDataCase.Properties["expected"] = ToMultiLineString(canonicalDataCase.Properties["expected"]);
17
+ }
18
+ }
19
+
20
+ private UnescapedValue ToMultiLineString(string[] input)
21
+ {
22
+ const string template =
23
+ @"new string[]
24
+ {
25
+ {% if input.size > 0 %}{% for item in {{input}} %}{% if forloop.length == 1 %}""{{item}}""{% break %}{% endif %}""{{item}}""{% if forloop.last == false %},{% else %}{{string.Empty}}{% endif %}
26
+ {% endfor %}{% endif %}
27
+ }";
28
+
29
+ return new UnescapedValue(TemplateRenderer.RenderInline(template, new { input }));
30
+ }
31
+ }
32
+ }
@@ -1,6 +1,6 @@
1
1
  ## Getting Started
2
2
 
3
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
3
+ Make sure you have read [D page](http://exercism.io/languages/d) on
4
4
  exercism.io. This covers the basic information on setting up the development
5
5
  environment expected by the exercises.
6
6
 
@@ -13,7 +13,7 @@ He answers 'Whatever.' to anything else.
13
13
 
14
14
  ## Getting Started
15
15
 
16
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
16
+ Make sure you have read [D page](http://exercism.io/languages/d) on
17
17
  exercism.io. This covers the basic information on setting up the development
18
18
  environment expected by the exercises.
19
19
 
@@ -45,7 +45,7 @@ buffer with:
45
45
 
46
46
  ## Getting Started
47
47
 
48
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
48
+ Make sure you have read [D page](http://exercism.io/languages/d) on
49
49
  exercism.io. This covers the basic information on setting up the development
50
50
  environment expected by the exercises.
51
51
 
@@ -69,7 +69,7 @@ sseoau
69
69
 
70
70
  ## Getting Started
71
71
 
72
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
72
+ Make sure you have read [D page](http://exercism.io/languages/d) on
73
73
  exercism.io. This covers the basic information on setting up the development
74
74
  environment expected by the exercises.
75
75
 
@@ -14,7 +14,7 @@ natural numbers is 3025 - 385 = 2640.
14
14
 
15
15
  ## Getting Started
16
16
 
17
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
17
+ Make sure you have read [D page](http://exercism.io/languages/d) on
18
18
  exercism.io. This covers the basic information on setting up the development
19
19
  environment expected by the exercises.
20
20
 
@@ -46,7 +46,7 @@ game while being scored at 4 in the Hawaiian-language version.
46
46
 
47
47
  ## Getting Started
48
48
 
49
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
49
+ Make sure you have read [D page](http://exercism.io/languages/d) on
50
50
  exercism.io. This covers the basic information on setting up the development
51
51
  environment expected by the exercises.
52
52
 
@@ -6,7 +6,7 @@ A gigasecond is 10^9 (1,000,000,000) seconds.
6
6
 
7
7
  ## Getting Started
8
8
 
9
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
9
+ Make sure you have read [D page](http://exercism.io/languages/d) on
10
10
  exercism.io. This covers the basic information on setting up the development
11
11
  environment expected by the exercises.
12
12
 
@@ -37,7 +37,7 @@ of equal length differently.
37
37
 
38
38
  ## Getting Started
39
39
 
40
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
40
+ Make sure you have read [D page](http://exercism.io/languages/d) on
41
41
  exercism.io. This covers the basic information on setting up the development
42
42
  environment expected by the exercises.
43
43
 
@@ -16,7 +16,7 @@ If everything goes well, you will be ready to fetch your first real exercise.
16
16
 
17
17
  ## Getting Started
18
18
 
19
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
19
+ Make sure you have read [D page](http://exercism.io/languages/d) on
20
20
  exercism.io. This covers the basic information on setting up the development
21
21
  environment expected by the exercises.
22
22
 
@@ -28,7 +28,7 @@ phenomenon, go watch [this youtube video][video].
28
28
 
29
29
  ## Getting Started
30
30
 
31
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
31
+ Make sure you have read [D page](http://exercism.io/languages/d) on
32
32
  exercism.io. This covers the basic information on setting up the development
33
33
  environment expected by the exercises.
34
34
 
@@ -28,7 +28,7 @@ about that for now.
28
28
 
29
29
  ## Getting Started
30
30
 
31
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
31
+ Make sure you have read [D page](http://exercism.io/languages/d) on
32
32
  exercism.io. This covers the basic information on setting up the development
33
33
  environment expected by the exercises.
34
34
 
@@ -10,7 +10,7 @@ insensitive. Input will not contain non-ASCII symbols.
10
10
 
11
11
  ## Getting Started
12
12
 
13
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
13
+ Make sure you have read [D page](http://exercism.io/languages/d) on
14
14
  exercism.io. This covers the basic information on setting up the development
15
15
  environment expected by the exercises.
16
16
 
@@ -19,7 +19,7 @@ Convert a number to a string, the contents of which depend on the number's facto
19
19
 
20
20
  ## Getting Started
21
21
 
22
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
22
+ Make sure you have read [D page](http://exercism.io/languages/d) on
23
23
  exercism.io. This covers the basic information on setting up the development
24
24
  environment expected by the exercises.
25
25
 
@@ -17,7 +17,7 @@ state has changed from the previous stable state.
17
17
 
18
18
  ## Getting Started
19
19
 
20
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
20
+ Make sure you have read [D page](http://exercism.io/languages/d) on
21
21
  exercism.io. This covers the basic information on setting up the development
22
22
  environment expected by the exercises.
23
23
 
@@ -20,7 +20,7 @@ each nucleotide with its complement:
20
20
 
21
21
  ## Getting Started
22
22
 
23
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
23
+ Make sure you have read [D page](http://exercism.io/languages/d) on
24
24
  exercism.io. This covers the basic information on setting up the development
25
25
  environment expected by the exercises.
26
26
 
@@ -17,7 +17,7 @@ every existing robot has a unique name.
17
17
 
18
18
  ## Getting Started
19
19
 
20
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
20
+ Make sure you have read [D page](http://exercism.io/languages/d) on
21
21
  exercism.io. This covers the basic information on setting up the development
22
22
  environment expected by the exercises.
23
23
 
@@ -44,7 +44,7 @@ See also: http://www.novaroma.org/via_romana/numbers.html
44
44
 
45
45
  ## Getting Started
46
46
 
47
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
47
+ Make sure you have read [D page](http://exercism.io/languages/d) on
48
48
  exercism.io. This covers the basic information on setting up the development
49
49
  environment expected by the exercises.
50
50
 
@@ -22,7 +22,7 @@ in the input; the digits need not be *numerically consecutive*.
22
22
 
23
23
  ## Getting Started
24
24
 
25
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
25
+ Make sure you have read [D page](http://exercism.io/languages/d) on
26
26
  exercism.io. This covers the basic information on setting up the development
27
27
  environment expected by the exercises.
28
28
 
@@ -21,7 +21,7 @@ third is known as a _degenerate_ triangle - it has zero area and looks like
21
21
  a single line. Feel free to add your own code/tests to check for degenerate triangles.
22
22
  ## Getting Started
23
23
 
24
- Make sure you have read [D page](http://exercism.io/languages/dlang) on
24
+ Make sure you have read [D page](http://exercism.io/languages/d) on
25
25
  exercism.io. This covers the basic information on setting up the development
26
26
  environment expected by the exercises.
27
27
 
@@ -0,0 +1,61 @@
1
+ # Contributing
2
+
3
+ Thank you so much for contributing! :tada:
4
+
5
+ Please read about how to [get involved in a track](https://github.com/exercism/docs/tree/master/contributing-to-language-tracks). Be sure to read the Exercism [Code of Conduct](https://github.com/exercism/exercism.io/blob/master/CODE_OF_CONDUCT.md).
6
+
7
+ We welcome pull requests of all kinds. No contribution is too small.
8
+
9
+ We encourage contributions that provide fixes and improvements to existing exercises. Please note that this track's exercises must conform to the standards determined in the [exercism/problem-specifications](https://github.com/exercism/problem-specifications) repo. Changes to the tests or documentation of a common exercise will often warrant a PR in that repo before it can be incorporated into this track's exercises. If you're unsure, then go ahead and open a GitHub issue, and we'll discuss the change.
10
+
11
+ ## Submitting a Pull Request ###
12
+
13
+ Please keep the following in mind:
14
+
15
+ - Pull requests should be focused on a single exercise, issue, or change.
16
+
17
+ - We welcome changes to code style, and wording. Please open a separate PR for these changes if possible.
18
+
19
+ - Please open an issue before creating a PR that makes significant (breaking) changes to an existing exercise or makes changes across many exercises. It is best to discuss these changes before doing the work. Discussions related to exercises that are not track specific can be found in [exercism/discussions](https://github.com/exercism/discussions/issues).
20
+
21
+ - Follow the coding standards for Dart.
22
+ * For your convenience, [a link to the Dart style guide](https://www.dartlang.org/guides/language/effective-dart)
23
+ * Some points of interest:
24
+ * [Filename naming convention](https://www.dartlang.org/guides/language/effective-dart/style#do-name-libraries-and-source-files-using-lowercase_with_underscores)
25
+ * [Guide to the built-in formatter tool](https://github.com/dart-lang/dart_style#getting-dartfmt)
26
+
27
+ - When contributing code, watch out for:
28
+ * Trailing spaces, extra blank lines, and spaces in blank lines.
29
+ * Misspelled words or unclear sentences
30
+ * Offensive words or phrases
31
+ * Sensitive information (email address, real names, etc)
32
+
33
+ - Please run the following commands before submitting your PR:
34
+ * `pub run test` - All the tests for Dart exercises can be run from the top level of the repo with this command
35
+ * `bin/configlet lint .` - Checks the config.json for formatting issues
36
+ * `bin/configlet fmt .` - Formats the config.json
37
+ * `bin/check_formatting` - Checks All the Dart files for formatting issues
38
+ * `pub run dart_style:format -l 120 -w .` - Formats all the Dart files
39
+
40
+ - Once a Pull Request is approved, the contributing branch will be Rebased onto the latest version of our master branch.
41
+
42
+ ## Contributing a New Exercise ###
43
+
44
+ - All Exercism exercises must be defined in [problem-specifications](https://github.com/exercism/problem-specifications/tree/master/exercises) before they are implemented for a specific track. Please submit a PR there if your exercise is new to Exercism.
45
+
46
+ - Please make sure the new exercise conforms to specifications in the [exercism/problem-specifications](https://github.com/exercism/problem-specifications) repo.
47
+
48
+ - Each exercise must stand on its own. Do not reference files outside the exercise directory. They will not be included when the user fetches the exercise.
49
+
50
+ - Exercises should use only the Dart core libraries.
51
+
52
+ - Please do not add a README or README.md file to the exercise directory. The READMEs are generated using shared metadata, which lives in the
53
+ [exercism/problem-specifications](https://github.com/exercism/problem-specifications) repository.
54
+ - Read the [Generating a README](https://github.com/exercism/docs/blob/master/language-tracks/exercises/anatomy/readmes.md) sections Setup and Generation to see the necessary steps.
55
+
56
+ - Each exercise should have a test suite, an example solution, a template file for the real implementation, and a README.md
57
+ - The CI build expects Dart files to be named in the convention of snake_case_filenames
58
+
59
+ - Please do not commit any configuration files or directories inside the exercise other than pubspec.lock and pubspec.yaml
60
+
61
+ - Be sure to add it to the appropriate place in the `config.json` file. Also, please run `bin/fetch-configlet && bin/configlet lint .` to ensure the exercise is configured correctly.
@@ -1,6 +1,6 @@
1
1
  # Exercism Dart Track
2
2
 
3
- ![build status](https://travis-ci.org/exercism/dart.svg?branch=master)
3
+ ![build status](https://travis-ci.org/exercism/dart.svg?branch=master) [![Gitter](https://badges.gitter.im/exercism/dart.svg)](https://gitter.im/exercism/dart?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
4
4
 
5
5
  Exercism exercises in Dart.
6
6
 
@@ -8,16 +8,6 @@ Exercism exercises in Dart.
8
8
 
9
9
  The simplest way to install Dart can be [found here](docs/INSTALLATION.md).
10
10
 
11
- ## Contributing
12
-
13
- Thank you so much for contributing! :tada:
14
-
15
- Please read about how to [get involved in a track](https://github.com/exercism/docs/tree/master/contributing-to-language-tracks). Be sure to read the Exercism [Code of Conduct](https://github.com/exercism/exercism.io/blob/master/CODE_OF_CONDUCT.md).
16
-
17
- We welcome pull requests of all kinds. No contribution is too small.
18
-
19
- We encourage contributions that provide fixes and improvements to existing exercises. Please note that this track's exercises must conform to the standards determined in the [exercism/problem-specifications](https://github.com/exercism/problem-specifications) repo. Changes to the tests or documentation of a common exercise will often warrant a PR in that repo before it can be incorporated into this track's exercises. If you're unsure, then go ahead and open a GitHub issue, and we'll discuss the change.
20
-
21
11
  ## Exercise Tests ##
22
12
 
23
13
  At the most basic level, Exercism is all about the tests. They drive the user's implementation forward and tell them when the exercise is complete.
@@ -32,45 +22,18 @@ We simulate Test-Driven Development (TDD) by implementing the tests in order of
32
22
  Test files should use the following format:
33
23
 
34
24
  ```
35
- # include the body of an example test
25
+ test("says hello world with no name", () {
26
+ final String result = helloWorld.hello();
27
+ expect(result, equals("Hello, World!"));
28
+ }, skip: false);
36
29
  ```
37
30
 
38
- ## Submitting a Pull Request ##
39
-
40
- Please keep the following in mind:
41
-
42
- - Pull requests should be focused on a single exercise, issue, or change.
43
-
44
- - We welcome changes to code style, and wording. Please open a separate PR for these changes if possible.
45
-
46
- - Please open an issue before creating a PR that makes significant (breaking) changes to an existing exercise or makes changes across many exercises. It is best to discuss these changes before doing the work. Discussions related to exercises that are not track specific can be found in [exercism/discussions](https://github.com/exercism/discussions/issues).
47
-
48
- - Follow the coding standards for Dart.
49
- * For your convenience, [a link to the Dart style guide](https://www.dartlang.org/guides/language/effective-dart)
50
- * Some points of interest:
51
- * [Filename naming convention](https://www.dartlang.org/guides/language/effective-dart/style#do-name-libraries-and-source-files-using-lowercase_with_underscores)
52
- * [Guide to the built-in formatter tool](https://github.com/dart-lang/dart_style#getting-dartfmt)
53
-
54
- - Watch out for trailing spaces, extra blank lines, and spaces in blank lines.
55
-
56
- - All the tests for Dart exercises can be run from the top level of the repo with ... Please run this command before submitting your PR.
57
-
58
- ## Contributing a New Exercise ##
59
-
60
- - All Exercism exercises must be defined in [problem-specifications](https://github.com/exercism/problem-specifications/tree/master/exercises) before they are implemented for a specific track. Please submit a PR there if your exercise is new to Exercism.
61
-
62
- - Please make sure the new exercise conforms to specifications in the [exercism/problem-specifications](https://github.com/exercism/problem-specifications) repo.
63
-
64
- - Each exercise must stand on its own. Do not reference files outside the exercise directory. They will not be included when the user fetches the exercise.
65
-
66
- - Exercises should use only the Dart core libraries.
67
-
68
- - Please do not add a README or README.md file to the exercise directory. The READMEs are constructed using shared metadata, which lives in the
69
- [exercism/problem-specifications](https://github.com/exercism/problem-specifications) repository. Further explanation can be found in [fixing-exercise-readmes](https://github.com/exercism/docs/blob/master/language-tracks/exercises/anatomy/readmes.md)
31
+ ## Contributing
70
32
 
71
- - Each exercise should have a test suite, an example solution, a template file for the real implementation and ... (anything else that needs to go with each exercise for this track). The CI build expects files to be named using the following convention: (describe the Dart convention for naming the various files that make up an exercise).
33
+ Thank you so much for contributing! :tada:
72
34
 
73
- - Please do not commit any configuration files or directories inside the exercise other than ...
35
+ We welcome pull requests of all kinds. No contribution is too small.
74
36
 
75
- - Be sure to add it to the appropriate place in the `config.json` file. Also, please run `bin/fetch-configlet && bin/configlet lint .` to ensure the exercise is configured correctly.
37
+ We encourage contributions that provide fixes and improvements to existing exercises. Please note that this track's exercises must conform to the standards determined in the [exercism/problem-specifications](https://github.com/exercism/problem-specifications) repo. Changes to the tests or documentation of a common exercise will often warrant a PR in that repo before it can be incorporated into this track's exercises. If you're unsure, then go ahead and open a GitHub issue, and we'll discuss the change.
76
38
 
39
+ Please read our [Contribution guidelines](CONTRIBUTING.md) on how to help this track!
@@ -61,7 +61,7 @@
61
61
  "strings",
62
62
  "unicode"
63
63
  ],
64
- "unlocked_by": "difference-of-squares",
64
+ "unlocked_by": "word-count",
65
65
  "uuid": "615a83cc-a905-435a-a30e-f052b61cfd4c"
66
66
  },
67
67
  {
@@ -77,6 +77,18 @@
77
77
  "unlocked_by": "bob",
78
78
  "uuid": "91c8033d-f40c-4a90-9ec9-7081f6eba8d2"
79
79
  },
80
+ {
81
+ "core": false,
82
+ "difficulty": 2,
83
+ "slug": "phone-number",
84
+ "topics": [
85
+ "control_flow_conditionals",
86
+ "control_flow_loops",
87
+ "regular_expressions"
88
+ ],
89
+ "unlocked_by": "word-count",
90
+ "uuid": "8649b2b4-02f6-4947-92b9-d1cc0d7c3594"
91
+ },
80
92
  {
81
93
  "core": true,
82
94
  "difficulty": 3,