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
@@ -4,20 +4,20 @@
4
4
 
5
5
  #include "series.h"
6
6
 
7
- SeriesResults_t series(char *inputText, unsigned int substringLength)
7
+ series_results_t series(char *input_text, unsigned int substring_length)
8
8
  {
9
- int substringCount = strlen(inputText) - (substringLength - 1);
10
- SeriesResults_t results;
9
+ int substring_count = strlen(input_text) - (substring_length - 1);
10
+ series_results_t results;
11
11
 
12
12
  memset(&results, 0, sizeof(results));
13
- if ((substringCount > 0) && (substringLength > 0)) {
14
- results.substringCount = substringCount;
15
- results.substring = malloc(sizeof(char *) * substringCount);
16
- for (int index = 0; index < substringCount; index++) {
13
+ if ((substring_count > 0) && (substring_length > 0)) {
14
+ results.substring_count = substring_count;
15
+ results.substring = malloc(sizeof(char *) * substring_count);
16
+ for (int index = 0; index < substring_count; index++) {
17
17
  results.substring[index] =
18
- malloc(sizeof(char) * (substringLength + 1));
19
- sprintf(results.substring[index], "%.*s", substringLength,
20
- &inputText[index]);
18
+ malloc(sizeof(char) * (substring_length + 1));
19
+ sprintf(results.substring[index], "%.*s", substring_length,
20
+ &input_text[index]);
21
21
  }
22
22
  }
23
23
  return results;
@@ -6,10 +6,10 @@
6
6
  #define MAX_SERIES_LENGTH (5)
7
7
 
8
8
  // results structure
9
- typedef struct SeriesResults {
10
- unsigned int substringCount;
11
- char **substring; // array of pointers of dimension substringCount
12
- } SeriesResults_t;
9
+ typedef struct series_results {
10
+ unsigned int substring_count;
11
+ char **substring; // array of pointers of dimension substring_count
12
+ } series_results_t;
13
13
 
14
14
  // series - routine to split up input text into consecutive substrings of text of a given substringLength
15
15
  //
@@ -23,6 +23,6 @@ typedef struct SeriesResults {
23
23
  //
24
24
  // calling routine will free memory associated with each of the substrings and
25
25
  // the pointers to the substrings.
26
- SeriesResults_t series(char *inputText, unsigned int substringLength);
26
+ series_results_t series(char *input_text, unsigned int substring_length);
27
27
 
28
28
  #endif
@@ -3,47 +3,94 @@
3
3
  #include "../src/series.h"
4
4
 
5
5
  // helper routines to validate test results
6
- static void testSolution(SeriesResults_t * expectedSolution,
7
- SeriesResults_t * actualSolution)
6
+ static void test_solution(series_results_t * expected_solution,
7
+ series_results_t * actual_solution)
8
8
  {
9
9
  // result count correct
10
- TEST_ASSERT_EQUAL(expectedSolution->substringCount,
11
- actualSolution->substringCount);
10
+ TEST_ASSERT_EQUAL(expected_solution->substring_count,
11
+ actual_solution->substring_count);
12
12
 
13
13
  // test each substring...
14
- for (unsigned int index = 0; index < expectedSolution->substringCount;
14
+ for (unsigned int index = 0; index < expected_solution->substring_count;
15
15
  index++) {
16
- TEST_ASSERT_EQUAL_STRING(expectedSolution->substring[index],
17
- actualSolution->substring[index]);
18
- free(actualSolution->substring[index]);
16
+ TEST_ASSERT_EQUAL_STRING(expected_solution->substring[index],
17
+ actual_solution->substring[index]);
18
+ free(actual_solution->substring[index]);
19
19
  }
20
- if (actualSolution->substringCount) {
21
- free(actualSolution->substring);
20
+ if (actual_solution->substring_count) {
21
+ free(actual_solution->substring);
22
22
  }
23
23
  }
24
24
 
25
- #define EXPAND_SERIES_TEST_CASES_AS_TEST(test_name, inputText, substringLength, expectedResultCount, expectedResultSubstrings)\
26
- void test_name(void)\
27
- {\
28
- char *substrings[] = expectedResultSubstrings;\
29
- SeriesResults_t expected = {expectedResultCount, &substrings[0]};\
30
- SeriesResults_t actual = series(inputText, substringLength);\
31
- testSolution(&expected, &actual);\
32
- }\
25
+ // Test cases
26
+ void test_slices_of_one(void)
27
+ {
28
+ char *substrings[] = { "0", "1", "2", "3", "4" };
29
+ series_results_t expected = { 5, &substrings[0] };
30
+ series_results_t actual = series("01234", 1);
33
31
 
34
- #define ASSEMBLE_STRING_ARRAY(...) __VA_ARGS__
32
+ test_solution(&expected, &actual);
33
+ }
35
34
 
36
- // Test cases
37
- #define SERIES_TEST_CASES(ENTRY) \
38
- ENTRY(test_slices_of_one, "01234", 1, 5, { ASSEMBLE_STRING_ARRAY("0","1","2","3","4") })\
39
- ENTRY(test_slices_of_two, "97867564", 2, 7, { ASSEMBLE_STRING_ARRAY("97","78","86","67","75","56", "64") })\
40
- ENTRY(test_slices_of_three, "97867564", 3, 6, { ASSEMBLE_STRING_ARRAY("978","786","867","675","756","564") })\
41
- ENTRY(test_slices_of_four, "01234", 4, 2, { ASSEMBLE_STRING_ARRAY("0123","1234") })\
42
- ENTRY(test_slices_of_five, "01234", 5, 1, { ASSEMBLE_STRING_ARRAY("01234") })\
43
- ENTRY(test_overly_long_slice, "012", 4, 0, { ASSEMBLE_STRING_ARRAY("") })\
44
- ENTRY(test_overly_short_slice, "01234", 0, 0, { ASSEMBLE_STRING_ARRAY("") })\
45
-
46
- SERIES_TEST_CASES(EXPAND_SERIES_TEST_CASES_AS_TEST)
35
+ void test_slices_of_two(void)
36
+ {
37
+ TEST_IGNORE(); // delete this line to run test
38
+ char *substrings[] = { "97", "78", "86", "67", "75", "56", "64" };
39
+ series_results_t expected = { 7, &substrings[0] };
40
+ series_results_t actual = series("97867564", 2);
41
+
42
+ test_solution(&expected, &actual);
43
+ }
44
+
45
+ void test_slices_of_three(void)
46
+ {
47
+ TEST_IGNORE();
48
+ char *substrings[] = { "978", "786", "867", "675", "756", "564" };
49
+ series_results_t expected = { 6, &substrings[0] };
50
+ series_results_t actual = series("97867564", 3);
51
+
52
+ test_solution(&expected, &actual);
53
+ }
54
+
55
+ void test_slices_of_four(void)
56
+ {
57
+ TEST_IGNORE();
58
+ char *substrings[] = { "0123", "1234" };
59
+ series_results_t expected = { 2, &substrings[0] };
60
+ series_results_t actual = series("01234", 4);
61
+
62
+ test_solution(&expected, &actual);
63
+ }
64
+
65
+ void test_slices_of_five(void)
66
+ {
67
+ TEST_IGNORE();
68
+ char *substrings[] = { "01234" };
69
+ series_results_t expected = { 1, &substrings[0] };
70
+ series_results_t actual = series("01234", 5);
71
+
72
+ test_solution(&expected, &actual);
73
+ }
74
+
75
+ void test_overly_long_slice(void)
76
+ {
77
+ TEST_IGNORE();
78
+ char *substrings[] = { "" };
79
+ series_results_t expected = { 0, &substrings[0] };
80
+ series_results_t actual = series("012", 4);
81
+
82
+ test_solution(&expected, &actual);
83
+ }
84
+
85
+ void test_overly_short_slice(void)
86
+ {
87
+ TEST_IGNORE();
88
+ char *substrings[] = { "" };
89
+ series_results_t expected = { 0, &substrings[0] };
90
+ series_results_t actual = series("01234", 0);
91
+
92
+ test_solution(&expected, &actual);
93
+ }
47
94
 
48
95
  int main(void)
49
96
  {
@@ -3,49 +3,49 @@
3
3
  #include <math.h>
4
4
  #include "sieve.h"
5
5
 
6
- unsigned int sieve(const unsigned int limit, primesArray_t primes)
6
+ unsigned int sieve(const unsigned int limit, primes_array_t primes)
7
7
  {
8
- unsigned int numberOfPrimes = 0;
9
- unsigned char *numberIsPrime;
8
+ unsigned int number_of_primes = 0;
9
+ unsigned char *number_is_prime;
10
10
 
11
11
  // clear the results
12
12
  memset(primes, 0, sizeof(*primes));
13
13
 
14
14
  if (limit > 1) {
15
15
  //allocate 1 more than limit for convenience so the number and the index are same
16
- numberIsPrime = malloc(limit + 1);
17
- memset(numberIsPrime, 1, limit + 1);
16
+ number_is_prime = malloc(limit + 1);
17
+ memset(number_is_prime, 1, limit + 1);
18
18
 
19
- unsigned int maxFactor = sqrt(limit) + 1;
19
+ unsigned int max_factor = sqrt(limit) + 1;
20
20
 
21
21
  // mark 0 and 1 as not prime
22
22
  for (unsigned int i = 0; i < 2; i++) {
23
- numberIsPrime[i] = 0;
23
+ number_is_prime[i] = 0;
24
24
  }
25
25
 
26
26
  // mark the remaining numbers in the array according to the algo.
27
- for (unsigned int index = 2; index < maxFactor;) {
27
+ for (unsigned int index = 2; index < max_factor;) {
28
28
  // mark all of multiples that can't be prime
29
- for (unsigned int nonPrimeIndex = (2 * index);
30
- nonPrimeIndex < (limit + 1); nonPrimeIndex += index) {
31
- numberIsPrime[nonPrimeIndex] = 0;
29
+ for (unsigned int non_prime_index = (2 * index);
30
+ non_prime_index < (limit + 1); non_prime_index += index) {
31
+ number_is_prime[non_prime_index] = 0;
32
32
  }
33
33
 
34
34
  // adjust the index
35
35
  do {
36
36
  index++;
37
- if (numberIsPrime[index]) {
37
+ if (number_is_prime[index]) {
38
38
  break;
39
39
  }
40
- } while (index <= maxFactor);
40
+ } while (index <= max_factor);
41
41
  }
42
42
  // collect and count the primes found
43
43
  for (unsigned int i = 1; i < limit + 1; i++) {
44
- if (numberIsPrime[i]) {
45
- primes[numberOfPrimes++] = i;
44
+ if (number_is_prime[i]) {
45
+ primes[number_of_primes++] = i;
46
46
  }
47
47
  }
48
- free(numberIsPrime);
48
+ free(number_is_prime);
49
49
  }
50
- return numberOfPrimes;
50
+ return number_of_primes;
51
51
  }
@@ -3,8 +3,8 @@
3
3
 
4
4
  #define MAX_LIMIT_TESTED (1000)
5
5
 
6
- typedef unsigned int primesArray_t[MAX_LIMIT_TESTED];
6
+ typedef unsigned int primes_array_t[MAX_LIMIT_TESTED];
7
7
 
8
- unsigned int sieve(const unsigned int limit, primesArray_t primes);
8
+ unsigned int sieve(const unsigned int limit, primes_array_t primes);
9
9
 
10
10
  #endif
@@ -2,12 +2,12 @@
2
2
  #include "vendor/unity.h"
3
3
  #include "../src/sieve.h"
4
4
 
5
- static primesArray_t result_array;
5
+ static primes_array_t result_array;
6
6
 
7
7
  void test_no_primes_under_two(void)
8
8
  {
9
9
  const unsigned int limit = 1;
10
- const primesArray_t expected_prime_array = { 0 };
10
+ const primes_array_t expected_prime_array = { 0 };
11
11
  const unsigned int expected_prime_count = 0;
12
12
  unsigned int result_prime_count;
13
13
 
@@ -24,7 +24,7 @@ void test_find_first_prime(void)
24
24
  {
25
25
  TEST_IGNORE(); // delete this line to run test
26
26
  const unsigned int limit = 2;
27
- const primesArray_t expected_prime_array = { 2 };
27
+ const primes_array_t expected_prime_array = { 2 };
28
28
  const unsigned int expected_prime_count = 1;
29
29
  unsigned int result_prime_count;
30
30
 
@@ -41,7 +41,7 @@ void test_find_primes_up_to_10(void)
41
41
  {
42
42
  TEST_IGNORE();
43
43
  const unsigned int limit = 10;
44
- const primesArray_t expected_prime_array = { 2, 3, 5, 7 };
44
+ const primes_array_t expected_prime_array = { 2, 3, 5, 7 };
45
45
  const unsigned int expected_prime_count = 4;
46
46
  unsigned int result_prime_count;
47
47
 
@@ -58,7 +58,7 @@ void test_limit_is_prime(void)
58
58
  {
59
59
  TEST_IGNORE();
60
60
  const unsigned int limit = 13;
61
- const primesArray_t expected_prime_array = { 2, 3, 5, 7, 11, 13 };
61
+ const primes_array_t expected_prime_array = { 2, 3, 5, 7, 11, 13 };
62
62
  const unsigned int expected_prime_count = 6;
63
63
  unsigned int result_prime_count;
64
64
 
@@ -75,7 +75,7 @@ void test_find_primes_up_to_1000(void)
75
75
  {
76
76
  TEST_IGNORE();
77
77
  const unsigned int limit = 1000;
78
- const primesArray_t expected_prime_array = {
78
+ const primes_array_t expected_prime_array = {
79
79
  2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59,
80
80
  61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127,
81
81
  131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193,
@@ -15,7 +15,7 @@ static const float factors[8] = {
15
15
  EARTH * 164.79132 // Neptune
16
16
  };
17
17
 
18
- float convert_planet_age(Planets planet, const long input)
18
+ float convert_planet_age(planet_t planet, const long input)
19
19
  {
20
20
  return input / factors[planet];
21
21
  }
@@ -1,7 +1,7 @@
1
1
  #ifndef SPACE_AGE_H
2
2
  #define SPACE_AGE_H
3
3
 
4
- typedef enum planets {
4
+ typedef enum planet {
5
5
  mercury,
6
6
  venus,
7
7
  earth,
@@ -10,8 +10,8 @@ typedef enum planets {
10
10
  saturn,
11
11
  uranus,
12
12
  neptune,
13
- } Planets;
13
+ } planet_t;
14
14
 
15
- float convert_planet_age(Planets planet, const long input);
15
+ float convert_planet_age(planet_t planet, const long input);
16
16
 
17
17
  #endif
@@ -51,6 +51,7 @@ void test_convert_neptune_year(void)
51
51
  int main(void)
52
52
  {
53
53
  UnityBegin("test/test_space_age.c");
54
+
54
55
  RUN_TEST(test_convert_earth_year);
55
56
  RUN_TEST(test_convert_mercury_year);
56
57
  RUN_TEST(test_convert_venus_year);
@@ -59,6 +60,7 @@ int main(void)
59
60
  RUN_TEST(test_convert_saturn_year);
60
61
  RUN_TEST(test_convert_uranus_year);
61
62
  RUN_TEST(test_convert_neptune_year);
63
+
62
64
  UnityEnd();
63
65
  return 0;
64
66
  }
@@ -6,10 +6,12 @@ unsigned int sum_of_multiples(const unsigned int *multiples,
6
6
  const unsigned int upper_bound)
7
7
  {
8
8
  unsigned int sum = 0;
9
+ if (NULL == multiples)
10
+ return sum;
9
11
 
10
12
  for (unsigned int current = 1; current < upper_bound; current++) {
11
13
  for (size_t i = 0; i < number_of_multiples; i++) {
12
- if ((current % multiples[i]) == 0) {
14
+ if (0 != multiples[i] && (current % multiples[i]) == 0) {
13
15
  sum += current;
14
16
  break;
15
17
  }
@@ -101,12 +101,27 @@ void test_sum_of_multiples_of_1_up_to_100(void)
101
101
  100));
102
102
  }
103
103
 
104
+ void test_sum_of_multiples_of_0_up_to_100(void)
105
+ {
106
+ TEST_IGNORE();
107
+ const unsigned int multiples[] = { 0 };
108
+ TEST_ASSERT_EQUAL(0,
109
+ sum_of_multiples(multiples, NUM_OF_ELEMENTS(multiples),
110
+ 100));
111
+ }
112
+
104
113
  void test_no_multiples_given(void)
105
114
  {
106
115
  TEST_IGNORE();
107
116
  TEST_ASSERT_EQUAL(0, sum_of_multiples(NULL, 0, 10000));
108
117
  }
109
118
 
119
+ void test_null_ptr_multiple(void)
120
+ {
121
+ TEST_IGNORE();
122
+ TEST_ASSERT_EQUAL(0, sum_of_multiples(NULL, 3, 10000));
123
+ }
124
+
110
125
  int main(void)
111
126
  {
112
127
  UnityBegin("test/test_sum_of_multiples.c");
@@ -122,7 +137,9 @@ int main(void)
122
137
  RUN_TEST(test_sum_of_multiples_of_5_and_25_up_to_51);
123
138
  RUN_TEST(test_sum_of_multiples_of_43_and_47_up_to_10000);
124
139
  RUN_TEST(test_sum_of_multiples_of_1_up_to_100);
140
+ RUN_TEST(test_sum_of_multiples_of_0_up_to_100);
125
141
  RUN_TEST(test_no_multiples_given);
142
+ RUN_TEST(test_null_ptr_multiple);
126
143
 
127
144
  UnityEnd();
128
145
  return 0;
@@ -1,6 +1,6 @@
1
1
  #include "triangle.h"
2
2
 
3
- bool triangle_equality(Triangle_t * input)
3
+ bool triangle_equality(triangle_t * input)
4
4
  {
5
5
  return (input->a < (input->b + input->c)
6
6
  && input->b < (input->a + input->c)
@@ -8,7 +8,7 @@ bool triangle_equality(Triangle_t * input)
8
8
  );
9
9
  }
10
10
 
11
- bool is_equilateral(Triangle_t * input)
11
+ bool is_equilateral(triangle_t * input)
12
12
  {
13
13
  return (triangle_equality(input)
14
14
  && (input->a == input->b)
@@ -16,7 +16,7 @@ bool is_equilateral(Triangle_t * input)
16
16
  );
17
17
  }
18
18
 
19
- bool is_isosceles(Triangle_t * input)
19
+ bool is_isosceles(triangle_t * input)
20
20
  {
21
21
  return (triangle_equality(input) && ((input->a == input->b)
22
22
  || (input->b == input->c)
@@ -24,7 +24,7 @@ bool is_isosceles(Triangle_t * input)
24
24
  );
25
25
  }
26
26
 
27
- bool is_scalene(Triangle_t * input)
27
+ bool is_scalene(triangle_t * input)
28
28
  {
29
29
  return (!(is_equilateral(input))
30
30
  && !(is_isosceles(input))
@@ -6,10 +6,10 @@ typedef struct {
6
6
  double a;
7
7
  double b;
8
8
  double c;
9
- } Triangle_t;
9
+ } triangle_t;
10
10
 
11
- bool is_equilateral(Triangle_t * input);
12
- bool is_isosceles(Triangle_t * input);
13
- bool is_scalene(Triangle_t * input);
11
+ bool is_equilateral(triangle_t * input);
12
+ bool is_isosceles(triangle_t * input);
13
+ bool is_scalene(triangle_t * input);
14
14
 
15
15
  #endif