trackler 2.2.1.62 → 2.2.1.63

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 (247) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/all-your-base/canonical-data.json +20 -29
  4. data/problem-specifications/exercises/forth/canonical-data.json +52 -5
  5. data/problem-specifications/exercises/isbn-verifier/canonical-data.json +15 -15
  6. data/problem-specifications/exercises/protein-translation/canonical-data.json +153 -0
  7. data/problem-specifications/exercises/reverse-string/canonical-data.json +39 -0
  8. data/problem-specifications/exercises/reverse-string/description.md +5 -0
  9. data/problem-specifications/exercises/reverse-string/metadata.yml +5 -0
  10. data/tracks/c/config.json +42 -41
  11. data/tracks/csharp/config.json +13 -0
  12. data/tracks/csharp/exercises/Exercises.sln +6 -0
  13. data/tracks/csharp/exercises/isbn-verifier/Example.cs +27 -0
  14. data/tracks/csharp/exercises/isbn-verifier/IsbnVerifier.cs +9 -0
  15. data/tracks/csharp/exercises/isbn-verifier/IsbnVerifier.csproj +19 -0
  16. data/tracks/csharp/exercises/isbn-verifier/IsbnVerifierTest.cs +84 -0
  17. data/tracks/csharp/exercises/isbn-verifier/README.md +40 -0
  18. data/tracks/csharp/generators/Exercises/IsbnVerifier.cs +15 -0
  19. data/tracks/delphi/config.json +28 -28
  20. data/tracks/erlang/config.json +10 -0
  21. data/tracks/erlang/exercises/accumulate/rebar.config +1 -1
  22. data/tracks/erlang/exercises/accumulate/test/accumulate_tests.erl +9 -7
  23. data/tracks/erlang/exercises/all-your-base/rebar.config +1 -1
  24. data/tracks/erlang/exercises/all-your-base/test/all_your_base_tests.erl +26 -24
  25. data/tracks/erlang/exercises/allergies/rebar.config +1 -1
  26. data/tracks/erlang/exercises/allergies/test/allergies_tests.erl +19 -17
  27. data/tracks/erlang/exercises/anagram/rebar.config +1 -3
  28. data/tracks/erlang/exercises/anagram/test/anagram_tests.erl +14 -12
  29. data/tracks/erlang/exercises/atbash-cipher/rebar.config +1 -1
  30. data/tracks/erlang/exercises/atbash-cipher/test/atbash_cipher_tests.erl +7 -5
  31. data/tracks/erlang/exercises/bank-account/rebar.config +1 -1
  32. data/tracks/erlang/exercises/bank-account/test/bank_account_tests.erl +52 -51
  33. data/tracks/erlang/exercises/beer-song/rebar.config +30 -0
  34. data/tracks/erlang/exercises/beer-song/test/beer_song_tests.erl +11 -10
  35. data/tracks/erlang/exercises/bob/rebar.config +1 -1
  36. data/tracks/erlang/exercises/bob/test/bob_tests.erl +33 -35
  37. data/tracks/erlang/exercises/circular-buffer/rebar.config +1 -1
  38. data/tracks/erlang/exercises/circular-buffer/test/circular_buffer_tests.erl +33 -32
  39. data/tracks/erlang/exercises/clock/rebar.config +1 -1
  40. data/tracks/erlang/exercises/clock/test/clock_tests.erl +57 -50
  41. data/tracks/erlang/exercises/collatz-conjecture/rebar.config +1 -1
  42. data/tracks/erlang/exercises/collatz-conjecture/test/collatz_conjecture_tests.erl +11 -9
  43. data/tracks/erlang/exercises/complex-numbers/rebar.config +1 -1
  44. data/tracks/erlang/exercises/complex-numbers/test/complex_numbers_tests.erl +102 -76
  45. data/tracks/erlang/exercises/custom-set/rebar.config +1 -1
  46. data/tracks/erlang/exercises/custom-set/test/custom_set_tests.erl +100 -109
  47. data/tracks/erlang/exercises/difference-of-squares/rebar.config +1 -1
  48. data/tracks/erlang/exercises/difference-of-squares/test/difference_of_squares_tests.erl +8 -7
  49. data/tracks/erlang/exercises/etl/rebar.config +1 -1
  50. data/tracks/erlang/exercises/etl/test/etl_tests.erl +6 -5
  51. data/tracks/erlang/exercises/gigasecond/rebar.config +1 -1
  52. data/tracks/erlang/exercises/gigasecond/test/gigasecond_tests.erl +9 -8
  53. data/tracks/erlang/exercises/grade-school/rebar.config +1 -1
  54. data/tracks/erlang/exercises/grade-school/test/grade_school_tests.erl +27 -23
  55. data/tracks/erlang/exercises/grains/rebar.config +1 -1
  56. data/tracks/erlang/exercises/grains/test/grains_tests.erl +7 -6
  57. data/tracks/erlang/exercises/hamming/rebar.config +1 -1
  58. data/tracks/erlang/exercises/hamming/test/hamming_tests.erl +20 -23
  59. data/tracks/erlang/exercises/hello-world/rebar.config +1 -1
  60. data/tracks/erlang/exercises/hello-world/test/hello_world_tests.erl +6 -4
  61. data/tracks/erlang/exercises/isogram/rebar.config +1 -1
  62. data/tracks/erlang/exercises/isogram/test/isogram_tests.erl +14 -12
  63. data/tracks/erlang/exercises/largest-series-product/rebar.config +1 -1
  64. data/tracks/erlang/exercises/largest-series-product/test/largest_series_product_tests.erl +22 -21
  65. data/tracks/erlang/exercises/leap/rebar.config +1 -1
  66. data/tracks/erlang/exercises/leap/test/leap_tests.erl +8 -7
  67. data/tracks/erlang/exercises/luhn/rebar.config +1 -1
  68. data/tracks/erlang/exercises/luhn/test/luhn_tests.erl +18 -16
  69. data/tracks/erlang/exercises/meetup/rebar.config +1 -1
  70. data/tracks/erlang/exercises/meetup/test/meetup_tests.erl +96 -95
  71. data/tracks/erlang/exercises/nucleotide-count/rebar.config +1 -1
  72. data/tracks/erlang/exercises/nucleotide-count/test/nucleotide_count_tests.erl +12 -11
  73. data/tracks/erlang/exercises/pangram/README.md +60 -0
  74. data/tracks/erlang/exercises/{accumulate → pangram}/include/exercism.hrl +0 -0
  75. data/tracks/erlang/exercises/{beer-song/rebar.conf → pangram/rebar.config} +0 -0
  76. data/tracks/erlang/exercises/pangram/src/example.erl +11 -0
  77. data/tracks/erlang/exercises/pangram/src/pangram.app.src +9 -0
  78. data/tracks/erlang/exercises/pangram/src/pangram.erl +8 -0
  79. data/tracks/erlang/exercises/pangram/test/pangram_tests.erl +38 -0
  80. data/tracks/erlang/exercises/parallel-letter-frequency/rebar.config +1 -1
  81. data/tracks/erlang/exercises/parallel-letter-frequency/test/parallel_letter_frequency_tests.erl +7 -6
  82. data/tracks/erlang/exercises/phone-number/rebar.config +1 -1
  83. data/tracks/erlang/exercises/phone-number/test/phone_number_tests.erl +13 -12
  84. data/tracks/erlang/exercises/rna-transcription/rebar.config +1 -1
  85. data/tracks/erlang/exercises/rna-transcription/test/rna_transcription_tests.erl +13 -11
  86. data/tracks/erlang/exercises/robot-simulator/rebar.config +1 -1
  87. data/tracks/erlang/exercises/robot-simulator/test/robot_simulator_tests.erl +70 -69
  88. data/tracks/erlang/exercises/roman-numerals/rebar.config +1 -1
  89. data/tracks/erlang/exercises/roman-numerals/test/roman_numerals_tests.erl +6 -5
  90. data/tracks/erlang/exercises/rotational-cipher/rebar.config +1 -8
  91. data/tracks/erlang/exercises/rotational-cipher/test/rotational_cipher_tests.erl +29 -27
  92. data/tracks/erlang/exercises/scrabble-score/rebar.config +1 -1
  93. data/tracks/erlang/exercises/scrabble-score/test/scrabble_score_tests.erl +6 -5
  94. data/tracks/erlang/exercises/series/rebar.config +1 -1
  95. data/tracks/erlang/exercises/series/test/series_tests.erl +6 -5
  96. data/tracks/erlang/exercises/sieve/rebar.config +1 -1
  97. data/tracks/erlang/exercises/sieve/test/sieve_tests.erl +10 -8
  98. data/tracks/erlang/exercises/space-age/rebar.config +1 -1
  99. data/tracks/erlang/exercises/space-age/test/space_age_tests.erl +20 -19
  100. data/tracks/erlang/exercises/spiral-matrix/rebar.config +1 -1
  101. data/tracks/erlang/exercises/spiral-matrix/test/spiral_matrix_tests.erl +12 -10
  102. data/tracks/erlang/exercises/strain/rebar.config +1 -1
  103. data/tracks/erlang/exercises/strain/test/strain_tests.erl +17 -16
  104. data/tracks/erlang/exercises/sum-of-multiples/rebar.config +1 -1
  105. data/tracks/erlang/exercises/sum-of-multiples/test/sum_of_multiples_tests.erl +16 -15
  106. data/tracks/erlang/exercises/triangle/rebar.config +1 -1
  107. data/tracks/erlang/exercises/triangle/test/triangle_tests.erl +20 -19
  108. data/tracks/erlang/exercises/two-fer/rebar.config +1 -1
  109. data/tracks/erlang/exercises/two-fer/test/two_fer_tests.erl +8 -7
  110. data/tracks/erlang/exercises/word-count/rebar.config +1 -1
  111. data/tracks/erlang/exercises/word-count/test/word_count_tests.erl +6 -5
  112. data/tracks/erlang/exercises/zipper/rebar.config +1 -1
  113. data/tracks/erlang/exercises/zipper/test/zipper_tests.erl +47 -46
  114. data/tracks/erlang/testgen/src/tgen.erl +8 -6
  115. data/tracks/erlang/testgen/src/tgen_bob.erl +1 -1
  116. data/tracks/erlang/testgen/src/tgen_collatz-conjecture.erl +2 -2
  117. data/tracks/erlang/testgen/src/tgen_complex-numbers.erl +11 -11
  118. data/tracks/erlang/testgen/src/tgen_custom-set.erl +14 -14
  119. data/tracks/erlang/testgen/src/tgen_hamming.erl +2 -2
  120. data/tracks/erlang/testgen/src/tgen_hello-world.erl +1 -1
  121. data/tracks/erlang/testgen/src/tgen_leap.erl +1 -1
  122. data/tracks/erlang/testgen/src/tgen_rna-transcription.erl +2 -2
  123. data/tracks/erlang/testgen/src/tgs.erl +6 -0
  124. data/tracks/fsharp/exercises/beer-song/BeerSong.fs +1 -5
  125. data/tracks/fsharp/exercises/beer-song/BeerSongTest.fs +342 -20
  126. data/tracks/fsharp/exercises/beer-song/Example.fs +16 -10
  127. data/tracks/fsharp/exercises/food-chain/Example.fs +1 -1
  128. data/tracks/fsharp/exercises/food-chain/FoodChain.fs +1 -3
  129. data/tracks/fsharp/exercises/food-chain/FoodChainTest.fs +11 -11
  130. data/tracks/fsharp/exercises/house/Example.fs +1 -1
  131. data/tracks/fsharp/exercises/house/House.fs +1 -3
  132. data/tracks/fsharp/exercises/house/HouseTest.fs +202 -202
  133. data/tracks/fsharp/exercises/proverb/Example.fs +9 -9
  134. data/tracks/fsharp/exercises/proverb/Proverb.fs +1 -3
  135. data/tracks/fsharp/exercises/proverb/ProverbTest.fs +50 -21
  136. data/tracks/fsharp/exercises/twelve-days/Example.fs +4 -4
  137. data/tracks/fsharp/exercises/twelve-days/TwelveDays.fs +2 -6
  138. data/tracks/fsharp/exercises/twelve-days/TwelveDaysTest.fs +81 -57
  139. data/tracks/fsharp/generators/Generators.fs +39 -15
  140. data/tracks/go/bin/run-generators +5 -1
  141. data/tracks/go/config.json +14 -2
  142. data/tracks/go/exercises/accumulate/example.go +2 -1
  143. data/tracks/go/exercises/zebra-puzzle/.meta/hints.md +24 -0
  144. data/tracks/go/exercises/zebra-puzzle/README.md +76 -0
  145. data/tracks/go/exercises/zebra-puzzle/example.go +256 -0
  146. data/tracks/go/exercises/zebra-puzzle/zebra_puzzle_test.go +18 -0
  147. data/tracks/haskell/exercises/forth/package.yaml +1 -1
  148. data/tracks/haskell/exercises/forth/test/Tests.hs +1 -4
  149. data/tracks/haskell/exercises/pascals-triangle/package.yaml +1 -1
  150. data/tracks/haskell/exercises/pascals-triangle/test/Tests.hs +22 -1
  151. data/tracks/java/POLICIES.md +3 -3
  152. data/tracks/java/config.json +21 -2
  153. data/tracks/java/exercises/atbash-cipher/.meta/src/reference/java/Atbash.java +12 -12
  154. data/tracks/java/exercises/protein-translation/.meta/src/reference/java/ProteinTranslator.java +47 -0
  155. data/tracks/java/exercises/protein-translation/.meta/version +1 -0
  156. data/tracks/java/exercises/protein-translation/README.md +58 -0
  157. data/tracks/java/exercises/protein-translation/build.gradle +18 -0
  158. data/tracks/java/exercises/protein-translation/src/main/java/ProteinTranslator.java +8 -0
  159. data/tracks/java/exercises/protein-translation/src/test/java/ProteinTranslatorTest.java +179 -0
  160. data/tracks/java/exercises/settings.gradle +1 -0
  161. data/tracks/javascript/.eslintignore +2 -2
  162. data/tracks/javascript/exercises/accumulate/example.js +1 -2
  163. data/tracks/javascript/exercises/grains/example.js +6 -3
  164. data/tracks/kotlin/exercises/beer-song/.meta/src/reference/kotlin/BeerSong.kt +3 -3
  165. data/tracks/kotlin/exercises/beer-song/.meta/version +1 -1
  166. data/tracks/kotlin/exercises/beer-song/README.md +1 -1
  167. data/tracks/kotlin/exercises/beer-song/src/test/kotlin/BeerSongTest.kt +6 -6
  168. data/tracks/kotlin/exercises/forth/.meta/version +1 -1
  169. data/tracks/kotlin/exercises/forth/src/test/kotlin/ForthEvaluatorTest.kt +0 -7
  170. data/tracks/kotlin/exercises/meetup/README.md +16 -12
  171. data/tracks/kotlin/exercises/nth-prime/.meta/src/reference/kotlin/Prime.kt +7 -2
  172. data/tracks/kotlin/exercises/nth-prime/.meta/version +1 -1
  173. data/tracks/kotlin/exercises/nth-prime/src/test/kotlin/PrimeTest.kt +10 -1
  174. data/tracks/kotlin/exercises/nucleotide-count/README.md +2 -2
  175. data/tracks/kotlin/exercises/pascals-triangle/.meta/src/reference/kotlin/PascalsTriangle.kt +1 -1
  176. data/tracks/kotlin/exercises/pascals-triangle/.meta/version +1 -1
  177. data/tracks/kotlin/exercises/pascals-triangle/src/test/kotlin/PascalsTriangleTest.kt +58 -1
  178. data/tracks/kotlin/exercises/sum-of-multiples/README.md +3 -3
  179. data/tracks/ocaml/exercises/forth/test.ml +1 -3
  180. data/tracks/ocaml/exercises/rectangles/example.ml +11 -11
  181. data/tracks/php/exercises/bob/example.php +2 -2
  182. data/tracks/purescript/config.json +3 -3
  183. data/tracks/python/config.json +34 -22
  184. data/tracks/python/exercises/alphametics/example.py +90 -34
  185. data/tracks/python/exercises/ocr-numbers/example.py +18 -21
  186. data/tracks/python/exercises/ocr-numbers/ocr_numbers.py +1 -5
  187. data/tracks/python/exercises/ocr-numbers/ocr_numbers_test.py +124 -106
  188. data/tracks/python/exercises/simple-linked-list/README.md +49 -0
  189. data/tracks/python/exercises/simple-linked-list/example.py +67 -0
  190. data/tracks/python/exercises/simple-linked-list/hints.md +10 -0
  191. data/tracks/python/exercises/simple-linked-list/simple_linked_list.py +33 -0
  192. data/tracks/python/exercises/simple-linked-list/simple_linked_list_test.py +112 -0
  193. data/tracks/rust/README.md +2 -0
  194. data/tracks/rust/bin/init_exercise.py +586 -0
  195. data/tracks/rust/config.json +20 -10
  196. data/tracks/rust/exercises/book-store/.gitignore +3 -0
  197. data/tracks/rust/exercises/book-store/Cargo-example.toml +7 -0
  198. data/tracks/rust/exercises/book-store/Cargo.toml +6 -0
  199. data/tracks/rust/exercises/book-store/README.md +107 -0
  200. data/tracks/rust/exercises/book-store/example.rs +187 -0
  201. data/tracks/rust/exercises/book-store/src/lib.rs +3 -0
  202. data/tracks/rust/exercises/book-store/tests/book-store.rs +130 -0
  203. data/tracks/sml/config.json +8 -8
  204. data/tracks/typescript/config.json +6 -6
  205. metadata +43 -46
  206. data/tracks/erlang/exercises/all-your-base/include/exercism.hrl +0 -11
  207. data/tracks/erlang/exercises/allergies/include/exercism.hrl +0 -11
  208. data/tracks/erlang/exercises/anagram/include/exercism.hrl +0 -11
  209. data/tracks/erlang/exercises/atbash-cipher/include/exercism.hrl +0 -11
  210. data/tracks/erlang/exercises/bank-account/include/exercism.hrl +0 -11
  211. data/tracks/erlang/exercises/beer-song/include/exercism.hrl +0 -11
  212. data/tracks/erlang/exercises/bob/include/exercism.hrl +0 -11
  213. data/tracks/erlang/exercises/circular-buffer/include/exercism.hrl +0 -11
  214. data/tracks/erlang/exercises/clock/include/exercism.hrl +0 -11
  215. data/tracks/erlang/exercises/collatz-conjecture/include/exercism.hrl +0 -11
  216. data/tracks/erlang/exercises/complex-numbers/include/exercism.hrl +0 -11
  217. data/tracks/erlang/exercises/custom-set/include/exercism.hrl +0 -11
  218. data/tracks/erlang/exercises/difference-of-squares/include/exercism.hrl +0 -11
  219. data/tracks/erlang/exercises/etl/include/exercism.hrl +0 -11
  220. data/tracks/erlang/exercises/gigasecond/include/exercism.hrl +0 -11
  221. data/tracks/erlang/exercises/grade-school/include/exercism.hrl +0 -11
  222. data/tracks/erlang/exercises/grains/include/exercism.hrl +0 -11
  223. data/tracks/erlang/exercises/hamming/include/exercism.hrl +0 -11
  224. data/tracks/erlang/exercises/hello-world/include/exercism.hrl +0 -11
  225. data/tracks/erlang/exercises/isogram/include/exercism.hrl +0 -11
  226. data/tracks/erlang/exercises/largest-series-product/include/exercism.hrl +0 -11
  227. data/tracks/erlang/exercises/leap/include/exercism.hrl +0 -11
  228. data/tracks/erlang/exercises/luhn/include/exercism.hrl +0 -11
  229. data/tracks/erlang/exercises/meetup/include/exercism.hrl +0 -11
  230. data/tracks/erlang/exercises/nucleotide-count/include/exercism.hrl +0 -11
  231. data/tracks/erlang/exercises/parallel-letter-frequency/include/exercism.hrl +0 -11
  232. data/tracks/erlang/exercises/phone-number/include/exercism.hrl +0 -11
  233. data/tracks/erlang/exercises/rna-transcription/include/exercism.hrl +0 -11
  234. data/tracks/erlang/exercises/robot-simulator/include/exercism.hrl +0 -11
  235. data/tracks/erlang/exercises/roman-numerals/include/exercism.hrl +0 -11
  236. data/tracks/erlang/exercises/rotational-cipher/include/exercism.hrl +0 -11
  237. data/tracks/erlang/exercises/scrabble-score/include/exercism.hrl +0 -11
  238. data/tracks/erlang/exercises/series/include/exercism.hrl +0 -11
  239. data/tracks/erlang/exercises/sieve/include/exercism.hrl +0 -11
  240. data/tracks/erlang/exercises/space-age/include/exercism.hrl +0 -11
  241. data/tracks/erlang/exercises/spiral-matrix/include/exercism.hrl +0 -11
  242. data/tracks/erlang/exercises/strain/include/exercism.hrl +0 -11
  243. data/tracks/erlang/exercises/sum-of-multiples/include/exercism.hrl +0 -11
  244. data/tracks/erlang/exercises/triangle/include/exercism.hrl +0 -11
  245. data/tracks/erlang/exercises/two-fer/include/exercism.hrl +0 -11
  246. data/tracks/erlang/exercises/word-count/include/exercism.hrl +0 -11
  247. data/tracks/erlang/exercises/zipper/include/exercism.hrl +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1a6282e44be589af42a98d5eadad3da3614b6645
