trackler 2.2.1.47 → 2.2.1.48

Sign up to get free protection for your applications and to get access to all the features.
Files changed (277) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/pangram/canonical-data.json +3 -3
  4. data/tracks/common-lisp/.travis.yml +2 -9
  5. data/tracks/common-lisp/docs/TESTS.md +43 -9
  6. data/tracks/delphi/exercises/nucleotide-count/uNucleotideCountTest.pas +2 -2
  7. data/tracks/elixir/.travis.yml +4 -7
  8. data/tracks/elixir/README.md +2 -6
  9. data/tracks/elixir/bin/dialyzer_check.sh +2 -13
  10. data/tracks/elixir/exercises/allergies/example.exs +3 -2
  11. data/tracks/elixir/exercises/atbash-cipher/example.exs +5 -5
  12. data/tracks/elixir/exercises/bank-account/example.exs +11 -11
  13. data/tracks/elixir/exercises/bob/example.exs +4 -4
  14. data/tracks/elixir/exercises/forth/example.exs +66 -48
  15. data/tracks/elixir/exercises/minesweeper/example.exs +31 -18
  16. data/tracks/elixir/exercises/pangram/example.exs +4 -4
  17. data/tracks/elixir/exercises/queen-attack/queen_attack_test.exs +68 -53
  18. data/tracks/elixir/exercises/say/example.exs +33 -31
  19. data/tracks/elixir/exercises/scrabble-score/example.exs +12 -11
  20. data/tracks/elixir/mix.exs +10 -7
  21. data/tracks/elixir/mix.lock +4 -1
  22. data/tracks/erlang/README.md +2 -0
  23. data/tracks/fsharp/exercises/nth-prime/Example.fs +4 -1
  24. data/tracks/fsharp/exercises/nth-prime/NthPrime.fs +1 -1
  25. data/tracks/fsharp/exercises/nth-prime/NthPrimeTest.fs +12 -32
  26. data/tracks/fsharp/exercises/pangram/PangramTest.fs +3 -3
  27. data/tracks/fsharp/exercises/perfect-numbers/Example.fs +9 -6
  28. data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fs +1 -1
  29. data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbersTest.fs +55 -21
  30. data/tracks/fsharp/generators/Generators.fs +18 -0
  31. data/tracks/gnu-apl/config.json +21 -0
  32. data/tracks/gnu-apl/exercises/hamming/README.md +42 -0
  33. data/tracks/gnu-apl/exercises/hamming/hamming-example.apl +5 -0
  34. data/tracks/gnu-apl/exercises/hamming/hamming.tc +75 -0
  35. data/tracks/gnu-apl/exercises/hello-world/README.md +17 -1
  36. data/tracks/gnu-apl/exercises/leap/README.md +33 -0
  37. data/tracks/gnu-apl/exercises/raindrops/README.md +24 -0
  38. data/tracks/gnu-apl/exercises/raindrops/raindrops-example.apl +8 -0
  39. data/tracks/gnu-apl/exercises/raindrops/raindrops.tc +60 -0
  40. data/tracks/gnu-apl/exercises/rna-transcription/README.md +25 -0
  41. data/tracks/gnu-apl/exercises/rna-transcription/rna-transcription-example.apl +7 -0
  42. data/tracks/gnu-apl/exercises/rna-transcription/rna-transcription.tc +41 -0
  43. data/tracks/gnu-apl/test.apl +13 -0
  44. data/tracks/haskell/config.json +9 -0
  45. data/tracks/haskell/exercises/rotational-cipher/README.md +91 -0
  46. data/tracks/haskell/exercises/rotational-cipher/examples/success-standard/package.yaml +16 -0
  47. data/tracks/haskell/exercises/rotational-cipher/examples/success-standard/src/RotationalCipher.hs +9 -0
  48. data/tracks/haskell/exercises/rotational-cipher/package.yaml +20 -0
  49. data/tracks/haskell/exercises/rotational-cipher/src/RotationalCipher.hs +4 -0
  50. data/tracks/haskell/exercises/rotational-cipher/stack.yaml +1 -0
  51. data/tracks/haskell/exercises/rotational-cipher/test/Tests.hs +77 -0
  52. data/tracks/java/config.json +23 -14
  53. data/tracks/java/config/exercise-readme-insert.md +3 -3
  54. data/tracks/java/config/exercise_readme.go.tmpl +3 -0
  55. data/tracks/java/exercises/accumulate/README.md +4 -3
  56. data/tracks/java/exercises/acronym/.meta/{.version → version} +0 -0
  57. data/tracks/java/exercises/acronym/README.md +4 -3
  58. data/tracks/java/exercises/all-your-base/.meta/{.version → version} +0 -0
  59. data/tracks/java/exercises/all-your-base/README.md +4 -3
  60. data/tracks/java/exercises/allergies/README.md +4 -3
  61. data/tracks/java/exercises/anagram/README.md +4 -3
  62. data/tracks/java/exercises/atbash-cipher/README.md +4 -3
  63. data/tracks/java/exercises/bank-account/README.md +6 -3
  64. data/tracks/java/exercises/beer-song/README.md +4 -3
  65. data/tracks/java/exercises/binary-search-tree/.meta/src/reference/java/BinarySearchTree.java +38 -44
  66. data/tracks/java/exercises/binary-search-tree/README.md +4 -3
  67. data/tracks/java/exercises/binary-search-tree/src/main/java/BinarySearchTree.java +35 -0
  68. data/tracks/java/exercises/binary-search-tree/src/test/java/BinarySearchTreeTest.java +46 -40
  69. data/tracks/java/exercises/binary-search/.meta/hints.md +25 -0
  70. data/tracks/java/exercises/binary-search/.meta/src/reference/java/BinarySearch.java +3 -7
  71. data/tracks/java/exercises/binary-search/README.md +33 -3
  72. data/tracks/java/exercises/binary-search/src/test/java/BinarySearchTest.java +11 -11
  73. data/tracks/java/exercises/binary/README.md +4 -3
  74. data/tracks/java/exercises/bob/README.md +4 -3
  75. data/tracks/java/exercises/book-store/README.md +4 -3
  76. data/tracks/java/exercises/bowling/README.md +4 -3
  77. data/tracks/java/exercises/bracket-push/README.md +4 -3
  78. data/tracks/java/exercises/change/.meta/{.version → version} +0 -0
  79. data/tracks/java/exercises/change/README.md +4 -3
  80. data/tracks/java/exercises/circular-buffer/README.md +4 -3
  81. data/tracks/java/exercises/clock/.meta/{.version → version} +0 -0
  82. data/tracks/java/exercises/clock/README.md +6 -3
  83. data/tracks/java/exercises/collatz-conjecture/.meta/{.version → version} +0 -0
  84. data/tracks/java/exercises/collatz-conjecture/README.md +4 -3
  85. data/tracks/java/exercises/complex-numbers/README.md +4 -3
  86. data/tracks/java/exercises/crypto-square/README.md +4 -3
  87. data/tracks/java/exercises/{rna-transcription/.meta/.version → custom-set/.meta/version} +0 -0
  88. data/tracks/java/exercises/custom-set/README.md +4 -3
  89. data/tracks/java/exercises/custom-set/src/test/java/CustomSetTest.java +103 -251
  90. data/tracks/java/exercises/diamond/.meta/{.version → version} +0 -0
  91. data/tracks/java/exercises/diamond/README.md +4 -3
  92. data/tracks/java/exercises/difference-of-squares/.meta/{.version → version} +0 -0
  93. data/tracks/java/exercises/difference-of-squares/README.md +4 -3
  94. data/tracks/java/exercises/etl/README.md +4 -3
  95. data/tracks/java/exercises/flatten-array/.meta/{.version → version} +0 -0
  96. data/tracks/java/exercises/flatten-array/README.md +4 -3
  97. data/tracks/java/exercises/food-chain/README.md +4 -3
  98. data/tracks/java/exercises/forth/.meta/{.version → version} +0 -0
  99. data/tracks/java/exercises/forth/README.md +3 -3
  100. data/tracks/java/exercises/gigasecond/README.md +4 -3
  101. data/tracks/java/exercises/grade-school/README.md +4 -3
  102. data/tracks/java/exercises/hamming/.meta/{.version → version} +0 -0
  103. data/tracks/java/exercises/hamming/README.md +6 -3
  104. data/tracks/java/exercises/hello-world/README.md +6 -3
  105. data/tracks/java/exercises/hexadecimal/README.md +4 -3
  106. data/tracks/java/exercises/house/README.md +4 -3
  107. data/tracks/java/exercises/isogram/README.md +6 -3
  108. data/tracks/java/exercises/kindergarten-garden/README.md +4 -3
  109. data/tracks/java/exercises/largest-series-product/README.md +4 -3
  110. data/tracks/java/exercises/linked-list/README.md +4 -3
  111. data/tracks/java/exercises/list-ops/.meta/{.version → version} +0 -0
  112. data/tracks/java/exercises/list-ops/README.md +6 -3
  113. data/tracks/java/exercises/luhn/README.md +4 -3
  114. data/tracks/java/exercises/matrix/README.md +4 -3
  115. data/tracks/java/exercises/meetup/README.md +4 -3
  116. data/tracks/java/exercises/minesweeper/.meta/{.version → version} +0 -0
  117. data/tracks/java/exercises/minesweeper/README.md +4 -3
  118. data/tracks/java/exercises/nth-prime/README.md +4 -3
  119. data/tracks/java/exercises/nucleotide-count/README.md +4 -3
  120. data/tracks/java/exercises/ocr-numbers/README.md +4 -3
  121. data/tracks/java/exercises/octal/README.md +4 -3
  122. data/tracks/java/exercises/palindrome-products/README.md +4 -3
  123. data/tracks/java/exercises/pangram/.meta/{.version → version} +0 -0
  124. data/tracks/java/exercises/pangram/README.md +4 -3
  125. data/tracks/java/exercises/pascals-triangle/.meta/{.version → version} +0 -0
  126. data/tracks/java/exercises/pascals-triangle/README.md +4 -3
  127. data/tracks/java/exercises/perfect-numbers/.meta/{.version → version} +0 -0
  128. data/tracks/java/exercises/perfect-numbers/README.md +4 -3
  129. data/tracks/java/exercises/phone-number/README.md +4 -3
  130. data/tracks/java/exercises/pig-latin/README.md +4 -3
  131. data/tracks/java/exercises/poker/README.md +4 -3
  132. data/tracks/java/exercises/prime-factors/README.md +4 -3
  133. data/tracks/java/exercises/pythagorean-triplet/README.md +4 -3
  134. data/tracks/java/exercises/queen-attack/README.md +4 -3
  135. data/tracks/java/exercises/raindrops/README.md +4 -3
  136. data/tracks/java/exercises/rectangles/README.md +4 -3
  137. data/tracks/java/exercises/rna-transcription/.meta/version +1 -0
  138. data/tracks/java/exercises/rna-transcription/README.md +4 -3
  139. data/tracks/java/exercises/robot-name/README.md +4 -3
  140. data/tracks/java/exercises/robot-simulator/README.md +4 -3
  141. data/tracks/java/exercises/roman-numerals/README.md +4 -3
  142. data/tracks/java/exercises/rotational-cipher/README.md +4 -3
  143. data/tracks/java/exercises/run-length-encoding/README.md +4 -3
  144. data/tracks/java/exercises/saddle-points/.meta/{.version → version} +0 -0
  145. data/tracks/java/exercises/saddle-points/README.md +4 -3
  146. data/tracks/java/exercises/scrabble-score/.meta/{.version → version} +0 -0
  147. data/tracks/java/exercises/scrabble-score/README.md +4 -3
  148. data/tracks/java/exercises/secret-handshake/README.md +4 -3
  149. data/tracks/java/exercises/series/README.md +4 -3
  150. data/tracks/java/exercises/sieve/README.md +4 -3
  151. data/tracks/java/exercises/simple-cipher/README.md +6 -3
  152. data/tracks/java/exercises/simple-linked-list/README.md +4 -3
  153. data/tracks/java/exercises/space-age/README.md +4 -3
  154. data/tracks/java/exercises/spiral-matrix/.meta/{.version → version} +0 -0
  155. data/tracks/java/exercises/spiral-matrix/README.md +4 -3
  156. data/tracks/java/exercises/strain/README.md +4 -3
  157. data/tracks/java/exercises/sublist/README.md +4 -3
  158. data/tracks/java/exercises/sum-of-multiples/README.md +4 -3
  159. data/tracks/java/exercises/tournament/README.md +4 -3
  160. data/tracks/java/exercises/transpose/README.md +4 -3
  161. data/tracks/java/exercises/triangle/.meta/{.version → version} +0 -0
  162. data/tracks/java/exercises/triangle/README.md +4 -3
  163. data/tracks/java/exercises/trinary/README.md +4 -3
  164. data/tracks/java/exercises/twelve-days/README.md +4 -3
  165. data/tracks/java/exercises/two-fer/README.md +6 -3
  166. data/tracks/java/exercises/word-count/README.md +4 -3
  167. data/tracks/java/exercises/word-search/.meta/{.version → version} +0 -0
  168. data/tracks/java/exercises/word-search/README.md +4 -3
  169. data/tracks/java/exercises/wordy/README.md +4 -3
  170. data/tracks/julia/config.json +13 -0
  171. data/tracks/julia/exercises/phone-number/README.md +36 -0
  172. data/tracks/julia/exercises/phone-number/example.jl +18 -0
  173. data/tracks/julia/exercises/phone-number/phone-number.jl +3 -0
  174. data/tracks/julia/exercises/phone-number/runtests.jl +49 -0
  175. data/tracks/lua/config.json +505 -494
  176. data/tracks/lua/config/maintainers.json +16 -16
  177. data/tracks/lua/exercises/acronym/README.md +0 -1
  178. data/tracks/lua/exercises/all-your-base/README.md +1 -1
  179. data/tracks/lua/exercises/allergies/README.md +0 -1
  180. data/tracks/lua/exercises/alphametics/README.md +2 -2
  181. data/tracks/lua/exercises/atbash-cipher/README.md +2 -1
  182. data/tracks/lua/exercises/beer-song/README.md +1 -1
  183. data/tracks/lua/exercises/binary/README.md +2 -0
  184. data/tracks/lua/exercises/bowling/README.md +20 -6
  185. data/tracks/lua/exercises/change/README.md +1 -1
  186. data/tracks/lua/exercises/circular-buffer/README.md +13 -6
  187. data/tracks/lua/exercises/crypto-square/README.md +4 -4
  188. data/tracks/lua/exercises/diamond/README.md +6 -6
  189. data/tracks/lua/exercises/etl/README.md +2 -0
  190. data/tracks/lua/exercises/flatten-array/README.md +1 -2
  191. data/tracks/lua/exercises/food-chain/README.md +1 -1
  192. data/tracks/lua/exercises/grade-school/README.md +0 -1
  193. data/tracks/lua/exercises/grains/README.md +0 -1
  194. data/tracks/lua/exercises/house/README.md +1 -2
  195. data/tracks/lua/exercises/isogram/README.md +2 -1
  196. data/tracks/lua/exercises/kindergarten-garden/README.md +13 -13
  197. data/tracks/lua/exercises/leap/README.md +1 -1
  198. data/tracks/lua/exercises/linked-list/README.md +10 -10
  199. data/tracks/lua/exercises/luhn/README.md +7 -7
  200. data/tracks/lua/exercises/matrix/README.md +6 -4
  201. data/tracks/lua/exercises/meetup/README.md +1 -2
  202. data/tracks/lua/exercises/nucleotide-count/README.md +8 -22
  203. data/tracks/lua/exercises/ocr-numbers/README.md +5 -5
  204. data/tracks/lua/exercises/octal/README.md +6 -2
  205. data/tracks/lua/exercises/pangram/README.md +1 -1
  206. data/tracks/lua/exercises/pascals-triangle/README.md +1 -1
  207. data/tracks/lua/exercises/perfect-numbers/README.md +2 -2
  208. data/tracks/lua/exercises/phone-number/README.md +3 -2
  209. data/tracks/lua/exercises/pov/README.md +2 -2
  210. data/tracks/lua/exercises/protein-translation/README.md +4 -5
  211. data/tracks/lua/exercises/pythagorean-triplet/README.md +3 -3
  212. data/tracks/lua/exercises/rail-fence-cipher/README.md +12 -7
  213. data/tracks/lua/exercises/react/README.md +29 -0
  214. data/tracks/lua/exercises/react/example.lua +108 -0
  215. data/tracks/lua/exercises/react/react_spec.lua +160 -0
  216. data/tracks/lua/exercises/rectangles/README.md +7 -7
  217. data/tracks/lua/exercises/roman-numerals/README.md +1 -1
  218. data/tracks/lua/exercises/run-length-encoding/README.md +4 -4
  219. data/tracks/lua/exercises/scrabble-score/README.md +3 -1
  220. data/tracks/lua/exercises/secret-handshake/README.md +1 -1
  221. data/tracks/lua/exercises/space-age/README.md +2 -1
  222. data/tracks/lua/exercises/sum-of-multiples/README.md +0 -3
  223. data/tracks/lua/exercises/tournament/README.md +5 -5
  224. data/tracks/lua/exercises/transpose/README.md +7 -7
  225. data/tracks/lua/exercises/triangle/README.md +9 -6
  226. data/tracks/lua/exercises/variable-length-quantity/README.md +6 -7
  227. data/tracks/lua/exercises/word-count/README.md +1 -2
  228. data/tracks/lua/exercises/word-search/README.md +1 -1
  229. data/tracks/perl6/exercises/leap/Example.pm6 +1 -1
  230. data/tracks/perl6/exercises/leap/Leap.pm6 +1 -1
  231. data/tracks/perl6/exercises/leap/example.yaml +1 -1
  232. data/tracks/perl6/exercises/leap/leap.t +3 -3
  233. data/tracks/php/exercises/transpose/example.php +37 -15
  234. data/tracks/php/exercises/transpose/transpose_test.php +205 -45
  235. data/tracks/purescript/config.json +11 -0
  236. data/tracks/purescript/exercises/collatz-conjecture/README.md +33 -0
  237. data/tracks/purescript/exercises/collatz-conjecture/bower.json +26 -0
  238. data/tracks/purescript/exercises/collatz-conjecture/examples/src/CollatzConjecture.purs +15 -0
  239. data/tracks/purescript/exercises/collatz-conjecture/src/CollatzConjecture.purs +3 -0
  240. data/tracks/purescript/exercises/collatz-conjecture/test/Main.purs +43 -0
  241. data/tracks/python/config.json +10 -2
  242. data/tracks/racket/README.md +38 -33
  243. data/tracks/racket/config.json +10 -0
  244. data/tracks/racket/exercises/collatz-conjecture/README.md +58 -0
  245. data/tracks/racket/exercises/collatz-conjecture/collatz-conjecture-test.rkt +34 -0
  246. data/tracks/racket/exercises/collatz-conjecture/collatz-conjecture.rkt +6 -0
  247. data/tracks/racket/exercises/collatz-conjecture/example.rkt +20 -0
  248. data/tracks/ruby/exercises/allergies/.meta/.version +1 -0
  249. data/tracks/ruby/exercises/allergies/.meta/generator/allergies_case.rb +33 -0
  250. data/tracks/ruby/exercises/allergies/.meta/solutions/allergies.rb +4 -0
  251. data/tracks/ruby/exercises/allergies/allergies_test.rb +42 -9
  252. data/tracks/typescript/config.json +46 -0
  253. data/tracks/typescript/exercises/circular-buffer/README.md +74 -0
  254. data/tracks/typescript/exercises/circular-buffer/circular-buffer.example.ts +51 -0
  255. data/tracks/typescript/exercises/circular-buffer/circular-buffer.test.ts +103 -0
  256. data/tracks/typescript/exercises/circular-buffer/circular-buffer.ts +0 -0
  257. data/tracks/typescript/exercises/circular-buffer/package.json +36 -0
  258. data/tracks/typescript/exercises/circular-buffer/tsconfig.json +22 -0
  259. data/tracks/typescript/exercises/circular-buffer/tslint.json +127 -0
  260. data/tracks/typescript/exercises/circular-buffer/yarn.lock +2305 -0
  261. data/tracks/typescript/exercises/largest-series-product/README.md +51 -0
  262. data/tracks/typescript/exercises/largest-series-product/largest-series-product.example.ts +52 -0
  263. data/tracks/typescript/exercises/largest-series-product/largest-series-product.test.ts +68 -0
  264. data/tracks/typescript/exercises/largest-series-product/largest-series-product.ts +0 -0
  265. data/tracks/typescript/exercises/largest-series-product/package.json +36 -0
  266. data/tracks/typescript/exercises/largest-series-product/tsconfig.json +22 -0
  267. data/tracks/typescript/exercises/largest-series-product/tslint.json +127 -0
  268. data/tracks/typescript/exercises/largest-series-product/yarn.lock +2305 -0
  269. data/tracks/typescript/exercises/robot-simulator/README.md +58 -0
  270. data/tracks/typescript/exercises/robot-simulator/package.json +36 -0
  271. data/tracks/typescript/exercises/robot-simulator/robot-simulator.example.ts +74 -0
  272. data/tracks/typescript/exercises/robot-simulator/robot-simulator.test.ts +150 -0
  273. data/tracks/typescript/exercises/robot-simulator/robot-simulator.ts +0 -0
  274. data/tracks/typescript/exercises/robot-simulator/tsconfig.json +22 -0
  275. data/tracks/typescript/exercises/robot-simulator/tslint.json +127 -0
  276. data/tracks/typescript/exercises/robot-simulator/yarn.lock +2305 -0
  277. metadata +85 -23
