trackler 2.2.1.45 → 2.2.1.46

Sign up to get free protection for your applications and to get access to all the features.
Files changed (508) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/complex-numbers/description.md +27 -0
  4. data/problem-specifications/exercises/crypto-square/canonical-data.json +39 -43
  5. data/problem-specifications/exercises/crypto-square/description.md +6 -4
  6. data/problem-specifications/exercises/hamming/canonical-data.json +5 -5
  7. data/problem-specifications/exercises/kindergarten-garden/description.md +10 -10
  8. data/problem-specifications/exercises/leap/canonical-data.json +2 -2
  9. data/problem-specifications/exercises/markdown/canonical-data.json +2 -2
  10. data/problem-specifications/exercises/nucleotide-count/canonical-data.json +12 -1
  11. data/problem-specifications/exercises/pangram/canonical-data.json +7 -1
  12. data/problem-specifications/exercises/queen-attack/canonical-data.json +83 -26
  13. data/problem-specifications/exercises/space-age/description.md +1 -2
  14. data/problem-specifications/exercises/zipper/canonical-data.json +671 -0
  15. data/tracks/bash/config.json +13 -1
  16. data/tracks/bash/exercises/atbash-cipher/README.md +45 -0
  17. data/tracks/bash/exercises/atbash-cipher/atbash_cipher_tests.sh +73 -0
  18. data/tracks/bash/exercises/atbash-cipher/example.sh +14 -0
  19. data/tracks/bash/exercises/gigasecond/.meta/hints.md +33 -0
  20. data/tracks/bash/exercises/two-fer/README.md +0 -22
  21. data/tracks/c/exercises/allergies/src/allergies.h +9 -9
  22. data/tracks/c/exercises/allergies/src/example.c +2 -2
  23. data/tracks/c/exercises/allergies/src/example.h +9 -9
  24. data/tracks/c/exercises/allergies/test/test_allergies.c +34 -34
  25. data/tracks/c/exercises/clock/test/test_clock.c +0 -52
  26. data/tracks/c/exercises/meetup/test/test_meetup.c +604 -114
  27. data/tracks/c/exercises/nucleotide-count/src/example.c +10 -10
  28. data/tracks/c/exercises/palindrome-products/src/example.c +8 -8
  29. data/tracks/c/exercises/palindrome-products/src/example.h +5 -5
  30. data/tracks/c/exercises/palindrome-products/test/test_palindrome_products.c +8 -6
  31. data/tracks/c/exercises/robot-simulator/src/example.c +19 -19
  32. data/tracks/c/exercises/robot-simulator/src/robot_simulator.h +24 -24
  33. data/tracks/c/exercises/robot-simulator/test/test_robot_simulator.c +35 -34
  34. data/tracks/c/exercises/series/src/example.c +10 -10
  35. data/tracks/c/exercises/series/src/series.h +5 -5
  36. data/tracks/c/exercises/series/test/test_series.c +77 -30
  37. data/tracks/c/exercises/sieve/src/example.c +17 -17
  38. data/tracks/c/exercises/sieve/src/sieve.h +2 -2
  39. data/tracks/c/exercises/sieve/test/test_sieve.c +6 -6
  40. data/tracks/c/exercises/space-age/src/example.c +1 -1
  41. data/tracks/c/exercises/space-age/src/example.h +3 -3
  42. data/tracks/c/exercises/space-age/test/test_space_age.c +2 -0
  43. data/tracks/c/exercises/sum-of-multiples/src/example.c +3 -1
  44. data/tracks/c/exercises/sum-of-multiples/test/test_sum_of_multiples.c +17 -0
  45. data/tracks/c/exercises/triangle/src/example.c +4 -4
  46. data/tracks/c/exercises/triangle/src/example.h +4 -4
  47. data/tracks/c/exercises/triangle/src/triangle.h +1 -1
  48. data/tracks/c/exercises/triangle/test/test_triangle.c +18 -16
  49. data/tracks/c/exercises/word-count/src/example.c +24 -24
  50. data/tracks/c/exercises/word-count/src/word_count.h +3 -3
  51. data/tracks/c/exercises/word-count/test/test_word_count.c +139 -139
  52. data/tracks/cfml/exercises/acronym/README.md +31 -0
  53. data/tracks/cfml/exercises/atbash-cipher/README.md +50 -0
  54. data/tracks/cfml/exercises/bob/README.md +34 -0
  55. data/tracks/cfml/exercises/diamond/README.md +75 -0
  56. data/tracks/cfml/exercises/difference-of-squares/README.md +35 -0
  57. data/tracks/cfml/exercises/flatten-array/README.md +34 -0
  58. data/tracks/cfml/exercises/gigasecond/README.md +27 -0
  59. data/tracks/cfml/exercises/grains/README.md +50 -0
  60. data/tracks/cfml/exercises/hamming/README.md +58 -0
  61. data/tracks/cfml/exercises/hello-world/README.md +37 -0
  62. data/tracks/cfml/exercises/isogram/README.md +35 -0
  63. data/tracks/cfml/exercises/largest-series-product/README.md +36 -0
  64. data/tracks/cfml/exercises/leap/README.md +16 -0
  65. data/tracks/cfml/exercises/luhn/README.md +87 -0
  66. data/tracks/cfml/exercises/markdown/README.md +34 -0
  67. data/tracks/cfml/exercises/nth-prime/README.md +31 -0
  68. data/tracks/cfml/exercises/pangram/README.md +31 -0
  69. data/tracks/cfml/exercises/pig-latin/README.md +40 -0
  70. data/tracks/cfml/exercises/raindrops/README.md +40 -0
  71. data/tracks/cfml/exercises/rna-transcription/README.md +41 -0
  72. data/tracks/cfml/exercises/saddle-points/README.md +49 -0
  73. data/tracks/cfml/exercises/scrabble-score/README.md +60 -0
  74. data/tracks/cfml/exercises/secret-handshake/README.md +51 -0
  75. data/tracks/cfml/exercises/space-age/README.md +41 -0
  76. data/tracks/cfml/exercises/sum-of-multiples/README.md +34 -0
  77. data/tracks/cfml/exercises/triangle/README.md +42 -0
  78. data/tracks/cfml/exercises/word-count/README.md +35 -0
  79. data/tracks/clojure/config.json +10 -0
  80. data/tracks/clojure/exercises/spiral-matrix/README.md +32 -0
  81. data/tracks/clojure/exercises/spiral-matrix/project.clj +4 -0
  82. data/tracks/clojure/exercises/spiral-matrix/src/example.clj +11 -0
  83. data/tracks/clojure/exercises/spiral-matrix/src/spiral_matrix.clj +3 -0
  84. data/tracks/clojure/exercises/spiral-matrix/test/spiral_matrix_test.clj +58 -0
  85. data/tracks/common-lisp/config.json +20 -0
  86. data/tracks/common-lisp/exercises/hello-world/README.md +68 -0
  87. data/tracks/common-lisp/exercises/hello-world/example.lisp +9 -0
  88. data/tracks/common-lisp/exercises/hello-world/hello-world-test.lisp +21 -0
  89. data/tracks/common-lisp/exercises/hello-world/hello-world.lisp +6 -0
  90. data/tracks/common-lisp/exercises/perfect-numbers/README.md +72 -0
  91. data/tracks/common-lisp/exercises/perfect-numbers/example.lisp +17 -0
  92. data/tracks/common-lisp/exercises/perfect-numbers/perfect-numbers-test.lisp +56 -0
  93. data/tracks/common-lisp/exercises/perfect-numbers/perfect-numbers.lisp +7 -0
  94. data/tracks/cpp/.travis.yml +34 -14
  95. data/tracks/cpp/docs/INSTALLATION.md +17 -28
  96. data/tracks/cpp/docs/TESTS.md +13 -21
  97. data/tracks/crystal/config.json +10 -0
  98. data/tracks/crystal/exercises/triangle/spec/triangle_spec.cr +60 -0
  99. data/tracks/crystal/exercises/triangle/src/example.cr +31 -0
  100. data/tracks/crystal/exercises/triangle/src/triangle.cr +1 -0
  101. data/tracks/crystal/generator/spec/remote_data_file_spec.cr +0 -1
  102. data/tracks/crystal/generator/src/generators/triangle.cr +38 -0
  103. data/tracks/crystal/generator/src/remote_data_file.cr +1 -1
  104. data/tracks/csharp/exercises/difference-of-squares/DifferenceOfSquares.cs +4 -4
  105. data/tracks/csharp/exercises/difference-of-squares/DifferenceOfSquaresTest.cs +22 -27
  106. data/tracks/csharp/exercises/difference-of-squares/Example.cs +5 -5
  107. data/tracks/csharp/exercises/error-handling/ErrorHandlingTest.cs +4 -4
  108. data/tracks/csharp/exercises/flatten-array/Example.cs +1 -1
  109. data/tracks/csharp/exercises/flatten-array/FlattenArray.cs +1 -1
  110. data/tracks/csharp/exercises/flatten-array/FlattenArrayTest.cs +106 -72
  111. data/tracks/csharp/exercises/largest-series-product/LargestSeriesProductTest.cs +24 -98
  112. data/tracks/csharp/exercises/minesweeper/Example.cs +3 -3
  113. data/tracks/csharp/exercises/minesweeper/Minesweeper.cs +1 -1
  114. data/tracks/csharp/exercises/minesweeper/MinesweeperTest.cs +155 -57
  115. data/tracks/csharp/generators/Exercises/DifferenceOfSquares.cs +25 -0
  116. data/tracks/csharp/generators/Exercises/FlattenArray.cs +36 -0
  117. data/tracks/csharp/generators/Exercises/LargestSeriesProduct.cs +18 -0
  118. data/tracks/csharp/generators/Exercises/Minesweeper.cs +32 -0
  119. data/tracks/d/docs/EXERCISE_README_INSERT.md +1 -1
  120. data/tracks/d/exercises/bob/README.md +1 -1
  121. data/tracks/d/exercises/circular-buffer/README.md +1 -1
  122. data/tracks/d/exercises/crypto-square/README.md +1 -1
  123. data/tracks/d/exercises/difference-of-squares/README.md +1 -1
  124. data/tracks/d/exercises/etl/README.md +1 -1
  125. data/tracks/d/exercises/gigasecond/README.md +1 -1
  126. data/tracks/d/exercises/hamming/README.md +1 -1
  127. data/tracks/d/exercises/hello-world/README.md +1 -1
  128. data/tracks/d/exercises/leap/README.md +1 -1
  129. data/tracks/d/exercises/nucleotide-count/README.md +1 -1
  130. data/tracks/d/exercises/pangram/README.md +1 -1
  131. data/tracks/d/exercises/raindrops/README.md +1 -1
  132. data/tracks/d/exercises/react/README.md +1 -1
  133. data/tracks/d/exercises/rna-transcription/README.md +1 -1
  134. data/tracks/d/exercises/robot-name/README.md +1 -1
  135. data/tracks/d/exercises/roman-numerals/README.md +1 -1
  136. data/tracks/d/exercises/series/README.md +1 -1
  137. data/tracks/d/exercises/triangle/README.md +1 -1
  138. data/tracks/dart/CONTRIBUTING.md +61 -0
  139. data/tracks/dart/README.md +10 -47
  140. data/tracks/dart/config.json +13 -1
  141. data/tracks/dart/exercises/anagram/README.md +10 -0
  142. data/tracks/dart/exercises/bob/README.md +11 -0
  143. data/tracks/dart/exercises/difference-of-squares/README.md +11 -0
  144. data/tracks/dart/exercises/gigasecond/README.md +11 -0
  145. data/tracks/dart/exercises/gigasecond/test/gigasecond_test.dart +56 -33
  146. data/tracks/dart/exercises/hamming/README.md +11 -0
  147. data/tracks/dart/exercises/hamming/lib/example.dart +2 -2
  148. data/tracks/dart/exercises/hamming/test/hamming_test.dart +41 -24
  149. data/tracks/dart/exercises/hello-world/README.md +11 -0
  150. data/tracks/dart/exercises/leap/README.md +12 -1
  151. data/tracks/dart/exercises/phone-number/README.md +56 -0
  152. data/tracks/dart/exercises/phone-number/lib/example.dart +45 -0
  153. data/tracks/dart/exercises/phone-number/lib/phone_number.dart +3 -0
  154. data/tracks/dart/exercises/phone-number/pubspec.lock +293 -0
  155. data/tracks/dart/exercises/phone-number/pubspec.yaml +3 -0
  156. data/tracks/dart/exercises/phone-number/test/phone_number_test.dart +66 -0
  157. data/tracks/dart/exercises/raindrops/README.md +35 -0
  158. data/tracks/dart/exercises/rna-transcription/README.md +11 -0
  159. data/tracks/dart/exercises/word-count/README.md +14 -3
  160. data/tracks/delphi/docs/RESOURCES.md +10 -11
  161. data/tracks/elixir/exercises/hello-world/hello_world.exs +1 -1
  162. data/tracks/elixir/exercises/secret-handshake/README.md +3 -5
  163. data/tracks/elm/exercises/isogram/Isogram.example.elm +4 -4
  164. data/tracks/erlang/config.json +10 -0
  165. data/tracks/erlang/exercises/sieve/README.md +88 -0
  166. data/tracks/erlang/exercises/sieve/include/exercism.hrl +11 -0
  167. data/tracks/erlang/exercises/sieve/rebar.config +30 -0
  168. data/tracks/erlang/exercises/sieve/src/example.erl +16 -0
  169. data/tracks/erlang/exercises/sieve/src/sieve.app.src +9 -0
  170. data/tracks/erlang/exercises/sieve/src/sieve.erl +8 -0
  171. data/tracks/erlang/exercises/sieve/test/sieve_tests.erl +38 -0
  172. data/tracks/fsharp/.gitignore +2 -1
  173. data/tracks/fsharp/exercises/crypto-square/CryptoSquareTest.fs +10 -6
  174. data/tracks/fsharp/exercises/leap/LeapTest.fs +2 -2
  175. data/tracks/fsharp/exercises/pangram/PangramTest.fs +5 -1
  176. data/tracks/fsharp/exercises/queen-attack/QueenAttackTest.fs +7 -7
  177. data/tracks/fsharp/exercises/run-length-encoding/Example.fs +2 -2
  178. data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncodingTest.fs +42 -30
  179. data/tracks/fsharp/generators/Generators.fs +21 -8
  180. data/tracks/gnu-apl/test.apl +4 -4
  181. data/tracks/go/README.md +1 -2
  182. data/tracks/go/config/maintainers.json +5 -6
  183. data/tracks/groovy/config.json +23 -0
  184. data/tracks/groovy/exercises/binary-search/BinarySearch.groovy +14 -0
  185. data/tracks/groovy/exercises/binary-search/BinarySearchSpec.groovy +56 -0
  186. data/tracks/groovy/exercises/binary-search/Example.groovy +43 -0
  187. data/tracks/groovy/exercises/binary-search/README.md +59 -0
  188. data/tracks/groovy/exercises/triangle/Example.groovy +23 -0
  189. data/tracks/groovy/exercises/triangle/README.md +42 -0
  190. data/tracks/groovy/exercises/triangle/Triangle.groovy +15 -0
  191. data/tracks/groovy/exercises/triangle/TriangleSpec.groovy +66 -0
  192. data/tracks/haskell/config.json +9 -0
  193. data/tracks/haskell/exercises/all-your-base/package.yaml +1 -1
  194. data/tracks/haskell/exercises/all-your-base/test/Tests.hs +18 -18
  195. data/tracks/haskell/exercises/bowling/package.yaml +1 -1
  196. data/tracks/haskell/exercises/bowling/test/Tests.hs +9 -9
  197. data/tracks/haskell/exercises/change/package.yaml +1 -1
  198. data/tracks/haskell/exercises/change/test/Tests.hs +5 -0
  199. data/tracks/haskell/exercises/complex-numbers/README.md +92 -0
  200. data/tracks/haskell/exercises/complex-numbers/examples/success-standard/package.yaml +16 -0
  201. data/tracks/haskell/exercises/complex-numbers/examples/success-standard/src/ComplexNumbers.hs +50 -0
  202. data/tracks/haskell/exercises/complex-numbers/package.yaml +20 -0
  203. data/tracks/haskell/exercises/complex-numbers/src/ComplexNumbers.hs +45 -0
  204. data/tracks/haskell/exercises/complex-numbers/stack.yaml +1 -0
  205. data/tracks/haskell/exercises/complex-numbers/test/Tests.hs +194 -0
  206. data/tracks/haskell/exercises/crypto-square/package.yaml +1 -1
  207. data/tracks/haskell/exercises/crypto-square/test/Tests.hs +20 -12
  208. data/tracks/haskell/exercises/dominoes/package.yaml +1 -1
  209. data/tracks/haskell/exercises/forth/package.yaml +1 -1
  210. data/tracks/haskell/exercises/forth/test/Tests.hs +4 -3
  211. data/tracks/haskell/exercises/hamming/package.yaml +1 -1
  212. data/tracks/haskell/exercises/hamming/test/Tests.hs +6 -6
  213. data/tracks/haskell/exercises/isogram/package.yaml +1 -1
  214. data/tracks/haskell/exercises/isogram/test/Tests.hs +2 -2
  215. data/tracks/haskell/exercises/leap/package.yaml +1 -1
  216. data/tracks/haskell/exercises/leap/test/Tests.hs +1 -1
  217. data/tracks/haskell/exercises/pascals-triangle/package.yaml +1 -1
  218. data/tracks/haskell/exercises/pig-latin/examples/success-standard/src/PigLatin.hs +2 -0
  219. data/tracks/haskell/exercises/pig-latin/package.yaml +1 -1
  220. data/tracks/haskell/exercises/pig-latin/test/Tests.hs +8 -0
  221. data/tracks/haskell/exercises/queen-attack/package.yaml +1 -1
  222. data/tracks/haskell/exercises/rna-transcription/package.yaml +1 -1
  223. data/tracks/haskell/exercises/rna-transcription/test/Tests.hs +8 -8
  224. data/tracks/haskell/exercises/robot-simulator/package.yaml +1 -1
  225. data/tracks/haskell/exercises/secret-handshake/package.yaml +1 -1
  226. data/tracks/haskell/exercises/secret-handshake/test/Tests.hs +0 -3
  227. data/tracks/haskell/exercises/sum-of-multiples/package.yaml +1 -1
  228. data/tracks/haskell/exercises/sum-of-multiples/test/Tests.hs +4 -0
  229. data/tracks/haskell/exercises/zipper/package.yaml +1 -1
  230. data/tracks/haskell/exercises/zipper/test/Tests.hs +23 -0
  231. data/tracks/java/config.json +85 -13
  232. data/tracks/java/config/maintainers.json +1 -1
  233. data/tracks/java/exercises/accumulate/README.md +0 -3
  234. data/tracks/java/exercises/acronym/.meta/.version +1 -0
  235. data/tracks/java/exercises/acronym/README.md +0 -1
  236. data/tracks/java/exercises/acronym/src/test/java/AcronymTest.java +0 -3
  237. data/tracks/java/exercises/all-your-base/.meta/.version +1 -0
  238. data/tracks/java/exercises/all-your-base/README.md +1 -1
  239. data/tracks/java/exercises/all-your-base/src/test/java/BaseConverterTest.java +0 -3
  240. data/tracks/java/exercises/allergies/README.md +0 -1
  241. data/tracks/java/exercises/atbash-cipher/README.md +2 -1
  242. data/tracks/java/exercises/beer-song/README.md +1 -1
  243. data/tracks/java/exercises/binary/README.md +2 -0
  244. data/tracks/java/exercises/book-store/README.md +5 -5
  245. data/tracks/java/exercises/bowling/README.md +20 -6
  246. data/tracks/java/exercises/change/.meta/.version +1 -0
  247. data/tracks/java/exercises/change/README.md +1 -1
  248. data/tracks/java/exercises/change/src/test/java/ChangeCalculatorTest.java +0 -3
  249. data/tracks/java/exercises/circular-buffer/README.md +13 -6
  250. data/tracks/java/exercises/clock/.meta/.version +1 -0
  251. data/tracks/java/exercises/clock/src/test/java/ClockAddTest.java +0 -3
  252. data/tracks/java/exercises/clock/src/test/java/ClockCreationTest.java +0 -3
  253. data/tracks/java/exercises/clock/src/test/java/ClockEqualTest.java +0 -3
  254. data/tracks/java/exercises/collatz-conjecture/.meta/.version +1 -0
  255. data/tracks/java/exercises/collatz-conjecture/README.md +1 -1
  256. data/tracks/java/exercises/collatz-conjecture/src/test/java/CollatzCalculatorTest.java +0 -3
  257. data/tracks/java/exercises/complex-numbers/README.md +27 -0
  258. data/tracks/java/exercises/crypto-square/README.md +10 -8
  259. data/tracks/java/exercises/diamond/.meta/.version +1 -0
  260. data/tracks/java/exercises/diamond/README.md +6 -6
  261. data/tracks/java/exercises/diamond/src/test/java/DiamondPrinterTest.java +0 -3
  262. data/tracks/java/exercises/difference-of-squares/.meta/.version +1 -0
  263. data/tracks/java/exercises/difference-of-squares/src/test/java/DifferenceOfSquaresCalculatorTest.java +0 -3
  264. data/tracks/java/exercises/etl/README.md +2 -0
  265. data/tracks/java/exercises/flatten-array/.meta/.version +1 -0
  266. data/tracks/java/exercises/flatten-array/README.md +1 -2
  267. data/tracks/java/exercises/flatten-array/src/test/java/FlattenerTest.java +0 -3
  268. data/tracks/java/exercises/food-chain/README.md +1 -1
  269. data/tracks/java/exercises/forth/.meta/.version +1 -0
  270. data/tracks/java/exercises/forth/src/test/java/ForthEvaluatorTest.java +0 -3
  271. data/tracks/java/exercises/grade-school/README.md +0 -1
  272. data/tracks/java/exercises/hamming/.meta/.version +1 -0
  273. data/tracks/java/exercises/hamming/src/test/java/HammingTest.java +0 -3
  274. data/tracks/java/exercises/house/README.md +1 -2
  275. data/tracks/java/exercises/isogram/README.md +2 -1
  276. data/tracks/java/exercises/kindergarten-garden/README.md +13 -13
  277. data/tracks/java/exercises/linked-list/README.md +10 -10
  278. data/tracks/java/exercises/list-ops/.meta/.version +1 -0
  279. data/tracks/java/exercises/list-ops/README.md +4 -0
  280. data/tracks/java/exercises/list-ops/src/test/java/ListOpsTest.java +0 -3
  281. data/tracks/java/exercises/luhn/README.md +7 -7
  282. data/tracks/java/exercises/matrix/README.md +6 -4
  283. data/tracks/java/exercises/meetup/README.md +1 -2
  284. data/tracks/java/exercises/minesweeper/.meta/.version +1 -0
  285. data/tracks/java/exercises/minesweeper/src/test/java/MinesweeperBoardTest.java +0 -3
  286. data/tracks/java/exercises/nucleotide-count/README.md +8 -22
  287. data/tracks/java/exercises/ocr-numbers/README.md +5 -5
  288. data/tracks/java/exercises/octal/README.md +6 -2
  289. data/tracks/java/exercises/palindrome-products/README.md +15 -16
  290. data/tracks/java/exercises/pangram/.meta/.version +1 -0
  291. data/tracks/java/exercises/pangram/README.md +1 -1
  292. data/tracks/java/exercises/pangram/src/test/java/PangramCheckerTest.java +0 -3
  293. data/tracks/java/exercises/pascals-triangle/.meta/.version +1 -0
  294. data/tracks/java/exercises/pascals-triangle/README.md +1 -1
  295. data/tracks/java/exercises/pascals-triangle/src/test/java/PascalsTriangleGeneratorTest.java +0 -3
  296. data/tracks/java/exercises/perfect-numbers/.meta/.version +1 -0
  297. data/tracks/java/exercises/perfect-numbers/README.md +2 -2
  298. data/tracks/java/exercises/perfect-numbers/src/test/java/NaturalNumberTest.java +0 -3
  299. data/tracks/java/exercises/phone-number/README.md +3 -2
  300. data/tracks/java/exercises/pythagorean-triplet/README.md +3 -3
  301. data/tracks/java/exercises/queen-attack/README.md +1 -1
  302. data/tracks/java/exercises/rectangles/README.md +7 -7
  303. data/tracks/java/exercises/rna-transcription/.meta/.version +1 -0
  304. data/tracks/java/exercises/rna-transcription/src/test/java/RnaTranscriptionTest.java +0 -3
  305. data/tracks/java/exercises/roman-numerals/README.md +1 -1
  306. data/tracks/java/exercises/rotational-cipher/README.md +2 -1
  307. data/tracks/java/exercises/run-length-encoding/README.md +4 -4
  308. data/tracks/java/exercises/saddle-points/.meta/.version +1 -0
  309. data/tracks/java/exercises/saddle-points/README.md +1 -1
  310. data/tracks/java/exercises/saddle-points/src/test/java/MatrixTest.java +0 -3
  311. data/tracks/java/exercises/scrabble-score/.meta/.version +1 -0
  312. data/tracks/java/exercises/scrabble-score/README.md +3 -1
  313. data/tracks/java/exercises/scrabble-score/src/test/java/ScrabbleScoreTest.java +0 -3
  314. data/tracks/java/exercises/secret-handshake/README.md +1 -1
  315. data/tracks/java/exercises/simple-cipher/README.md +1 -1
  316. data/tracks/java/exercises/simple-linked-list/src/test/java/SimpleLinkedListTest.java +25 -25
  317. data/tracks/java/exercises/space-age/README.md +1 -1
  318. data/tracks/java/exercises/spiral-matrix/.meta/.version +1 -0
  319. data/tracks/java/exercises/spiral-matrix/README.md +2 -2
  320. data/tracks/java/exercises/spiral-matrix/src/test/java/SpiralMatrixBuilderTest.java +0 -3
  321. data/tracks/java/exercises/sum-of-multiples/README.md +0 -3
  322. data/tracks/java/exercises/tournament/README.md +6 -5
  323. data/tracks/java/exercises/transpose/README.md +7 -7
  324. data/tracks/java/exercises/triangle/README.md +9 -6
  325. data/tracks/java/exercises/trinary/README.md +1 -1
  326. data/tracks/java/exercises/twelve-days/README.md +1 -1
  327. data/tracks/java/exercises/two-fer/README.md +1 -2
  328. data/tracks/java/exercises/word-count/README.md +1 -2
  329. data/tracks/java/exercises/word-search/.meta/.version +1 -0
  330. data/tracks/java/exercises/word-search/README.md +1 -1
  331. data/tracks/java/exercises/word-search/src/test/java/WordSearcherTest.java +0 -3
  332. data/tracks/java/exercises/wordy/README.md +0 -5
  333. data/tracks/javascript/config.json +13 -0
  334. data/tracks/javascript/docs/TESTS.md +1 -1
  335. data/tracks/javascript/exercises/diffie-hellman/example.js +1 -1
  336. data/tracks/javascript/exercises/hello-world/example.js +2 -3
  337. data/tracks/javascript/exercises/meetup/example.js +24 -27
  338. data/tracks/javascript/exercises/meetup/meetup.spec.js +0 -6
  339. data/tracks/javascript/exercises/nucleotide-count/nucleotide-count.spec.js +1 -1
  340. data/tracks/javascript/exercises/protein-translation/README.md +73 -0
  341. data/tracks/javascript/exercises/protein-translation/example.js +68 -0
  342. data/tracks/javascript/exercises/protein-translation/protein-translation.spec.js +63 -0
  343. data/tracks/julia/README.md +1 -1
  344. data/tracks/kotlin/config.json +11 -0
  345. data/tracks/kotlin/exercises/acronym/README.md +0 -1
  346. data/tracks/kotlin/exercises/all-your-base/README.md +1 -1
  347. data/tracks/kotlin/exercises/allergies/README.md +0 -1
  348. data/tracks/kotlin/exercises/atbash-cipher/README.md +2 -1
  349. data/tracks/kotlin/exercises/beer-song/README.md +1 -1
  350. data/tracks/kotlin/exercises/binary/README.md +2 -0
  351. data/tracks/kotlin/exercises/change/README.md +1 -1
  352. data/tracks/kotlin/exercises/collatz-conjecture/README.md +1 -1
  353. data/tracks/kotlin/exercises/complex-numbers/README.md +27 -0
  354. data/tracks/kotlin/exercises/diamond/README.md +6 -6
  355. data/tracks/kotlin/exercises/etl/README.md +2 -0
  356. data/tracks/kotlin/exercises/flatten-array/README.md +1 -2
  357. data/tracks/kotlin/exercises/grade-school/README.md +0 -1
  358. data/tracks/kotlin/exercises/grains/README.md +0 -1
  359. data/tracks/kotlin/exercises/hello-world/.meta/hints.md +4 -0
  360. data/tracks/kotlin/exercises/hello-world/.meta/src/reference/kotlin/HelloWorld.kt +2 -2
  361. data/tracks/kotlin/exercises/hello-world/README.md +6 -0
  362. data/tracks/kotlin/exercises/hello-world/TUTORIAL.md +32 -434
  363. data/tracks/kotlin/exercises/hello-world/src/main/kotlin/HelloWorld.kt +1 -1
  364. data/tracks/kotlin/exercises/hello-world/src/test/kotlin/HelloWorldTest.kt +2 -21
  365. data/tracks/kotlin/exercises/isogram/README.md +2 -1
  366. data/tracks/kotlin/exercises/leap/README.md +1 -1
  367. data/tracks/kotlin/exercises/linked-list/README.md +10 -10
  368. data/tracks/kotlin/exercises/luhn/README.md +7 -7
  369. data/tracks/kotlin/exercises/meetup/README.md +1 -2
  370. data/tracks/kotlin/exercises/nucleotide-count/README.md +8 -22
  371. data/tracks/kotlin/exercises/pangram/README.md +1 -1
  372. data/tracks/kotlin/exercises/pascals-triangle/README.md +1 -1
  373. data/tracks/kotlin/exercises/perfect-numbers/README.md +2 -2
  374. data/tracks/kotlin/exercises/phone-number/README.md +3 -2
  375. data/tracks/kotlin/exercises/roman-numerals/README.md +1 -1
  376. data/tracks/kotlin/exercises/rotational-cipher/README.md +2 -1
  377. data/tracks/kotlin/exercises/saddle-points/README.md +1 -1
  378. data/tracks/kotlin/exercises/scrabble-score/README.md +3 -1
  379. data/tracks/kotlin/exercises/secret-handshake/README.md +1 -1
  380. data/tracks/kotlin/exercises/settings.gradle +1 -0
  381. data/tracks/kotlin/exercises/space-age/README.md +1 -2
  382. data/tracks/kotlin/exercises/spiral-matrix/README.md +2 -2
  383. data/tracks/kotlin/exercises/sum-of-multiples/README.md +0 -3
  384. data/tracks/kotlin/exercises/triangle/README.md +9 -6
  385. data/tracks/kotlin/exercises/two-fer/.meta/src/reference/kotlin/Twofer.kt +3 -0
  386. data/tracks/kotlin/exercises/two-fer/README.md +50 -0
  387. data/tracks/kotlin/exercises/two-fer/build.gradle +28 -0
  388. data/tracks/kotlin/exercises/two-fer/src/main/kotlin/.keep +0 -0
  389. data/tracks/kotlin/exercises/two-fer/src/test/kotlin/TwoferTest.kt +31 -0
  390. data/tracks/kotlin/exercises/word-count/README.md +1 -2
  391. data/tracks/ocaml/exercises/pangram/test.ml +3 -1
  392. data/tracks/perl5/.travis.yml +3 -1
  393. data/tracks/php/Makefile +2 -2
  394. data/tracks/php/README.md +4 -4
  395. data/tracks/php/config.json +15 -0
  396. data/tracks/php/exercises/transpose/example.php +30 -0
  397. data/tracks/php/exercises/transpose/transpose_test.php +116 -0
  398. data/tracks/php/{phpcs-xphp.xml → phpcs-php.xml} +0 -0
  399. data/tracks/python/.travis.yml +1 -1
  400. data/tracks/python/config.json +199 -39
  401. data/tracks/python/exercises/acronym/acronym_test.py +1 -1
  402. data/tracks/python/exercises/allergies/allergies_test.py +1 -1
  403. data/tracks/python/exercises/alphametics/alphametics_test.py +1 -1
  404. data/tracks/python/exercises/anagram/anagram_test.py +1 -1
  405. data/tracks/python/exercises/atbash-cipher/atbash_cipher_test.py +1 -1
  406. data/tracks/python/exercises/bob/bob.py +1 -1
  407. data/tracks/python/exercises/bob/bob_test.py +1 -1
  408. data/tracks/python/exercises/book-store/book_store_test.py +1 -1
  409. data/tracks/python/exercises/bracket-push/bracket_push.py +1 -1
  410. data/tracks/python/exercises/bracket-push/bracket_push_test.py +1 -1
  411. data/tracks/python/exercises/collatz-conjecture/collatz_conjecture_test.py +1 -1
  412. data/tracks/python/exercises/diamond/diamond_test.py +1 -1
  413. data/tracks/python/exercises/difference-of-squares/difference_of_squares_test.py +1 -1
  414. data/tracks/python/exercises/diffie-hellman/README.md +58 -0
  415. data/tracks/python/exercises/diffie-hellman/diffie_hellman.py +10 -0
  416. data/tracks/python/exercises/diffie-hellman/diffie_hellman_test.py +87 -0
  417. data/tracks/python/exercises/diffie-hellman/example.py +13 -0
  418. data/tracks/python/exercises/etl/etl_test.py +1 -1
  419. data/tracks/python/exercises/food-chain/README.md +81 -0
  420. data/tracks/python/exercises/food-chain/example.py +45 -0
  421. data/tracks/python/exercises/food-chain/food_chain.py +2 -0
  422. data/tracks/python/exercises/food-chain/food_chain_test.py +109 -0
  423. data/tracks/python/exercises/forth/README.md +43 -0
  424. data/tracks/python/exercises/forth/example.py +58 -0
  425. data/tracks/python/exercises/forth/forth.py +2 -0
  426. data/tracks/python/exercises/forth/forth_test.py +254 -0
  427. data/tracks/python/exercises/gigasecond/gigasecond_test.py +1 -1
  428. data/tracks/python/exercises/grep/grep_test.py +1 -1
  429. data/tracks/python/exercises/hello-world/hello_world_test.py +1 -1
  430. data/tracks/python/exercises/isogram/isogram_test.py +10 -10
  431. data/tracks/python/exercises/largest-series-product/largest_series_product_test.py +1 -1
  432. data/tracks/python/exercises/leap/leap_test.py +5 -5
  433. data/tracks/python/exercises/luhn/luhn_test.py +16 -16
  434. data/tracks/python/exercises/markdown/README.md +30 -0
  435. data/tracks/python/exercises/markdown/example.py +80 -0
  436. data/tracks/python/exercises/markdown/markdown.py +71 -0
  437. data/tracks/python/exercises/markdown/markdown_test.py +51 -0
  438. data/tracks/python/exercises/meetup/meetup_test.py +1 -1
  439. data/tracks/python/exercises/nth-prime/nth_prime_test.py +1 -1
  440. data/tracks/python/exercises/pascals-triangle/pascals_triangle_test.py +2 -2
  441. data/tracks/python/exercises/perfect-numbers/perfect_numbers_test.py +11 -11
  442. data/tracks/python/exercises/phone-number/phone_number_test.py +1 -1
  443. data/tracks/python/exercises/prime-factors/prime_factors_test.py +1 -1
  444. data/tracks/python/exercises/pythagorean-triplet/pythagorean_triplet_test.py +3 -3
  445. data/tracks/python/exercises/queen-attack/queen_attack_test.py +8 -8
  446. data/tracks/python/exercises/rail-fence-cipher/rail_fence_cipher_test.py +1 -1
  447. data/tracks/python/exercises/rectangles/rectangles_test.py +1 -1
  448. data/tracks/python/exercises/robot-simulator/robot_simulator.py +9 -1
  449. data/tracks/python/exercises/roman-numerals/roman_numerals_test.py +1 -1
  450. data/tracks/python/exercises/run-length-encoding/run_length_encoding_test.py +1 -1
  451. data/tracks/python/exercises/say/say_test.py +1 -1
  452. data/tracks/python/exercises/scrabble-score/scrabble_score_test.py +1 -1
  453. data/tracks/python/exercises/series/series.py +1 -1
  454. data/tracks/python/exercises/sieve/sieve_test.py +1 -1
  455. data/tracks/python/exercises/sublist/sublist_test.py +1 -1
  456. data/tracks/python/exercises/tournament/tournament_test.py +1 -1
  457. data/tracks/python/exercises/transpose/transpose_test.py +1 -1
  458. data/tracks/python/exercises/two-bucket/example.py +49 -54
  459. data/tracks/python/exercises/two-bucket/two_bucket_test.py +1 -1
  460. data/tracks/python/exercises/variable-length-quantity/variable_length_quantity_test.py +1 -1
  461. data/tracks/rust/config.json +24 -0
  462. data/tracks/rust/exercises/collatz-conjecture/Cargo.lock +4 -0
  463. data/tracks/rust/exercises/collatz-conjecture/Cargo.toml +3 -0
  464. data/tracks/rust/exercises/collatz-conjecture/README.md +65 -0
  465. data/tracks/rust/exercises/collatz-conjecture/example.rs +19 -0
  466. data/tracks/rust/exercises/collatz-conjecture/src/lib.rs +4 -0
  467. data/tracks/rust/exercises/collatz-conjecture/tests/collatz-conjecture.rs +32 -0
  468. data/tracks/rust/exercises/decimal/.gitignore +7 -0
  469. data/tracks/rust/exercises/decimal/.meta/description.md +19 -0
  470. data/tracks/rust/exercises/decimal/.meta/metadata.yml +3 -0
  471. data/tracks/rust/exercises/decimal/Cargo-example.toml +9 -0
  472. data/tracks/rust/exercises/decimal/Cargo.toml +6 -0
  473. data/tracks/rust/exercises/decimal/README.md +59 -0
  474. data/tracks/rust/exercises/decimal/example.rs +187 -0
  475. data/tracks/rust/exercises/decimal/src/lib.rs +10 -0
  476. data/tracks/rust/exercises/decimal/tests/decimal.rs +332 -0
  477. data/tracks/sml/exercises/accumulate/README.md +9 -1
  478. data/tracks/swift/exercises/luhn/Sources/LuhnExample.swift +17 -26
  479. data/tracks/swift/exercises/luhn/Tests/LinuxMain.swift +1 -1
  480. data/tracks/swift/exercises/luhn/Tests/LuhnTests/LuhnTests.swift +59 -35
  481. data/tracks/typescript/config.json +34 -0
  482. data/tracks/typescript/exercises/binary-search/README.md +67 -0
  483. data/tracks/typescript/exercises/binary-search/binary-search.example.ts +42 -0
  484. data/tracks/typescript/exercises/binary-search/binary-search.test.ts +27 -0
  485. data/tracks/typescript/exercises/binary-search/binary-search.ts +3 -0
  486. data/tracks/typescript/exercises/binary-search/package.json +36 -0
  487. data/tracks/typescript/exercises/binary-search/tsconfig.json +22 -0
  488. data/tracks/typescript/exercises/binary-search/tslint.json +127 -0
  489. data/tracks/typescript/exercises/binary-search/yarn.lock +2305 -0
  490. data/tracks/typescript/exercises/pascals-triangle/README.md +47 -0
  491. data/tracks/typescript/exercises/pascals-triangle/package.json +36 -0
  492. data/tracks/typescript/exercises/pascals-triangle/pascals-triangle.example.ts +32 -0
  493. data/tracks/typescript/exercises/pascals-triangle/pascals-triangle.test.ts +28 -0
  494. data/tracks/typescript/exercises/pascals-triangle/pascals-triangle.ts +2 -0
  495. data/tracks/typescript/exercises/pascals-triangle/tsconfig.json +22 -0
  496. data/tracks/typescript/exercises/pascals-triangle/tslint.json +127 -0
  497. data/tracks/typescript/exercises/pascals-triangle/yarn.lock +2305 -0
  498. data/tracks/typescript/exercises/rotational-cipher/README.md +63 -0
  499. data/tracks/typescript/exercises/rotational-cipher/package.json +36 -0
  500. data/tracks/typescript/exercises/rotational-cipher/rotational-cipher.example.ts +19 -0
  501. data/tracks/typescript/exercises/rotational-cipher/rotational-cipher.test.ts +56 -0
  502. data/tracks/typescript/exercises/rotational-cipher/rotational-cipher.ts +1 -0
  503. data/tracks/typescript/exercises/rotational-cipher/tsconfig.json +22 -0
  504. data/tracks/typescript/exercises/rotational-cipher/tslint.json +127 -0
  505. data/tracks/typescript/exercises/rotational-cipher/yarn.lock +2305 -0
  506. metadata +171 -5
  507. data/tracks/javascript/exercises/twelve-days/package.json +0 -69
  508. data/tracks/kotlin/exercises/hello-world/GETTING_STARTED.md +0 -50