4
- data.tar.gz: b848e7356527fa5be1f4570d65607e7fe44d99c4
3
+ metadata.gz: 985e2ec336306b1046f8da6feb634a14e068b7fd
4
+ data.tar.gz: f45ef713d40338b0e38ad34a68c6dddc71c19a1f
5
5
  SHA512:
6
- metadata.gz: d59a5c6e8bfc57a717bff31c9d63ff1dcc2b1a14f18ac94f14f50526028ad9c7cb5e115164af39807eaf9eb2c8d575ff8c6e30e700435babdd9b6d77d87ca7aa
7
- data.tar.gz: ad2739ff2c636371cf1e6d611f1cb9a21291059e9cde040d111f084267ae45148fa50a8adcda38c363b1d0151146bef8e4da76ac21feece7f2b4dd20525f567c
6
+ metadata.gz: 68bbdd588b0c868aa758eabdf9f8b75979fe3d51381c0366ceff7deb718e4287238ad8840981175501f62c5b7068a8b4a8708100c5c8a9eb48f93e2435bb92c0
7
+ data.tar.gz: e236fc32bcdb8620dfac8ae19c8f97e80dd45298cdcbec8c5d1ee34c0503036b5cfdf697aafe40629c3040a7f2ec5bacfdc1ed177bc1ce735ffe1022c0453492
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.2.1.62"
2
+ VERSION = "2.2.1.63"
3
3
  end
