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
@@ -8,26 +8,26 @@ char *count(const char *dna_strand)
8
8
  {
9
9
  bool invalid_char = false;
10
10
  size_t index;
11
- size_t nucleotide_A_count = 0;
12
- size_t nucleotide_C_count = 0;
13
- size_t nucleotide_G_count = 0;
14
- size_t nucleotide_T_count = 0;
11
+ size_t nucleotide_a_count = 0;
12
+ size_t nucleotide_c_count = 0;
13
+ size_t nucleotide_g_count = 0;
14
+ size_t nucleotide_t_count = 0;
15
15
  char *count_results = calloc(1, 50);
16
16
 
17
17
  for (index = 0; (index < strlen(dna_strand)) && (invalid_char == false);
18
18
  index++) {
19
19
  switch (dna_strand[index]) {
20
20
  case 'A':
21
- nucleotide_A_count++;
21
+ nucleotide_a_count++;
22
22
  break;
23
23
  case 'C':
24
- nucleotide_C_count++;
24
+ nucleotide_c_count++;
25
25
  break;
26
26
  case 'G':
27
- nucleotide_G_count++;
27
+ nucleotide_g_count++;
28
28
  break;
29
29
  case 'T':
30
- nucleotide_T_count++;
30
+ nucleotide_t_count++;
31
31
  break;
32
32
  default:
33
33
  invalid_char = true;
@@ -36,8 +36,8 @@ char *count(const char *dna_strand)
36
36
  }
37
37
 
38
38
  if (!invalid_char) {
39
- sprintf(count_results, "A:%zd C:%zd G:%zd T:%zd", nucleotide_A_count,
40
- nucleotide_C_count, nucleotide_G_count, nucleotide_T_count);
39
+ sprintf(count_results, "A:%zd C:%zd G:%zd T:%zd", nucleotide_a_count,
40
+ nucleotide_c_count, nucleotide_g_count, nucleotide_t_count);
41
41
  }
42
42
  return count_results;
43
43
  }
@@ -2,7 +2,7 @@
2
2
  #include <stdbool.h>
3
3
 
4
4
  /* Return true if the product of a and b is a palindrome, false otherwise */
5
- bool isPalindromeProduct(int a, int b)
5
+ bool is_palindrome_product(int a, int b)
6
6
  {
7
7
  int ret = 0, prod = a * b;
8
8
  while (prod) {
@@ -13,21 +13,21 @@ bool isPalindromeProduct(int a, int b)
13
13
  return (a * b) == ret;
14
14
  }
15
15
 
16
- Pair getPalindromeProduct(int min, int max)
16
+ product_t get_palindrome_product(int min, int max)
17
17
  {
18
- Pair ret;
19
- ret.small_palind = 0;
20
- ret.larg_palind = 0;
18
+ product_t ret;
19
+ ret.smallest = 0;
20
+ ret.largest = 0;
21
21
  bool largest = false;
22
22
 
23
23
  for (int i = min; i <= max; i++) {
24
24
  for (int j = min; j <= max; j++) {
25
- if (isPalindromeProduct(i, j) == true) {
25
+ if (is_palindrome_product(i, j) == true) {
26
26
  if (largest == false) {
27
- ret.small_palind = i * j;
27
+ ret.smallest = i * j;
28
28
  largest = true;
29
29
  } else {
30
- ret.larg_palind = i * j;
30
+ ret.largest = i * j;
31
31
  }
32
32
  }
33
33
  }
@@ -2,11 +2,11 @@
2
2
  #define PALINDROME_PRODUCTS_H
3
3
 
4
4
  typedef struct {
5
- int small_palind;
6
- int larg_palind;
7
- } Pair;
5
+ int smallest;
6
+ int largest;
7
+ } product_t;
8
8
 
9
- /* Return the smallest and biggest palindrome in the range of min and max */
10
- Pair getPalindromeProduct(int min, int max);
9
+ /* Return the smallest and largest palindrome products in the range of min and max */
10
+ product_t get_palindrome_product(int min, int max);
11
11
 
12
12
  #endif
@@ -3,24 +3,26 @@
3
3
 
4
4
  void test_palindromes_list(void)
5
5
  {
6
- Pair palind = getPalindromeProduct(1, 9);
7
- TEST_ASSERT_EQUAL_INT(1, palind.small_palind);
8
- TEST_ASSERT_EQUAL_INT(9, palind.larg_palind);
6
+ product_t product = get_palindrome_product(1, 9);
7
+ TEST_ASSERT_EQUAL_INT(1, product.smallest);
8
+ TEST_ASSERT_EQUAL_INT(9, product.largest);
9
9
  }
10
10
 
11
11
  void test_palindromes_list2(void)
12
12
  {
13
13
  TEST_IGNORE(); // delete this line to run test
14
- Pair palind = getPalindromeProduct(10, 99);
15
- TEST_ASSERT_EQUAL_INT(121, palind.small_palind);
16
- TEST_ASSERT_EQUAL_INT(9009, palind.larg_palind);
14
+ product_t product = get_palindrome_product(10, 99);
15
+ TEST_ASSERT_EQUAL_INT(121, product.smallest);
16
+ TEST_ASSERT_EQUAL_INT(9009, product.largest);
17
17
  }
18
18
 
19
19
  int main(void)
20
20
  {
21
21
  UnityBegin("test/test_palindrome_products.c");
22
+
22
23
  RUN_TEST(test_palindromes_list);
23
24
  RUN_TEST(test_palindromes_list2);
25
+
24
26
  UnityEnd();
25
27
  return 0;
26
28
  }
@@ -1,48 +1,48 @@
1
1
  #include <string.h>
2
2
  #include "robot_simulator.h"
3
3
 
4
- RobotGridStatus_t robot_init(void)
4
+ robot_grid_status_t robot_init(void)
5
5
  {
6
6
  return (robot_init_with_position
7
- (Default_Bearing, Default_X_Coordinate, Default_Y_Coordinate));
7
+ (default_bearing, default_x_coordinate, default_y_coordinate));
8
8
  }
9
9
 
10
- RobotGridStatus_t robot_init_with_position(int bearing, int x, int y)
10
+ robot_grid_status_t robot_init_with_position(int bearing, int x, int y)
11
11
  {
12
- RobotGridStatus_t robot = { bearing, {x, y} };
12
+ robot_grid_status_t robot = { bearing, {x, y} };
13
13
 
14
- if ((bearing < Heading_North) || (bearing >= Heading_Max)) {
15
- robot.bearing = Default_Bearing;
14
+ if ((bearing < heading_north) || (bearing >= heading_max)) {
15
+ robot.bearing = default_bearing;
16
16
  }
17
17
  return robot;
18
18
  }
19
19
 
20
- void robot_turn_right(RobotGridStatus_t * robot)
20
+ void robot_turn_right(robot_grid_status_t * robot)
21
21
  {
22
- robot->bearing = (robot->bearing + 1) % Heading_Max;
22
+ robot->bearing = (robot->bearing + 1) % heading_max;
23
23
  }
24
24
 
25
- void robot_turn_left(RobotGridStatus_t * robot)
25
+ void robot_turn_left(robot_grid_status_t * robot)
26
26
  {
27
- robot->bearing = ((robot->bearing - 1) + Heading_Max) % Heading_Max;
27
+ robot->bearing = ((robot->bearing - 1) + heading_max) % heading_max;
28
28
  }
29
29
 
30
- void robot_advance(RobotGridStatus_t * robot)
30
+ void robot_advance(robot_grid_status_t * robot)
31
31
  {
32
32
  switch (robot->bearing) {
33
- case Heading_North:
33
+ case heading_north:
34
34
  robot->grid.y_position++;
35
35
  break;
36
36
 
37
- case Heading_East:
37
+ case heading_east:
38
38
  robot->grid.x_position++;
39
39
  break;
40
40
 
41
- case Heading_South:
41
+ case heading_south:
42
42
  robot->grid.y_position--;
43
43
  break;
44
44
 
45
- case Heading_West:
45
+ case heading_west:
46
46
  robot->grid.x_position--;
47
47
  break;
48
48
 
@@ -51,19 +51,19 @@ void robot_advance(RobotGridStatus_t * robot)
51
51
  }
52
52
  }
53
53
 
54
- void robot_simulator(RobotGridStatus_t * robot, const char *commands)
54
+ void robot_simulator(robot_grid_status_t * robot, const char *commands)
55
55
  {
56
56
  for (unsigned long index = 0; index < strlen(commands); index++) {
57
57
  switch (commands[index]) {
58
- case Command_Left:
58
+ case command_left:
59
59
  robot_turn_left(robot);
60
60
  break;
61
61
 
62
- case Command_Right:
62
+ case command_right:
63
63
  robot_turn_right(robot);
64
64
  break;
65
65
 
66
- case Command_Advance:
66
+ case command_advance:
67
67
  robot_advance(robot);
68
68
  break;
69
69
 
@@ -2,40 +2,40 @@
2
2
  #define ROBOT_SIMULATOR_H
3
3
 
4
4
  typedef enum {
5
- Heading_North = 0,
6
- Heading_East,
7
- Heading_South,
8
- Heading_West,
9
- Heading_Max
10
- } Bearing_t;
5
+ heading_north = 0,
6
+ heading_east,
7
+ heading_south,
8
+ heading_west,
9
+ heading_max
10
+ } bearing_t;
11
11
 
12
12
  enum {
13
- Default_Bearing = Heading_North,
14
- Default_X_Coordinate = 0,
15
- Default_Y_Coordinate = 0,
13
+ default_bearing = heading_north,
14
+ default_x_coordinate = 0,
15
+ default_y_coordinate = 0,
16
16
  };
17
17
 
18
18
  enum {
19
- Command_Left = 'L',
20
- Command_Right = 'R',
21
- Command_Advance = 'A'
19
+ command_left = 'L',
20
+ command_right = 'R',
21
+ command_advance = 'A'
22
22
  };
23
23
 
24
- typedef struct RobotCoordinates {
24
+ typedef struct robot_coordinates {
25
25
  int x_position;
26
26
  int y_position;
27
- } RobotCoordinates_t;
27
+ } robot_coordinates_t;
28
28
 
29
- typedef struct RobotGridStatus {
30
- Bearing_t bearing;
31
- RobotCoordinates_t grid;
32
- } RobotGridStatus_t;
29
+ typedef struct robot_grid_status {
30
+ bearing_t bearing;
31
+ robot_coordinates_t grid;
32
+ } robot_grid_status_t;
33
33
 
34
- RobotGridStatus_t robot_init(void);
35
- RobotGridStatus_t robot_init_with_position(int bearing, int x, int y);
36
- void robot_turn_right(RobotGridStatus_t * robot);
37
- void robot_turn_left(RobotGridStatus_t * robot);
38
- void robot_advance(RobotGridStatus_t * robot);
39
- void robot_simulator(RobotGridStatus_t * robot, const char *commands);
34
+ robot_grid_status_t robot_init(void);
35
+ robot_grid_status_t robot_init_with_position(int bearing, int x, int y);
36
+ void robot_turn_right(robot_grid_status_t * robot);
37
+ void robot_turn_left(robot_grid_status_t * robot);
38
+ void robot_advance(robot_grid_status_t * robot);
39
+ void robot_simulator(robot_grid_status_t * robot, const char *commands);
40
40
 
41
41
  #endif
@@ -2,7 +2,8 @@
2
2
  #include "vendor/unity.h"
3
3
 
4
4
  // Test Helper Function
5
- void confirm_position(RobotGridStatus_t * expected, RobotGridStatus_t * actual)
5
+ void confirm_position(robot_grid_status_t * expected,
6
+ robot_grid_status_t * actual)
6
7
  {
7
8
  TEST_ASSERT_EQUAL(expected->bearing, actual->bearing);
8
9
  TEST_ASSERT_EQUAL(expected->grid.x_position, actual->grid.x_position);
@@ -12,9 +13,9 @@ void confirm_position(RobotGridStatus_t * expected, RobotGridStatus_t * actual)
12
13
  // Tests...
13
14
  void test_init(void)
14
15
  {
15
- RobotGridStatus_t expected =
16
- { Default_Bearing, {Default_X_Coordinate, Default_Y_Coordinate} };
17
- RobotGridStatus_t actual = robot_init();
16
+ robot_grid_status_t expected =
17
+ { default_bearing, {default_x_coordinate, default_y_coordinate} };
18
+ robot_grid_status_t actual = robot_init();
18
19
 
19
20
  confirm_position(&expected, &actual);
20
21
  }
@@ -22,10 +23,10 @@ void test_init(void)
22
23
  void test_invalid_initial_heading(void)
23
24
  {
24
25
  TEST_IGNORE(); // delete this line to run test
25
- RobotGridStatus_t expected =
26
- { Default_Bearing, {Default_X_Coordinate, Default_Y_Coordinate} };
27
- RobotGridStatus_t actual =
28
- robot_init_with_position(99, Default_X_Coordinate, Default_Y_Coordinate);
26
+ robot_grid_status_t expected =
27
+ { default_bearing, {default_x_coordinate, default_y_coordinate} };
28
+ robot_grid_status_t actual =
29
+ robot_init_with_position(99, default_x_coordinate, default_y_coordinate);
29
30
 
30
31
  confirm_position(&expected, &actual);
31
32
  }
@@ -33,8 +34,8 @@ void test_invalid_initial_heading(void)
33
34
  void test_init_with_negative_positions(void)
34
35
  {
35
36
  TEST_IGNORE();
36
- RobotGridStatus_t expected = { Heading_South, {-1, -1} };
37
- RobotGridStatus_t actual = robot_init_with_position(Heading_South, -1, -1);
37
+ robot_grid_status_t expected = { heading_south, {-1, -1} };
38
+ robot_grid_status_t actual = robot_init_with_position(heading_south, -1, -1);
38
39
 
39
40
  confirm_position(&expected, &actual);
40
41
  }
@@ -42,21 +43,21 @@ void test_init_with_negative_positions(void)
42
43
  void test_turn_right(void)
43
44
  {
44
45
  TEST_IGNORE();
45
- RobotGridStatus_t expected = { Heading_East, {0, 0} };
46
- RobotGridStatus_t actual = robot_init();
46
+ robot_grid_status_t expected = { heading_east, {0, 0} };
47
+ robot_grid_status_t actual = robot_init();
47
48
 
48
49
  robot_turn_right(&actual);
49
50
  confirm_position(&expected, &actual);
50
51
 
51
- expected.bearing = Heading_South;
52
+ expected.bearing = heading_south;
52
53
  robot_turn_right(&actual);
53
54
  confirm_position(&expected, &actual);
54
55
 
55
- expected.bearing = Heading_West;
56
+ expected.bearing = heading_west;
56
57
  robot_turn_right(&actual);
57
58
  confirm_position(&expected, &actual);
58
59
 
59
- expected.bearing = Heading_North;
60
+ expected.bearing = heading_north;
60
61
  robot_turn_right(&actual);
61
62
  confirm_position(&expected, &actual);
62
63
  }
@@ -64,21 +65,21 @@ void test_turn_right(void)
64
65
  void test_turn_left(void)
65
66
  {
66
67
  TEST_IGNORE();
67
- RobotGridStatus_t expected = { Heading_West, {0, 0} };
68
- RobotGridStatus_t actual = robot_init();
68
+ robot_grid_status_t expected = { heading_west, {0, 0} };
69
+ robot_grid_status_t actual = robot_init();
69
70
 
70
71
  robot_turn_left(&actual);
71
72
  confirm_position(&expected, &actual);
72
73
 
73
- expected.bearing = Heading_South;
74
+ expected.bearing = heading_south;
74
75
  robot_turn_left(&actual);
75
76
  confirm_position(&expected, &actual);
76
77
 
77
- expected.bearing = Heading_East;
78
+ expected.bearing = heading_east;
78
79
  robot_turn_left(&actual);
79
80
  confirm_position(&expected, &actual);
80
81
 
81
- expected.bearing = Heading_North;
82
+ expected.bearing = heading_north;
82
83
  robot_turn_left(&actual);
83
84
  confirm_position(&expected, &actual);
84
85
  }
@@ -86,8 +87,8 @@ void test_turn_left(void)
86
87
  void test_advance_positive_north(void)
87
88
  {
88
89
  TEST_IGNORE();
89
- RobotGridStatus_t expected = { Heading_North, {0, 1} };
90
- RobotGridStatus_t actual = robot_init();
90
+ robot_grid_status_t expected = { heading_north, {0, 1} };
91
+ robot_grid_status_t actual = robot_init();
91
92
 
92
93
  robot_advance(&actual);
93
94
  confirm_position(&expected, &actual);
@@ -96,8 +97,8 @@ void test_advance_positive_north(void)
96
97
  void test_advance_positive_east(void)
97
98
  {
98
99
  TEST_IGNORE();
99
- RobotGridStatus_t expected = { Heading_East, {1, 0} };
100
- RobotGridStatus_t actual = robot_init_with_position(Heading_East, 0, 0);
100
+ robot_grid_status_t expected = { heading_east, {1, 0} };
101
+ robot_grid_status_t actual = robot_init_with_position(heading_east, 0, 0);
101
102
 
102
103
  robot_advance(&actual);
103
104
  confirm_position(&expected, &actual);
@@ -106,8 +107,8 @@ void test_advance_positive_east(void)
106
107
  void test_advance_negative_south(void)
107
108
  {
108
109
  TEST_IGNORE();
109
- RobotGridStatus_t expected = { Heading_South, {0, -1} };
110
- RobotGridStatus_t actual = robot_init_with_position(Heading_South, 0, 0);
110
+ robot_grid_status_t expected = { heading_south, {0, -1} };
111
+ robot_grid_status_t actual = robot_init_with_position(heading_south, 0, 0);
111
112
 
112
113
  robot_advance(&actual);
113
114
  confirm_position(&expected, &actual);
@@ -116,8 +117,8 @@ void test_advance_negative_south(void)
116
117
  void test_advance_negative_west(void)
117
118
  {
118
119
  TEST_IGNORE();
119
- RobotGridStatus_t expected = { Heading_West, {-1, 0} };
120
- RobotGridStatus_t actual = robot_init_with_position(Heading_West, 0, 0);
120
+ robot_grid_status_t expected = { heading_west, {-1, 0} };
121
+ robot_grid_status_t actual = robot_init_with_position(heading_west, 0, 0);
121
122
 
122
123
  robot_advance(&actual);
123
124
  confirm_position(&expected, &actual);
@@ -126,8 +127,8 @@ void test_advance_negative_west(void)
126
127
  void test_simulate_move_west_and_north(void)
127
128
  {
128
129
  TEST_IGNORE();
129
- RobotGridStatus_t expected = { Heading_West, {-4, 1} };
130
- RobotGridStatus_t actual = robot_init();
130
+ robot_grid_status_t expected = { heading_west, {-4, 1} };
131
+ robot_grid_status_t actual = robot_init();
131
132
 
132
133
  robot_simulator(&actual, "LAAARALA");
133
134
  confirm_position(&expected, &actual);
@@ -136,8 +137,8 @@ void test_simulate_move_west_and_north(void)
136
137
  void test_simulate_move_west_and_south(void)
137
138
  {
138
139
  TEST_IGNORE();
139
- RobotGridStatus_t expected = { Heading_South, {-3, -8} };
140
- RobotGridStatus_t actual = robot_init_with_position(Heading_East, 2, -7);
140
+ robot_grid_status_t expected = { heading_south, {-3, -8} };
141
+ robot_grid_status_t actual = robot_init_with_position(heading_east, 2, -7);
141
142
 
142
143
  robot_simulator(&actual, "RRAAAAALA");
143
144
  confirm_position(&expected, &actual);
@@ -146,8 +147,8 @@ void test_simulate_move_west_and_south(void)
146
147
  void test_simulate_move_east_and_north(void)
147
148
  {
148
149
  TEST_IGNORE();
149
- RobotGridStatus_t expected = { Heading_North, {11, 5} };
150
- RobotGridStatus_t actual = robot_init_with_position(Heading_South, 8, 4);
150
+ robot_grid_status_t expected = { heading_north, {11, 5} };
151
+ robot_grid_status_t actual = robot_init_with_position(heading_south, 8, 4);
151
152
 
152
153
  robot_simulator(&actual, "LAAARRRALLLL");
153
154
  confirm_position(&expected, &actual);