@@ -1 +1,4 @@
1
- %{"poison": {:hex, :poison, "1.4.0", "cd5afb9db7f0d19487572fa28185b6d4de647f14235746824e77b3139b79b725", [], [], "hexpm"}}
1
+ %{
2
+ "dialyxir": {:hex, :dialyxir, "0.5.1", "b331b091720fd93e878137add264bac4f644e1ddae07a70bf7062c7862c4b952", [:mix], []},
3
+ "poison": {:hex, :poison, "1.4.0", "cd5afb9db7f0d19487572fa28185b6d4de647f14235746824e77b3139b79b725", [:mix], []},
4
+ }
@@ -9,6 +9,8 @@ Exercism exercises in Erlang
9
9
  For general information about how exercism works, please see the
10
10
  [contributing guide](https://github.com/exercism/x-api/blob/master/CONTRIBUTING.md#the-exercise-data).
11
11
 
12
+ If you create “claiming” PRs with obviously unfinished code, please provide an estimate in the PR description when you will continue to work on the PR or you think it will be finished.
13
+
12
14
  ### Setting up your system for local development on the track
13
15
 
14
16
  Please make sure you have installed erlang/OTP and `rebar3` as
@@ -20,4 +20,7 @@ let primes =
20
20
  yield! Seq.filter isPrime (possiblePrimes 6)
21
21
  }
