trackler 2.2.1.45 → 2.2.1.46

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 (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,31 @@
1
+ class Triangle
2
+ def initialize(sides)
3
+ @sides = sides
4
+ @sides = [] of Int32 if illegal?
5
+ end
6
+
7
+ def equilateral?
8
+ @sides.uniq.size == 1
9
+ end
10
+
11
+ def isosceles?
12
+ 1 <= @sides.uniq.size <= 2
13
+ end
14
+
15
+ def scalene?
16
+ @sides.uniq.size == 3
17
+ end
18
+
19
+ private def illegal?
20
+ impossible_length_side? || violates_inequality?
21
+ end
22
+
23
+ private def violates_inequality?
24
+ a, b, c = @sides
25
+ a + b <= c || a + c <= b || b + c <= a
26
+ end
27
+
28
+ private def impossible_length_side?
29
+ @sides.any? { |side| side <= 0 }
30
+ end
31
+ end
@@ -0,0 +1 @@
1
+ # Please implement your solution to triangle in this file
@@ -42,7 +42,6 @@ describe "RemoteDataFile" do
42
42
  it "raises a unexpected exception if status is other than 200 or 404" do
43
43
  WebMock.stub(:get, TEST_URL).to_return(status: 500, body: "")
44
44
 
45
-
46
45
  error_message = "Error while requesting the test-exercise data file from GitHub... " +
47
46
  "Status was 500"
48
47
  expect_raises(Exception, error_message) do
@@ -0,0 +1,38 @@
1
+ require "../exercise_generator"
2
+ require "../exercise_test_case"
3
+ require "json"
4
+
5
+ class TriangleGenerator < ExerciseGenerator
6
+ def exercise_name
7
+ "triangle"
8
+ end
9
+
10
+ def test_cases
11
+ cases = [] of TriangleTestCase
12
+ JSON.parse(data)["cases"].each do |category|
13
+ category["cases"].each do |test_case|
14
+ next if test_case["comments"]? # skip float cases
15
+ cases << TriangleTestCase.from_json(test_case.to_json)
16
+ end
17
+ end
18
+ cases
19
+ end
20
+ end
21
+
22
+ class TriangleTestCase < ExerciseTestCase
23
+
24
+ JSON.mapping(
25
+ description: String,
26
+ property: String,
27
+ sides: Array(Int32),
28
+ expected: Bool
29
+ )
30
+
31
+ def workload
32
+ "Triangle.new(#{sides}).#{property}?.should eq(#{expected})"
33
+ end
34
+
35
+ def test_name
36
+ description
37
+ end
38
+ end
@@ -1,7 +1,7 @@
1
1
  require "http/client"
2
2
 
3
3
  class RemoteDataFile
4
- BASE_URL = "https://raw.githubusercontent.com/exercism/problem-specifications/master/exercises"
4
+ BASE_URL = "https://raw.githubusercontent.com/exercism/problem-specifications/master/exercises"
5
5
  DATA_FILE = "canonical-data.json"
6
6
 
7
7
  def initialize(@test_name : String); end
@@ -1,18 +1,18 @@
1
1
  using System;
2
2
 
3
- public static class Squares
3
+ public static class DifferenceOfSquares
4
4
  {
5
- public static int SquareOfSums(int max)
5
+ public static int CalculateSquareOfSum(int max)
6
6
  {
7
7
  throw new NotImplementedException("You need to implement this function.");
8
8
  }
9
9
 
10
- public static int SumOfSquares(int max)
10
+ public static int CalculateSumOfSquares(int max)
11
11
  {
12
12
  throw new NotImplementedException("You need to implement this function.");
13
13
  }
14
14
 
15
- public static int DifferenceOfSquares(int max)
15
+ public static int CalculateDifferenceOfSquares(int max)
16
16
  {
17
17
  throw new NotImplementedException("You need to implement this function.");
18
18
  }
@@ -1,65 +1,60 @@
1
- using System;
1
+ // This file was auto-generated based on version 1.1.0 of the canonical data.
2
+
2
3
  using Xunit;
3
4
 
4
- public class DifferenceOfSquaresTests
5
+ public class DifferenceOfSquaresTest
5
6
  {
6
7
  [Fact]
7
- public void Test_square_of_sums_to_5()
8
- {
9
- Assert.Equal(225, Squares.SquareOfSums(5));
10
- }
11
-
12
- [Fact(Skip = "Remove to run test")]
13
- public void Test_sum_of_squares_to_5()
8
+ public void Square_of_sum_1()
14
9
  {
15
- Assert.Equal(55, Squares.SumOfSquares(5));
10
+ Assert.Equal(1, DifferenceOfSquares.CalculateSquareOfSum(1));
16
11
  }
17
12
 
18
13
  [Fact(Skip = "Remove to run test")]
19
- public void Test_difference_of_sums_to_5()
14
+ public void Square_of_sum_5()
20
15
  {
21
- Assert.Equal(170, Squares.DifferenceOfSquares(5));
16
+ Assert.Equal(225, DifferenceOfSquares.CalculateSquareOfSum(5));
22
17
  }
23
18
 
24
19
  [Fact(Skip = "Remove to run test")]
25
- public void Test_square_of_sums_to_10()
20
+ public void Square_of_sum_100()
26
21
  {
27
- Assert.Equal(3025, Squares.SquareOfSums(10));
22
+ Assert.Equal(25502500, DifferenceOfSquares.CalculateSquareOfSum(100));
28
23
  }
29
24
 
30
25
  [Fact(Skip = "Remove to run test")]
31
- public void Test_sum_of_squares_to_10()
26
+ public void Sum_of_squares_1()
32
27
  {
33
- Assert.Equal(385, Squares.SumOfSquares(10));
28
+ Assert.Equal(1, DifferenceOfSquares.CalculateSumOfSquares(1));
34
29
  }
35
30
 
36
31
  [Fact(Skip = "Remove to run test")]
37
- public void Test_difference_of_sums_to_10()
32
+ public void Sum_of_squares_5()
38
33
  {
39
- Assert.Equal(2640, Squares.DifferenceOfSquares(10));
34
+ Assert.Equal(55, DifferenceOfSquares.CalculateSumOfSquares(5));
40
35
  }
41
36
 
42
37
  [Fact(Skip = "Remove to run test")]
43
- public void Test_square_of_sums_to_100()
38
+ public void Sum_of_squares_100()
44
39
  {
45
- Assert.Equal(25502500, Squares.SquareOfSums(100));
40
+ Assert.Equal(338350, DifferenceOfSquares.CalculateSumOfSquares(100));
46
41
  }
47
42
 
48
43
  [Fact(Skip = "Remove to run test")]
49
- public void Test_sum_of_squares_to_100()
44
+ public void Difference_of_squares_1()
50
45
  {
51
- Assert.Equal(338350, Squares.SumOfSquares(100));
46
+ Assert.Equal(0, DifferenceOfSquares.CalculateDifferenceOfSquares(1));
52
47
  }
53
48
 
54
49
  [Fact(Skip = "Remove to run test")]
55
- public void Test_difference_of_sums_to_100()
50
+ public void Difference_of_squares_5()
56
51
  {
57
- Assert.Equal(25164150, Squares.DifferenceOfSquares(100));
52
+ Assert.Equal(170, DifferenceOfSquares.CalculateDifferenceOfSquares(5));
58
53
  }
59
54
 
60
55
  [Fact(Skip = "Remove to run test")]
61
- public void Test_difference_of_sums_0()
56
+ public void Difference_of_squares_100()
62
57
  {
63
- Assert.Equal(0, Squares.DifferenceOfSquares(0));
58
+ Assert.Equal(25164150, DifferenceOfSquares.CalculateDifferenceOfSquares(100));
64
59
  }
65
- }
60
+ }
@@ -1,23 +1,23 @@
1
1
  using System;
2
2
  using System.Linq;
3
3
 
4
- public static class Squares
4
+ public static class DifferenceOfSquares
5
5
  {
6
- public static int SquareOfSums(int max)
6
+ public static int CalculateSquareOfSum(int max)
7
7
  {
8
8
  var numbers = Enumerable.Range(1, max);
9
9
  int sum = numbers.Sum();
10
10
  return sum * sum;
11
11
  }
12
12
 
13
- public static int SumOfSquares(int max)
13
+ public static int CalculateSumOfSquares(int max)
14
14
  {
15
15
  var numbers = Enumerable.Range(1, max);
16
16
  return numbers.Select(x => x * x).Sum();
17
17
  }
18
18
 
19
- public static int DifferenceOfSquares(int max)
19
+ public static int CalculateDifferenceOfSquares(int max)
20
20
  {
21
- return SquareOfSums(max) - SumOfSquares(max);
21
+ return CalculateSquareOfSum(max) - CalculateSumOfSquares(max);
22
22
  }
23
23
  }
@@ -20,7 +20,7 @@ public void ReturnNullableType()
20
20
  Assert.Equal(1, successfulResult);
21
21
 
22
22
  var failureResult = ErrorHandling.HandleErrorByReturningNullableType("a");
23
- Assert.Equal(null, failureResult);
23
+ Assert.Null(failureResult);
24
24
  }