@@ -161,8 +161,20 @@
161
161
  "input_validation"
162
162
  ],
163
163
  "uuid": "b2b4ee35-108f-45ce-b294-c10d332e5579"
164
+ },
165
+ {
166
+ "core": false,
167
+ "difficulty": 5,
168
+ "slug": "atbash-cipher",
169
+ "topics": [
170
+ "cryptography",
171
+ "pattern_matching",
172
+ "strings"
173
+ ],
174
+ "unlocked_by": "hamming",
175
+ "uuid": "03808072-0228-6580-7a9b-cc709a8a5b8c0e600b9"
164
176
  }
165
177
  ],
166
178
  "foregone": [],
167
179
  "language": "Bash"
168
- }
180
+ }
@@ -0,0 +1,45 @@
1
+ # Atbash Cipher
2
+
3
+ Create an implementation of the atbash cipher, an ancient encryption system created in the Middle East.
4
+
5
+ The Atbash cipher is a simple substitution cipher that relies on
6
+ transposing all the letters in the alphabet such that the resulting
7
+ alphabet is backwards. The first letter is replaced with the last
8
+ letter, the second with the second-last, and so on.
9
+
10
+ An Atbash cipher for the Latin alphabet would be as follows:
11
+
12
+ ```plain
13
+ Plain: abcdefghijklmnopqrstuvwxyz
14
+ Cipher: zyxwvutsrqponmlkjihgfedcba
15
+ ```
16
+
17
+ It is a very weak cipher because it only has one possible key, and it is
18
+ a simple monoalphabetic substitution cipher. However, this may not have
19
+ been an issue in the cipher's time.
20
+
21
+ Ciphertext is written out in groups of fixed length, the traditional group size
22
+ being 5 letters, and punctuation is excluded. This is to make it harder to guess
23
+ things based on word boundaries.
24
+
25
+ ## Examples
26
+ - Encoding `test` gives `gvhg`
27
+ - Decoding `gvhg` gives `test`
28
+ - Decoding `gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt` gives `thequickbrownfoxjumpsoverthelazydog`
29
+
30
+
31
+ To run the tests:
32
+
33
+ ```sh
34
+ $ bats atbash_cipher_tests.sh
35
+ ```
36
+
37
+ For more detailed info about the Bash track see the [help page](http://exercism.io/languages/bash).
38
+
39
+
40
+ ## Source
41
+
42
+ Wikipedia [http://en.wikipedia.org/wiki/Atbash](http://en.wikipedia.org/wiki/Atbash)
43
+
44
+ ## Submitting Incomplete Solutions
45
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env bats
2
+
3
+ @test "encode yes" {
4
+ run bash example.sh encode "yes"
5
+ [ "$status" -eq 0 ]
6
+ [ "$output" = "bvh" ]
7
+ }
8
+
9
+ @test "encode no" {
10
+ run bash example.sh encode "no"
11
+ [ "$status" -eq 0 ]
12
+ [ "$output" = "ml" ]
13
+ }
14
+
15
+ @test "encode OMG" {
16
+ run bash example.sh encode "OMG"
17
+ [ "$status" -eq 0 ]
18
+ [ "$output" = "lnt" ]
19
+ }
20
+
21
+ @test "encode spaces" {
22
+ run bash example.sh encode "O M G"
23
+ [ "$status" -eq 0 ]
24
+ [ "$output" = "lnt" ]
25
+ }
26
+
27
+ @test "encode mindblowingly" {
28
+ run bash example.sh encode "mindblowingly"
29
+ [ "$status" -eq 0 ]
30
+ [ "$output" = "nrmwy oldrm tob" ]
31
+ }
32
+
33
+ @test "encode numbers" {
34
+ run bash example.sh encode "Testing,1 2 3, testing."
35
+ [ "$status" -eq 0 ]
36
+ [ "$output" = "gvhgr mt123 gvhgr mt" ]
37
+ }
38
+
39
+ @test "encode deep thought" {
40
+ run bash example.sh encode "Truth is fiction."
41
+ [ "$status" -eq 0 ]
42
+ [ "$output" = "gifgs rhurx grlm" ]
43
+ }
44
+
45
+ @test "encode all the letters" {
46
+ run bash example.sh encode "The quick brown fox jumps over the lazy dog."
47
+ [ "$status" -eq 0 ]
48
+ [ "$output" = "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt" ]
49
+ }
50
+
51
+ @test "decode exercism" {
52
+ run bash example.sh decode "vcvix rhn"
53
+ [ "$status" -eq 0 ]
54
+ [ "$output" = "exercism" ]
55
+ }
56
+
57
+ @test "decode a sentence" {
58
+ run bash example.sh decode "zmlyh gzxov rhlug vmzhg vkkrm thglm v"
59
+ [ "$status" -eq 0 ]
60
+ [ "$output" = "anobstacleisoftenasteppingstone" ]
61
+ }
62
+
63
+ @test "decode numbers" {
64
+ run bash example.sh decode "gvhgr mt123 gvhgr mt"
65
+ [ "$status" -eq 0 ]
66
+ [ "$output" = "testing123testing" ]
67
+ }
68
+
69
+ @test "decode all the letters" {
70
+ run bash example.sh decode "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt"
71
+ [ "$status" -eq 0 ]
72
+ [ "$output" = "thequickbrownfoxjumpsoverthelazydog" ]
73
+ }
@@ -0,0 +1,14 @@
1
+ #!/bin/bash
2
+
3
+ encode () {
4
+ clean_string=$(echo "$1" | tr -dc '[:alnum:]\n\r' | tr '[:upper:]' '[:lower:]')
5
+ converted_string=$(echo "$clean_string" | tr abcdefghijklmnopqrstuvwxyz zyxwvutsrqponmlkjihgfedcba)
6
+ echo "$converted_string" | sed 's/.\{5\}/& /g' | awk '{$1=$1};1'
7
+ }
8
+
9
+ decode () {
10
+ clean_string=$(echo "$1" | tr -d '[:space:]')
11
+ echo $clean_string | tr zyxwvutsrqponmlkjihgfedcba abcdefghijklmnopqrstuvwxyz
12
+ }
13
+
14
+ "$@"
@@ -0,0 +1,33 @@
1
+ ## Test-Driven Development
2
+
3
+ As programmers mature, they eventually want to test their code.
4
+
5
+ Here at Exercism we simulate [Test-Driven
6
+ Development](http://en.wikipedia.org/wiki/Test-driven_development) (TDD), where
7
+ you write your tests before writing any functionality. The simulation comes in
8
+ the form of a pre-written test suite, which will signal that you have solved
9
+ the problem.
10
+
11
+ It will also provide you with a safety net to explore other solutions without
12
+ breaking the functionality.
13
+
14
+ ### A typical TDD workflow on Exercism:
15
+
16
+ 1. Run the test file and pick one test that's failing.
17
+ 2. Write some code to fix the test you picked.
18
+ 3. Re-run the tests to confirm the test is now passing.
19
+ 4. Repeat from step 1.
20
+ 5. Submit your solution (`exercism submit /path/to/file`)
21
+
22
+ ## Instructions
23
+
24
+ Submissions are encouraged to be general, within reason. Having said that, it's
25
+ also important not to over-engineer a solution.
26
+
27
+ It's important to remember that the goal is to make code as expressive and
28
+ readable as we can.
29
+
30
+ Run the tests with:
31
+
32
+ bats whatever_test.sh
33
+
@@ -11,28 +11,6 @@ When X is a name or "you".
11
11
  If the given name is "Alice", the result should be "One for Alice, one for me."
12
12
  If no name is given, the result should be "One for you, one for me."
13
13
 
14
-
15
- ## Test-Driven Development
16
-
17
- As programmers mature, they eventually want to test their code.
18
-
19
- Here at Exercism we simulate [Test-Driven
20
- Development](http://en.wikipedia.org/wiki/Test-driven_development) (TDD), where
21
- you write your tests before writing any functionality. The simulation comes in
22
- the form of a pre-written test suite, which will signal that you have solved
23
- the problem.
24
-
25
- It will also provide you with a safety net to explore other solutions without
26
- breaking the functionality.
27
-
28
- ### A typical TDD workflow on Exercism:
29
-
30
- 1. Run the test file and pick one test that's failing.
31
- 2. Write some code to fix the test you picked.
32
- 3. Re-run the tests to confirm the test is now passing.
33
- 4. Repeat from step 1.
34
- 5. Submit your solution (`exercism submit /path/to/file`)
35
-
36
14
  ## Instructions
37
15
 
38
16
  Submissions are encouraged to be general, within reason. Having said that, it's
@@ -2,15 +2,15 @@
2
2
  #define ALLERGIES_H
3
3
 
4
4
  typedef enum {
5
- allergen_eggs = 0,
6
- allergen_peanuts,
7
- allergen_shellfish,
8
- allergen_strawberries,
9
- allergen_tomatoes,
10
- allergen_chocolate,
11
- allergen_pollen,
12
- allergen_cats,
13
- allergen_count
5
+ ALLERGEN_EGGS = 0,
6
+ ALLERGEN_PEANUTS,
7
+ ALLERGEN_SHELLFISH,
8
+ ALLERGEN_STRAWBERRIES,
9
+ ALLERGEN_TOMATOES,
10
+ ALLERGEN_CHOCOLATE,
11
+ ALLERGEN_POLLEN,
12
+ ALLERGEN_CATS,
13
+ ALLERGEN_COUNT
14
14
  } allergen_t;
15
15
 
16
16
  typedef struct {
@@ -19,10 +19,10 @@ bool is_allergic_to(allergen_t allergen, unsigned int score)
19
19
 
20
20
  void get_allergens(unsigned int score, allergen_list_t * list)
21
21
  {
22
- list->allergens = calloc(allergen_count, sizeof(allergen_t));
22
+ list->allergens = calloc(ALLERGEN_COUNT, sizeof(allergen_t));
23
23
  list->count = 0;
24
24
 
25
- for (allergen_t allergen = 0; allergen < allergen_count; allergen++) {
25
+ for (allergen_t allergen = 0; allergen < ALLERGEN_COUNT; allergen++) {
26
26
  if (is_allergic_to(allergen, score)) {
27
27
  score -= scores[allergen];
28
28
  list->allergens[list->count] = allergen;
@@ -4,15 +4,15 @@
4
4
  #include <stdbool.h>
5
5
 
6
6
  typedef enum {
7
- allergen_eggs = 0,
8
- allergen_peanuts,
9
- allergen_shellfish,
10
- allergen_strawberries,
11
- allergen_tomatoes,
12
- allergen_chocolate,
13
- allergen_pollen,
14
- allergen_cats,
15
- allergen_count
7
+ ALLERGEN_EGGS = 0,
8
+ ALLERGEN_PEANUTS,
9
+ ALLERGEN_SHELLFISH,
10
+ ALLERGEN_STRAWBERRIES,
11
+ ALLERGEN_TOMATOES,
12
+ ALLERGEN_CHOCOLATE,
13
+ ALLERGEN_POLLEN,
14
+ ALLERGEN_CATS,
15
+ ALLERGEN_COUNT
16
16
  } allergen_t;
17
17
 
18
18
  typedef struct {
@@ -27,9 +27,9 @@ void test_no_allergies_means_not_allergic(void)
27
27
  TEST_IGNORE();
28
28
  int score = 0;
29
29
 
30
- TEST_ASSERT_FALSE(is_allergic_to(allergen_peanuts, score));
31
- TEST_ASSERT_FALSE(is_allergic_to(allergen_cats, score));
32
- TEST_ASSERT_FALSE(is_allergic_to(allergen_strawberries, score));
30
+ TEST_ASSERT_FALSE(is_allergic_to(ALLERGEN_PEANUTS, score));
31
+ TEST_ASSERT_FALSE(is_allergic_to(ALLERGEN_CATS, score));
32
+ TEST_ASSERT_FALSE(is_allergic_to(ALLERGEN_STRAWBERRIES, score));
33
33
  }
34
34
 
35
35
  void test_is_allergic_to_eggs(void)
@@ -37,7 +37,7 @@ void test_is_allergic_to_eggs(void)
37
37
  TEST_IGNORE();
38
38
  int score = 1;
39
39
 
40
- TEST_ASSERT_TRUE(is_allergic_to(allergen_eggs, score));
40
+ TEST_ASSERT_TRUE(is_allergic_to(ALLERGEN_EGGS, score));
41
41
  }
42
42
 
43
43
  void test_is_allergic_to_eggs_in_addition_to_other_stuff(void)
@@ -45,9 +45,9 @@ void test_is_allergic_to_eggs_in_addition_to_other_stuff(void)
45
45
  TEST_IGNORE();
46
46
  int score = 5;
47
47
 
48
- TEST_ASSERT_TRUE(is_allergic_to(allergen_eggs, score));
49
- TEST_ASSERT_TRUE(is_allergic_to(allergen_shellfish, score));
50
- TEST_ASSERT_FALSE(is_allergic_to(allergen_strawberries, score));
48
+ TEST_ASSERT_TRUE(is_allergic_to(ALLERGEN_EGGS, score));
49
+ TEST_ASSERT_TRUE(is_allergic_to(ALLERGEN_SHELLFISH, score));
50
+ TEST_ASSERT_FALSE(is_allergic_to(ALLERGEN_STRAWBERRIES, score));
51
51
  }
52
52
 
53
53
  void test_no_allergies_at_all(void)
@@ -72,7 +72,7 @@ void test_allergic_to_just_eggs(void)
72
72
  get_allergens(score, &list);
73
73
 
74
74
  test_list_count_is(1, &list);
75
- test_list_contains(allergen_eggs, &list);
75
+ test_list_contains(ALLERGEN_EGGS, &list);
76
76
 
77
77
  free(list.allergens);
78
78
  }
@@ -86,7 +86,7 @@ void test_allergic_to_just_peanuts(void)
86
86
  get_allergens(score, &list);
87
87
 
88
88
  test_list_count_is(1, &list);
89
- test_list_contains(allergen_peanuts, &list);
89
+ test_list_contains(ALLERGEN_PEANUTS, &list);
90
90
 
91
91
  free(list.allergens);
92
92
  }
@@ -100,7 +100,7 @@ void test_allergic_to_just_strawberries(void)
100
100
  get_allergens(score, &list);
101
101
 
102
102
  test_list_count_is(1, &list);
103
- test_list_contains(allergen_strawberries, &list);
103
+ test_list_contains(ALLERGEN_STRAWBERRIES, &list);
104
104
 
105
105
  free(list.allergens);
106
106
  }
@@ -114,8 +114,8 @@ void test_allergic_to_eggs_and_peanuts(void)
114
114
  get_allergens(score, &list);
115
115
 
116
116
  test_list_count_is(2, &list);
117
- test_list_contains(allergen_eggs, &list);
118
- test_list_contains(allergen_peanuts, &list);
117
+ test_list_contains(ALLERGEN_EGGS, &list);
118
+ test_list_contains(ALLERGEN_PEANUTS, &list);
119
119
 
120
120
  free(list.allergens);
121
121
  }
@@ -129,8 +129,8 @@ void test_allergic_to_more_than_eggs_but_not_peanuts(void)
129
129
  get_allergens(score, &list);
130
130
 
131
131
  test_list_count_is(2, &list);
132
- test_list_contains(allergen_eggs, &list);
133
- test_list_contains(allergen_shellfish, &list);
132
+ test_list_contains(ALLERGEN_EGGS, &list);
133
+ test_list_contains(ALLERGEN_SHELLFISH, &list);
134
134
 
135
135
  free(list.allergens);
136
136
  }
@@ -144,11 +144,11 @@ void test_allergic_to_lots_of_stuff(void)
144
144
  get_allergens(score, &list);
145
145
 
146
146
  test_list_count_is(5, &list);
147
- test_list_contains(allergen_strawberries, &list);
148
- test_list_contains(allergen_tomatoes, &list);
149
- test_list_contains(allergen_chocolate, &list);
150
- test_list_contains(allergen_pollen, &list);
151
- test_list_contains(allergen_cats, &list);
147
+ test_list_contains(ALLERGEN_STRAWBERRIES, &list);
148
+ test_list_contains(ALLERGEN_TOMATOES, &list);
149
+ test_list_contains(ALLERGEN_CHOCOLATE, &list);
150
+ test_list_contains(ALLERGEN_POLLEN, &list);
151
+ test_list_contains(ALLERGEN_CATS, &list);
152
152
 
153
153
  free(list.allergens);
154
154
  }
@@ -162,14 +162,14 @@ void test_allergic_to_everything(void)
162
162
  get_allergens(score, &list);
163
163
 
164
164
  test_list_count_is(8, &list);
165
- test_list_contains(allergen_eggs, &list);
166
- test_list_contains(allergen_peanuts, &list);
167
- test_list_contains(allergen_shellfish, &list);
168
- test_list_contains(allergen_strawberries, &list);
169
- test_list_contains(allergen_tomatoes, &list);
170
- test_list_contains(allergen_chocolate, &list);
171
- test_list_contains(allergen_pollen, &list);
172
- test_list_contains(allergen_cats, &list);
165
+ test_list_contains(ALLERGEN_EGGS, &list);
166
+ test_list_contains(ALLERGEN_PEANUTS, &list);
167
+ test_list_contains(ALLERGEN_SHELLFISH, &list);
168
+ test_list_contains(ALLERGEN_STRAWBERRIES, &list);
169
+ test_list_contains(ALLERGEN_TOMATOES, &list);
170
+ test_list_contains(ALLERGEN_CHOCOLATE, &list);
171
+ test_list_contains(ALLERGEN_POLLEN, &list);
172
+ test_list_contains(ALLERGEN_CATS, &list);
173
173
 
174
174
  free(list.allergens);
175
175
  }