22
22
 
23
- let nthPrime nth = Seq.item (nth - 1) primes
23
+ let prime nth : int option =
24
+ match nth with
25
+ | n when n < 1 -> None
26
+ | _ -> Some (Seq.item (nth - 1) primes)
@@ -1,3 +1,3 @@
1
1
  module NthPrime
2
2
 
3
- let nthPrime nth = failwith "You need to implement this function."
3
+ let prime nth : int option = failwith "You need to implement this function."
@@ -1,49 +1,29 @@
1
+ // This file was auto-generated based on version 1.0.0 of the canonical data.
2
+
1
3
  module NthPrimeTest
2
4
 
3
- open Xunit
4
5
  open FsUnit.Xunit
6
+ open Xunit
7
+
5
8
  open NthPrime
6
9
 
7
10
  [<Fact>]
8
11
  let ``First prime`` () =
9
- nthPrime 1 |> should equal 2
12
+ prime 1 |> should equal (Some 2)
10
13
 
11
14
  [<Fact(Skip = "Remove to run test")>]
12
15
  let ``Second prime`` () =
13
- nthPrime 2 |> should equal 3
14
-
15
- [<Fact(Skip = "Remove to run test")>]
16
- let ``Third prime`` () =
17
- nthPrime 3 |> should equal 5
18
-
19
- [<Fact(Skip = "Remove to run test")>]
20
- let ``4th prime`` () =
21
- nthPrime 4 |> should equal 7
16
+ prime 2 |> should equal (Some 3)
22
17
 