@@ -1,23 +1,14 @@
1
1
  {
2
2
  "exercise": "all-your-base",
3
- "version": "1.1.0",
3
+ "version": "2.0.0",
4
4
  "comments": [
5
- "It's up to each track do decide:",
5
+ "This canonical data makes the following choices:",
6
+ "1. Zero is always represented in outputs as [0] instead of [].",
7
+ "2. In no other instances are leading zeroes present in any outputs.",
8
+ "3. Leading zeroes are accepted in inputs.",
9
+ "4. An empty sequence of input digits is considered zero, rather than an error.",
6
10
  "",
7
- "1. What's the canonical representation of zero?",
8
- " - []?",
9
- " - [0]?",
10
- "",
11
- "2. What representations of zero are allowed?",
12
- " - []?",
13
- " - [0]?",
14
- " - [0,0]?",
15
- "",
16
- "3. Are leading zeroes allowed?",
17
- "",
18
- "4. How should invalid input be handled?",
19
- "",
20
- "All the undefined cases are marked as null.",
11
+ "Tracks that wish to make different decisions for these choices may translate appropriately.",
21
12
  "",
22
13
  "All your numeric-base are belong to [2..]. :)"
23
14
  ],
@@ -92,7 +83,7 @@
92
83
  "input_base": 2,
93
84
  "input_digits": [],
94
85
  "output_base": 10,
95
- "expected": null
86
+ "expected": [0]
96
87
  },