@@ -183,13 +183,13 @@ void test_ignore_non_allergen_score_parts(void)
183
183
  get_allergens(score, &list);
184
184
 
185
185
  test_list_count_is(7, &list);
186
- test_list_contains(allergen_eggs, &list);
187
- test_list_contains(allergen_shellfish, &list);
188
- test_list_contains(allergen_strawberries, &list);
189
- test_list_contains(allergen_tomatoes, &list);
190
- test_list_contains(allergen_chocolate, &list);
191
- test_list_contains(allergen_pollen, &list);
192
- test_list_contains(allergen_cats, &list);
186
+ test_list_contains(ALLERGEN_EGGS, &list);
187
+ test_list_contains(ALLERGEN_SHELLFISH, &list);
188
+ test_list_contains(ALLERGEN_STRAWBERRIES, &list);
189
+ test_list_contains(ALLERGEN_TOMATOES, &list);
190
+ test_list_contains(ALLERGEN_CHOCOLATE, &list);
191
+ test_list_contains(ALLERGEN_POLLEN, &list);
192
+ test_list_contains(ALLERGEN_CATS, &list);
193
193
 
194
194
  free(list.allergens);
195
195
  }
@@ -426,42 +426,6 @@ void test_subtract_more_than_two_days(void)
426
426
  minute_offset);