23
18
  [<Fact(Skip = "Remove to run test")>]
24
- let ``5th prime`` () =
25
- nthPrime 5 |> should equal 11
19
+ let ``Sixth prime`` () =
20
+ prime 6 |> should equal (Some 13)
26
21
 
27
22
  [<Fact(Skip = "Remove to run test")>]
28
- let ``6th prime`` () =
29
- nthPrime 6 |> should equal 13
23
+ let ``Big prime`` () =
24
+ prime 10001 |> should equal (Some 104743)
30
25
 
31
26
  [<Fact(Skip = "Remove to run test")>]
32
- let ``7th prime`` () =
33
- nthPrime 7 |> should equal 17
27
+ let ``There is no zeroth prime`` () =
28
+ prime 0 |> should equal None
34
29
 
35
- [<Fact(Skip = "Remove to run test")>]
36
- let ``8th prime`` () =
37
- nthPrime 8 |> should equal 19
38
-
39
- [<Fact(Skip = "Remove to run test")>]
40
- let ``1000th prime`` () =
41
- nthPrime 1000 |> should equal 7919
42
-
43
- [<Fact(Skip = "Remove to run test")>]
44
- let ``10000th prime`` () =
45
- nthPrime 10000 |> should equal 104729
46
-
47
- [<Fact(Skip = "Remove to run test")>]
48
- let ``10001th prime`` () =
49
- nthPrime 10001 |> should equal 104743
@@ -1,4 +1,4 @@
1
- // This file was auto-generated based on version 1.2.0 of the canonical data.
1
+ // This file was auto-generated based on version 1.3.0 of the canonical data.
2
2
 