97
88
  {
98
89
  "description": "single zero",
@@ -100,7 +91,7 @@
100
91
  "input_base": 10,
101
92
  "input_digits": [0],
102
93
  "output_base": 2,
103
- "expected": null
94
+ "expected": [0]
104
95
  },
105
96
  {
106
97
  "description": "multiple zeros",
@@ -108,7 +99,7 @@
108
99
  "input_base": 10,
109
100
  "input_digits": [0, 0, 0],
110
101
  "output_base": 2,
111
- "expected": null
102
+ "expected": [0]
112
103
  },
113
104
  {
114
105
  "description": "leading zeros",
@@ -116,7 +107,7 @@
116
107
  "input_base": 7,
117
108
  "input_digits": [0, 6, 0],
118
109
  "output_base": 10,
119
- "expected": null
110
+ "expected": [4, 2]
120
111
  },
121
112
  {
122
113
  "description": "first base is one",
@@ -124,7 +115,7 @@
124
115
  "input_base": 1,
125
116
  "input_digits": [],
126
117
  "output_base": 10,
127
- "expected": null
118
+ "expected": {"error": "input base must be >= 2"}
128
119
  },
129
120
  {
130
121
  "description": "first base is zero",
@@ -132,7 +123,7 @@
132
123
  "input_base": 0,
133
124
  "input_digits": [],
134
125
  "output_base": 10,
135
- "expected": null
126
+ "expected": {"error": "input base must be >= 2"}
136
127
  },
