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
@@ -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,