3
3
  module PangramTest
4
4
 
@@ -24,8 +24,8 @@ let ``Missing character 'x'`` () =
24
24
  isPangram "a quick movement of the enemy will jeopardize five gunboats" |> should equal false
25
25
 
26
26
  [<Fact(Skip = "Remove to run test")>]
27
- let ``Another missing character 'x'`` () =
28
- isPangram "the quick brown fish jumps over the lazy dog" |> should equal false
27
+ let ``Another missing character, e.g. 'h'`` () =
28
+ isPangram "five boxing wizards jump quickly at it" |> should equal false
29
29
 
30
30
  [<Fact(Skip = "Remove to run test")>]
31
31
  let ``Pangram with underscores`` () =
@@ -1,11 +1,14 @@
1
1
  module PerfectNumbers
2
2
 
3
- type Classification = Perfect | Abundant | Deficient
3
+ type Classification = Perfect | Abundant | Deficient
4
4
 
5
5
  let sumOfFactors n = [for x in 1..n / 2 do if n % x = 0 then yield x] |> List.sum
6
6
 
7
- let classify n =
8
- match sumOfFactors n with
9
- | x when x = n -> Perfect
10
- | x when x < n -> Deficient
11
- | _ -> Abundant
7
+ let classify n : Classification option =
8
+ match n with
9
+ | x when x <= 0 -> None
10
+ | _ ->
11
+ match sumOfFactors n with
12
+ | x when x = n -> Some Perfect
13
+ | x when x < n -> Some Deficient
14
+ | _ -> Some Abundant
@@ -2,4 +2,4 @@
2
2
 
