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.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/problem-specifications/exercises/pangram/canonical-data.json +3 -3
- data/tracks/common-lisp/.travis.yml +2 -9
- data/tracks/common-lisp/docs/TESTS.md +43 -9
- data/tracks/delphi/exercises/nucleotide-count/uNucleotideCountTest.pas +2 -2
- data/tracks/elixir/.travis.yml +4 -7
- data/tracks/elixir/README.md +2 -6
- data/tracks/elixir/bin/dialyzer_check.sh +2 -13
- data/tracks/elixir/exercises/allergies/example.exs +3 -2
- data/tracks/elixir/exercises/atbash-cipher/example.exs +5 -5
- data/tracks/elixir/exercises/bank-account/example.exs +11 -11
- data/tracks/elixir/exercises/bob/example.exs +4 -4
- data/tracks/elixir/exercises/forth/example.exs +66 -48
- data/tracks/elixir/exercises/minesweeper/example.exs +31 -18
- data/tracks/elixir/exercises/pangram/example.exs +4 -4
- data/tracks/elixir/exercises/queen-attack/queen_attack_test.exs +68 -53
- data/tracks/elixir/exercises/say/example.exs +33 -31
- data/tracks/elixir/exercises/scrabble-score/example.exs +12 -11
- data/tracks/elixir/mix.exs +10 -7
- data/tracks/elixir/mix.lock +4 -1
- data/tracks/erlang/README.md +2 -0
- data/tracks/fsharp/exercises/nth-prime/Example.fs +4 -1
- data/tracks/fsharp/exercises/nth-prime/NthPrime.fs +1 -1
- data/tracks/fsharp/exercises/nth-prime/NthPrimeTest.fs +12 -32
- data/tracks/fsharp/exercises/pangram/PangramTest.fs +3 -3
- data/tracks/fsharp/exercises/perfect-numbers/Example.fs +9 -6
- data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fs +1 -1
- data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbersTest.fs +55 -21
- data/tracks/fsharp/generators/Generators.fs +18 -0
- data/tracks/gnu-apl/config.json +21 -0
- data/tracks/gnu-apl/exercises/hamming/README.md +42 -0
- data/tracks/gnu-apl/exercises/hamming/hamming-example.apl +5 -0
- data/tracks/gnu-apl/exercises/hamming/hamming.tc +75 -0
- data/tracks/gnu-apl/exercises/hello-world/README.md +17 -1
- data/tracks/gnu-apl/exercises/leap/README.md +33 -0
- data/tracks/gnu-apl/exercises/raindrops/README.md +24 -0
- data/tracks/gnu-apl/exercises/raindrops/raindrops-example.apl +8 -0
- data/tracks/gnu-apl/exercises/raindrops/raindrops.tc +60 -0
- data/tracks/gnu-apl/exercises/rna-transcription/README.md +25 -0
- data/tracks/gnu-apl/exercises/rna-transcription/rna-transcription-example.apl +7 -0
- data/tracks/gnu-apl/exercises/rna-transcription/rna-transcription.tc +41 -0
- data/tracks/gnu-apl/test.apl +13 -0
- data/tracks/haskell/config.json +9 -0
- data/tracks/haskell/exercises/rotational-cipher/README.md +91 -0
- data/tracks/haskell/exercises/rotational-cipher/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/rotational-cipher/examples/success-standard/src/RotationalCipher.hs +9 -0
- data/tracks/haskell/exercises/rotational-cipher/package.yaml +20 -0
- data/tracks/haskell/exercises/rotational-cipher/src/RotationalCipher.hs +4 -0
- data/tracks/haskell/exercises/rotational-cipher/stack.yaml +1 -0
- data/tracks/haskell/exercises/rotational-cipher/test/Tests.hs +77 -0
- data/tracks/java/config.json +23 -14
- data/tracks/java/config/exercise-readme-insert.md +3 -3
- data/tracks/java/config/exercise_readme.go.tmpl +3 -0
- data/tracks/java/exercises/accumulate/README.md +4 -3
- data/tracks/java/exercises/acronym/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/acronym/README.md +4 -3
- data/tracks/java/exercises/all-your-base/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/all-your-base/README.md +4 -3
- data/tracks/java/exercises/allergies/README.md +4 -3
- data/tracks/java/exercises/anagram/README.md +4 -3
- data/tracks/java/exercises/atbash-cipher/README.md +4 -3
- data/tracks/java/exercises/bank-account/README.md +6 -3
- data/tracks/java/exercises/beer-song/README.md +4 -3
- data/tracks/java/exercises/binary-search-tree/.meta/src/reference/java/BinarySearchTree.java +38 -44
- data/tracks/java/exercises/binary-search-tree/README.md +4 -3
- data/tracks/java/exercises/binary-search-tree/src/main/java/BinarySearchTree.java +35 -0
- data/tracks/java/exercises/binary-search-tree/src/test/java/BinarySearchTreeTest.java +46 -40
- data/tracks/java/exercises/binary-search/.meta/hints.md +25 -0
- data/tracks/java/exercises/binary-search/.meta/src/reference/java/BinarySearch.java +3 -7
- data/tracks/java/exercises/binary-search/README.md +33 -3
- data/tracks/java/exercises/binary-search/src/test/java/BinarySearchTest.java +11 -11
- data/tracks/java/exercises/binary/README.md +4 -3
- data/tracks/java/exercises/bob/README.md +4 -3
- data/tracks/java/exercises/book-store/README.md +4 -3
- data/tracks/java/exercises/bowling/README.md +4 -3
- data/tracks/java/exercises/bracket-push/README.md +4 -3
- data/tracks/java/exercises/change/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/change/README.md +4 -3
- data/tracks/java/exercises/circular-buffer/README.md +4 -3
- data/tracks/java/exercises/clock/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/clock/README.md +6 -3
- data/tracks/java/exercises/collatz-conjecture/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/collatz-conjecture/README.md +4 -3
- data/tracks/java/exercises/complex-numbers/README.md +4 -3
- data/tracks/java/exercises/crypto-square/README.md +4 -3
- data/tracks/java/exercises/{rna-transcription/.meta/.version → custom-set/.meta/version} +0 -0
- data/tracks/java/exercises/custom-set/README.md +4 -3
- data/tracks/java/exercises/custom-set/src/test/java/CustomSetTest.java +103 -251
- data/tracks/java/exercises/diamond/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/diamond/README.md +4 -3
- data/tracks/java/exercises/difference-of-squares/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/difference-of-squares/README.md +4 -3
- data/tracks/java/exercises/etl/README.md +4 -3
- data/tracks/java/exercises/flatten-array/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/flatten-array/README.md +4 -3
- data/tracks/java/exercises/food-chain/README.md +4 -3
- data/tracks/java/exercises/forth/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/forth/README.md +3 -3
- data/tracks/java/exercises/gigasecond/README.md +4 -3
- data/tracks/java/exercises/grade-school/README.md +4 -3
- data/tracks/java/exercises/hamming/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/hamming/README.md +6 -3
- data/tracks/java/exercises/hello-world/README.md +6 -3
- data/tracks/java/exercises/hexadecimal/README.md +4 -3
- data/tracks/java/exercises/house/README.md +4 -3
- data/tracks/java/exercises/isogram/README.md +6 -3
- data/tracks/java/exercises/kindergarten-garden/README.md +4 -3
- data/tracks/java/exercises/largest-series-product/README.md +4 -3
- data/tracks/java/exercises/linked-list/README.md +4 -3
- data/tracks/java/exercises/list-ops/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/list-ops/README.md +6 -3
- data/tracks/java/exercises/luhn/README.md +4 -3
- data/tracks/java/exercises/matrix/README.md +4 -3
- data/tracks/java/exercises/meetup/README.md +4 -3
- data/tracks/java/exercises/minesweeper/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/minesweeper/README.md +4 -3
- data/tracks/java/exercises/nth-prime/README.md +4 -3
- data/tracks/java/exercises/nucleotide-count/README.md +4 -3
- data/tracks/java/exercises/ocr-numbers/README.md +4 -3
- data/tracks/java/exercises/octal/README.md +4 -3
- data/tracks/java/exercises/palindrome-products/README.md +4 -3
- data/tracks/java/exercises/pangram/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/pangram/README.md +4 -3
- data/tracks/java/exercises/pascals-triangle/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/pascals-triangle/README.md +4 -3
- data/tracks/java/exercises/perfect-numbers/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/perfect-numbers/README.md +4 -3
- data/tracks/java/exercises/phone-number/README.md +4 -3
- data/tracks/java/exercises/pig-latin/README.md +4 -3
- data/tracks/java/exercises/poker/README.md +4 -3
- data/tracks/java/exercises/prime-factors/README.md +4 -3
- data/tracks/java/exercises/pythagorean-triplet/README.md +4 -3
- data/tracks/java/exercises/queen-attack/README.md +4 -3
- data/tracks/java/exercises/raindrops/README.md +4 -3
- data/tracks/java/exercises/rectangles/README.md +4 -3
- data/tracks/java/exercises/rna-transcription/.meta/version +1 -0
- data/tracks/java/exercises/rna-transcription/README.md +4 -3
- data/tracks/java/exercises/robot-name/README.md +4 -3
- data/tracks/java/exercises/robot-simulator/README.md +4 -3
- data/tracks/java/exercises/roman-numerals/README.md +4 -3
- data/tracks/java/exercises/rotational-cipher/README.md +4 -3
- data/tracks/java/exercises/run-length-encoding/README.md +4 -3
- data/tracks/java/exercises/saddle-points/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/saddle-points/README.md +4 -3
- data/tracks/java/exercises/scrabble-score/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/scrabble-score/README.md +4 -3
- data/tracks/java/exercises/secret-handshake/README.md +4 -3
- data/tracks/java/exercises/series/README.md +4 -3
- data/tracks/java/exercises/sieve/README.md +4 -3
- data/tracks/java/exercises/simple-cipher/README.md +6 -3
- data/tracks/java/exercises/simple-linked-list/README.md +4 -3
- data/tracks/java/exercises/space-age/README.md +4 -3
- data/tracks/java/exercises/spiral-matrix/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/spiral-matrix/README.md +4 -3
- data/tracks/java/exercises/strain/README.md +4 -3
- data/tracks/java/exercises/sublist/README.md +4 -3
- data/tracks/java/exercises/sum-of-multiples/README.md +4 -3
- data/tracks/java/exercises/tournament/README.md +4 -3
- data/tracks/java/exercises/transpose/README.md +4 -3
- data/tracks/java/exercises/triangle/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/triangle/README.md +4 -3
- data/tracks/java/exercises/trinary/README.md +4 -3
- data/tracks/java/exercises/twelve-days/README.md +4 -3
- data/tracks/java/exercises/two-fer/README.md +6 -3
- data/tracks/java/exercises/word-count/README.md +4 -3
- data/tracks/java/exercises/word-search/.meta/{.version → version} +0 -0
- data/tracks/java/exercises/word-search/README.md +4 -3
- data/tracks/java/exercises/wordy/README.md +4 -3
- data/tracks/julia/config.json +13 -0
- data/tracks/julia/exercises/phone-number/README.md +36 -0
- data/tracks/julia/exercises/phone-number/example.jl +18 -0
- data/tracks/julia/exercises/phone-number/phone-number.jl +3 -0
- data/tracks/julia/exercises/phone-number/runtests.jl +49 -0
- data/tracks/lua/config.json +505 -494
- data/tracks/lua/config/maintainers.json +16 -16
- data/tracks/lua/exercises/acronym/README.md +0 -1
- data/tracks/lua/exercises/all-your-base/README.md +1 -1
- data/tracks/lua/exercises/allergies/README.md +0 -1
- data/tracks/lua/exercises/alphametics/README.md +2 -2
- data/tracks/lua/exercises/atbash-cipher/README.md +2 -1
- data/tracks/lua/exercises/beer-song/README.md +1 -1
- data/tracks/lua/exercises/binary/README.md +2 -0
- data/tracks/lua/exercises/bowling/README.md +20 -6
- data/tracks/lua/exercises/change/README.md +1 -1
- data/tracks/lua/exercises/circular-buffer/README.md +13 -6
- data/tracks/lua/exercises/crypto-square/README.md +4 -4
- data/tracks/lua/exercises/diamond/README.md +6 -6
- data/tracks/lua/exercises/etl/README.md +2 -0
- data/tracks/lua/exercises/flatten-array/README.md +1 -2
- data/tracks/lua/exercises/food-chain/README.md +1 -1
- data/tracks/lua/exercises/grade-school/README.md +0 -1
- data/tracks/lua/exercises/grains/README.md +0 -1
- data/tracks/lua/exercises/house/README.md +1 -2
- data/tracks/lua/exercises/isogram/README.md +2 -1
- data/tracks/lua/exercises/kindergarten-garden/README.md +13 -13
- data/tracks/lua/exercises/leap/README.md +1 -1
- data/tracks/lua/exercises/linked-list/README.md +10 -10
- data/tracks/lua/exercises/luhn/README.md +7 -7
- data/tracks/lua/exercises/matrix/README.md +6 -4
- data/tracks/lua/exercises/meetup/README.md +1 -2
- data/tracks/lua/exercises/nucleotide-count/README.md +8 -22
- data/tracks/lua/exercises/ocr-numbers/README.md +5 -5
- data/tracks/lua/exercises/octal/README.md +6 -2
- data/tracks/lua/exercises/pangram/README.md +1 -1
- data/tracks/lua/exercises/pascals-triangle/README.md +1 -1
- data/tracks/lua/exercises/perfect-numbers/README.md +2 -2
- data/tracks/lua/exercises/phone-number/README.md +3 -2
- data/tracks/lua/exercises/pov/README.md +2 -2
- data/tracks/lua/exercises/protein-translation/README.md +4 -5
- data/tracks/lua/exercises/pythagorean-triplet/README.md +3 -3
- data/tracks/lua/exercises/rail-fence-cipher/README.md +12 -7
- data/tracks/lua/exercises/react/README.md +29 -0
- data/tracks/lua/exercises/react/example.lua +108 -0
- data/tracks/lua/exercises/react/react_spec.lua +160 -0
- data/tracks/lua/exercises/rectangles/README.md +7 -7
- data/tracks/lua/exercises/roman-numerals/README.md +1 -1
- data/tracks/lua/exercises/run-length-encoding/README.md +4 -4
- data/tracks/lua/exercises/scrabble-score/README.md +3 -1
- data/tracks/lua/exercises/secret-handshake/README.md +1 -1
- data/tracks/lua/exercises/space-age/README.md +2 -1
- data/tracks/lua/exercises/sum-of-multiples/README.md +0 -3
- data/tracks/lua/exercises/tournament/README.md +5 -5
- data/tracks/lua/exercises/transpose/README.md +7 -7
- data/tracks/lua/exercises/triangle/README.md +9 -6
- data/tracks/lua/exercises/variable-length-quantity/README.md +6 -7
- data/tracks/lua/exercises/word-count/README.md +1 -2
- data/tracks/lua/exercises/word-search/README.md +1 -1
- data/tracks/perl6/exercises/leap/Example.pm6 +1 -1
- data/tracks/perl6/exercises/leap/Leap.pm6 +1 -1
- data/tracks/perl6/exercises/leap/example.yaml +1 -1
- data/tracks/perl6/exercises/leap/leap.t +3 -3
- data/tracks/php/exercises/transpose/example.php +37 -15
- data/tracks/php/exercises/transpose/transpose_test.php +205 -45
- data/tracks/purescript/config.json +11 -0
- data/tracks/purescript/exercises/collatz-conjecture/README.md +33 -0
- data/tracks/purescript/exercises/collatz-conjecture/bower.json +26 -0
- data/tracks/purescript/exercises/collatz-conjecture/examples/src/CollatzConjecture.purs +15 -0
- data/tracks/purescript/exercises/collatz-conjecture/src/CollatzConjecture.purs +3 -0
- data/tracks/purescript/exercises/collatz-conjecture/test/Main.purs +43 -0
- data/tracks/python/config.json +10 -2
- data/tracks/racket/README.md +38 -33
- data/tracks/racket/config.json +10 -0
- data/tracks/racket/exercises/collatz-conjecture/README.md +58 -0
- data/tracks/racket/exercises/collatz-conjecture/collatz-conjecture-test.rkt +34 -0
- data/tracks/racket/exercises/collatz-conjecture/collatz-conjecture.rkt +6 -0
- data/tracks/racket/exercises/collatz-conjecture/example.rkt +20 -0
- data/tracks/ruby/exercises/allergies/.meta/.version +1 -0
- data/tracks/ruby/exercises/allergies/.meta/generator/allergies_case.rb +33 -0
- data/tracks/ruby/exercises/allergies/.meta/solutions/allergies.rb +4 -0
- data/tracks/ruby/exercises/allergies/allergies_test.rb +42 -9
- data/tracks/typescript/config.json +46 -0
- data/tracks/typescript/exercises/circular-buffer/README.md +74 -0
- data/tracks/typescript/exercises/circular-buffer/circular-buffer.example.ts +51 -0
- data/tracks/typescript/exercises/circular-buffer/circular-buffer.test.ts +103 -0
- data/tracks/typescript/exercises/circular-buffer/circular-buffer.ts +0 -0
- data/tracks/typescript/exercises/circular-buffer/package.json +36 -0
- data/tracks/typescript/exercises/circular-buffer/tsconfig.json +22 -0
- data/tracks/typescript/exercises/circular-buffer/tslint.json +127 -0
- data/tracks/typescript/exercises/circular-buffer/yarn.lock +2305 -0
- data/tracks/typescript/exercises/largest-series-product/README.md +51 -0
- data/tracks/typescript/exercises/largest-series-product/largest-series-product.example.ts +52 -0
- data/tracks/typescript/exercises/largest-series-product/largest-series-product.test.ts +68 -0
- data/tracks/typescript/exercises/largest-series-product/largest-series-product.ts +0 -0
- data/tracks/typescript/exercises/largest-series-product/package.json +36 -0
- data/tracks/typescript/exercises/largest-series-product/tsconfig.json +22 -0
- data/tracks/typescript/exercises/largest-series-product/tslint.json +127 -0
- data/tracks/typescript/exercises/largest-series-product/yarn.lock +2305 -0
- data/tracks/typescript/exercises/robot-simulator/README.md +58 -0
- data/tracks/typescript/exercises/robot-simulator/package.json +36 -0
- data/tracks/typescript/exercises/robot-simulator/robot-simulator.example.ts +74 -0
- data/tracks/typescript/exercises/robot-simulator/robot-simulator.test.ts +150 -0
- data/tracks/typescript/exercises/robot-simulator/robot-simulator.ts +0 -0
- data/tracks/typescript/exercises/robot-simulator/tsconfig.json +22 -0
- data/tracks/typescript/exercises/robot-simulator/tslint.json +127 -0
- data/tracks/typescript/exercises/robot-simulator/yarn.lock +2305 -0
- 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,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,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
|
data/tracks/gnu-apl/test.apl
CHANGED
@@ -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.
|
data/tracks/haskell/config.json
CHANGED
@@ -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,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 @@
|
|
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
|
+
]
|
data/tracks/java/config.json
CHANGED
@@ -214,7 +214,12 @@
|
|
214
214
|
"core": true,
|
215
215
|
"difficulty": 4,
|
216
216
|
"slug": "triangle",
|
217
|
-
"topics":
|
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":
|
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,
|