trackler 2.2.1.47 → 2.2.1.48

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 (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
@@ -0,0 +1,24 @@
1
+ # Raindrops
2
+
3
+ Convert a number to a string, the contents of which depend on the number's factors.
4
+
5
+ - If the number has 3 as a factor, output 'Pling'.
6
+ - If the number has 5 as a factor, output 'Plang'.
7
+ - If the number has 7 as a factor, output 'Plong'.
8
+ - If the number does not have 3, 5, or 7 as a factor,
9
+ just pass the number's digits straight through.
10
+
11
+ ## Examples
12
+
13
+ - 28's factors are 1, 2, 4, **7**, 14, 28.
14
+ - In raindrop-speak, this would be a simple "Plong".
15
+ - 30's factors are 1, 2, **3**, **5**, 6, 10, 15, 30.
16
+ - In raindrop-speak, this would be a "PlingPlang".
17
+ - 34 has four factors: 1, 2, 17, and 34.
18
+ - In raindrop-speak, this would be "34".
19
+ ## Source
20
+
21
+ A variation on a famous interview question intended to weed out potential candidates. [http://jumpstartlab.com](http://jumpstartlab.com)
22
+
23
+ ## Submitting Incomplete Solutions
24
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env apl --script
2
+
3
+ ∇drops←convert integer;factors;sounds;multiple_of
4
+ factors←3 5 7
5
+ sounds←('Pling' 'Plang' 'Plong')
6
+ multiple_of←0=factors|integer
7
+ drops←∊(multiple_of,∧/0=multiple_of)/sounds,⊂⍕integer
8
+
@@ -0,0 +1,60 @@
1
+ log←'./raindrops.tc.log'
2
+ ⍎ ')COPY ',(⎕FIO 30),'/../../test.apl'
3
+
4
+ test∆copy_relative 'raindrops.apl'
5
+ test∆clear_log log
6
+
7
+ ⍝ ∇convert
8
+ ⍝ Given an integer, returns a string representation of that integer's "raindrop sound", based on its prime factors.
9
+
10
+ ⍝ the sound for 1 is '1'
11
+ 1⎕CR convert 1
12
+ '1'
13
+
14
+ ⍝ the sound for multiples of 3 is 'Pling'
15
+ convert 3
16
+ Pling
17
+ convert 6
18
+ Pling
19
+
20
+ ⍝ the sound for multiples of 5 is 'Plang'
21
+ convert 5
22
+ Plang
23
+ convert 10
24
+ Plang
25
+
26
+ ⍝ the sound for multiples of 7 is 'Plong'
27
+ convert 7
28
+ Plong
29
+ convert 14
30
+ Plong
31
+
32
+ ⍝ the sound for numbers that aren't multiples of 3, 5, or 7 is the stringified number
33
+ 1⎕CR convert 8
34
+ '8'
35
+ 1⎕CR convert 52
36
+ '52'
37
+
38
+ ⍝ the sound for numbers that have multiple raindrop factors is the combination of all the sounds
39
+ convert 15 ⍝ 3×5
40
+ PlingPlang
41
+ convert 21 ⍝ 3×7
42
+ PlingPlong
43
+ convert 35 ⍝ 5×7
44
+ PlangPlong
45
+ 1⎕CR convert 105 ⍝ 3×5×7
46
+ 'PlingPlangPlong'
47
+
48
+ ⍝ the sound for squares of a raindrop factor is only the single sound
49
+ convert 9 ⍝ 3×3
50
+ Pling
51
+ convert 25 ⍝ 5×5
52
+ Plang
53
+ convert 49 ⍝ 7×7
54
+ Plong
55
+ convert 27 ⍝ 3*3
56
+ Pling
57
+ convert 3125 ⍝ 5*5
58
+ Plang
59
+
60
+ test∆show_log log
@@ -0,0 +1,25 @@
1
+ # Rna Transcription
2
+
3
+ Given a DNA strand, return its RNA complement (per RNA transcription).
4
+
5
+ Both DNA and RNA strands are a sequence of nucleotides.
6
+
7
+ The four nucleotides found in DNA are adenine (**A**), cytosine (**C**),
8
+ guanine (**G**) and thymine (**T**).
9
+
10
+ The four nucleotides found in RNA are adenine (**A**), cytosine (**C**),
11
+ guanine (**G**) and uracil (**U**).
12
+
13
+ Given a DNA strand, its transcribed RNA strand is formed by replacing
14
+ each nucleotide with its complement:
15
+
16
+ * `G` -> `C`
17
+ * `C` -> `G`
18
+ * `T` -> `A`
19
+ * `A` -> `U`
20
+ ## Source
21
+
22
+ Rosalind [http://rosalind.info/problems/rna](http://rosalind.info/problems/rna)
23
+
24
+ ## Submitting Incomplete Solutions
25
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env apl --script
2
+
3
+ ∇rna←to_rna dna;dna_bases;rna_bases
4
+ dna_bases←'CGTA'
5
+ rna_bases←'GCAU'
6
+ '1÷0' ⎕EA 'rna←rna_bases[dna_bases⍳dna]' ⍝ throw a domain error if not found
7
+
@@ -0,0 +1,41 @@
1
+ log←'./rna-transcription.tc.log'
2
+ ⍎ ')COPY ',(⎕FIO 30),'/../../test.apl'
3
+
4
+ test∆copy_relative 'rna-transcription.apl'
5
+ test∆clear_log log
6
+
7
+ ⍝ ∇to_rna
8
+
9
+ ⍝ RNA complement of cytosine is guanine
10
+ 1⎕CR to_rna 'C'
11
+ 'G'
12
+
13
+ ⍝ RNA complement of guanine is cytosine
14
+ to_rna 'G'
15
+ C
16
+
17
+ ⍝ RNA complement of thymine is adenine
18
+ to_rna 'T'
19
+ A
20
+
21
+ ⍝ RNA complement of adenine is uracil
22
+ to_rna 'A'
23
+ U
24
+
25
+ ⍝ RNA complement of entire string
26
+ 1⎕CR to_rna 'ACGTGGTCTTAA'
27
+ 'UGCACCAGAAUU'
28
+
29
+ ⍝ invalid input (RNA instead of DNA) throws domain error
30
+ 1⎕CR test∆try 'to_rna "U"'
31
+ 1 'DOMAIN ERROR'
32
+
33
+ ⍝ completely invalid DNA input throws domain error
34
+ 1⎕CR test∆try 'to_rna "XXX"'
35
+ 1 'DOMAIN ERROR'
36
+
37
+ ⍝ partially invalid DNA input throws domain error
38
+ 1⎕CR test∆try 'to_rna "ACGTXXXCTTAA"'
39
+ 1 'DOMAIN ERROR'
40
+
41
+ test∆show_log log
@@ -18,6 +18,19 @@
18
18
  test¯warn test¯read_unicode filename
19
19
 
20
20
 
21
+ ⍝ Evaluate APL code (as string).
22
+ ⍝ Returns 2-element vector:
23
+ ⍝ [1] Boolean (1 if error, 0 if not).
24
+ ⍝ [2] Error message if error; original result if not.
25
+ ∇z←test∆try apl_string;response;is_error;result
26
+ response←⎕EC apl_string
27
+ is_error←0=1⊃response
28
+ result←3⊃response
29
+ →(~is_error)/return
30
+ result←result[1;]
31
+ return: z←is_error result
32
+
33
+
21
34
  ⍝ private
22
35
 
23
36
  ⍝ Return current directory as a string.
@@ -77,6 +77,15 @@
77
77
  "topics": [
78
78
  ]
79
79
  },
80
+ {
81
+ "uuid": "cd5ce9ad-b627-46e3-b6d8-872baf476bf1",
82
+ "slug": "rotational-cipher",
83
+ "core": false,
84
+ "unlocked_by": null,
85
+ "difficulty": 1,
86
+ "topics": [
87
+ ]
88
+ },
80
89
  {
81
90
  "uuid": "85d77b8e-9b87-4d02-9fba-81f843bd66f1",
82
91
  "slug": "rna-transcription",
@@ -0,0 +1,91 @@
1
+ # Rotational Cipher
2
+
3
+ Create an implementation of the rotational cipher, also sometimes called the Caesar cipher.
4
+
5
+ The Caesar cipher is a simple shift cipher that relies on
6
+ transposing all the letters in the alphabet using an integer key
7
+ between `0` and `26`. Using a key of `0` or `26` will always yield
8
+ the same output due to modular arithmetic. The letter is shifted
9
+ for as many values as the value of the key.
10
+
11
+ The general notation for rotational ciphers is `ROT + <key>`.
12
+ The most commonly used rotational cipher is `ROT13`.
13
+
14
+ A `ROT13` on the Latin alphabet would be as follows:
15
+
16
+ ```text
17
+ Plain: abcdefghijklmnopqrstuvwxyz
18
+ Cipher: nopqrstuvwxyzabcdefghijklm
19
+ ```
20
+
21
+ It is stronger than the Atbash cipher because it has 27 possible keys, and 25 usable keys.
22
+
23
+ Ciphertext is written out in the same formatting as the input including spaces and punctuation.
24
+
25
+ ## Examples
26
+
27
+ - ROT5 `omg` gives `trl`
28
+ - ROT0 `c` gives `c`
29
+ - ROT26 `Cool` gives `Cool`
30
+ - ROT13 `The quick brown fox jumps over the lazy dog.` gives `Gur dhvpx oebja sbk whzcf bire gur ynml qbt.`
31
+ - ROT13 `Gur dhvpx oebja sbk whzcf bire gur ynml qbt.` gives `The quick brown fox jumps over the lazy dog.`
32
+
33
+
34
+ ## Getting Started
35
+
36
+ For installation and learning resources, refer to the
37
+ [exercism help page](http://exercism.io/languages/haskell).
38
+
39
+ ## Running the tests
40
+
41
+ To run the test suite, execute the following command:
42
+
43
+ ```bash
44
+ stack test
45
+ ```
46
+
47
+ #### If you get an error message like this...
48
+
49
+ ```
50
+ No .cabal file found in directory
51
+ ```
52
+
53
+ You are probably running an old stack version and need
54
+ to upgrade it.
55
+
56
+ #### Otherwise, if you get an error message like this...
57
+
58
+ ```
59
+ No compiler found, expected minor version match with...
60
+ Try running "stack setup" to install the correct GHC...
61
+ ```
62
+
63
+ Just do as it says and it will download and install
64
+ the correct compiler version:
65
+
66
+ ```bash
67
+ stack setup
68
+ ```
69
+
70
+ ## Running *GHCi*
71
+
72
+ If you want to play with your solution in GHCi, just run the command:
73
+
74
+ ```bash
75
+ stack ghci
76
+ ```
77
+
78
+ ## Feedback, Issues, Pull Requests
79
+
80
+ The [exercism/haskell](https://github.com/exercism/haskell) repository on
81
+ GitHub is the home for all of the Haskell exercises.
82
+
83
+ If you have feedback about an exercise, or want to help implementing a new
84
+ one, head over there and create an issue. We'll do our best to help you!
85
+
86
+ ## Source
87
+
88
+ Wikipedia [https://en.wikipedia.org/wiki/Caesar_cipher](https://en.wikipedia.org/wiki/Caesar_cipher)
89
+
90
+ ## Submitting Incomplete Solutions
91
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,16 @@
1
+ name: rotational-cipher
2
+
3
+ dependencies:
4
+ - base
5
+
6
+ library:
7
+ exposed-modules: RotationalCipher
8
+ source-dirs: src
9
+
10
+ tests:
11
+ test:
12
+ main: Tests.hs
13
+ source-dirs: test
14
+ dependencies:
15
+ - rotational-cipher
16
+ - hspec
@@ -0,0 +1,9 @@
1
+ module RotationalCipher (rotate) where
2
+
3
+ import Data.List (elemIndex)
4
+
5
+ rotate :: Int -> String -> String
6
+ rotate r = map (f r ['a'..'z'] . f r ['A'..'Z'])
7
+ where f x abc e = case elemIndex e abc of
8
+ Nothing -> e
9
+ Just a -> abc!!mod (a+x) 26
@@ -0,0 +1,20 @@
1
+ name: rotational-cipher
2
+ version: 1.1.0.1
3
+
4
+ dependencies:
5
+ - base
6
+
7
+ library:
8
+ exposed-modules: RotationalCipher
9
+ source-dirs: src
10
+ dependencies:
11
+ # - foo # List here the packages you
12
+ # - bar # want to use in your solution.
13
+
14
+ tests:
15
+ test:
16
+ main: Tests.hs
17
+ source-dirs: test
18
+ dependencies:
19
+ - rotational-cipher
20
+ - hspec
@@ -0,0 +1,4 @@
1
+ module RotationalCipher (rotate) where
2
+
3
+ rotate :: Int -> String -> String
4
+ rotate = error "You need to implement this function."
@@ -0,0 +1 @@
1
+ resolver: lts-8.21
@@ -0,0 +1,77 @@
1
+ {-# LANGUAGE RecordWildCards #-}
2
+
3
+ import Data.Foldable (for_)
4
+ import Test.Hspec (Spec, describe, it, shouldBe)
5
+ import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)
6
+
7
+ import RotationalCipher (rotate)
8
+
9
+ main :: IO ()
10
+ main = hspecWith defaultConfig {configFastFail = True} specs
11
+
12
+ specs :: Spec
13
+ specs = describe "rotate" $ for_ cases test
14
+ where
15
+
16
+ test Case{..} = it description assertion
17
+ where
18
+ assertion = rotate number phrase `shouldBe` expected
19
+
20
+ data Case = Case { description :: String
21
+ , number :: Int
22
+ , phrase :: String
23
+ , expected :: String
24
+ }
25
+
26
+ cases :: [Case]
27
+ cases = [ Case { description = "rotate a by 0, same output as input"
28
+ , number = 0
29
+ , phrase = "a"
30
+ , expected = "a"
31
+ }
32
+ , Case { description = "rotate a by 1"
33
+ , number = 1
34
+ , phrase = "a"
35
+ , expected = "b"
36
+ }
37
+ , Case { description = "rotate a by 26, same output as input"
38
+ , number = 26
39
+ , phrase = "a"
40
+ , expected = "a"
41
+ }
42
+ , Case { description = "rotate m by 13"
43
+ , number = 13
44
+ , phrase = "m"
45
+ , expected = "z"
46
+ }
47
+ , Case { description = "rotate n by 13 with wrap around alphabet"
48
+ , number = 13
49
+ , phrase = "n"
50
+ , expected = "a"
51
+ }
52
+ , Case { description = "rotate capital letters"
53
+ , number = 5
54
+ , phrase = "OMG"
55
+ , expected = "TRL"
56
+ }
57
+ , Case { description = "rotate spaces"
58
+ , number = 5
59
+ , phrase = "O M G"
60
+ , expected = "T R L"
61
+ }
62
+ , Case { description = "rotate numbers"
63
+ , number = 4
64
+ , phrase = "Testing 1 2 3 testing"
65
+ , expected = "Xiwxmrk 1 2 3 xiwxmrk"
66
+ }
67
+ , Case { description = "rotate punctuation"
68
+ , number = 21
69
+ , phrase = "Let's eat, Grandma!"
70
+ , expected = "Gzo'n zvo, Bmviyhv!"
71
+ }
72
+ , Case { description = "rotate all letters"
73
+ , number = 13
74
+ , phrase = "The quick brown fox jumps over the lazy dog."
75
+ , expected = "Gur dhvpx oebja sbk whzcf bire gur ynml qbt."
76
+ }
77
+ ]
@@ -214,7 +214,12 @@
214
214
  "core": true,
215
215
  "difficulty": 4,
216
216
  "slug": "triangle",
217
- "topics": null,
217
+ "topics": [
218
+ "booleans",
219
+ "classes",
220
+ "exception_handling",
221
+ "mathematics"
222
+ ],
218
223
  "unlocked_by": null,
219
224
  "uuid": "ec268d8e-997b-4553-8c67-8bdfa1ecb888"
220
225
  },
@@ -654,18 +659,6 @@
654
659
  "unlocked_by": "word-count",
655
660
  "uuid": "76d28d97-75d3-47eb-bb77-3d347b76f1b6"
656
661
  },
657
- {
658
- "core": true,
659
- "difficulty": 6,
660
- "slug": "linked-list",
661
- "topics": [
662
- "algorithms",
663
- "lists",
664
- "generics"
665
- ],
666
- "unlocked_by": null,
667
- "uuid": "7ba5084d-3b75-4406-a0d7-87c26387f9c0"
668
- },
669
662
  {
670
663
  "core": false,
671
664
  "difficulty": 6,
@@ -752,7 +745,11 @@
752
745
  "core": true,
753
746
  "difficulty": 6,
754
747
  "slug": "bank-account",
755
- "topics": null,
748
+ "topics": [
749
+ "concurrency",
750
+ "exception_handling",
751
+ "integers"
752
+ ],
756
753
  "unlocked_by": null,
757
754
  "uuid": "a242efc5-159d-492b-861d-12a1459fb334"
758
755
  },
@@ -764,6 +761,18 @@
764
761
  "unlocked_by": "scrabble-score",
765
762
  "uuid": "4b3f7771-c642-4278-a3d9-2fb958f26361"
766
763
  },
764
+ {
765
+ "core": true,
766
+ "difficulty": 6,
767
+ "slug": "linked-list",
768
+ "topics": [
769
+ "algorithms",
770
+ "lists",
771
+ "generics"
772
+ ],
773
+ "unlocked_by": null,
774
+ "uuid": "7ba5084d-3b75-4406-a0d7-87c26387f9c0"
775
+ },
767
776
  {
768
777
  "core": false,
769
778
  "difficulty": 6,