3
3
  type Classification = Perfect | Abundant | Deficient
4
4
 
5
- let classify n = failwith "You need to implement this function."
5
+ let classify n : Classification option = failwith "You need to implement this function."
@@ -1,27 +1,61 @@
1
+ // This file was auto-generated based on version 1.0.1 of the canonical data.
2
+
1
3
  module PerfectNumbersTest
2
4
 
3
- open Xunit
4
5
  open FsUnit.Xunit
6
+ open Xunit
5
7
 
6
8
  open PerfectNumbers
7
9
 
8
- [<Theory(Skip = "Remove to run test")>]
9
- [<InlineData(3)>]
10
- [<InlineData(7)>]
11
- [<InlineData(13)>]
12
- let ``Can classify deficient numbers`` (number) =
13
- classify number |> should equal Deficient
14
-
15
- [<Theory(Skip = "Remove to run test")>]
16
- [<InlineData(6)>]
17
- [<InlineData(28)>]
18
- [<InlineData(496)>]
19
- let ``Can classify perfect numbers`` (number) =
20
- classify number |> should equal Perfect
21
-
22
- [<Theory(Skip = "Remove to run test")>]
23
- [<InlineData(12)>]
24
- [<InlineData(18)>]
25
- [<InlineData(20)>]
26
- let ``Can classify abundant numbers`` (number) =
27
- classify number |> should equal Abundant
10
+ [<Fact>]
11
+ let ``Smallest perfect number is classified correctly`` () =
12
+ classify 6 |> should equal (Some Perfect)
13
+
14
+ [<Fact(Skip = "Remove to run test")>]
15
+ let ``Medium perfect number is classified correctly`` () =
16
+ classify 28 |> should equal (Some Perfect)
17
+
18
+ [<Fact(Skip = "Remove to run test")>]
19
+ let ``Large perfect number is classified correctly`` () =
20
+ classify 33550336 |> should equal (Some Perfect)
21
+
22
+ [<Fact(Skip = "Remove to run test")>]
23
+ let ``Smallest abundant number is classified correctly`` () =
24
+ classify 12 |> should equal (Some Abundant)
25
+
26
+ [<Fact(Skip = "Remove to run test")>]
27
+ let ``Medium abundant number is classified correctly`` () =
28
+ classify 30 |> should equal (Some Abundant)
29
+
30
+ [<Fact(Skip = "Remove to run test")>]
31
+ let ``Large abundant number is classified correctly`` () =
32
+ classify 33550335 |> should equal (Some Abundant)
33
+
34
+ [<Fact(Skip = "Remove to run test")>]
35
+ let ``Smallest prime deficient number is classified correctly`` () =
36
+ classify 2 |> should equal (Some Deficient)
37
+
38
+ [<Fact(Skip = "Remove to run test")>]
39
+ let ``Smallest non-prime deficient number is classified correctly`` () =
40
+ classify 4 |> should equal (Some Deficient)
41
+
42
+ [<Fact(Skip = "Remove to run test")>]
43
+ let ``Medium deficient number is classified correctly`` () =
44
+ classify 32 |> should equal (Some Deficient)
45
+
46
+ [<Fact(Skip = "Remove to run test")>]
47
+ let ``Large deficient number is classified correctly`` () =
48
+ classify 33550337 |> should equal (Some Deficient)
49
+
50
+ [<Fact(Skip = "Remove to run test")>]
51
+ let ``Edge case (no factors other than itself) is classified correctly`` () =
52
+ classify 1 |> should equal (Some Deficient)
53
+
54
+ [<Fact(Skip = "Remove to run test")>]
55
+ let ``Zero is rejected (not a natural number)`` () =
56
+ classify 0 |> should equal None
57
+
58
+ [<Fact(Skip = "Remove to run test")>]
59
+ let ``Negative integer is rejected (not a natural number)`` () =
60
+ classify -1 |> should equal None
61
+
@@ -176,8 +176,26 @@ type Minesweeper() =
176
176
  | true -> Some "string list"