137
128
  {
138
129
  "description": "first base is negative",
@@ -140,7 +131,7 @@
140
131
  "input_base": -2,
141
132
  "input_digits": [1],
142
133
  "output_base": 10,
143
- "expected": null
134
+ "expected": {"error": "input base must be >= 2"}
144
135
  },
145
136
  {
146
137
  "description": "negative digit",
@@ -148,7 +139,7 @@
148
139
  "input_base": 2,
149
140
  "input_digits": [1, -1, 1, 0, 1, 0],
150
141
  "output_base": 10,
151
- "expected": null
142
+ "expected": {"error": "all digits must satisfy 0 <= d < input base"}
152
143
  },
153
144
  {
154
145
  "description": "invalid positive digit",
@@ -156,7 +147,7 @@
156
147
  "input_base": 2,
157
148
  "input_digits": [1, 2, 1, 0, 1, 0],
158
149
  "output_base": 10,
159
- "expected": null
150
+ "expected": {"error": "all digits must satisfy 0 <= d < input base"}
160
151
  },
161
152
  {
162
153
  "description": "second base is one",
@@ -164,7 +155,7 @@
164
155
  "input_base": 2,
165
156
  "input_digits": [1, 0, 1, 0, 1, 0],
166
157
  "output_base": 1,
167
- "expected": null
158
+ "expected": {"error": "output base must be >= 2"}
168
159
  },