427
427
  }
428
428
 
429
- // these tests check equality.
430
- // Part of standard test collection
431
- // Included even though they don't make much sense in C
432
-
433
- // // trying it with XMACROS !
434
- #define EXPAND_EQUALITY_TEST_AS_TEST(test_name, hour1, minute1, hour2, minute2, expected_equality)\
435
- void test_name(void)\
436
- {\
437
- test_time_expected_equality(hour1, minute1, hour2, minute2, expected_equality);\
438
- }\
439
-
440
- // below expands to multiple routines...that are all designed to test the equality of 2 different
441
- // clock representations to see if they are the same or not
442
- // that 2 clocks are equal...
443
- // the fields are:
444
- // test name, time1_hour, time1_minute, time2_hour, time2_minute, (time1 == time2)
445
-
446
- #define EQUALITY_TESTS(ENTRY) \
447
- ENTRY(test_clocks_with_same_time, 15, 37, 15, 37, true)\
448
- ENTRY(test_clocks_a_minute_apart, 15, 36, 15, 37, false)\
449
- ENTRY(test_clocks_an_hour_apart, 15, 37, 14, 37, false)\
450
- ENTRY(test_clocks_with_hour_overflow, 10, 37, 34, 37, true)\
451
- ENTRY(test_clocks_with_hour_overflow_by_several_days, 3, 11, 99, 11, true)\
452
- ENTRY(test_clocks_with_negative_hour, 22, 40, -2, 40, true)\
453
- ENTRY(test_clocks_with_negative_hour_that_wraps, 17, 3, -31, 3, true)\
454
- ENTRY(test_clocks_with_negative_hour_that_wraps_multiple_times, 13, 49, -83, 49, true)\
455
- ENTRY(test_clocks_with_minute_overflow, 0, 1, 0, 1441, true)\
456
- ENTRY(test_clocks_with_minute_overflow_by_several_days, 2, 2, 2, 4322, true)\
457
- ENTRY(test_clocks_with_negative_minute, 2, 40, 3, -20, true)\
458
- ENTRY(test_clocks_with_negative_minute_that_wraps, 4, 10, 5, -1490, true)\
459
- ENTRY(test_clocks_with_negative_minute_that_wraps_multiple_times, 6, 15, 6, -4305, true)\
460
- ENTRY(test_clocks_with_negative_hours_and_minutes, 7, 32, -12, -268, true)\
461
- ENTRY(test_clocks_with_negative_hours_and_minutes_that_wrap, 18, 7, -54, -11513, true)\
462
-
463
- EQUALITY_TESTS(EXPAND_EQUALITY_TEST_AS_TEST)
464
-
465
429
  int main(void)