177
177
  | false -> None
178
178
 
179
+ type NthPrime() =
180
+ inherit Exercise()
181
+
182
+ override this.RenderExpected (canonicalDataCase, key, value) =
183
+ match string value with
184
+ | "False" -> "None"
185
+ | _ -> value :?> int64 |> sprintf "(Some %d)"
186
+
179
187
  type Pangram() =
180
188
  inherit Exercise()
189
+
190
+ type PerfectNumbers() =
191
+ inherit Exercise()
192
+
193
+ override this.RenderExpected (canonicalDataCase, key, value) =
194
+ match value |> string with
195
+ | "perfect" -> "(Some Perfect)"
196
+ | "abundant" -> "(Some Abundant)"
197
+ | "deficient" -> "(Some Deficient)"
198
+ | _ -> "None"
181
199
 
182
200
  type PhoneNumber() =
183
201
  inherit Exercise()
@@ -17,6 +17,27 @@
17
17
  "core": true,
18
18
  "difficulty": 1,
19
19
  "topics": ["conditions", "dates"]
20
+ },
21
+ {
22
+ "uuid": "bc2c01ff-0e38-b280-5047-2014e184502c67074c0",
23
+ "slug": "hamming",
24
+ "core": true,
25
+ "difficulty": 1,
26
+ "topics": ["strings", "arrays", "differences"]
27
+ },
28
+ {
29
+ "uuid": "05764380-02d5-2a80-0741-3baa1e10b36b61333ec",
30
+ "slug": "rna-transcription",
31
+ "core": true,
32
+ "difficulty": 1,
33
+ "topics": ["strings", "arrays", "substitution", "error handling"]
34
+ },
35
+ {
36
+ "uuid": "17c7a5fc-0666-8780-a4f6-fe32a590bb970725b2e",
37
+ "slug": "raindrops",
38
+ "core": true,
39
+ "difficulty": 1,
40
+ "topics": ["strings", "residue", "conditions"]
20
41
  }
21
42
  ],