25
25
 
26
26
  // Read more about out parameters here:
@@ -30,11 +30,11 @@ public void ReturnWithOutParameter()
30
30
  {
31
31
  int result;
32
32
  var successfulResult = ErrorHandling.HandleErrorWithOutParam("1", out result);
33
- Assert.Equal(true, successfulResult);
33
+ Assert.True(successfulResult);
34
34
  Assert.Equal(1, result);
35
35
 
36
36
  var failureResult = ErrorHandling.HandleErrorWithOutParam("a", out result);
37
- Assert.Equal(false, failureResult);
37
+ Assert.False(failureResult);
38
38
  // The value of result is meaningless here (it could be anything) so it shouldn't be used and it's not validated
39
39
  }
40
40
 
@@ -56,6 +56,6 @@ public void DisposableObjectsAreDisposedWhenThrowingAnException()
56
56
  var disposableResource = new DisposableResource();
57
57
 
58
58
  Assert.Throws<Exception>(() => ErrorHandling.DisposableResourcesAreDisposedWhenExceptionIsThrown(disposableResource));
59
- Assert.Equal(true, disposableResource.IsDisposed);
59
+ Assert.True(disposableResource.IsDisposed);
60
60
  }
61
61
  }
@@ -1,6 +1,6 @@
1
1
  using System.Collections;