169
160
  {
170
161
  "description": "second base is zero",
@@ -172,7 +163,7 @@
172
163
  "input_base": 10,
173
164
  "input_digits": [7],
174
165
  "output_base": 0,
175
- "expected": null
166
+ "expected": {"error": "output base must be >= 2"}
176
167
  },
177
168
  {
178
169
  "description": "second base is negative",
@@ -180,7 +171,7 @@
180
171
  "input_base": 2,
181
172
  "input_digits": [1],
182
173
  "output_base": -7,
183
- "expected": null
174
+ "expected": {"error": "output base must be >= 2"}
184
175
  },
185
176
  {
186
177
  "description": "both bases are negative",
@@ -188,7 +179,7 @@
188
179
  "input_base": -2,
189
180
  "input_digits": [1],
190
181
  "output_base": -7,
191
- "expected": null
182
+ "expected": {"error": "input base must be >= 2"}
192
183
  }
193
184
  ]
194
185
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "exercise": "forth",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "comments": [
5
5
  "The cases are split into multiple sections, all with the same structure.",
6
6
  "In all cases, the `expected` key is the resulting stack",
@@ -143,15 +143,15 @@
143
143
  "description": "dup",
144
144
  "cases": [
145
145
  {
146
- "description": "copies the top value on the stack",
146
+ "description": "copies a value on the stack",
147
147
  "property": "evaluate",
148
- "input": ["1 DUP"],
148
+ "input": ["1 dup"],
149
149
  "expected": [1, 1]
150
150
  },
151
151
  {
152
- "description": "is case-insensitive",
152
+ "description": "copies the top value on the stack",
153
153
  "property": "evaluate",
154
- "input": ["1 2 Dup"],
154
+ "input": ["1 2 dup"],
155
155
  "expected": [1, 2, 2]
156
156
  },
157
157
  {
@@ -305,6 +305,53 @@
305
305
  "expected": null
306
306
  }
307
307
  ]
308
+ },
309
+ {
310
+ "description": "case-insensitivity",
311
+ "cases": [
312
+ {
313
+ "description": "DUP is case-insensitive",
314
+ "property": "evaluate",
315
+ "input": ["1 DUP Dup dup"],
316
+ "expected": [1, 1, 1, 1]
317
+ },
318
+ {
319
+ "description": "DROP is case-insensitive",
320
+ "property": "evaluate",
321
+ "input": ["1 2 3 4 DROP Drop drop"],
322
+ "expected": [1]
323
+ },
324
+ {
325
+ "description": "SWAP is case-insensitive",
326
+ "property": "evaluate",
327
+ "input": ["1 2 SWAP 3 Swap 4 swap"],
328
+ "expected": [2, 3, 4, 1]
329
+ },
330
+ {
331
+ "description": "OVER is case-insensitive",
332
+ "property": "evaluate",
333
+ "input": ["1 2 OVER Over over"],
334
+ "expected": [1, 2, 1, 2, 1]
335
+ },
336
+ {
337
+ "description": "user-defined words are case-insensitive",
338
+ "property": "evaluate",
339
+ "input": [
340
+ ": foo dup ;",
341
+ "1 FOO Foo foo"
342
+ ],
343
+ "expected": [1, 1, 1, 1]
344
+ },
345
+ {
346
+ "description": "definitions are case-insensitive",
347
+ "property": "evaluate",
348
+ "input": [
349
+ ": SWAP DUP Dup dup ;",
350
+ "1 swap"
351
+ ],
352
+ "expected": [1, 1, 1, 1]
353
+ }
354
+ ]
308
355
  }