22
43
  "deprecated": [
@@ -0,0 +1,42 @@
1
+ # Hamming
2
+
3
+ Calculate the Hamming difference between two DNA strands.
4
+
5
+ A mutation is simply a mistake that occurs during the creation or
6
+ copying of a nucleic acid, in particular DNA. Because nucleic acids are
7
+ vital to cellular functions, mutations tend to cause a ripple effect
8
+ throughout the cell. Although mutations are technically mistakes, a very
9
+ rare mutation may equip the cell with a beneficial attribute. In fact,
10
+ the macro effects of evolution are attributable by the accumulated
11
+ result of beneficial microscopic mutations over many generations.
12
+
13
+ The simplest and most common type of nucleic acid mutation is a point
14
+ mutation, which replaces one base with another at a single nucleotide.
15
+
16
+ By counting the number of differences between two homologous DNA strands
17
+ taken from different genomes with a common ancestor, we get a measure of
18
+ the minimum number of point mutations that could have occurred on the
19
+ evolutionary path between the two strands.
20
+
21
+ This is called the 'Hamming distance'.
22
+
23
+ It is found by comparing two DNA strands and counting how many of the
24
+ nucleotides are different from their equivalent in the other string.
25
+
26
+ GAGCCTACTAACGGGAT
27
+ CATCGTAATGACGGCCT
28
+ ^ ^ ^ ^ ^ ^^
29
+
30
+ The Hamming distance between these two DNA strands is 7.
31
+
32
+ # Implementation notes
33
+
34
+ The Hamming distance is only defined for sequences of equal length. This means
35
+ that based on the definition, each language could deal with getting sequences
36
+ of equal length differently.
37
+ ## Source
38
+
39
+ The Calculating Point Mutations problem at Rosalind [http://rosalind.info/problems/hamm/](http://rosalind.info/problems/hamm/)
40
+
41
+ ## Submitting Incomplete Solutions
42
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env apl --script
2
+
3
+ ∇z←x distance y
4
+ z←↑∊+/(∊x)≠¨∊y
5
+
@@ -0,0 +1,75 @@
1
+ log←'./hamming.tc.log'
2
+ ⍎ ')COPY ',(⎕FIO 30),'/../../test.apl'
3
+
4
+ test∆copy_relative 'hamming.apl'
5
+ test∆clear_log log
6
+
7
+ ⍝ ∇distance
8
+
9
+ ⍝ empty strands
10
+ 1⎕CR '' distance ''
11
+ 0
12
+
13
+ ⍝ identical strands
14
+ 1⎕CR 'A' distance 'A'
15
+ 0
16
+
17
+ ⍝ long identical strands
18
+ 1⎕CR 'GGACTGA' distance 'GGACTGA'
19
+ 0
20
+
21
+ ⍝ complete distance in single-nucleotide strands
22
+ 1⎕CR 'A' distance 'G'
23
+ 1
24
+
25
+ ⍝ complete distance in small strands
26
+ 'AG' distance 'CT'
27
+ 2
28
+
29
+ ⍝ small distance in small strands
30
+ 'AT' distance 'CT'
31
+ 1
32
+
33
+ ⍝ small distance
34
+ 'GGACG' distance 'GGTCG'
35
+ 1
36
+
37
+ ⍝ small distance in long strands
38
+ 'ACCAGGG' distance 'ACTATGG'
39
+ 2
40
+
41
+ ⍝ non-unique character in first strand
42
+ 'AGA' distance 'AGG'
43
+ 1
44
+
45
+ ⍝ non-unique character in second strand
46
+ 'AGG' distance 'AGA'
47
+ 1
48
+
49
+ ⍝ same nucleotides in different positions
50
+ 'TAG' distance 'GAT'
51
+ 2
52
+
53
+ ⍝ large distance
54
+ 'GATACA' distance 'GCATAA'
55
+ 4
56
+
57
+ ⍝ large distance in off-by-one strand
58
+ 'GGACGGATTCTG' distance 'AGGACGGATTCT'
59
+ 9
60
+
61
+ ⍝ disallow first strand longer
62
+ 1⎕CR test∆try '''AATG'' distance ''AAA'''
63
+ 1 'LENGTH ERROR'
64
+
65
+ ⍝ disallow single vs. multiple letters
66
+ 1⎕CR test∆try '''AATG'' distance ''A'''
67
+ 1 'LENGTH ERROR'
68
+ 1⎕CR test∆try '''A'' distance ''AAA'''
69
+ 1 'LENGTH ERROR'
70
+
71
+ ⍝ disallow second strand longer
72
+ 1⎕CR test∆try '''ATA'' distance ''AGTG'''
73
+ 1 'LENGTH ERROR'
74
+
75
+ test∆show_log log
@@ -1,5 +1,21 @@
1
- #
1
+ # Hello World
2
2
 
3
+ The classical introductory exercise. Just say "Hello, World!".
4
+
5
+ ["Hello, World!"](http://en.wikipedia.org/wiki/%22Hello,_world!%22_program) is
6
+ the traditional first program for beginning programming in a new language
7
+ or environment.
8
+
9
+ The objectives are simple:
10
+
11
+ - Write a function that returns the string "Hello, World!".
12
+ - Run the test suite and make sure that it succeeds.
13
+ - Submit your solution and check it at the website.
14
+
15
+ If everything goes well, you will be ready to fetch your first real exercise.
16
+ ## Source
17
+
18
+ This is an exercise to introduce users to using Exercism [http://en.wikipedia.org/wiki/%22Hello,_world!%22_program](http://en.wikipedia.org/wiki/%22Hello,_world!%22_program)
3
19
 
4
20
  ## Submitting Incomplete Solutions
5
21
  It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,33 @@
1
+ # Leap
2
+
3
+ Given a year, report if it is a leap year.
4
+
5
+ The tricky thing here is that a leap year in the Gregorian calendar occurs:
6
+
7
+ ```plain
8
+ on every year that is evenly divisible by 4
9
+ except every year that is evenly divisible by 100
10
+ unless the year is also evenly divisible by 400
11
+ ```
12
+
13
+ For example, 1997 is not a leap year, but 1996 is. 1900 is not a leap
14
+ year, but 2000 is.
15
+
16
+ If your language provides a method in the standard library that does
17
+ this look-up, pretend it doesn't exist and implement it yourself.
18
+
19
+ ## Notes
20
+
21
+ Though our exercise adopts some very simple rules, there is more to
22
+ learn!
23
+
24
+ For a delightful, four minute explanation of the whole leap year
25
+ phenomenon, go watch [this youtube video][video].
26
+
27
+ [video]: http://www.youtube.com/watch?v=xX96xng7sAE
28
+ ## Source
29
+
30
+ JavaRanch Cattle Drive, exercise 3 [http://www.javaranch.com/leap.jsp](http://www.javaranch.com/leap.jsp)
31
+
32
+ ## Submitting Incomplete Solutions
33
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.