trackler 2.2.0.3 → 2.2.0.4
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/list-ops/canonical-data.json +27 -11
- data/problem-specifications/exercises/rotational-cipher/canonical-data.json +8 -8
- data/tracks/clojure/config.json +240 -63
- data/tracks/cpp/CMakeLists.txt +1 -0
- data/tracks/cpp/config.json +8 -0
- data/tracks/cpp/exercises/bracket-push/CMakeLists.txt +52 -0
- data/tracks/cpp/exercises/bracket-push/bracket_push_test.cpp +75 -0
- data/tracks/cpp/exercises/bracket-push/example.cpp +28 -0
- data/tracks/cpp/exercises/bracket-push/example.h +13 -0
- data/tracks/ecmascript/config.json +235 -71
- data/tracks/ecmascript/config/exercise_readme.go.tmpl +16 -0
- data/tracks/ecmascript/exercises/accumulate/README.md +65 -0
- data/tracks/ecmascript/exercises/acronym/README.md +45 -0
- data/tracks/ecmascript/exercises/all-your-base/README.md +65 -0
- data/tracks/ecmascript/exercises/allergies/README.md +67 -0
- data/tracks/ecmascript/exercises/alphametics/README.md +65 -0
- data/tracks/ecmascript/exercises/anagram/README.md +43 -0
- data/tracks/ecmascript/exercises/atbash-cipher/README.md +64 -0
- data/tracks/ecmascript/exercises/beer-song/README.md +357 -0
- data/tracks/ecmascript/exercises/binary-search-tree/README.md +90 -0
- data/tracks/ecmascript/exercises/binary-search/README.md +71 -0
- data/tracks/ecmascript/exercises/binary/README.md +65 -0
- data/tracks/ecmascript/exercises/bob/README.md +48 -0
- data/tracks/ecmascript/exercises/bracket-push/README.md +40 -0
- data/tracks/ecmascript/exercises/circular-buffer/README.md +80 -0
- data/tracks/ecmascript/exercises/clock/README.md +43 -0
- data/tracks/ecmascript/exercises/connect/README.md +64 -0
- data/tracks/ecmascript/exercises/crypto-square/README.md +104 -0
- data/tracks/ecmascript/exercises/custom-set/README.md +41 -0
- data/tracks/ecmascript/exercises/diamond/README.md +89 -0
- data/tracks/ecmascript/exercises/difference-of-squares/README.md +49 -0
- data/tracks/ecmascript/exercises/diffie-hellman/README.md +74 -0
- data/tracks/ecmascript/exercises/etl/README.md +81 -0
- data/tracks/ecmascript/exercises/flatten-array/README.md +48 -0
- data/tracks/ecmascript/exercises/food-chain/README.md +100 -0
- data/tracks/ecmascript/exercises/gigasecond/README.md +41 -0
- data/tracks/ecmascript/exercises/grade-school/README.md +72 -0
- data/tracks/ecmascript/exercises/grains/README.md +64 -0
- data/tracks/ecmascript/exercises/hamming/README.md +72 -0
- data/tracks/ecmascript/exercises/hello-world/README.md +51 -0
- data/tracks/ecmascript/exercises/hexadecimal/README.md +44 -0
- data/tracks/ecmascript/exercises/isogram/README.md +49 -0
- data/tracks/ecmascript/exercises/kindergarten-garden/README.md +96 -0
- data/tracks/ecmascript/exercises/largest-series-product/README.md +50 -0
- data/tracks/ecmascript/exercises/leap/README.md +63 -0
- data/tracks/ecmascript/exercises/linked-list/README.md +64 -0
- data/tracks/ecmascript/exercises/list-ops/README.md +40 -0
- data/tracks/ecmascript/exercises/luhn/README.md +101 -0
- data/tracks/ecmascript/exercises/matrix/README.md +75 -0
- data/tracks/ecmascript/exercises/meetup/README.md +60 -0
- data/tracks/ecmascript/exercises/minesweeper/README.md +60 -0
- data/tracks/ecmascript/exercises/nth-prime/README.md +45 -0
- data/tracks/ecmascript/exercises/ocr-numbers/README.md +115 -0
- data/tracks/ecmascript/exercises/octal/README.md +79 -0
- data/tracks/ecmascript/exercises/palindrome-products/README.md +70 -0
- data/tracks/ecmascript/exercises/pangram/README.md +45 -0
- data/tracks/ecmascript/exercises/pascals-triangle/README.md +51 -0
- data/tracks/ecmascript/exercises/perfect-numbers/README.md +54 -0
- data/tracks/ecmascript/exercises/phone-number/README.md +64 -0
- data/tracks/ecmascript/exercises/pig-latin/README.md +54 -0
- data/tracks/ecmascript/exercises/prime-factors/README.md +66 -0
- data/tracks/ecmascript/exercises/pythagorean-triplet/README.md +54 -0
- data/tracks/ecmascript/exercises/queen-attack/README.md +63 -0
- data/tracks/ecmascript/exercises/raindrops/README.md +54 -0
- data/tracks/ecmascript/exercises/rna-transcription/README.md +55 -0
- data/tracks/ecmascript/exercises/robot-name/README.md +52 -0
- data/tracks/ecmascript/exercises/robot-simulator/README.md +64 -0
- data/tracks/ecmascript/exercises/roman-numerals/README.md +79 -0
- data/tracks/ecmascript/exercises/saddle-points/README.md +63 -0
- data/tracks/ecmascript/exercises/say/README.md +99 -0
- data/tracks/ecmascript/exercises/scrabble-score/README.md +74 -0
- data/tracks/ecmascript/exercises/secret-handshake/README.md +65 -0
- data/tracks/ecmascript/exercises/series/README.md +57 -0
- data/tracks/ecmascript/exercises/sieve/README.md +64 -0
- data/tracks/ecmascript/exercises/simple-cipher/README.md +120 -0
- data/tracks/ecmascript/exercises/space-age/README.md +54 -0
- data/tracks/ecmascript/exercises/strain/README.md +70 -0
- data/tracks/ecmascript/exercises/sublist/README.md +50 -0
- data/tracks/ecmascript/exercises/sublist/example.js +30 -0
- data/tracks/ecmascript/exercises/sublist/package.json +69 -0
- data/tracks/ecmascript/exercises/sublist/sublist.spec.js +126 -0
- data/tracks/ecmascript/exercises/sum-of-multiples/README.md +48 -0
- data/tracks/ecmascript/exercises/triangle/README.md +56 -0
- data/tracks/ecmascript/exercises/trinary/README.md +58 -0
- data/tracks/ecmascript/exercises/two-bucket/README.md +66 -0
- data/tracks/ecmascript/exercises/word-count/README.md +49 -0
- data/tracks/ecmascript/exercises/wordy/README.md +93 -0
- data/tracks/go/.gitignore +1 -0
- data/tracks/go/README.md +2 -0
- data/tracks/go/config/exercise_readme.go.tmpl +16 -0
- data/tracks/go/exercises/accumulate/README.md +53 -0
- data/tracks/go/exercises/acronym/README.md +33 -0
- data/tracks/go/exercises/all-your-base/README.md +53 -0
- data/tracks/go/exercises/allergies/README.md +55 -0
- data/tracks/go/exercises/anagram/README.md +31 -0
- data/tracks/go/exercises/atbash-cipher/README.md +52 -0
- data/tracks/go/exercises/bank-account/README.md +48 -0
- data/tracks/go/exercises/beer-song/README.md +345 -0
- data/tracks/go/exercises/binary-search-tree/README.md +78 -0
- data/tracks/go/exercises/binary-search/README.md +59 -0
- data/tracks/go/exercises/binary/README.md +53 -0
- data/tracks/go/exercises/bob/README.md +36 -0
- data/tracks/go/exercises/bowling/README.md +71 -0
- data/tracks/go/exercises/bracket-push/README.md +28 -0
- data/tracks/go/exercises/change/README.md +41 -0
- data/tracks/go/exercises/circular-buffer/README.md +68 -0
- data/tracks/go/exercises/clock/README.md +31 -0
- data/tracks/go/exercises/connect/README.md +52 -0
- data/tracks/go/exercises/counter/README.md +42 -0
- data/tracks/go/exercises/crypto-square/README.md +92 -0
- data/tracks/go/exercises/custom-set/README.md +29 -0
- data/tracks/go/exercises/diamond/README.md +77 -0
- data/tracks/go/exercises/difference-of-squares/README.md +37 -0
- data/tracks/go/exercises/diffie-hellman/README.md +62 -0
- data/tracks/go/exercises/error-handling/README.md +31 -0
- data/tracks/go/exercises/etl/README.md +69 -0
- data/tracks/go/exercises/food-chain/README.md +88 -0
- data/tracks/go/exercises/forth/README.md +47 -0
- data/tracks/go/exercises/gigasecond/README.md +29 -0
- data/tracks/go/exercises/grade-school/README.md +60 -0
- data/tracks/go/exercises/grains/README.md +52 -0
- data/tracks/go/exercises/hamming/README.md +60 -0
- data/tracks/go/exercises/hello-world/README.md +39 -0
- data/tracks/go/exercises/hexadecimal/README.md +32 -0
- data/tracks/go/exercises/house/README.md +131 -0
- data/tracks/go/exercises/isogram/README.md +37 -0
- data/tracks/go/exercises/kindergarten-garden/README.md +84 -0
- data/tracks/go/exercises/largest-series-product/README.md +38 -0
- data/tracks/go/exercises/leap/README.md +51 -0
- data/tracks/go/exercises/ledger/README.md +36 -0
- data/tracks/go/exercises/luhn/README.md +89 -0
- data/tracks/go/exercises/matrix/README.md +63 -0
- data/tracks/go/exercises/meetup/README.md +48 -0
- data/tracks/go/exercises/minesweeper/README.md +48 -0
- data/tracks/go/exercises/nth-prime/README.md +33 -0
- data/tracks/go/exercises/nucleotide-count/README.md +51 -0
- data/tracks/go/exercises/ocr-numbers/README.md +103 -0
- data/tracks/go/exercises/octal/README.md +67 -0
- data/tracks/go/exercises/paasio/README.md +38 -0
- data/tracks/go/exercises/palindrome-products/README.md +58 -0
- data/tracks/go/exercises/pangram/README.md +33 -0
- data/tracks/go/exercises/parallel-letter-frequency/README.md +29 -0
- data/tracks/go/exercises/pascals-triangle/README.md +39 -0
- data/tracks/go/exercises/perfect-numbers/README.md +42 -0
- data/tracks/go/exercises/phone-number/README.md +52 -0
- data/tracks/go/exercises/pig-latin/README.md +42 -0
- data/tracks/go/exercises/poker/README.md +30 -0
- data/tracks/go/exercises/pov/README.md +64 -0
- data/tracks/go/exercises/prime-factors/README.md +54 -0
- data/tracks/go/exercises/protein-translation/README.md +67 -0
- data/tracks/go/exercises/pythagorean-triplet/README.md +42 -0
- data/tracks/go/exercises/queen-attack/README.md +51 -0
- data/tracks/go/exercises/raindrops/README.md +42 -0
- data/tracks/go/exercises/react/README.md +37 -0
- data/tracks/go/exercises/rna-transcription/README.md +43 -0
- data/tracks/go/exercises/robot-name/README.md +40 -0
- data/tracks/go/exercises/robot-simulator/README.md +52 -0
- data/tracks/go/exercises/roman-numerals/README.md +67 -0
- data/tracks/go/exercises/saddle-points/README.md +51 -0
- data/tracks/go/exercises/say/README.md +87 -0
- data/tracks/go/exercises/scrabble-score/README.md +62 -0
- data/tracks/go/exercises/secret-handshake/README.md +53 -0
- data/tracks/go/exercises/series/README.md +45 -0
- data/tracks/go/exercises/sieve/README.md +52 -0
- data/tracks/go/exercises/simple-cipher/README.md +108 -0
- data/tracks/go/exercises/strain/README.md +58 -0
- data/tracks/go/exercises/sum-of-multiples/README.md +36 -0
- data/tracks/go/exercises/tournament/README.md +86 -0
- data/tracks/go/exercises/transpose/README.md +83 -0
- data/tracks/go/exercises/tree-building/README.md +48 -0
- data/tracks/go/exercises/triangle/README.md +44 -0
- data/tracks/go/exercises/trinary/README.md +46 -0
- data/tracks/go/exercises/twelve-days/README.md +57 -0
- data/tracks/go/exercises/variable-length-quantity/README.md +57 -0
- data/tracks/go/exercises/word-count/README.md +37 -0
- data/tracks/go/exercises/word-search/README.md +48 -0
- data/tracks/go/exercises/wordy/README.md +81 -0
- data/tracks/haskell/README.md +2 -2
- data/tracks/haskell/exercises/beer-song/test/Tests.hs +1 -1
- data/tracks/haskell/exercises/food-chain/test/Tests.hs +1 -1
- data/tracks/haskell/exercises/house/test/Tests.hs +1 -1
- data/tracks/haskell/exercises/say/test/Tests.hs +1 -1
- data/tracks/java/config.json +10 -10
- data/tracks/java/exercises/rotational-cipher/src/example/java/RotationalCipher.java +5 -8
- data/tracks/java/exercises/rotational-cipher/src/test/java/RotationalCipherTest.java +3 -6
- data/tracks/javascript/config.json +397 -140
- data/tracks/kotlin/config.json +248 -63
- data/tracks/kotlin/config/exercise_readme.go.tmpl +16 -0
- data/tracks/kotlin/exercises/accumulate/README.md +38 -0
- data/tracks/kotlin/exercises/acronym/README.md +18 -0
- data/tracks/kotlin/exercises/all-your-base/README.md +38 -0
- data/tracks/kotlin/exercises/allergies/README.md +40 -0
- data/tracks/kotlin/exercises/anagram/README.md +16 -0
- data/tracks/kotlin/exercises/atbash-cipher/README.md +37 -0
- data/tracks/kotlin/exercises/bank-account/README.md +33 -0
- data/tracks/kotlin/exercises/beer-song/README.md +330 -0
- data/tracks/kotlin/exercises/binary-search/README.md +44 -0
- data/tracks/kotlin/exercises/binary/README.md +38 -0
- data/tracks/kotlin/exercises/bob/README.md +21 -0
- data/tracks/kotlin/exercises/bracket-push/README.md +13 -0
- data/tracks/kotlin/exercises/change/README.md +26 -0
- data/tracks/kotlin/exercises/clock/README.md +16 -0
- data/tracks/kotlin/exercises/collatz-conjecture/README.md +36 -0
- data/tracks/kotlin/exercises/complex-numbers/README.md +14 -0
- data/tracks/kotlin/exercises/diamond/README.md +62 -0
- data/tracks/kotlin/exercises/difference-of-squares/README.md +22 -0
- data/tracks/kotlin/exercises/etl/README.md +54 -0
- data/tracks/kotlin/exercises/flatten-array/README.md +21 -0
- data/tracks/kotlin/exercises/gigasecond/README.md +14 -0
- data/tracks/kotlin/exercises/grade-school/README.md +45 -0
- data/tracks/kotlin/exercises/grains/README.md +37 -0
- data/tracks/kotlin/exercises/hamming/README.md +45 -0
- data/tracks/kotlin/exercises/hello-world/README.md +24 -0
- data/tracks/kotlin/exercises/hexadecimal/README.md +17 -0
- data/tracks/kotlin/exercises/isogram/README.md +22 -0
- data/tracks/kotlin/exercises/largest-series-product/README.md +23 -0
- data/tracks/kotlin/exercises/leap/README.md +36 -0
- data/tracks/kotlin/exercises/linked-list/README.md +37 -0
- data/tracks/kotlin/exercises/list-ops/README.md +20 -0
- data/tracks/kotlin/exercises/luhn/README.md +74 -0
- data/tracks/kotlin/exercises/minesweeper/README.md +33 -0
- data/tracks/kotlin/exercises/nth-prime/README.md +18 -0
- data/tracks/kotlin/exercises/nucleotide-count/README.md +36 -0
- data/tracks/kotlin/exercises/pangram/README.md +18 -0
- data/tracks/kotlin/exercises/pascals-triangle/README.md +24 -0
- data/tracks/kotlin/exercises/perfect-numbers/README.md +27 -0
- data/tracks/kotlin/exercises/phone-number/README.md +37 -0
- data/tracks/kotlin/exercises/pig-latin/README.md +27 -0
- data/tracks/kotlin/exercises/prime-factors/README.md +39 -0
- data/tracks/kotlin/exercises/raindrops/README.md +27 -0
- data/tracks/kotlin/exercises/react/README.md +22 -0
- data/tracks/kotlin/exercises/rna-transcription/README.md +28 -0
- data/tracks/kotlin/exercises/robot-name/README.md +25 -0
- data/tracks/kotlin/exercises/robot-simulator/README.md +37 -0
- data/tracks/kotlin/exercises/roman-numerals/README.md +52 -0
- data/tracks/kotlin/exercises/saddle-points/README.md +36 -0
- data/tracks/kotlin/exercises/scrabble-score/README.md +47 -0
- data/tracks/kotlin/exercises/secret-handshake/README.md +38 -0
- data/tracks/kotlin/exercises/series/README.md +30 -0
- data/tracks/kotlin/exercises/sieve/README.md +37 -0
- data/tracks/kotlin/exercises/simple-cipher/README.md +93 -0
- data/tracks/kotlin/exercises/space-age/README.md +27 -0
- data/tracks/kotlin/exercises/spiral-matrix/README.md +33 -0
- data/tracks/kotlin/exercises/strain/README.md +43 -0
- data/tracks/kotlin/exercises/sublist/README.md +24 -0
- data/tracks/kotlin/exercises/sum-of-multiples/README.md +21 -0
- data/tracks/kotlin/exercises/triangle/README.md +29 -0
- data/tracks/kotlin/exercises/word-count/README.md +22 -0
- data/tracks/ocaml/config/exercise_readme.go.tmpl +16 -0
- data/tracks/ocaml/exercises/acronym/README.md +55 -0
- data/tracks/ocaml/exercises/all-your-base/README.md +75 -0
- data/tracks/ocaml/exercises/anagram/README.md +53 -0
- data/tracks/ocaml/exercises/atbash-cipher/README.md +93 -0
- data/tracks/ocaml/exercises/beer-song/README.md +367 -0
- data/tracks/ocaml/exercises/binary-search/README.md +81 -0
- data/tracks/ocaml/exercises/bob/README.md +87 -0
- data/tracks/ocaml/exercises/bowling/README.md +93 -0
- data/tracks/ocaml/exercises/bracket-push/README.md +50 -0
- data/tracks/ocaml/exercises/change/README.md +63 -0
- data/tracks/ocaml/exercises/connect/README.md +74 -0
- data/tracks/ocaml/exercises/custom-set/README.md +51 -0
- data/tracks/ocaml/exercises/difference-of-squares/README.md +59 -0
- data/tracks/ocaml/exercises/dominoes/README.md +58 -0
- data/tracks/ocaml/exercises/etl/README.md +91 -0
- data/tracks/ocaml/exercises/forth/README.md +69 -0
- data/tracks/ocaml/exercises/grade-school/README.md +82 -0
- data/tracks/ocaml/exercises/hamming/README.md +82 -0
- data/tracks/ocaml/exercises/hangman/README.md +61 -0
- data/tracks/ocaml/exercises/hello-world/README.md +61 -0
- data/tracks/ocaml/exercises/hexadecimal/README.md +54 -0
- data/tracks/ocaml/exercises/leap/README.md +73 -0
- data/tracks/ocaml/exercises/list-ops/README.md +50 -0
- data/tracks/ocaml/exercises/luhn/README.md +111 -0
- data/tracks/ocaml/exercises/meetup/README.md +70 -0
- data/tracks/ocaml/exercises/minesweeper/README.md +70 -0
- data/tracks/ocaml/exercises/nucleotide-count/README.md +73 -0
- data/tracks/ocaml/exercises/pangram/README.md +55 -0
- data/tracks/ocaml/exercises/phone-number/README.md +74 -0
- data/tracks/ocaml/exercises/point-mutations/README.md +81 -0
- data/tracks/ocaml/exercises/prime-factors/README.md +76 -0
- data/tracks/ocaml/exercises/raindrops/README.md +64 -0
- data/tracks/ocaml/exercises/react/README.md +59 -0
- data/tracks/ocaml/exercises/rna-transcription/README.md +65 -0
- data/tracks/ocaml/exercises/robot-name/README.md +62 -0
- data/tracks/ocaml/exercises/roman-numerals/README.md +89 -0
- data/tracks/ocaml/exercises/run-length-encoding/README.md +70 -0
- data/tracks/ocaml/exercises/say/README.md +109 -0
- data/tracks/ocaml/exercises/space-age/README.md +64 -0
- data/tracks/ocaml/exercises/triangle/README.md +66 -0
- data/tracks/ocaml/exercises/word-count/README.md +59 -0
- data/tracks/ocaml/exercises/zipper/README.md +71 -0
- data/tracks/perl5/README.md +1 -1
- data/tracks/perl5/config/exercise_readme.go.tmpl +16 -0
- data/tracks/perl5/exercises/accumulate/README.md +35 -0
- data/tracks/perl5/exercises/all-your-base/README.md +35 -0
- data/tracks/perl5/exercises/allergies/README.md +37 -0
- data/tracks/perl5/exercises/anagram/README.md +13 -0
- data/tracks/perl5/exercises/atbash-cipher/README.md +34 -0
- data/tracks/perl5/exercises/beer-song/README.md +327 -0
- data/tracks/perl5/exercises/binary-search-tree/README.md +60 -0
- data/tracks/perl5/exercises/binary-search/README.md +41 -0
- data/tracks/perl5/exercises/binary/README.md +35 -0
- data/tracks/perl5/exercises/bob/README.md +18 -0
- data/tracks/perl5/exercises/clock/README.md +13 -0
- data/tracks/perl5/exercises/crypto-square/README.md +74 -0
- data/tracks/perl5/exercises/custom-set/README.md +11 -0
- data/tracks/perl5/exercises/difference-of-squares/README.md +19 -0
- data/tracks/perl5/exercises/etl/README.md +51 -0
- data/tracks/perl5/exercises/food-chain/README.md +70 -0
- data/tracks/perl5/exercises/gigasecond/README.md +11 -0
- data/tracks/perl5/exercises/grade-school/README.md +42 -0
- data/tracks/perl5/exercises/grains/README.md +34 -0
- data/tracks/perl5/exercises/hamming/README.md +42 -0
- data/tracks/perl5/exercises/hello-world/README.md +21 -0
- data/tracks/perl5/exercises/hexadecimal/README.md +14 -0
- data/tracks/perl5/exercises/house/README.md +113 -0
- data/tracks/perl5/exercises/kindergarten-garden/README.md +66 -0
- data/tracks/perl5/exercises/largest-series-product/README.md +20 -0
- data/tracks/perl5/exercises/leap/README.md +33 -0
- data/tracks/perl5/exercises/linked-list/README.md +34 -0
- data/tracks/perl5/exercises/list-ops/README.md +10 -0
- data/tracks/perl5/exercises/luhn/Example.pm +20 -42
- data/tracks/perl5/exercises/luhn/Luhn.pm +9 -0
- data/tracks/perl5/exercises/luhn/README.md +71 -0
- data/tracks/perl5/exercises/luhn/example.yaml +38 -0
- data/tracks/perl5/exercises/luhn/luhn.t +127 -26
- data/tracks/perl5/exercises/matrix/README.md +45 -0
- data/tracks/perl5/exercises/meetup/README.md +30 -0
- data/tracks/perl5/exercises/minesweeper/README.md +30 -0
- data/tracks/perl5/exercises/nucleotide-count/README.md +33 -0
- data/tracks/perl5/exercises/ocr-numbers/README.md +85 -0
- data/tracks/perl5/exercises/palindrome-products/README.md +40 -0
- data/tracks/perl5/exercises/pascals-triangle/README.md +21 -0
- data/tracks/perl5/exercises/phone-number/Example.pm +6 -26
- data/tracks/perl5/exercises/phone-number/PhoneNumber.pm +5 -0
- data/tracks/perl5/exercises/phone-number/README.md +34 -0
- data/tracks/perl5/exercises/phone-number/example.yaml +15 -0
- data/tracks/perl5/exercises/phone-number/phone-number.t +138 -0
- data/tracks/perl5/exercises/pig-latin/README.md +24 -0
- data/tracks/perl5/exercises/point-mutations/README.md +41 -0
- data/tracks/perl5/exercises/prime-factors/README.md +36 -0
- data/tracks/perl5/exercises/proverb/README.md +18 -0
- data/tracks/perl5/exercises/pythagorean-triplet/README.md +24 -0
- data/tracks/perl5/exercises/queen-attack/README.md +33 -0
- data/tracks/perl5/exercises/raindrops/README.md +24 -0
- data/tracks/perl5/exercises/rna-transcription/README.md +25 -0
- data/tracks/perl5/exercises/robot-name/README.md +22 -0
- data/tracks/perl5/exercises/robot-simulator/README.md +34 -0
- data/tracks/perl5/exercises/roman-numerals/README.md +49 -0
- data/tracks/perl5/exercises/saddle-points/README.md +33 -0
- data/tracks/perl5/exercises/say/README.md +69 -0
- data/tracks/perl5/exercises/scrabble-score/README.md +44 -0
- data/tracks/perl5/exercises/secret-handshake/README.md +35 -0
- data/tracks/perl5/exercises/series/README.md +27 -0
- data/tracks/perl5/exercises/sieve/README.md +34 -0
- data/tracks/perl5/exercises/simple-cipher/README.md +90 -0
- data/tracks/perl5/exercises/simple-linked-list/README.md +28 -0
- data/tracks/perl5/exercises/space-age/README.md +24 -0
- data/tracks/perl5/exercises/strain/README.md +40 -0
- data/tracks/perl5/exercises/sublist/README.md +21 -0
- data/tracks/perl5/exercises/sum-of-multiples/README.md +18 -0
- data/tracks/perl5/exercises/triangle/README.md +26 -0
- data/tracks/perl5/exercises/trinary/README.md +28 -0
- data/tracks/perl5/exercises/twelve-days/README.md +35 -0
- data/tracks/perl5/exercises/word-count/README.md +19 -0
- data/tracks/perl5/exercises/wordy/README.md +63 -0
- data/tracks/perl6/README.md +1 -1
- data/tracks/perl6/config/exercise_readme.go.tmpl +16 -0
- data/tracks/perl6/exercises/accumulate/README.md +50 -0
- data/tracks/perl6/exercises/all-your-base/README.md +50 -0
- data/tracks/perl6/exercises/allergies/README.md +52 -0
- data/tracks/perl6/exercises/anagram/README.md +28 -0
- data/tracks/perl6/exercises/atbash-cipher/README.md +49 -0
- data/tracks/perl6/exercises/binary/README.md +50 -0
- data/tracks/perl6/exercises/bob/README.md +33 -0
- data/tracks/perl6/exercises/clock/README.md +28 -0
- data/tracks/perl6/exercises/flatten-array/README.md +33 -0
- data/tracks/perl6/exercises/grade-school/README.md +57 -0
- data/tracks/perl6/exercises/grains/README.md +49 -0
- data/tracks/perl6/exercises/hello-world/README.md +36 -0
- data/tracks/perl6/exercises/leap/README.md +48 -0
- data/tracks/perl6/exercises/linked-list/README.md +49 -0
- data/tracks/perl6/exercises/linked-list/example.yaml +1 -1
- data/tracks/perl6/exercises/linked-list/linked-list.t +1 -1
- data/tracks/perl6/exercises/luhn/README.md +86 -0
- data/tracks/perl6/exercises/phone-number/README.md +49 -0
- data/tracks/perl6/exercises/raindrops/README.md +39 -0
- data/tracks/perl6/exercises/rna-transcription/README.md +40 -0
- data/tracks/perl6/exercises/robot-name/README.md +37 -0
- data/tracks/perl6/exercises/scrabble-score/README.md +59 -0
- data/tracks/perl6/exercises/space-age/README.md +39 -0
- data/tracks/perl6/exercises/trinary/README.md +43 -0
- data/tracks/perl6/exercises/word-count/README.md +34 -0
- data/tracks/perl6/exercises/wordy/README.md +78 -0
- data/tracks/php/config.json +156 -3
- data/tracks/php/config/exercise_readme.go.tmpl +16 -0
- data/tracks/php/exercises/accumulate/README.md +50 -0
- data/tracks/php/exercises/acronym/README.md +30 -0
- data/tracks/php/exercises/allergies/README.md +52 -0
- data/tracks/php/exercises/anagram/README.md +28 -0
- data/tracks/php/exercises/atbash-cipher/README.md +49 -0
- data/tracks/php/exercises/beer-song/README.md +342 -0
- data/tracks/php/exercises/binary-search/README.md +56 -0
- data/tracks/php/exercises/binary/README.md +50 -0
- data/tracks/php/exercises/bob/README.md +36 -0
- data/tracks/php/exercises/book-store/README.md +89 -0
- data/tracks/php/exercises/bowling/README.md +68 -0
- data/tracks/php/exercises/bracket-push/README.md +25 -0
- data/tracks/php/exercises/change/README.md +38 -0
- data/tracks/php/exercises/clock/README.md +28 -0
- data/tracks/php/exercises/connect/README.md +49 -0
- data/tracks/php/exercises/difference-of-squares/README.md +34 -0
- data/tracks/php/exercises/etl/README.md +66 -0
- data/tracks/php/exercises/gigasecond/README.md +26 -0
- data/tracks/php/exercises/grade-school/README.md +57 -0
- data/tracks/php/exercises/grains/README.md +49 -0
- data/tracks/php/exercises/hamming/README.md +57 -0
- data/tracks/php/exercises/hello-world/README.md +36 -0
- data/tracks/php/exercises/isogram/README.md +34 -0
- data/tracks/php/exercises/largest-series-product/README.md +35 -0
- data/tracks/php/exercises/leap/README.md +48 -0
- data/tracks/php/exercises/luhn/README.md +86 -0
- data/tracks/php/exercises/markdown/README.md +33 -0
- data/tracks/php/exercises/minesweeper/README.md +45 -0
- data/tracks/php/exercises/nth-prime/README.md +30 -0
- data/tracks/php/exercises/nucleotide-count/README.md +48 -0
- data/tracks/php/exercises/ocr-numbers/README.md +100 -0
- data/tracks/php/exercises/pangram/README.md +30 -0
- data/tracks/php/exercises/pascals-triangle/README.md +36 -0
- data/tracks/php/exercises/perfect-numbers/README.md +39 -0
- data/tracks/php/exercises/phone-number/README.md +49 -0
- data/tracks/php/exercises/pig-latin/README.md +39 -0
- data/tracks/php/exercises/prime-factors/README.md +51 -0
- data/tracks/php/exercises/queen-attack/README.md +48 -0
- data/tracks/php/exercises/raindrops/README.md +39 -0
- data/tracks/php/exercises/rna-transcription/README.md +40 -0
- data/tracks/php/exercises/robot-name/README.md +37 -0
- data/tracks/php/exercises/robot-simulator/README.md +49 -0
- data/tracks/php/exercises/roman-numerals/README.md +64 -0
- data/tracks/php/exercises/scrabble-score/README.md +59 -0
- data/tracks/php/exercises/sieve/README.md +49 -0
- data/tracks/php/exercises/space-age/README.md +39 -0
- data/tracks/php/exercises/sum-of-multiples/README.md +33 -0
- data/tracks/php/exercises/triangle/README.md +41 -0
- data/tracks/php/exercises/trinary/README.md +43 -0
- data/tracks/php/exercises/variable-length-quantity/README.md +54 -0
- data/tracks/php/exercises/word-count/README.md +34 -0
- data/tracks/php/exercises/wordy/README.md +78 -0
- data/tracks/rust/exercises/grains/tests/grains.rs +0 -1
- data/tracks/sml/config/exercise_readme.go.tmpl +16 -0
- data/tracks/sml/exercises/accumulate/README.md +49 -0
- data/tracks/sml/exercises/allergies/README.md +51 -0
- data/tracks/sml/exercises/anagram/README.md +27 -0
- data/tracks/sml/exercises/binary/README.md +49 -0
- data/tracks/sml/exercises/flatten-array/README.md +32 -0
- data/tracks/sml/exercises/hamming/README.md +56 -0
- data/tracks/sml/exercises/nth-prime/README.md +29 -0
- data/tracks/sml/exercises/raindrops/README.md +38 -0
- metadata +433 -4
- data/tracks/perl5/exercises/phone-number/cases.json +0 -44
- data/tracks/perl5/exercises/phone-number/phone.t +0 -43
@@ -0,0 +1,45 @@
|
|
1
|
+
# Matrix
|
2
|
+
|
3
|
+
Given a string representing a matrix of numbers, return the rows and columns of
|
4
|
+
that matrix.
|
5
|
+
|
6
|
+
So given a string with embedded newlines like:
|
7
|
+
|
8
|
+
> 9 8 7
|
9
|
+
> 5 3 2
|
10
|
+
> 6 6 7
|
11
|
+
|
12
|
+
representing this matrix:
|
13
|
+
|
14
|
+
```plain
|
15
|
+
0 1 2
|
16
|
+
|---------
|
17
|
+
0 | 9 8 7
|
18
|
+
1 | 5 3 2
|
19
|
+
2 | 6 6 7
|
20
|
+
```
|
21
|
+
|
22
|
+
your code should be able to spit out:
|
23
|
+
|
24
|
+
- A list of the rows, reading each row left-to-right while moving
|
25
|
+
top-to-bottom across the rows,
|
26
|
+
- A list of the columns, reading each column top-to-bottom while moving
|
27
|
+
from left-to-right.
|
28
|
+
|
29
|
+
The rows for our example matrix:
|
30
|
+
|
31
|
+
- 9, 8, 7
|
32
|
+
- 5, 3, 2
|
33
|
+
- 6, 6, 7
|
34
|
+
|
35
|
+
And its columns:
|
36
|
+
|
37
|
+
- 9, 5, 6
|
38
|
+
- 8, 3, 6
|
39
|
+
- 7, 2, 7
|
40
|
+
## Source
|
41
|
+
|
42
|
+
Warmup to the `saddle-points` warmup. [http://jumpstartlab.com](http://jumpstartlab.com)
|
43
|
+
|
44
|
+
## Submitting Incomplete Solutions
|
45
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Meetup
|
2
|
+
|
3
|
+
Calculate the date of meetups.
|
4
|
+
|
5
|
+
Typically meetups happen on the same day of the week. In this exercise, you will take
|
6
|
+
a description of a meetup date, and return the actual meetup date.
|
7
|
+
|
8
|
+
Examples of general descriptions are:
|
9
|
+
|
10
|
+
- the first Monday of January 2017
|
11
|
+
- the third Tuesday of January 2017
|
12
|
+
- the Wednesteenth of January 2017
|
13
|
+
- the last Thursday of January 2017
|
14
|
+
|
15
|
+
Note that "Monteenth", "Tuesteenth", etc are all made up words. There
|
16
|
+
was a meetup whose members realized that there are exactly 7 numbered days in a month that
|
17
|
+
end in '-teenth'. Therefore, one is guaranteed that each day of the week
|
18
|
+
(Monday, Tuesday, ...) will have exactly one date that is named with '-teenth'
|
19
|
+
in every month.
|
20
|
+
|
21
|
+
Given examples of a meetup dates, each containing a month, day, year, and descriptor
|
22
|
+
(first, second, teenth, etc), calculate the date of the actual meetup.
|
23
|
+
For example, if given "First Monday of January 2017", the correct meetup date is 2017/1/2
|
24
|
+
|
25
|
+
## Source
|
26
|
+
|
27
|
+
Jeremy Hinegardner mentioned a Boulder meetup that happens on the Wednesteenth of every month [https://twitter.com/copiousfreetime](https://twitter.com/copiousfreetime)
|
28
|
+
|
29
|
+
## Submitting Incomplete Solutions
|
30
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Minesweeper
|
2
|
+
|
3
|
+
Add the numbers to a minesweeper board.
|
4
|
+
|
5
|
+
Minesweeper is a popular game where the user has to find the mines using
|
6
|
+
numeric hints that indicate how many mines are directly adjacent
|
7
|
+
(horizontally, vertically, diagonally) to a square.
|
8
|
+
|
9
|
+
In this exercise you have to create some code that counts the number of
|
10
|
+
mines adjacent to a square and transforms boards like this (where `*`
|
11
|
+
indicates a mine):
|
12
|
+
|
13
|
+
+-----+
|
14
|
+
| * * |
|
15
|
+
| * |
|
16
|
+
| * |
|
17
|
+
| |
|
18
|
+
+-----+
|
19
|
+
|
20
|
+
into this:
|
21
|
+
|
22
|
+
+-----+
|
23
|
+
|1*3*1|
|
24
|
+
|13*31|
|
25
|
+
| 2*2 |
|
26
|
+
| 111 |
|
27
|
+
+-----+
|
28
|
+
|
29
|
+
## Submitting Incomplete Solutions
|
30
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# Nucleotide Count
|
2
|
+
|
3
|
+
Given a DNA string, compute how many times each nucleotide occurs in the string.
|
4
|
+
|
5
|
+
DNA is represented by an alphabet of the following symbols: 'A', 'C',
|
6
|
+
'G', and 'T'.
|
7
|
+
|
8
|
+
Each symbol represents a nucleotide, which is a fancy name for the
|
9
|
+
particular molecules that happen to make up a large part of DNA.
|
10
|
+
|
11
|
+
Shortest intro to biochemistry EVAR:
|
12
|
+
|
13
|
+
- twigs are to birds nests as
|
14
|
+
- nucleotides are to DNA and RNA as
|
15
|
+
- amino acids are to proteins as
|
16
|
+
- sugar is to starch as
|
17
|
+
- oh crap lipids
|
18
|
+
|
19
|
+
I'm not going to talk about lipids because they're crazy complex.
|
20
|
+
|
21
|
+
So back to nucleotides.
|
22
|
+
|
23
|
+
DNA contains four types of them: adenine (`A`), cytosine (`C`), guanine
|
24
|
+
(`G`), and thymine (`T`).
|
25
|
+
|
26
|
+
RNA contains a slightly different set of nucleotides, but we don't care
|
27
|
+
about that for now.
|
28
|
+
## Source
|
29
|
+
|
30
|
+
The Calculating DNA Nucleotides_problem at Rosalind [http://rosalind.info/problems/dna/](http://rosalind.info/problems/dna/)
|
31
|
+
|
32
|
+
## Submitting Incomplete Solutions
|
33
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# Ocr Numbers
|
2
|
+
|
3
|
+
Given a 3 x 4 grid of pipes, underscores, and spaces, determine which number is
|
4
|
+
represented, or whether it is garbled.
|
5
|
+
|
6
|
+
# Step One
|
7
|
+
|
8
|
+
To begin with, convert a simple binary font to a string containing 0 or 1.
|
9
|
+
|
10
|
+
The binary font uses pipes and underscores, four rows high and three columns wide.
|
11
|
+
|
12
|
+
```
|
13
|
+
_ #
|
14
|
+
| | # zero.
|
15
|
+
|_| #
|
16
|
+
# the fourth row is always blank
|
17
|
+
```
|
18
|
+
|
19
|
+
Is converted to "0"
|
20
|
+
|
21
|
+
```
|
22
|
+
#
|
23
|
+
| # one.
|
24
|
+
| #
|
25
|
+
# (blank fourth row)
|
26
|
+
```
|
27
|
+
|
28
|
+
Is converted to "1"
|
29
|
+
|
30
|
+
If the input is the correct size, but not recognizable, your program should return '?'
|
31
|
+
|
32
|
+
If the input is the incorrect size, your program should return an error.
|
33
|
+
|
34
|
+
# Step Two
|
35
|
+
|
36
|
+
Update your program to recognize multi-character binary strings, replacing garbled numbers with ?
|
37
|
+
|
38
|
+
# Step Three
|
39
|
+
|
40
|
+
Update your program to recognize all numbers 0 through 9, both individually and as part of a larger string.
|
41
|
+
|
42
|
+
```
|
43
|
+
_
|
44
|
+
_|
|
45
|
+
|_
|
46
|
+
|
47
|
+
```
|
48
|
+
|
49
|
+
Is converted to "2"
|
50
|
+
|
51
|
+
```
|
52
|
+
_ _ _ _ _ _ _ _ #
|
53
|
+
| _| _||_||_ |_ ||_||_|| | # decimal numbers.
|
54
|
+
||_ _| | _||_| ||_| _||_| #
|
55
|
+
# fourth line is always blank
|
56
|
+
```
|
57
|
+
|
58
|
+
Is converted to "1234567890"
|
59
|
+
|
60
|
+
# Step Four
|
61
|
+
|
62
|
+
Update your program to handle multiple numbers, one per line. When converting several lines, join the lines with commas.
|
63
|
+
|
64
|
+
```
|
65
|
+
_ _
|
66
|
+
| _| _|
|
67
|
+
||_ _|
|
68
|
+
|
69
|
+
_ _
|
70
|
+
|_||_ |_
|
71
|
+
| _||_|
|
72
|
+
|
73
|
+
_ _ _
|
74
|
+
||_||_|
|
75
|
+
||_| _|
|
76
|
+
|
77
|
+
```
|
78
|
+
|
79
|
+
Is converted to "123,456,789"
|
80
|
+
## Source
|
81
|
+
|
82
|
+
Inspired by the Bank OCR kata [http://codingdojo.org/cgi-bin/wiki.pl?KataBankOCR](http://codingdojo.org/cgi-bin/wiki.pl?KataBankOCR)
|
83
|
+
|
84
|
+
## Submitting Incomplete Solutions
|
85
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# Palindrome Products
|
2
|
+
|
3
|
+
Detect palindrome products in a given range.
|
4
|
+
|
5
|
+
A palindromic number is a number that remains the same when its digits are
|
6
|
+
reversed. For example, `121` is a palindromic number but `112` is not.
|
7
|
+
|
8
|
+
Given the definition of a palindromic number, we define a palindrome _product_
|
9
|
+
to be the product `c`, such that `a * b = c`, where `c` is a palindromic number and
|
10
|
+
`a` and `b` are integers (possibly, but _not_ necessarily palindromic numbers).
|
11
|
+
|
12
|
+
For example, the palindromic number 9009 can be written as the palindrome
|
13
|
+
product: `91 * 99 = 9009`.
|
14
|
+
|
15
|
+
It's possible (and indeed common) for a palindrome product to be the product
|
16
|
+
of multiple combinations of numbers. For example, the palindrome product `9` has
|
17
|
+
the factors `(1, 9)`, `(3, 3)`, and `(9, 1)`.
|
18
|
+
|
19
|
+
Write a program that given a range of integers, returns the smallest and largest
|
20
|
+
palindromic product within that range, along with all of it's factors.
|
21
|
+
|
22
|
+
## Example 1
|
23
|
+
|
24
|
+
Given the range `[1, 9]` (both inclusive)...
|
25
|
+
|
26
|
+
The smallest product is `1`. It's factors are `(1, 1)`.
|
27
|
+
The largest product is `9`. It's factors are `(1, 9)`, `(3, 3)`, and `(9, 1)`.
|
28
|
+
|
29
|
+
## Example 2
|
30
|
+
|
31
|
+
Given the range `[10, 99]` (both inclusive)...
|
32
|
+
|
33
|
+
The smallest palindrome product is `121`. It's factors are `(11, 11)`.
|
34
|
+
The largest palindrome product is `9009`. It's factors are `(91, 99)` and `(99, 91)`.
|
35
|
+
## Source
|
36
|
+
|
37
|
+
Problem 4 at Project Euler [http://projecteuler.net/problem=4](http://projecteuler.net/problem=4)
|
38
|
+
|
39
|
+
## Submitting Incomplete Solutions
|
40
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Pascals Triangle
|
2
|
+
|
3
|
+
Compute Pascal's triangle up to a given number of rows.
|
4
|
+
|
5
|
+
In Pascal's Triangle each number is computed by adding the numbers to
|
6
|
+
the right and left of the current position in the previous row.
|
7
|
+
|
8
|
+
```plain
|
9
|
+
1
|
10
|
+
1 1
|
11
|
+
1 2 1
|
12
|
+
1 3 3 1
|
13
|
+
1 4 6 4 1
|
14
|
+
# ... etc
|
15
|
+
```
|
16
|
+
## Source
|
17
|
+
|
18
|
+
Pascal's Triangle at Wolfram Math World [http://mathworld.wolfram.com/PascalsTriangle.html](http://mathworld.wolfram.com/PascalsTriangle.html)
|
19
|
+
|
20
|
+
## Submitting Incomplete Solutions
|
21
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -1,32 +1,12 @@
|
|
1
|
-
package
|
2
|
-
|
1
|
+
package PhoneNumber 2;
|
3
2
|
use strict;
|
4
3
|
use warnings;
|
5
4
|
|
6
|
-
sub
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
return $self;
|
12
|
-
}
|
13
|
-
sub _get_digits {
|
14
|
-
my ($self, $number) = @_;
|
15
|
-
my $digits = $number;
|
16
|
-
$digits =~ s/\D//g;
|
17
|
-
|
18
|
-
return $digits if length $digits == 10;
|
19
|
-
return substr $digits, 1, 10 if $digits =~ m/1\d{10}/;
|
20
|
-
return "0" x 10;
|
5
|
+
sub clean_number {
|
6
|
+
my ($number) = @_;
|
7
|
+
$number =~ s/\D//g;
|
8
|
+
return $number =~ /^ 1? ( (?: [2-9] \d{2} ){2} \d{4} ) $/x ? $1 : undef;
|
21
9
|
}
|
22
10
|
|
23
|
-
sub number { $_[0]->{number} }
|
24
|
-
sub area_code { substr $_[0]->{number}, 0, 3 }
|
25
|
-
|
26
|
-
sub pretty {
|
27
|
-
my $pretty = $_[0]->{number};
|
28
|
-
$pretty =~ s/(\d\d\d)(\d\d\d)(\d{4})/\($1\) $2\-$3/;
|
29
|
-
return $pretty;
|
30
|
-
}
|
31
11
|
|
32
|
-
|
12
|
+
1;
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Phone Number
|
2
|
+
|
3
|
+
Clean up user-entered phone numbers so that they can be sent SMS messages.
|
4
|
+
|
5
|
+
The **North American Numbering Plan (NANP)** is a telephone numbering system used by many countries in North America like the United States, Canada or Bermuda. All NANP-countries share the same international country code: `1`.
|
6
|
+
|
7
|
+
NANP numbers are ten-digit numbers consisting of a three-digit Numbering Plan Area code, commonly known as *area code*, followed by a seven-digit local number. The first three digits of the local number represent the *exchange code*, followed by the unique four-digit number which is the *subscriber number*.
|
8
|
+
|
9
|
+
|
10
|
+
The format is usually represented as
|
11
|
+
```
|
12
|
+
(NXX)-NXX-XXXX
|
13
|
+
```
|
14
|
+
where `N` is any digit from 2 through 9 and `X` is any digit from 0 through 9.
|
15
|
+
|
16
|
+
Your task is to clean up differently formated telephone numbers by removing punctuation and the country code (1) if present.
|
17
|
+
|
18
|
+
For example, the inputs
|
19
|
+
- `+1 (613)-995-0253`
|
20
|
+
- `613-995-0253`
|
21
|
+
- `1 613 995 0253`
|
22
|
+
- `613.995.0253`
|
23
|
+
|
24
|
+
should all produce the output
|
25
|
+
|
26
|
+
`6139950253`
|
27
|
+
|
28
|
+
**Note:** As this exercise only deals with telephone numbers used in NANP-countries, only 1 is considered a valid country code.
|
29
|
+
## Source
|
30
|
+
|
31
|
+
Event Manager by JumpstartLab [http://tutorials.jumpstartlab.com/projects/eventmanager.html](http://tutorials.jumpstartlab.com/projects/eventmanager.html)
|
32
|
+
|
33
|
+
## Submitting Incomplete Solutions
|
34
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,15 @@
|
|
1
|
+
exercise: PhoneNumber
|
2
|
+
version: 2
|
3
|
+
plan: 15
|
4
|
+
subs: clean_number
|
5
|
+
tests: |-
|
6
|
+
foreach my $subcases (@{$C_DATA->{cases}}) {
|
7
|
+
is $subs{clean_number}->($_->{phrase}), $_->{expected}, $_->{description} foreach @{$subcases->{cases}};
|
8
|
+
}
|
9
|
+
|
10
|
+
example: |
|
11
|
+
sub clean_number {
|
12
|
+
my ($number) = @_;
|
13
|
+
$number =~ s/\D//g;
|
14
|
+
return $number =~ /^ 1? ( (?: [2-9] \d{2} ){2} \d{4} ) $/x ? $1 : undef;
|
15
|
+
}
|
@@ -0,0 +1,138 @@
|
|
1
|
+
#!/usr/bin/env perl
|
2
|
+
use strict;
|
3
|
+
use warnings;
|
4
|
+
use FindBin;
|
5
|
+
my $dir;
|
6
|
+
use lib $dir = $FindBin::Bin;
|
7
|
+
use JSON::PP;
|
8
|
+
|
9
|
+
my $exercise = 'PhoneNumber';
|
10
|
+
my $test_version = 2;
|
11
|
+
my $module = $ENV{EXERCISM} ? 'Example' : $exercise;
|
12
|
+
use Test::More tests => 15;
|
13
|
+
|
14
|
+
use_ok $module or BAIL_OUT;
|
15
|
+
|
16
|
+
my $exercise_version = $exercise->VERSION // 0;
|
17
|
+
if ($exercise_version != $test_version) {
|
18
|
+
warn "\nExercise version mismatch. Further tests may fail!"
|
19
|
+
. "\n$exercise is v$exercise_version. "
|
20
|
+
. "Test is v$test_version.\n";
|
21
|
+
BAIL_OUT if $ENV{EXERCISM};
|
22
|
+
}
|
23
|
+
|
24
|
+
my %subs;
|
25
|
+
foreach ( qw(clean_number) ) {
|
26
|
+
can_ok $exercise, $_;
|
27
|
+
$subs{$_} = $exercise->can($_);
|
28
|
+
}
|
29
|
+
|
30
|
+
my $C_DATA;
|
31
|
+
foreach my $subcases (@{$C_DATA->{cases}}) {
|
32
|
+
is $subs{clean_number}->($_->{phrase}), $_->{expected}, $_->{description} foreach @{$subcases->{cases}};
|
33
|
+
}
|
34
|
+
|
35
|
+
SKIP: {
|
36
|
+
skip '', 1 unless $ENV{EXERCISM};
|
37
|
+
is_deeply eval q{
|
38
|
+
use Path::Tiny;
|
39
|
+
decode_json path("$dir/../../problem-specifications/exercises/".path($dir)->basename.'/canonical-data.json')->realpath->slurp;
|
40
|
+
}, $C_DATA, 'canonical-data';
|
41
|
+
}
|
42
|
+
|
43
|
+
done_testing;
|
44
|
+
|
45
|
+
INIT {
|
46
|
+
$C_DATA = decode_json <<'EOF';
|
47
|
+
|
48
|
+
{
|
49
|
+
"exercise": "phone-number",
|
50
|
+
"version": "1.2.0",
|
51
|
+
"cases": [
|
52
|
+
{
|
53
|
+
"description": "Cleanup user-entered phone numbers",
|
54
|
+
"comments": [
|
55
|
+
" Returns the cleaned phone number if given number is valid, "
|
56
|
+
, " else returns nil. Note that number is not formatted, "
|
57
|
+
, " just a 10-digit number is returned. "
|
58
|
+
],
|
59
|
+
"cases": [
|
60
|
+
{
|
61
|
+
"description": "cleans the number",
|
62
|
+
"property": "clean",
|
63
|
+
"phrase": "(223) 456-7890",
|
64
|
+
"expected": "2234567890"
|
65
|
+
},
|
66
|
+
{
|
67
|
+
"description": "cleans numbers with dots",
|
68
|
+
"property": "clean",
|
69
|
+
"phrase": "223.456.7890",
|
70
|
+
"expected": "2234567890"
|
71
|
+
},
|
72
|
+
{
|
73
|
+
"description": "cleans numbers with multiple spaces",
|
74
|
+
"property": "clean",
|
75
|
+
"phrase": "223 456 7890 ",
|
76
|
+
"expected": "2234567890"
|
77
|
+
},
|
78
|
+
{
|
79
|
+
"description": "invalid when 9 digits",
|
80
|
+
"property": "clean",
|
81
|
+
"phrase": "123456789",
|
82
|
+
"expected": null
|
83
|
+
},
|
84
|
+
{
|
85
|
+
"description": "invalid when 11 digits does not start with a 1",
|
86
|
+
"property": "clean",
|
87
|
+
"phrase": "22234567890",
|
88
|
+
"expected": null
|
89
|
+
},
|
90
|
+
{
|
91
|
+
"description": "valid when 11 digits and starting with 1",
|
92
|
+
"property": "clean",
|
93
|
+
"phrase": "12234567890",
|
94
|
+
"expected": "2234567890"
|
95
|
+
},
|
96
|
+
{
|
97
|
+
"description": "valid when 11 digits and starting with 1 even with punctuation",
|
98
|
+
"property": "clean",
|
99
|
+
"phrase": "+1 (223) 456-7890",
|
100
|
+
"expected": "2234567890"
|
101
|
+
},
|
102
|
+
{
|
103
|
+
"description": "invalid when more than 11 digits",
|
104
|
+
"property": "clean",
|
105
|
+
"phrase": "321234567890",
|
106
|
+
"expected": null
|
107
|
+
},
|
108
|
+
{
|
109
|
+
"description": "invalid with letters",
|
110
|
+
"property": "clean",
|
111
|
+
"phrase": "123-abc-7890",
|
112
|
+
"expected": null
|
113
|
+
},
|
114
|
+
{
|
115
|
+
"description": "invalid with punctuations",
|
116
|
+
"property": "clean",
|
117
|
+
"phrase": "123-@:!-7890",
|
118
|
+
"expected": null
|
119
|
+
},
|
120
|
+
{
|
121
|
+
"description": "invalid if area code does not start with 2-9",
|
122
|
+
"property": "clean",
|
123
|
+
"phrase": "(123) 456-7890",
|
124
|
+
"expected": null
|
125
|
+
},
|
126
|
+
{
|
127
|
+
"description": "invalid if exchange code does not start with 2-9",
|
128
|
+
"property": "clean",
|
129
|
+
"phrase": "(223) 056-7890",
|
130
|
+
"expected": null
|
131
|
+
}
|
132
|
+
]
|
133
|
+
}
|
134
|
+
]
|
135
|
+
}
|
136
|
+
|
137
|
+
EOF
|
138
|
+
}
|