2
2
 
3
- public static class Flattener
3
+ public static class FlattenArray
4
4
  {
5
5
  public static IEnumerable Flatten(IEnumerable input)
6
6
  {
@@ -1,7 +1,7 @@
1
1
  using System;
2
2
  using System.Collections;
3
3
 
4
- public static class Flattener
4
+ public static class FlattenArray
5
5
  {
6
6
  public static IEnumerable Flatten(IEnumerable input)
7
7
  {
@@ -1,112 +1,146 @@
1
- using System;
2
- using System.Collections.Generic;
3
- using System.Linq;
1
+ // This file was auto-generated based on version 1.1.0 of the canonical data.
2
+
4
3
  using Xunit;
5
4
 
6
5
  public class FlattenArrayTest
7
6
  {
8
7
  [Fact]
9
- public void Flattens_A_Nested_List()
10
- {
11
- var nestedList = new List<object> { new List<object>() };
12
- Assert.Empty(Flattener.Flatten(nestedList));
13
- }
14
-
15
- [Fact(Skip = "Remove to run test")]
16
- public void Flattens_2_Level_Nested_List()
8
+ public void No_nesting()
17
9
  {
18
- var nestedList = new List<object> { 1, new List<object> { 2, 3, 4 }, 5 };
19
- Assert.Equal(new List<int> { 1, 2, 3, 4, 5 }, Flattener.Flatten(nestedList).Cast<int>());
10
+ var input = new[] { 0, 1, 2 };
11
+ var expected = new[] { 0, 1, 2 };
12
+ Assert.Equal(expected, FlattenArray.Flatten(input));
20
13
  }
21
14
 
22
15
  [Fact(Skip = "Remove to run test")]
23
- public void Flattens_3_Level_Nested_List()
16
+ public void Flattens_array_with_just_integers_present()
24
17
  {
25
- var nestedList = new List<object>
26
- {
27
- 1,
28
- new List<object> { 2, 3, 4 },
18
+ var input = new object[] {
19
+ 1,
20
+ new object[] {
21
+ 2,
22
+ 3,
23
+ 4,
29
24
  5,
30
- new List<object> { 6, new List<object> { 7, 8 } }
25
+ 6,
26
+ 7
27
+ },
28
+ 8
31
29
  };
32
- Assert.Equal(new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 }, Flattener.Flatten(nestedList).Cast<int>());
30
+ var expected = new[] { 1, 2, 3, 4, 5, 6, 7, 8 };
31
+ Assert.Equal(expected, FlattenArray.Flatten(input));
33
32
  }
34
33
 
35
34
  [Fact(Skip = "Remove to run test")]
36
- public void Flattens_5_Level_Nested_List()
35
+ public void Number_5_level_nesting()
37
36
  {
38
- var nestedList = new List<object>
39
- {
40
- 0,
41
- 2,
42
- new List<object>
43
- {
44
- new List<object> { 2, 3 },
45
- 8,
46
- 100,
47
- 4,
48
- new List<object> { new List<object> { new List<object> { 50 } } },
49
- -2
37
+ var input = new object[] {
38
+ 0,
39
+ 2,
40
+ new object[] {
41
+ new object[] {
42
+ 2,
43
+ 3
44
+ },
45
+ 8,
46
+ 100,
47
+ 4,
48
+ new object[] {
49
+ new object[] {
50
+ new object[] {
51
+ 50
52
+ }
53
+ }
50
54
  }
55
+ },
56
+ -2
51
57
  };
52
- Assert.Equal(new List<int> { 0, 2, 2, 3, 8, 100, 4, 50, -2 }, Flattener.Flatten(nestedList).Cast<int>());
58
+ var expected = new[] { 0, 2, 2, 3, 8, 100, 4, 50, -2 };
59
+ Assert.Equal(expected, FlattenArray.Flatten(input));
53
60
  }
54
61
 
55
62
  [Fact(Skip = "Remove to run test")]
56
- public void Flattens_6_Level_Nested_List()
63
+ public void Number_6_level_nesting()
57
64
  {
58
- var nestedList = new List<object>
59
- {
60
- 1,
61
- new List<object>
62
- {
63
- 2,
64
- new List<object> { new List<object> { 3 } },
65
- new List<object> { 4, new List<object> { new List<object> { 5 } } },
66
- 6,
67
- 7
65
+ var input = new object[] {
66
+ 1,
67
+ new object[] {
68
+ 2,
69
+ new object[] {
70
+ new object[] {
71
+ 3
72
+ }
73
+ },
74
+ new object[] {
75
+ 4,
76
+ new object[] {
77
+ new object[] {
78
+ 5
79
+ }
80
+ }
68
81
  },
69
- 8
82
+ 6,
83
+ 7
84
+ },
85
+ 8
70
86
  };
71
- Assert.Equal(new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 }, Flattener.Flatten(nestedList).Cast<int>());
87
+ var expected = new[] { 1, 2, 3, 4, 5, 6, 7, 8 };
88
+ Assert.Equal(expected, FlattenArray.Flatten(input));
72
89
  }
73
90
 
74
91
  [Fact(Skip = "Remove to run test")]
75
- public void Flattens_6_Level_Nested_List_With_Nulls()
92
+ public void Number_6_level_nest_list_with_null_values()
76
93
  {
77
- var nestedList = new List<object>
78
- {
79
- 1,
80
- new List<object>
81
- {
82
- 2,
83
- null,
84
- new List<object> { new List<object> { 3 }, null },
85
- new List<object> { 4, new List<object> { new List<object> { 5 } } },
86
- 6,
87
- 7,
88
- new List<object> { new List<object> { null } }
94
+ var input = new object[] {
95
+ 0,
96
+ 2,
97
+ new object[] {
98
+ new object[] {
99
+ 2,
100
+ 3
89
101
  },
90
102
  8,
91
- null
103
+ new object[] {
104
+ new object[] {
105
+ 100
106
+ }
107
+ },
108
+ null,
109
+ new object[] {
110
+ new object[] {
111
+ null
112
+ }
113
+ }
114
+ },
115
+ -2
92
116
  };
93
- Assert.Equal(new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 }, Flattener.Flatten(nestedList).Cast<int>());
117
+ var expected = new[] { 0, 2, 2, 3, 8, 100, -2 };
118
+ Assert.Equal(expected, FlattenArray.Flatten(input));
94
119
  }
95
120
 
96
121
  [Fact(Skip = "Remove to run test")]
97
- public void All_Null_Nested_List_Returns_Empty_List()
122
+ public void All_values_in_nested_list_are_null()
98
123
  {
99
- var nestedList = new List<object>
100
- {
101
- null,
102
- new List<object>
103
- {
104
- null,
105
- new List<object> { null },
106
- new List<object> { new List<object> { new List<object> { null } } }
124
+ var input = new object[] {
125
+ null,
126
+ new object[] {
127
+ new object[] {
128
+ new object[] {
129
+ null
130
+ }
131
+ }
132
+ },
133
+ null,
134
+ null,
135
+ new object[] {
136
+ new object[] {
137
+ null,
138
+ null
107
139
  },
108
140
  null
141
+ },
142
+ null
109
143
  };
110
- Assert.Empty(Flattener.Flatten(nestedList));
144
+ Assert.Empty(FlattenArray.Flatten(input));
111
145
  }
112
146
  }