trackler 2.2.1.62 → 2.2.1.63

Sign up to get free protection for your applications and to get access to all the features.
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"