trackler 2.2.1.103 → 2.2.1.104
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/all-your-base/canonical-data.json +43 -43
- data/tracks/bash/.github/PULL_REQUEST_TEMPLATE.md +10 -0
- data/tracks/cfml/tasks/exercise_template/.meta/hints.md +1 -0
- data/tracks/csharp/config/exercise_readme.go.tmpl +4 -4
- data/tracks/csharp/exercises/accumulate/README.md +1 -5
- data/tracks/csharp/exercises/acronym/README.md +1 -3
- data/tracks/csharp/exercises/all-your-base/README.md +2 -4
- data/tracks/csharp/exercises/allergies/README.md +1 -3
- data/tracks/csharp/exercises/alphametics/README.md +3 -5
- data/tracks/csharp/exercises/anagram/README.md +1 -2
- data/tracks/csharp/exercises/armstrong-numbers/README.md +14 -1
- data/tracks/csharp/exercises/atbash-cipher/README.md +3 -3
- data/tracks/csharp/exercises/bank-account/README.md +1 -3
- data/tracks/csharp/exercises/beer-song/README.md +3 -4
- data/tracks/csharp/exercises/binary-search-tree/README.md +1 -2
- data/tracks/csharp/exercises/binary-search/README.md +1 -2
- data/tracks/csharp/exercises/binary/README.md +3 -2
- data/tracks/csharp/exercises/bob/README.md +3 -3
- data/tracks/csharp/exercises/book-store/README.md +6 -7
- data/tracks/csharp/exercises/bowling/README.md +21 -8
- data/tracks/csharp/exercises/bracket-push/README.md +1 -2
- data/tracks/csharp/exercises/change/README.md +2 -3
- data/tracks/csharp/exercises/circular-buffer/README.md +14 -8
- data/tracks/csharp/exercises/clock/README.md +1 -2
- data/tracks/csharp/exercises/collatz-conjecture/README.md +4 -4
- data/tracks/csharp/exercises/complex-numbers/README.md +1 -2
- data/tracks/csharp/exercises/connect/README.md +2 -4
- data/tracks/csharp/exercises/crypto-square/README.md +11 -10
- data/tracks/csharp/exercises/custom-set/README.md +1 -3
- data/tracks/csharp/exercises/diamond/README.md +10 -9
- data/tracks/csharp/exercises/difference-of-squares/README.md +1 -2
- data/tracks/csharp/exercises/diffie-hellman/README.md +1 -2
- data/tracks/csharp/exercises/dominoes/README.md +10 -3
- data/tracks/csharp/exercises/dot-dsl/README.md +2 -4
- data/tracks/csharp/exercises/error-handling/README.md +1 -3
- data/tracks/csharp/exercises/etl/README.md +4 -3
- data/tracks/csharp/exercises/flatten-array/README.md +2 -4
- data/tracks/csharp/exercises/food-chain/README.md +2 -3
- data/tracks/csharp/exercises/forth/README.md +1 -3
- data/tracks/csharp/exercises/gigasecond/README.md +1 -2
- data/tracks/csharp/exercises/go-counting/README.md +2 -4
- data/tracks/csharp/exercises/grade-school/README.md +1 -3
- data/tracks/csharp/exercises/grains/README.md +1 -3
- data/tracks/csharp/exercises/grep/README.md +13 -14
- data/tracks/csharp/exercises/hamming/README.md +1 -2
- data/tracks/csharp/exercises/hangman/README.md +1 -3
- data/tracks/csharp/exercises/hello-world/README.md +1 -2
- data/tracks/csharp/exercises/hexadecimal/README.md +1 -2
- data/tracks/csharp/exercises/house/README.md +3 -5
- data/tracks/csharp/exercises/isbn-verifier/README.md +34 -22
- data/tracks/csharp/exercises/isogram/README.md +3 -3
- data/tracks/csharp/exercises/kindergarten-garden/README.md +14 -15
- data/tracks/csharp/exercises/largest-series-product/README.md +1 -2
- data/tracks/csharp/exercises/leap/README.md +2 -3
- data/tracks/csharp/exercises/ledger/README.md +1 -3
- data/tracks/csharp/exercises/linked-list/README.md +11 -12
- data/tracks/csharp/exercises/list-ops/README.md +1 -3
- data/tracks/csharp/exercises/luhn/README.md +8 -9
- data/tracks/csharp/exercises/markdown/README.md +1 -3
- data/tracks/csharp/exercises/matrix/README.md +7 -6
- data/tracks/csharp/exercises/meetup/README.md +17 -15
- data/tracks/csharp/exercises/minesweeper/README.md +1 -3
- data/tracks/csharp/exercises/nth-prime/README.md +1 -2
- data/tracks/csharp/exercises/nucleotide-count/README.md +9 -24
- data/tracks/csharp/exercises/ocr-numbers/README.md +7 -8
- data/tracks/csharp/exercises/octal/README.md +7 -4
- data/tracks/csharp/exercises/palindrome-products/README.md +16 -18
- data/tracks/csharp/exercises/pangram/README.md +2 -3
- data/tracks/csharp/exercises/parallel-letter-frequency/README.md +1 -3
- data/tracks/csharp/exercises/pascals-triangle/README.md +3 -4
- data/tracks/csharp/exercises/perfect-numbers/README.md +3 -4
- data/tracks/csharp/exercises/phone-number/README.md +5 -5
- data/tracks/csharp/exercises/pig-latin/README.md +1 -2
- data/tracks/csharp/exercises/poker/README.md +1 -2
- data/tracks/csharp/exercises/pov/README.md +4 -7
- data/tracks/csharp/exercises/prime-factors/README.md +1 -2
- data/tracks/csharp/exercises/protein-translation/README.md +6 -8
- data/tracks/csharp/exercises/proverb/README.md +15 -11
- data/tracks/csharp/exercises/pythagorean-triplet/README.md +4 -5
- data/tracks/csharp/exercises/queen-attack/README.md +2 -3
- data/tracks/csharp/exercises/rail-fence-cipher/README.md +13 -9
- data/tracks/csharp/exercises/raindrops/README.md +1 -2
- data/tracks/csharp/exercises/react/README.md +1 -3
- data/tracks/csharp/exercises/rectangles/README.md +17 -19
- data/tracks/csharp/exercises/reverse-string/README.md +16 -1
- data/tracks/csharp/exercises/rna-transcription/README.md +3 -4
- data/tracks/csharp/exercises/robot-name/README.md +1 -2
- data/tracks/csharp/exercises/robot-simulator/README.md +1 -2
- data/tracks/csharp/exercises/roman-numerals/README.md +2 -3
- data/tracks/csharp/exercises/rotational-cipher/README.md +3 -3
- data/tracks/csharp/exercises/run-length-encoding/README.md +5 -6
- data/tracks/csharp/exercises/saddle-points/README.md +3 -4
- data/tracks/csharp/exercises/say/README.md +1 -2
- data/tracks/csharp/exercises/scale-generator/README.md +1 -4
- data/tracks/csharp/exercises/scrabble-score/README.md +4 -3
- data/tracks/csharp/exercises/secret-handshake/README.md +2 -3
- data/tracks/csharp/exercises/series/README.md +1 -2
- data/tracks/csharp/exercises/sgf-parsing/README.md +5 -7
- data/tracks/csharp/exercises/sieve/README.md +1 -2
- data/tracks/csharp/exercises/simple-cipher/README.md +6 -9
- data/tracks/csharp/exercises/simple-linked-list/README.md +1 -2
- data/tracks/csharp/exercises/space-age/README.md +2 -3
- data/tracks/csharp/exercises/spiral-matrix/README.md +7 -8
- data/tracks/csharp/exercises/strain/README.md +1 -2
- data/tracks/csharp/exercises/sublist/README.md +1 -3
- data/tracks/csharp/exercises/sum-of-multiples/README.md +4 -8
- data/tracks/csharp/exercises/tournament/README.md +6 -8
- data/tracks/csharp/exercises/transpose/README.md +8 -9
- data/tracks/csharp/exercises/tree-building/README.md +4 -6
- data/tracks/csharp/exercises/triangle/README.md +10 -8
- data/tracks/csharp/exercises/trinary/README.md +2 -3
- data/tracks/csharp/exercises/twelve-days/README.md +2 -3
- data/tracks/csharp/exercises/two-bucket/README.md +11 -12
- data/tracks/csharp/exercises/two-fer/README.md +8 -9
- data/tracks/csharp/exercises/variable-length-quantity/README.md +7 -9
- data/tracks/csharp/exercises/word-count/README.md +2 -4
- data/tracks/csharp/exercises/word-search/README.md +2 -4
- data/tracks/csharp/exercises/wordy/README.md +1 -7
- data/tracks/csharp/exercises/zebra-puzzle/README.md +1 -2
- data/tracks/csharp/exercises/zipper/README.md +2 -4
- data/tracks/dart/config.json +2 -2
- data/tracks/go/config/exercise_readme.go.tmpl +17 -4
- data/tracks/go/exercises/acronym/README.md +0 -1
- data/tracks/go/exercises/all-your-base/README.md +0 -1
- data/tracks/go/exercises/allergies/README.md +0 -1
- data/tracks/go/exercises/alphametics/README.md +0 -1
- data/tracks/go/exercises/atbash-cipher/README.md +2 -1
- data/tracks/go/exercises/bank-account/README.md +0 -1
- data/tracks/go/exercises/beer-song/README.md +2 -2
- data/tracks/go/exercises/binary/README.md +2 -0
- data/tracks/go/exercises/bowling/README.md +20 -6
- data/tracks/go/exercises/change/README.md +1 -1
- data/tracks/go/exercises/circular-buffer/README.md +13 -6
- data/tracks/go/exercises/collatz-conjecture/README.md +1 -1
- data/tracks/go/exercises/connect/README.md +1 -2
- data/tracks/go/exercises/counter/README.md +0 -1
- data/tracks/go/exercises/crypto-square/README.md +10 -8
- data/tracks/go/exercises/custom-set/README.md +0 -1
- data/tracks/go/exercises/diamond/README.md +6 -6
- data/tracks/go/exercises/dominoes/README.md +0 -1
- data/tracks/go/exercises/error-handling/README.md +0 -1
- data/tracks/go/exercises/etl/README.md +3 -1
- data/tracks/go/exercises/food-chain/README.md +1 -1
- data/tracks/go/exercises/forth/README.md +0 -1
- data/tracks/go/exercises/grade-school/README.md +0 -1
- data/tracks/go/exercises/grains/README.md +0 -1
- data/tracks/go/exercises/house/README.md +2 -3
- data/tracks/go/exercises/isbn-verifier/README.md +26 -21
- data/tracks/go/exercises/isogram/README.md +2 -1
- data/tracks/go/exercises/kindergarten-garden/README.md +13 -13
- data/tracks/go/exercises/leap/README.md +1 -1
- data/tracks/go/exercises/ledger/README.md +0 -1
- data/tracks/go/exercises/luhn/README.md +7 -7
- data/tracks/go/exercises/matrix/README.md +6 -4
- data/tracks/go/exercises/meetup/README.md +16 -13
- data/tracks/go/exercises/minesweeper/README.md +0 -1
- data/tracks/go/exercises/nucleotide-count/README.md +25 -17
- data/tracks/go/exercises/ocr-numbers/README.md +6 -6
- data/tracks/go/exercises/octal/README.md +6 -2
- data/tracks/go/exercises/palindrome-products/README.md +15 -16
- data/tracks/go/exercises/pangram/README.md +1 -1
- data/tracks/go/exercises/parallel-letter-frequency/README.md +0 -1
- data/tracks/go/exercises/pascals-triangle/README.md +2 -2
- data/tracks/go/exercises/pov/README.md +3 -5
- data/tracks/go/exercises/protein-translation/README.md +5 -6
- data/tracks/go/exercises/pythagorean-triplet/README.md +3 -3
- data/tracks/go/exercises/queen-attack/README.md +1 -1
- data/tracks/go/exercises/react/README.md +0 -1
- data/tracks/go/exercises/reverse-string/README.md +1 -1
- data/tracks/go/exercises/rna-transcription/README.md +2 -2
- data/tracks/go/exercises/robot-name/README.md +15 -0
- data/tracks/go/exercises/roman-numerals/README.md +1 -1
- data/tracks/go/exercises/rotational-cipher/README.md +0 -1
- data/tracks/go/exercises/run-length-encoding/README.md +21 -4
- data/tracks/go/exercises/saddle-points/README.md +2 -2
- data/tracks/go/exercises/scrabble-score/README.md +3 -1
- data/tracks/go/exercises/secret-handshake/README.md +1 -1
- data/tracks/go/exercises/simple-linked-list/README.md +1 -2
- data/tracks/go/exercises/space-age/README.md +1 -2
- data/tracks/go/exercises/spiral-matrix/README.md +1 -1
- data/tracks/go/exercises/sublist/README.md +0 -1
- data/tracks/go/exercises/sum-of-multiples/README.md +3 -6
- data/tracks/go/exercises/tournament/README.md +5 -6
- data/tracks/go/exercises/transpose/README.md +7 -7
- data/tracks/go/exercises/tree-building/README.md +3 -4
- data/tracks/go/exercises/triangle/README.md +21 -6
- data/tracks/go/exercises/trinary/README.md +1 -1
- data/tracks/go/exercises/twelve-days/README.md +2 -3
- data/tracks/go/exercises/two-fer/README.md +2 -31
- data/tracks/go/exercises/variable-length-quantity/README.md +6 -7
- data/tracks/go/exercises/word-count/README.md +1 -2
- data/tracks/go/exercises/word-search/README.md +1 -2
- data/tracks/go/exercises/wordy/README.md +0 -5
- data/tracks/groovy/config.json +11 -0
- data/tracks/groovy/exercises/rotational-cipher/Example.groovy +38 -0
- data/tracks/groovy/exercises/rotational-cipher/README.md +49 -0
- data/tracks/groovy/exercises/rotational-cipher/RotationalCipher.groovy +11 -0
- data/tracks/groovy/exercises/rotational-cipher/RotationalCipherSpec.groovy +68 -0
- data/tracks/haskell/exercises/acronym/package.yaml +1 -1
- data/tracks/haskell/exercises/acronym/test/Tests.hs +2 -6
- data/tracks/haskell/exercises/anagram/package.yaml +1 -1
- data/tracks/haskell/exercises/anagram/test/Tests.hs +0 -20
- data/tracks/haskell/exercises/clock/package.yaml +1 -1
- data/tracks/haskell/exercises/clock/test/Tests.hs +16 -9
- data/tracks/haskell/exercises/complex-numbers/package.yaml +1 -1
- data/tracks/haskell/exercises/custom-set/package.yaml +1 -1
- data/tracks/haskell/exercises/hamming/package.yaml +1 -1
- data/tracks/haskell/exercises/kindergarten-garden/package.yaml +1 -1
- data/tracks/haskell/exercises/matrix/package.yaml +1 -1
- data/tracks/haskell/exercises/matrix/test/Tests.hs +25 -13
- data/tracks/haskell/exercises/ocr-numbers/package.yaml +1 -1
- data/tracks/haskell/exercises/prime-factors/package.yaml +1 -1
- data/tracks/haskell/exercises/queen-attack/package.yaml +1 -1
- data/tracks/haskell/exercises/rail-fence-cipher/package.yaml +1 -1
- data/tracks/haskell/exercises/raindrops/package.yaml +1 -1
- data/tracks/haskell/exercises/robot-simulator/package.yaml +1 -1
- data/tracks/haskell/exercises/roman-numerals/package.yaml +1 -1
- data/tracks/haskell/exercises/roman-numerals/test/Tests.hs +4 -0
- data/tracks/haskell/exercises/run-length-encoding/package.yaml +1 -1
- data/tracks/haskell/exercises/word-count/package.yaml +1 -1
- data/tracks/java/config.json +0 -1
- data/tracks/java/exercises/forth/README.md +1 -1
- data/tracks/objective-c/config/exercise_readme.go.tmpl +22 -4
- data/tracks/objective-c/exercises/acronym/README.md +8 -3
- data/tracks/objective-c/exercises/all-your-base/README.md +8 -3
- data/tracks/objective-c/exercises/allergies/README.md +8 -3
- data/tracks/objective-c/exercises/anagram/README.md +8 -2
- data/tracks/objective-c/exercises/atbash-cipher/README.md +10 -3
- data/tracks/objective-c/exercises/beer-song/README.md +10 -4
- data/tracks/objective-c/exercises/binary-search/README.md +8 -2
- data/tracks/objective-c/exercises/bob/.meta/description.md +10 -0
- data/tracks/objective-c/exercises/bob/README.md +8 -2
- data/tracks/objective-c/exercises/bracket-push/README.md +8 -2
- data/tracks/objective-c/exercises/clock/README.md +8 -2
- data/tracks/objective-c/exercises/collatz-conjecture/README.md +8 -2
- data/tracks/objective-c/exercises/crypto-square/README.md +18 -10
- data/tracks/objective-c/exercises/difference-of-squares/README.md +8 -2
- data/tracks/objective-c/exercises/etl/README.md +11 -3
- data/tracks/objective-c/exercises/flatten-array/README.md +9 -4
- data/tracks/objective-c/exercises/gigasecond/README.md +8 -2
- data/tracks/objective-c/exercises/grade-school/README.md +8 -3
- data/tracks/objective-c/exercises/grains/README.md +8 -2
- data/tracks/objective-c/exercises/hamming/README.md +8 -2
- data/tracks/objective-c/exercises/hello-world/README.md +8 -2
- data/tracks/objective-c/exercises/isogram/README.md +10 -3
- data/tracks/objective-c/exercises/largest-series-product/README.md +8 -2
- data/tracks/objective-c/exercises/leap/README.md +9 -3
- data/tracks/objective-c/exercises/luhn/README.md +15 -9
- data/tracks/objective-c/exercises/meetup/README.md +24 -15
- data/tracks/objective-c/exercises/nth-prime/README.md +8 -2
- data/tracks/objective-c/exercises/nucleotide-count/README.md +16 -24
- data/tracks/objective-c/exercises/pangram/README.md +9 -3
- data/tracks/objective-c/exercises/pascals-triangle/README.md +10 -4
- data/tracks/objective-c/exercises/perfect-numbers/README.md +10 -4
- data/tracks/objective-c/exercises/phone-number/README.md +12 -5
- data/tracks/objective-c/exercises/raindrops/README.md +8 -2
- data/tracks/objective-c/exercises/rna-transcription/README.md +10 -4
- data/tracks/objective-c/exercises/robot-name/README.md +8 -2
- data/tracks/objective-c/exercises/roman-numerals/README.md +9 -3
- data/tracks/objective-c/exercises/run-length-encoding/README.md +12 -6
- data/tracks/objective-c/exercises/say/README.md +8 -2
- data/tracks/objective-c/exercises/scrabble-score/README.md +11 -3
- data/tracks/objective-c/exercises/secret-handshake/README.md +10 -4
- data/tracks/objective-c/exercises/sieve/README.md +8 -2
- data/tracks/objective-c/exercises/space-age/README.md +9 -3
- data/tracks/objective-c/exercises/sublist/README.md +7 -2
- data/tracks/objective-c/exercises/sum-of-multiples/README.md +11 -8
- data/tracks/objective-c/exercises/transpose/README.md +15 -9
- data/tracks/objective-c/exercises/triangle/README.md +17 -8
- data/tracks/objective-c/exercises/two-fer/README.md +8 -2
- data/tracks/objective-c/exercises/word-count/README.md +9 -4
- data/tracks/php/.travis.yml +1 -1
- data/tracks/php/config/exercise_readme.go.tmpl +20 -4
- data/tracks/php/exercises/accumulate/README.md +9 -6
- data/tracks/php/exercises/acronym/README.md +9 -4
- data/tracks/php/exercises/all-your-base/README.md +35 -11
- data/tracks/php/exercises/allergies/README.md +9 -4
- data/tracks/php/exercises/anagram/README.md +10 -4
- data/tracks/php/exercises/atbash-cipher/README.md +12 -5
- data/tracks/php/exercises/beer-song/README.md +12 -6
- data/tracks/php/exercises/binary-search/README.md +10 -4
- data/tracks/php/exercises/binary/README.md +12 -4
- data/tracks/php/exercises/bob/.meta/description.md +10 -0
- data/tracks/php/exercises/bob/README.md +10 -4
- data/tracks/php/exercises/book-store/README.md +15 -9
- data/tracks/php/exercises/bowling/README.md +30 -10
- data/tracks/php/exercises/bracket-push/README.md +10 -4
- data/tracks/php/exercises/change/README.md +11 -5
- data/tracks/php/exercises/clock/README.md +10 -4
- data/tracks/php/exercises/collatz-conjecture/README.md +10 -4
- data/tracks/php/exercises/connect/README.md +11 -6
- data/tracks/php/exercises/crypto-square/README.md +10 -4
- data/tracks/php/exercises/difference-of-squares/README.md +10 -4
- data/tracks/php/exercises/etl/README.md +13 -5
- data/tracks/php/exercises/flatten-array/README.md +10 -4
- data/tracks/php/exercises/gigasecond/README.md +10 -4
- data/tracks/php/exercises/grade-school/README.md +10 -5
- data/tracks/php/exercises/grains/README.md +10 -5
- data/tracks/php/exercises/hamming/README.md +10 -4
- data/tracks/php/exercises/hello-world/README.md +10 -4
- data/tracks/php/exercises/isogram/README.md +12 -5
- data/tracks/php/exercises/largest-series-product/README.md +10 -4
- data/tracks/php/exercises/leap/README.md +11 -5
- data/tracks/php/exercises/luhn/README.md +17 -11
- data/tracks/php/exercises/markdown/README.md +10 -5
- data/tracks/php/exercises/meetup/README.md +45 -12
- data/tracks/php/exercises/meetup/example.php +0 -2
- data/tracks/php/exercises/meetup/meetup_test.php +0 -2
- data/tracks/php/exercises/minesweeper/README.md +10 -5
- data/tracks/php/exercises/nth-prime/README.md +10 -4
- data/tracks/php/exercises/nucleotide-count/README.md +15 -23
- data/tracks/php/exercises/ocr-numbers/README.md +16 -10
- data/tracks/php/exercises/pangram/README.md +11 -5
- data/tracks/php/exercises/pascals-triangle/README.md +12 -6
- data/tracks/php/exercises/perfect-numbers/README.md +12 -6
- data/tracks/php/exercises/phone-number/README.md +14 -7
- data/tracks/php/exercises/pig-latin/README.md +10 -4
- data/tracks/php/exercises/prime-factors/README.md +10 -4
- data/tracks/php/exercises/queen-attack/README.md +11 -5
- data/tracks/php/exercises/rail-fence-cipher/README.md +10 -4
- data/tracks/php/exercises/raindrops/README.md +10 -4
- data/tracks/php/exercises/rna-transcription/README.md +11 -5
- data/tracks/php/exercises/robot-name/README.md +10 -4
- data/tracks/php/exercises/robot-simulator/README.md +10 -4
- data/tracks/php/exercises/roman-numerals/README.md +11 -5
- data/tracks/php/exercises/run-length-encoding/README.md +13 -4
- data/tracks/php/exercises/scrabble-score/README.md +13 -5
- data/tracks/php/exercises/series/README.md +27 -0
- data/tracks/php/exercises/series/example.php +0 -2
- data/tracks/php/exercises/series/series_test.php +0 -1
- data/tracks/php/exercises/sieve/README.md +10 -4
- data/tracks/php/exercises/space-age/README.md +11 -5
- data/tracks/php/exercises/sum-of-multiples/README.md +12 -9
- data/tracks/php/exercises/transpose/README.md +10 -4
- data/tracks/php/exercises/triangle/README.md +19 -10
- data/tracks/php/exercises/trinary/README.md +11 -5
- data/tracks/php/exercises/variable-length-quantity/README.md +16 -11
- data/tracks/php/exercises/word-count/README.md +10 -5
- data/tracks/php/exercises/wordy/README.md +9 -8
- data/tracks/rust/config/exercise_readme.go.tmpl +32 -4
- data/tracks/rust/exercises/all-your-base/README.md +0 -1
- data/tracks/rust/exercises/alphametics/README.md +0 -1
- data/tracks/rust/exercises/custom-set/README.md +0 -1
- data/tracks/rust/exercises/dominoes/README.md +0 -1
- data/tracks/rust/exercises/forth/README.md +0 -1
- data/tracks/rust/exercises/isbn-verifier/README.md +1 -1
- data/tracks/rust/exercises/minesweeper/README.md +0 -1
- data/tracks/rust/exercises/nucleotide-codons/README.md +0 -1
- data/tracks/rust/exercises/parallel-letter-frequency/README.md +0 -1
- data/tracks/rust/exercises/protein-translation/README.md +2 -2
- data/tracks/rust/exercises/react/README.md +0 -1
- data/tracks/rust/exercises/rectangles/README.md +0 -1
- data/tracks/rust/exercises/reverse-string/README.md +1 -1
- data/tracks/rust/exercises/rna-transcription/.meta/hints.md +9 -0
- data/tracks/rust/exercises/rna-transcription/README.md +12 -1
- data/tracks/rust/exercises/rna-transcription/example.rs +66 -27
- data/tracks/rust/exercises/rna-transcription/tests/rna-transcription.rs +52 -19
- data/tracks/rust/exercises/sublist/README.md +0 -1
- data/tracks/rust/exercises/tournament/README.md +0 -1
- data/tracks/swift/config/exercise_readme.go.tmpl +7 -4
- data/tracks/swift/exercises/accumulate/README.md +0 -3
- data/tracks/swift/exercises/acronym/README.md +0 -1
- data/tracks/swift/exercises/all-your-base/README.md +1 -2
- data/tracks/swift/exercises/allergies/README.md +0 -1
- data/tracks/swift/exercises/atbash-cipher/README.md +2 -1
- data/tracks/swift/exercises/beer-song/README.md +2 -2
- data/tracks/swift/exercises/binary/README.md +2 -0
- data/tracks/swift/exercises/bob/.meta/description.md +10 -0
- data/tracks/swift/exercises/bowling/README.md +20 -6
- data/tracks/swift/exercises/circular-buffer/README.md +21 -13
- data/tracks/swift/exercises/collatz-conjecture/README.md +1 -1
- data/tracks/swift/exercises/crypto-square/README.md +10 -8
- data/tracks/swift/exercises/custom-set/README.md +0 -1
- data/tracks/swift/exercises/diamond/README.md +3 -0
- data/tracks/swift/exercises/dominoes/README.md +3 -4
- data/tracks/swift/exercises/etl/README.md +3 -1
- data/tracks/swift/exercises/flatten-array/README.md +1 -2
- data/tracks/swift/exercises/food-chain/README.md +1 -1
- data/tracks/swift/exercises/grade-school/README.md +0 -1
- data/tracks/swift/exercises/grains/README.md +0 -1
- data/tracks/swift/exercises/house/README.md +2 -3
- data/tracks/swift/exercises/isbn-verifier/README.md +32 -16
- data/tracks/swift/exercises/isogram/README.md +2 -1
- data/tracks/swift/exercises/kindergarten-garden/README.md +13 -13
- data/tracks/swift/exercises/leap/README.md +1 -1
- data/tracks/swift/exercises/linked-list/README.md +10 -10
- data/tracks/swift/exercises/list-ops/README.md +1 -0
- data/tracks/swift/exercises/luhn/README.md +7 -7
- data/tracks/swift/exercises/matrix/README.md +6 -4
- data/tracks/swift/exercises/meetup/README.md +16 -13
- data/tracks/swift/exercises/minesweeper/README.md +0 -1
- data/tracks/swift/exercises/nucleotide-count/README.md +8 -22
- data/tracks/swift/exercises/ocr-numbers/README.md +6 -6
- data/tracks/swift/exercises/octal/README.md +6 -2
- data/tracks/swift/exercises/palindrome-products/README.md +15 -16
- data/tracks/swift/exercises/pangram/README.md +1 -1
- data/tracks/swift/exercises/pascals-triangle/README.md +2 -2
- data/tracks/swift/exercises/perfect-numbers/README.md +2 -2
- data/tracks/swift/exercises/phone-number/README.md +4 -3
- data/tracks/swift/exercises/protein-translation/README.md +4 -4
- data/tracks/swift/exercises/pythagorean-triplet/README.md +3 -3
- data/tracks/swift/exercises/queen-attack/README.md +1 -1
- data/tracks/swift/exercises/rna-transcription/README.md +2 -2
- data/tracks/swift/exercises/roman-numerals/README.md +1 -1
- data/tracks/swift/exercises/run-length-encoding/README.md +4 -4
- data/tracks/swift/exercises/saddle-points/README.md +2 -2
- data/tracks/swift/exercises/say/README.md +1 -1
- data/tracks/swift/exercises/scrabble-score/README.md +3 -1
- data/tracks/swift/exercises/secret-handshake/README.md +2 -2
- data/tracks/swift/exercises/simple-cipher/README.md +5 -7
- data/tracks/swift/exercises/space-age/README.md +1 -1
- data/tracks/swift/exercises/sublist/README.md +0 -1
- data/tracks/swift/exercises/sum-of-multiples/README.md +3 -6
- data/tracks/swift/exercises/tournament/README.md +5 -6
- data/tracks/swift/exercises/transpose/README.md +7 -7
- data/tracks/swift/exercises/triangle/README.md +9 -6
- data/tracks/swift/exercises/trinary/README.md +1 -1
- data/tracks/swift/exercises/twelve-days/README.md +1 -1
- data/tracks/swift/exercises/two-fer/README.md +2 -29
- data/tracks/swift/exercises/word-count/README.md +1 -2
- data/tracks/swift/exercises/wordy/README.md +0 -5
- metadata +12 -10
- data/tracks/cfml/tasks/exercise_template/.meta/HINTS.md +0 -0
- data/tracks/csharp/docs/EXERCISE_README_INSERT.md +0 -5
- data/tracks/go/docs/EXERCISE_README_INSERT.md +0 -16
- data/tracks/java/exercises/forth/.meta/readme.go.tmpl +0 -17
- data/tracks/objective-c/docs/EXERCISE_README_INSERT.md +0 -15
- data/tracks/php/docs/EXERCISE_README_INSERT.md +0 -13
- data/tracks/rust/config/exercise-readme-insert.md +0 -31
- data/tracks/swift/docs/EXERCISE_README_INSERT.md +0 -6
@@ -5,18 +5,17 @@ Implement variable length quantity encoding and decoding.
|
|
5
5
|
The goal of this exercise is to implement [VLQ](https://en.wikipedia.org/wiki/Variable-length_quantity) encoding/decoding.
|
6
6
|
|
7
7
|
In short, the goal of this encoding is to encode integer values in a way that would save bytes.
|
8
|
-
Only the first 7 bits of each byte is significant (right-justified; sort of like an ASCII byte).
|
9
|
-
So, if you have a 32-bit value, you have to unpack it into a series of 7-bit bytes.
|
10
|
-
Of course, you will have a variable number of bytes depending upon your integer.
|
8
|
+
Only the first 7 bits of each byte is significant (right-justified; sort of like an ASCII byte).
|
9
|
+
So, if you have a 32-bit value, you have to unpack it into a series of 7-bit bytes.
|
10
|
+
Of course, you will have a variable number of bytes depending upon your integer.
|
11
11
|
To indicate which is the last byte of the series, you leave bit #7 clear.
|
12
|
-
In all of the preceding bytes, you set bit #7.
|
12
|
+
In all of the preceding bytes, you set bit #7.
|
13
13
|
|
14
|
-
So, if an integer is between `0-127`, it can be represented as one byte.
|
14
|
+
So, if an integer is between `0-127`, it can be represented as one byte.
|
15
15
|
Although VLQ can deal with numbers of arbitrary sizes, for this exercise we will restrict ourselves to only numbers that fit in a 32-bit unsigned integer.
|
16
16
|
Here are examples of integers as 32-bit values, and the variable length quantities that they translate to:
|
17
17
|
|
18
|
-
|
19
|
-
```
|
18
|
+
```text
|
20
19
|
NUMBER VARIABLE QUANTITY
|
21
20
|
00000000 00
|
22
21
|
00000040 40
|
@@ -32,16 +31,22 @@ Here are examples of integers as 32-bit values, and the variable length quantiti
|
|
32
31
|
0FFFFFFF FF FF FF 7F
|
33
32
|
```
|
34
33
|
|
35
|
-
## Making the Test Suite Pass
|
36
34
|
|
37
|
-
|
35
|
+
## Running the tests
|
36
|
+
|
37
|
+
1. Go to the root of your PHP exercise directory, which is `<EXERCISM_WORKSPACE>/php`.
|
38
|
+
To find the Exercism workspace run
|
39
|
+
|
40
|
+
% exercism debug | grep Workspace
|
41
|
+
|
42
|
+
1. Get [PHPUnit] if you don't have it already.
|
38
43
|
|
39
44
|
% wget --no-check-certificate https://phar.phpunit.de/phpunit.phar
|
40
45
|
% chmod +x phpunit.phar
|
41
46
|
|
42
|
-
2. Execute the tests
|
47
|
+
2. Execute the tests:
|
43
48
|
|
44
|
-
% phpunit.phar
|
49
|
+
% ./phpunit.phar variable-length-quantity/variable-length-quantity_test.php
|
45
50
|
|
46
51
|
[PHPUnit]: http://phpunit.de
|
47
52
|
|
@@ -4,7 +4,7 @@ Given a phrase, count the occurrences of each word in that phrase.
|
|
4
4
|
|
5
5
|
For example for the input `"olly olly in come free"`
|
6
6
|
|
7
|
-
```
|
7
|
+
```text
|
8
8
|
olly: 2
|
9
9
|
in: 1
|
10
10
|
come: 1
|
@@ -12,16 +12,21 @@ free: 1
|
|
12
12
|
```
|
13
13
|
|
14
14
|
|
15
|
-
##
|
15
|
+
## Running the tests
|
16
16
|
|
17
|
-
1.
|
17
|
+
1. Go to the root of your PHP exercise directory, which is `<EXERCISM_WORKSPACE>/php`.
|
18
|
+
To find the Exercism workspace run
|
19
|
+
|
20
|
+
% exercism debug | grep Workspace
|
21
|
+
|
22
|
+
1. Get [PHPUnit] if you don't have it already.
|
18
23
|
|
19
24
|
% wget --no-check-certificate https://phar.phpunit.de/phpunit.phar
|
20
25
|
% chmod +x phpunit.phar
|
21
26
|
|
22
|
-
2. Execute the tests
|
27
|
+
2. Execute the tests:
|
23
28
|
|
24
|
-
% phpunit.phar
|
29
|
+
% ./phpunit.phar word-count/word-count_test.php
|
25
30
|
|
26
31
|
[PHPUnit]: http://phpunit.de
|
27
32
|
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
Parse and evaluate simple math word problems returning the answer as an integer.
|
4
4
|
|
5
|
-
|
6
5
|
## Iteration 1 — Addition
|
7
6
|
|
8
7
|
Add two numbers together.
|
@@ -13,7 +12,6 @@ Evaluates to 18.
|
|
13
12
|
|
14
13
|
Handle large numbers and negative numbers.
|
15
14
|
|
16
|
-
|
17
15
|
## Iteration 2 — Subtraction, Multiplication and Division
|
18
16
|
|
19
17
|
Now, perform the other three operations.
|
@@ -30,7 +28,6 @@ Now, perform the other three operations.
|
|
30
28
|
|
31
29
|
5
|
32
30
|
|
33
|
-
|
34
31
|
## Iteration 3 — Multiple Operations
|
35
32
|
|
36
33
|
Handle a set of operations, in sequence.
|
@@ -46,7 +43,6 @@ left-to-right, _ignoring the typical order of operations._
|
|
46
43
|
|
47
44
|
15 (i.e. not 9)
|
48
45
|
|
49
|
-
|
50
46
|
## Bonus — Exponentials
|
51
47
|
|
52
48
|
If you'd like, handle exponentials.
|
@@ -56,16 +52,21 @@ If you'd like, handle exponentials.
|
|
56
52
|
32
|
57
53
|
|
58
54
|
|
59
|
-
##
|
55
|
+
## Running the tests
|
56
|
+
|
57
|
+
1. Go to the root of your PHP exercise directory, which is `<EXERCISM_WORKSPACE>/php`.
|
58
|
+
To find the Exercism workspace run
|
59
|
+
|
60
|
+
% exercism debug | grep Workspace
|
60
61
|
|
61
|
-
1. Get [PHPUnit].
|
62
|
+
1. Get [PHPUnit] if you don't have it already.
|
62
63
|
|
63
64
|
% wget --no-check-certificate https://phar.phpunit.de/phpunit.phar
|
64
65
|
% chmod +x phpunit.phar
|
65
66
|
|
66
|
-
2. Execute the tests
|
67
|
+
2. Execute the tests:
|
67
68
|
|
68
|
-
% phpunit.phar wordy/wordy_test.php
|
69
|
+
% ./phpunit.phar wordy/wordy_test.php
|
69
70
|
|
70
71
|
[PHPUnit]: http://phpunit.de
|
71
72
|
|
@@ -4,10 +4,38 @@
|
|
4
4
|
{{- with .Hints }}
|
5
5
|
{{ . }}
|
6
6
|
{{ end }}
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
## Rust Installation
|
8
|
+
|
9
|
+
Refer to the [exercism help page][help-page] for Rust installation and learning
|
10
|
+
resources.
|
11
|
+
|
12
|
+
## Writing the Code
|
13
|
+
|
14
|
+
Execute the tests with:
|
15
|
+
|
16
|
+
```bash
|
17
|
+
$ cargo test
|
18
|
+
```
|
19
|
+
|
20
|
+
All but the first test have been ignored. After you get the first test to
|
21
|
+
pass, remove the ignore flag (`#[ignore]`) from the next test and get the tests
|
22
|
+
to pass again. The test file is located in the `tests` directory. You can
|
23
|
+
also remove the ignore flag from all the tests to get them to run all at once
|
24
|
+
if you wish.
|
25
|
+
|
26
|
+
Make sure to read the [Modules](https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html) chapter if you
|
27
|
+
haven't already, it will help you with organizing your files.
|
28
|
+
|
29
|
+
## Feedback, Issues, Pull Requests
|
30
|
+
|
31
|
+
The [exercism/rust](https://github.com/exercism/rust) repository on GitHub is the home for all of the Rust exercises. If you have feedback about an exercise, or want to help implement new exercises, head over there and create an issue. Members of the [rust track team](https://github.com/orgs/exercism/teams/rust) are happy to help!
|
32
|
+
|
33
|
+
If you want to know more about Exercism, take a look at the [contribution guide](https://github.com/exercism/docs/blob/master/contributing-to-language-tracks/README.md).
|
34
|
+
|
35
|
+
[help-page]: http://exercism.io/languages/rust
|
36
|
+
[modules]: https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html
|
37
|
+
[cargo]: https://doc.rust-lang.org/book/second-edition/ch14-00-more-about-cargo.html
|
38
|
+
{{ with .Spec.Credits }}
|
11
39
|
## Source
|
12
40
|
|
13
41
|
{{ . }}
|
@@ -63,6 +63,5 @@ If you want to know more about Exercism, take a look at the [contribution guide]
|
|
63
63
|
[modules]: https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html
|
64
64
|
[cargo]: https://doc.rust-lang.org/book/second-edition/ch14-00-more-about-cargo.html
|
65
65
|
|
66
|
-
|
67
66
|
## Submitting Incomplete Solutions
|
68
67
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -63,6 +63,5 @@ If you want to know more about Exercism, take a look at the [contribution guide]
|
|
63
63
|
[modules]: https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html
|
64
64
|
[cargo]: https://doc.rust-lang.org/book/second-edition/ch14-00-more-about-cargo.html
|
65
65
|
|
66
|
-
|
67
66
|
## Submitting Incomplete Solutions
|
68
67
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -39,6 +39,5 @@ If you want to know more about Exercism, take a look at the [contribution guide]
|
|
39
39
|
[modules]: https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html
|
40
40
|
[cargo]: https://doc.rust-lang.org/book/second-edition/ch14-00-more-about-cargo.html
|
41
41
|
|
42
|
-
|
43
42
|
## Submitting Incomplete Solutions
|
44
43
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -46,6 +46,5 @@ If you want to know more about Exercism, take a look at the [contribution guide]
|
|
46
46
|
[modules]: https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html
|
47
47
|
[cargo]: https://doc.rust-lang.org/book/second-edition/ch14-00-more-about-cargo.html
|
48
48
|
|
49
|
-
|
50
49
|
## Submitting Incomplete Solutions
|
51
50
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -57,6 +57,5 @@ If you want to know more about Exercism, take a look at the [contribution guide]
|
|
57
57
|
[modules]: https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html
|
58
58
|
[cargo]: https://doc.rust-lang.org/book/second-edition/ch14-00-more-about-cargo.html
|
59
59
|
|
60
|
-
|
61
60
|
## Submitting Incomplete Solutions
|
62
61
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -58,6 +58,5 @@ If you want to know more about Exercism, take a look at the [contribution guide]
|
|
58
58
|
[modules]: https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html
|
59
59
|
[cargo]: https://doc.rust-lang.org/book/second-edition/ch14-00-more-about-cargo.html
|
60
60
|
|
61
|
-
|
62
61
|
## Submitting Incomplete Solutions
|
63
62
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -50,6 +50,5 @@ If you want to know more about Exercism, take a look at the [contribution guide]
|
|
50
50
|
[modules]: https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html
|
51
51
|
[cargo]: https://doc.rust-lang.org/book/second-edition/ch14-00-more-about-cargo.html
|
52
52
|
|
53
|
-
|
54
53
|
## Submitting Incomplete Solutions
|
55
54
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -73,6 +73,5 @@ If you want to know more about Exercism, take a look at the [contribution guide]
|
|
73
73
|
[modules]: https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html
|
74
74
|
[cargo]: https://doc.rust-lang.org/book/second-edition/ch14-00-more-about-cargo.html
|
75
75
|
|
76
|
-
|
77
76
|
## Submitting Incomplete Solutions
|
78
77
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -20,11 +20,11 @@ All subsequent codons after are ignored, like this:
|
|
20
20
|
|
21
21
|
RNA: `"AUGUUUUCUUAAAUG"` =>
|
22
22
|
|
23
|
-
Codons: `"AUG", "UUU", "UCU", "
|
23
|
+
Codons: `"AUG", "UUU", "UCU", "UAA", "AUG"` =>
|
24
24
|
|
25
25
|
Protein: `"Methionine", "Phenylalanine", "Serine"`
|
26
26
|
|
27
|
-
Note the stop codon terminates the translation and the final methionine is not translated into the protein sequence.
|
27
|
+
Note the stop codon `"UAA"` terminates the translation and the final methionine is not translated into the protein sequence.
|
28
28
|
|
29
29
|
Below are the codons and resulting Amino Acids needed for the exercise.
|
30
30
|
|
@@ -47,6 +47,5 @@ If you want to know more about Exercism, take a look at the [contribution guide]
|
|
47
47
|
[modules]: https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html
|
48
48
|
[cargo]: https://doc.rust-lang.org/book/second-edition/ch14-00-more-about-cargo.html
|
49
49
|
|
50
|
-
|
51
50
|
## Submitting Incomplete Solutions
|
52
51
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -95,6 +95,5 @@ If you want to know more about Exercism, take a look at the [contribution guide]
|
|
95
95
|
[modules]: https://doc.rust-lang.org/book/second-edition/ch07-00-modules.html
|
96
96
|
[cargo]: https://doc.rust-lang.org/book/second-edition/ch14-00-more-about-cargo.html
|
97
97
|
|
98
|
-
|
99
98
|
## Submitting Incomplete Solutions
|
100
99
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,9 @@
|
|
1
|
+
## Notes on Rust implementation
|
2
|
+
|
3
|
+
By using private fields in structs with public `new` functions returning
|
4
|
+
`Option` or `Result` (as here with `DNA::new` & `RNA::new`), we can guarantee
|
5
|
+
that the internal representation of `DNA` is correct. Because every valid DNA
|
6
|
+
string has a valid RNA string, we don't need to return a `Result`/`Option` from
|
7
|
+
`to_rna`.
|
8
|
+
|
9
|
+
This explains the type signatures you will see in the tests.
|
@@ -18,6 +18,17 @@ each nucleotide with its complement:
|
|
18
18
|
* `T` -> `A`
|
19
19
|
* `A` -> `U`
|
20
20
|
|
21
|
+
## Notes on Rust implementation
|
22
|
+
|
23
|
+
By using private fields in structs with public `new` functions returning
|
24
|
+
`Option` or `Result` (as here with `DNA::new` & `RNA::new`), we can guarantee
|
25
|
+
that the internal representation of `DNA` is correct. Because every valid DNA
|
26
|
+
string has a valid RNA string, we don't need to return a `Result`/`Option` from
|
27
|
+
`to_rna`.
|
28
|
+
|
29
|
+
This explains the type signatures you will see in the tests.
|
30
|
+
|
31
|
+
|
21
32
|
## Rust Installation
|
22
33
|
|
23
34
|
Refer to the [exercism help page][help-page] for Rust installation and learning
|
@@ -52,7 +63,7 @@ If you want to know more about Exercism, take a look at the [contribution guide]
|
|
52
63
|
|
53
64
|
## Source
|
54
65
|
|
55
|
-
|
66
|
+
Hyperphysics [http://hyperphysics.phy-astr.gsu.edu/hbase/Organic/transcription.html](http://hyperphysics.phy-astr.gsu.edu/hbase/Organic/transcription.html)
|
56
67
|
|
57
68
|
## Submitting Incomplete Solutions
|
58
69
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -1,40 +1,79 @@
|
|
1
|
-
#[derive(PartialEq, Eq, Debug)]
|
2
|
-
pub struct RNA {
|
3
|
-
nucleotides: String
|
4
|
-
}
|
5
1
|
|
6
|
-
impl RNA {
|
7
|
-
pub fn new(nucleotides: &str) -> RNA {
|
8
|
-
RNA { nucleotides: nucleotides.to_string() }
|
9
|
-
}
|
10
|
-
}
|
11
2
|
|
12
|
-
|
13
|
-
|
14
|
-
|
3
|
+
/// The possible nucleotides in DNA and RNA
|
4
|
+
#[derive(Debug, Eq, PartialEq, Clone, Copy)]
|
5
|
+
pub enum Nucleotide {
|
6
|
+
Adenine,
|
7
|
+
Cytosine,
|
8
|
+
Guanine,
|
9
|
+
Thymine,
|
10
|
+
Uracil
|
15
11
|
}
|
16
12
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
13
|
+
impl Nucleotide {
|
14
|
+
/// Parses a nucleotode from its character value, if valid.
|
15
|
+
fn from_char(ch: char) -> Option<Nucleotide> {
|
16
|
+
Some(match ch {
|
17
|
+
'A' => Nucleotide::Adenine,
|
18
|
+
'C' => Nucleotide::Cytosine,
|
19
|
+
'G' => Nucleotide::Guanine,
|
20
|
+
'T' => Nucleotide::Thymine,
|
21
|
+
'U' => Nucleotide::Uracil,
|
22
|
+
_ => { return None; }
|
23
|
+
})
|
24
24
|
}
|
25
25
|
}
|
26
26
|
|
27
|
+
/// A vector of nucleotides
|
28
|
+
///
|
29
|
+
/// Guaranteed that Uracil is not present thanks to `new`.
|
30
|
+
#[derive(Debug, Eq, PartialEq, Clone)]
|
31
|
+
pub struct DNA(Vec<Nucleotide>);
|
32
|
+
|
27
33
|
impl DNA {
|
28
|
-
|
29
|
-
|
34
|
+
/// Parse a DNA string, checking it is valid.
|
35
|
+
///
|
36
|
+
/// The error value is the first invalid character index (char index, not utf8).
|
37
|
+
pub fn new(input: &str) -> Result<DNA, usize> {
|
38
|
+
let mut out = Vec::new();
|
39
|
+
for (idx, ch) in input.chars().enumerate() {
|
40
|
+
match Nucleotide::from_char(ch) {
|
41
|
+
Some(Nucleotide::Uracil) | None => { return Err(idx); },
|
42
|
+
Some(n) => { out.push(n); },
|
43
|
+
}
|
44
|
+
}
|
45
|
+
Ok(DNA(out))
|
30
46
|
}
|
31
47
|
|
32
|
-
pub fn to_rna(
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
48
|
+
pub fn to_rna(mut self) -> RNA {
|
49
|
+
for nuc in self.0.iter_mut() {
|
50
|
+
*nuc = match *nuc {
|
51
|
+
Nucleotide::Adenine => Nucleotide::Uracil,
|
52
|
+
Nucleotide::Cytosine => Nucleotide::Guanine,
|
53
|
+
Nucleotide::Guanine => Nucleotide::Cytosine,
|
54
|
+
Nucleotide::Thymine => Nucleotide::Adenine,
|
55
|
+
Nucleotide::Uracil => unreachable!()
|
56
|
+
}
|
57
|
+
}
|
58
|
+
RNA(self.0)
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
#[derive(Debug, Eq, PartialEq, Clone)]
|
63
|
+
pub struct RNA(Vec<Nucleotide>);
|
64
|
+
|
65
|
+
impl RNA {
|
66
|
+
/// Parse a RNA string, checking it is valid.
|
67
|
+
///
|
68
|
+
/// The error value is the first invalid character index (char index, not utf8).
|
69
|
+
pub fn new(input: &str) -> Result<RNA, usize> {
|
70
|
+
let mut out = Vec::new();
|
71
|
+
for (idx, ch) in input.chars().enumerate() {
|
72
|
+
match Nucleotide::from_char(ch) {
|
73
|
+
Some(Nucleotide::Thymine) | None => { return Err(idx); },
|
74
|
+
Some(n) => { out.push(n); },
|
75
|
+
}
|
38
76
|
}
|
77
|
+
Ok(RNA(out))
|
39
78
|
}
|
40
79
|
}
|
@@ -1,55 +1,88 @@
|
|
1
1
|
extern crate rna_transcription as dna;
|
2
2
|
|
3
3
|
#[test]
|
4
|
-
fn
|
5
|
-
|
6
|
-
assert_ne!(dna::RNA::new("CGA"), dna::RNA::new("AGC"));
|
4
|
+
fn test_valid_dna_input() {
|
5
|
+
assert!(dna::DNA::new("GCTA").is_ok());
|
7
6
|
}
|
8
7
|
|
9
8
|
#[test]
|
10
9
|
#[ignore]
|
11
|
-
fn
|
12
|
-
|
10
|
+
fn test_valid_rna_input() {
|
11
|
+
assert!(dna::RNA::new("CGAU").is_ok());
|
13
12
|
}
|
14
13
|
|
15
14
|
#[test]
|
16
15
|
#[ignore]
|
17
|
-
fn
|
18
|
-
|
16
|
+
fn test_invalid_dna_input() {
|
17
|
+
// Invalid character
|
18
|
+
assert!(dna::DNA::new("X").is_err());
|
19
|
+
// Valid nucleotide, but invalid in context
|
20
|
+
assert!(dna::DNA::new("U").is_err());
|
21
|
+
// Longer string with contained errors
|
22
|
+
assert!(dna::DNA::new("ACGTUXXCTTAA").is_err());
|
19
23
|
}
|
20
24
|
|
21
25
|
#[test]
|
22
26
|
#[ignore]
|
23
|
-
fn
|
24
|
-
|
27
|
+
fn test_invalid_rna_input() {
|
28
|
+
// Invalid character
|
29
|
+
assert!(dna::RNA::new("X").is_err());
|
30
|
+
// Valid nucleotide, but invalid in context
|
31
|
+
assert!(dna::RNA::new("T").is_err());
|
32
|
+
// Longer string with contained errors
|
33
|
+
assert!(dna::RNA::new("ACGUTTXCUUAA").is_err());
|
25
34
|
}
|
26
35
|
|
27
36
|
#[test]
|
28
37
|
#[ignore]
|
29
|
-
fn
|
30
|
-
assert_eq!(
|
38
|
+
fn test_acid_equals_acid() {
|
39
|
+
assert_eq!(dna::DNA::new("CGA").unwrap(), dna::DNA::new("CGA").unwrap());
|
40
|
+
assert_ne!(dna::DNA::new("CGA").unwrap(), dna::DNA::new("AGC").unwrap());
|
41
|
+
assert_eq!(dna::RNA::new("CGA").unwrap(), dna::RNA::new("CGA").unwrap());
|
42
|
+
assert_ne!(dna::RNA::new("CGA").unwrap(), dna::RNA::new("AGC").unwrap());
|
31
43
|
}
|
32
44
|
|
33
45
|
#[test]
|
34
46
|
#[ignore]
|
35
|
-
fn
|
36
|
-
assert_eq!(
|
47
|
+
fn test_transcribes_cytosine_guanine() {
|
48
|
+
assert_eq!(
|
49
|
+
dna::RNA::new("G").unwrap(),
|
50
|
+
dna::DNA::new("C").unwrap().to_rna()
|
51
|
+
);
|
37
52
|
}
|
38
53
|
|
39
54
|
#[test]
|
40
55
|
#[ignore]
|
41
|
-
fn
|
42
|
-
|
56
|
+
fn test_transcribes_guanine_cytosine() {
|
57
|
+
assert_eq!(
|
58
|
+
dna::RNA::new("C").unwrap(),
|
59
|
+
dna::DNA::new("G").unwrap().to_rna()
|
60
|
+
);
|
61
|
+
}
|
62
|
+
|
63
|
+
#[test]
|
64
|
+
#[ignore]
|
65
|
+
fn test_transcribes_adenine_uracil() {
|
66
|
+
assert_eq!(
|
67
|
+
dna::RNA::new("U").unwrap(),
|
68
|
+
dna::DNA::new("A").unwrap().to_rna()
|
69
|
+
);
|
43
70
|
}
|
44
71
|
|
45
72
|
#[test]
|
46
73
|
#[ignore]
|
47
|
-
fn
|
48
|
-
|
74
|
+
fn test_transcribes_thymine_to_adenine() {
|
75
|
+
assert_eq!(
|
76
|
+
dna::RNA::new("A").unwrap(),
|
77
|
+
dna::DNA::new("T").unwrap().to_rna()
|
78
|
+
);
|
49
79
|
}
|
50
80
|
|
51
81
|
#[test]
|
52
82
|
#[ignore]
|
53
|
-
fn
|
54
|
-
|
83
|
+
fn test_transcribes_all_dna_to_rna() {
|
84
|
+
assert_eq!(
|
85
|
+
dna::RNA::new("UGCACCAGAAUU").unwrap(),
|
86
|
+
dna::DNA::new("ACGTGGTCTTAA").unwrap().to_rna()
|
87
|
+
)
|
55
88
|
}
|