309
356
  ]
310
357
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "exercise": "isbn-verifier",
3
- "version": "1.1.0",
3
+ "version": "2.0.0",
4
4
  "comments": [
5
5
  "An expected value of true indicates a valid ISBN-10, ",
6
6
  "whereas false means the ISBN-10 is invalid."
@@ -8,81 +8,81 @@
8
8
  "cases": [
9
9
  {
10
10
  "description": "valid isbn number",
11
- "property": "isbn",
11
+ "property": "isValid",
12
12
  "input": "3-598-21508-8",
13
13
  "expected": true
14
14
  },
15
15
  {
16
16
  "description": "invalid isbn check digit",
17
- "property": "isbn",
17
+ "property": "isValid",
18
18
  "input": "3-598-21508-9",
19
19
  "expected": false
20
20
  },
21
21
  {
22
22
  "description": "valid isbn number with a check digit of 10",
23
- "property": "isbn",
23
+ "property": "isValid",
24
24
  "input": "3-598-21507-X",
25
25
  "expected": true
26
26
  },
27
27
  {
28
28
  "description": "check digit is a character other than X",
29
- "property": "isbn",
29
+ "property": "isValid",
30
30
  "input": "3-598-21507-A",
31
31
  "expected": false
32
32
  },
33
33
  {
34
34
  "description": "invalid character in isbn",
35
- "property": "isbn",
35
+ "property": "isValid",
36
36
  "input": "3-598-2K507-0",
37
37
  "expected": false
38
38
  },
39
39
  {
40
40
  "description": "X is only valid as a check digit",
41
- "property": "isbn",
41
+ "property": "isValid",
42
42
  "input": "3-598-2X507-9",
43
43
  "expected": false
44
44
  },
45
45
  {
46
46
  "description": "valid isbn without separating dashes",
47
- "property": "isbn",
47
+ "property": "isValid",
48
48
  "input": "3598215088",
49
49
  "expected": true
50
50
  },
51
51
  {
52
52
  "description": "isbn without separating dashes and X as check digit",
53
- "property": "isbn",
53
+ "property": "isValid",
54
54
  "input": "359821507X",
55
55
  "expected": true
56
56
  },
57
57
  {
58
58
  "description": "isbn without check digit and dashes",
59
- "property": "isbn",
59
+ "property": "isValid",
60
60
  "input": "359821507",
61
61
  "expected": false
62
62
  },
63
63
  {
64
64
  "description": "too long isbn and no dashes",
65
- "property": "isbn",
65
+ "property": "isValid",
66
66
  "input": "3598215078X",
67
67
  "expected": false
68
68
  },
69
69
  {
70
70
  "description": "isbn without check digit",
71
- "property": "isbn",
71
+ "property": "isValid",
72
72
  "input": "3-598-21507",
73
73
  "expected": false
74
74
  },
75
75
  {
76
76
  "description": "too long isbn",
77
- "property": "isbn",
77
+ "property": "isValid",
78
78
  "input": "3-598-21507-XX",
79
79
  "expected": false
80
80
  },
81
81
  {
82
82
  "description": "check digit of X should not be used for 0",
83
- "property": "isbn",
83
+ "property": "isValid",
84
84
  "input": "3-598-21515-X",
85
85
  "expected": false
86
86
  }
87
87
  ]
88
- }
88
+ }
@@ -0,0 +1,153 @@
1
+ {
2
+ "exercise": "protein-translation",
3
+ "version": "1.0.0",
4
+ "cases": [
5
+ {
6
+ "description": "Translate input RNA sequences into proteins",
7
+ "comments": [
8
+ "Returns the name of the protein if given RNA is valid, "
9
+ , "else throws an error. "
10
+ ],
11
+ "cases": [
12
+ {
13
+ "description": "Methionine RNA sequence",
14
+ "property": "proteins",
15
+ "strand": "AUG",
16
+ "expected": ["Methionine"]
17
+ },
18
+ {
19
+ "description": "Phenylalanine RNA sequence 1",
20
+ "property": "proteins",
21
+ "strand": "UUU",
22
+ "expected": ["Phenylalanine"]
23
+ },
24
+ {
25
+ "description": "Phenylalanine RNA sequence 2",
26
+ "property": "proteins",
27
+ "strand": "UUC",
28
+ "expected": ["Phenylalanine"]
29
+ },
30
+ {
31
+ "description": "Leucine RNA sequence 1",
32
+ "property": "proteins",
33
+ "strand": "UUA",
34
+ "expected": ["Leucine"]
35
+ },
36
+ {
37
+ "description": "Leucine RNA sequence 2",
38
+ "property": "proteins",
39
+ "strand": "UUG",
40
+ "expected": ["Leucine"]
41
+ },
42
+ {
43
+ "description": "Serine RNA sequence 1",
44
+ "property": "proteins",
45
+ "strand": "UCU",
46
+ "expected": ["Serine"]
47
+ },
48
+ {
49
+ "description": "Serine RNA sequence 2",
50
+ "property": "proteins",
51
+ "strand": "UCC",
52
+ "expected": ["Serine"]
53
+ },
54
+ {
55
+ "description": "Serine RNA sequence 3",
56
+ "property": "proteins",
57
+ "strand": "UCA",
58
+ "expected": ["Serine"]
59
+ },
60
+ {
61
+ "description": "Serine RNA sequence 4",
62
+ "property": "proteins",
63
+ "strand": "UCG",
64
+ "expected": ["Serine"]
65
+ },
66
+ {
67
+ "description": "Tyrosine RNA sequence 1",
68
+ "property": "proteins",
69
+ "strand": "UAU",
70
+ "expected": ["Tyrosine"]
71
+ },
72
+ {
73
+ "description": "Tyrosine RNA sequence 2",
74
+ "property": "proteins",
75
+ "strand": "UAC",
76
+ "expected": ["Tyrosine"]
77
+ },
78
+ {
79
+ "description": "Cysteine RNA sequence 1",
80
+ "property": "proteins",
81
+ "strand": "UGU",
82
+ "expected": ["Cysteine"]
83
+ },
84
+ {
85
+ "description": "Cysteine RNA sequence 2",
86
+ "property": "proteins",
87
+ "strand": "UGC",
88
+ "expected": ["Cysteine"]
89
+ },
90
+ {
91
+ "description": "Tryptophan RNA sequence",
92
+ "property": "proteins",
93
+ "strand": "UGG",
94
+ "expected": ["Tryptophan"]
95
+ },
96
+ {
97
+ "description": "STOP codon RNA sequence 1",
98
+ "property": "proteins",
99
+ "strand": "UAA",
100
+ "expected": []
101
+ },
102
+ {
103
+ "description": "STOP codon RNA sequence 2",
104
+ "property": "proteins",
105
+ "strand": "UAG",
106
+ "expected": []
107
+ },
108
+ {
109
+ "description": "STOP codon RNA sequence 3",
110
+ "property": "proteins",
111
+ "strand": "UGA",
112
+ "expected": []
113
+ },
114
+ {
115
+ "description": "Translate RNA strand into correct protein list",
116
+ "property": "proteins",
117
+ "strand": "AUGUUUUGG",
118
+ "expected": ["Methionine","Phenylalanine","Tryptophan"]
119
+ },
120
+ {
121
+ "description": "Translation stops if STOP codon at beginning of sequence",
122
+ "property": "proteins",
123
+ "strand": "UAGUGG",
124
+ "expected": []
125
+ },
126
+ {
127
+ "description": "Translation stops if STOP codon at end of two-codon sequence",
128
+ "property": "proteins",
129
+ "strand": "UGGUAG",
130
+ "expected": ["Tryptophan"]
131
+ },
132
+ {
133
+ "description": "Translation stops if STOP codon at end of three-codon sequence",
134
+ "property": "proteins",
135
+ "strand": "AUGUUUUAA",
136
+ "expected": ["Methionine","Phenylalanine"]
137
+ },
138
+ {
139
+ "description": "Translation stops if STOP codon in middle of sequence of three-codon sequence",
140
+ "property": "proteins",
141
+ "strand": "UGGUAGUGG",
142
+ "expected": ["Tryptophan"]
143
+ },
144
+ {
145
+ "description": "Translation stops if codon in middle of sequence of six-codon sequence",
146
+ "property": "proteins",
147
+ "strand": "UGGUGUUAUUAAUGGUUU",
148
+ "expected": ["Tryptophan","Cysteine","Tyrosine"]
149
+ }
150
+ ]
151
+ }
152
+ ]
153
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "exercise": "reverse-string",
3
+ "version": "1.0.0",
4
+ "comments": [
5
+ "If property based testing tools are available, a good property to test is reversing a string twice: reverse(reverse(string)) == string"
6
+ ],
7
+ "cases": [
8
+ {
9
+ "description": "empty string",
10
+ "property": "reverse",
11
+ "input": "",
12
+ "expected": ""
13
+ },
14
+ {
15
+ "description": "a word",
16
+ "property": "reverse",
17
+ "input": "robot",
18
+ "expected": "tobor"
19
+ },
20
+ {
21
+ "description": "a capitalized word",
22
+ "property": "reverse",
23
+ "input": "Ramen",
24
+ "expected": "nemaR"
25
+ },
26
+ {
27
+ "description": "a sentence with punctuation",
28
+ "property": "reverse",
29
+ "input": "I'm hungry!",
30
+ "expected": "!yrgnuh m'I"
31
+ },
32
+ {
33
+ "description": "a palindrome",
34
+ "property": "reverse",
35
+ "input": "racecar",
36
+ "expected": "racecar"
37
+ }
38
+ ]
39
+ }
@@ -0,0 +1,5 @@
1
+ Reverse a string
2
+
3
+ For example:
4
+ input: "cool"
5
+ output: "looc"
@@ -0,0 +1,5 @@
1
+ ---
2
+ blurb: "Reverse a string"
3
+ title: "reverse-string"
4
+ source: "Introductory challenge to reverse an input string"
5
+ source_url: "https://medium.freecodecamp.org/how-to-reverse-a-string-in-javascript-in-3-different-ways-75e4763c68cb"