466
430
  {
467
431
  UnityBegin("clock.c");
@@ -502,22 +466,6 @@ int main(void)
502
466
  RUN_TEST(test_subtract_more_than_one_day);
503
467
  RUN_TEST(test_subtract_more_than_two_days);
504
468
 
505
- RUN_TEST(test_clocks_with_same_time);
506
- RUN_TEST(test_clocks_a_minute_apart);
507
- RUN_TEST(test_clocks_an_hour_apart);
508
- RUN_TEST(test_clocks_with_hour_overflow);
509
- RUN_TEST(test_clocks_with_hour_overflow_by_several_days);
510
- RUN_TEST(test_clocks_with_negative_hour);
511
- RUN_TEST(test_clocks_with_negative_hour_that_wraps);
512
- RUN_TEST(test_clocks_with_negative_hour_that_wraps_multiple_times);
513
- RUN_TEST(test_clocks_with_minute_overflow);
514
- RUN_TEST(test_clocks_with_minute_overflow_by_several_days);
515
- RUN_TEST(test_clocks_with_negative_minute);
516
- RUN_TEST(test_clocks_with_negative_minute_that_wraps);
517
- RUN_TEST(test_clocks_with_negative_minute_that_wraps_multiple_times);
518
- RUN_TEST(test_clocks_with_negative_hours_and_minutes);
519
- RUN_TEST(test_clocks_with_negative_hours_and_minutes_that_wrap);
520
-
521
469
  UnityEnd();
522
470
  return 0;
523
471
  }