trackler 2.2.0.3 → 2.2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,61 @@
|
|
|
1
|
+
# Hangman
|
|
2
|
+
|
|
3
|
+
Implement the logic of the hangman game using functional reactive programming.
|
|
4
|
+
|
|
5
|
+
[Hangman][] is a simple word guessing game.
|
|
6
|
+
|
|
7
|
+
[Functional Reactive Programming][frp] is a way to write interactive
|
|
8
|
+
programs. It differs from the usual perspective in that instead of
|
|
9
|
+
saying "when the button is pressed increment the counter", you write
|
|
10
|
+
"the value of the counter is the sum of the number of times the button
|
|
11
|
+
is pressed."
|
|
12
|
+
|
|
13
|
+
Implement the basic logic behind hangman using functional reactive
|
|
14
|
+
programming. You'll need to install an FRP library for this, this will
|
|
15
|
+
be described in the language/track specific files of the exercise.
|
|
16
|
+
|
|
17
|
+
[Hangman]: https://en.wikipedia.org/wiki/Hangman_%28game%29
|
|
18
|
+
[frp]: https://en.wikipedia.org/wiki/Functional_reactive_programming
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
## Getting Started
|
|
22
|
+
For installation and learning resources, refer to the
|
|
23
|
+
[exercism help page](http://exercism.io/languages/ocaml).
|
|
24
|
+
|
|
25
|
+
## Installation
|
|
26
|
+
To work on the exercises, you will need `Opam` and `Core`. Consult [opam](https://opam.ocaml.org) website for instructions on how to install `opam` for your OS. Once `opam` is installed open a terminal window and run the following command to install core:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
opam install core
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
To run the tests you will need `OUnit`. Install it using `opam`:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
opam install ounit
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Running Tests
|
|
39
|
+
A Makefile is provided with a default target to compile your solution and run the tests. At the command line, type:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
make
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Interactive Shell
|
|
46
|
+
`utop` is a command line program which allows you to run Ocaml code interactively. The easiest way to install it is via opam:
|
|
47
|
+
```bash
|
|
48
|
+
opam install utop
|
|
49
|
+
```
|
|
50
|
+
Consult [utop](https://github.com/diml/utop/blob/master/README.md) for more detail.
|
|
51
|
+
|
|
52
|
+
## Feedback, Issues, Pull Requests
|
|
53
|
+
The [exercism/ocaml](https://github.com/exercism/ocaml) repository on
|
|
54
|
+
GitHub is the home for all of the Ocaml exercises.
|
|
55
|
+
|
|
56
|
+
If you have feedback about an exercise, or want to help implementing a new
|
|
57
|
+
one, head over there and create an issue. We'll do our best to help you!
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
## Submitting Incomplete Solutions
|
|
61
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Hello World
|
|
2
|
+
|
|
3
|
+
The classical introductory exercise. Just say "Hello, World!".
|
|
4
|
+
|
|
5
|
+
["Hello, World!"](http://en.wikipedia.org/wiki/%22Hello,_world!%22_program) is
|
|
6
|
+
the traditional first program for beginning programming in a new language
|
|
7
|
+
or environment.
|
|
8
|
+
|
|
9
|
+
The objectives are simple:
|
|
10
|
+
|
|
11
|
+
- Write a function that returns the string "Hello, World!".
|
|
12
|
+
- Run the test suite and make sure that it succeeds.
|
|
13
|
+
- Submit your solution and check it at the website.
|
|
14
|
+
|
|
15
|
+
If everything goes well, you will be ready to fetch your first real exercise.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## Getting Started
|
|
19
|
+
For installation and learning resources, refer to the
|
|
20
|
+
[exercism help page](http://exercism.io/languages/ocaml).
|
|
21
|
+
|
|
22
|
+
## Installation
|
|
23
|
+
To work on the exercises, you will need `Opam` and `Core`. Consult [opam](https://opam.ocaml.org) website for instructions on how to install `opam` for your OS. Once `opam` is installed open a terminal window and run the following command to install core:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
opam install core
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
To run the tests you will need `OUnit`. Install it using `opam`:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
opam install ounit
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Running Tests
|
|
36
|
+
A Makefile is provided with a default target to compile your solution and run the tests. At the command line, type:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
make
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Interactive Shell
|
|
43
|
+
`utop` is a command line program which allows you to run Ocaml code interactively. The easiest way to install it is via opam:
|
|
44
|
+
```bash
|
|
45
|
+
opam install utop
|
|
46
|
+
```
|
|
47
|
+
Consult [utop](https://github.com/diml/utop/blob/master/README.md) for more detail.
|
|
48
|
+
|
|
49
|
+
## Feedback, Issues, Pull Requests
|
|
50
|
+
The [exercism/ocaml](https://github.com/exercism/ocaml) repository on
|
|
51
|
+
GitHub is the home for all of the Ocaml exercises.
|
|
52
|
+
|
|
53
|
+
If you have feedback about an exercise, or want to help implementing a new
|
|
54
|
+
one, head over there and create an issue. We'll do our best to help you!
|
|
55
|
+
|
|
56
|
+
## Source
|
|
57
|
+
|
|
58
|
+
This is an exercise to introduce users to using Exercism [http://en.wikipedia.org/wiki/%22Hello,_world!%22_program](http://en.wikipedia.org/wiki/%22Hello,_world!%22_program)
|
|
59
|
+
|
|
60
|
+
## Submitting Incomplete Solutions
|
|
61
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Hexadecimal
|
|
2
|
+
|
|
3
|
+
Convert a hexadecimal number, represented as a string (e.g. "10af8c"), to its decimal equivalent using first principles (i.e. no, you may not use built-in or external libraries to accomplish the conversion).
|
|
4
|
+
|
|
5
|
+
On the web we use hexadecimal to represent colors, e.g. green: 008000,
|
|
6
|
+
teal: 008080, navy: 000080).
|
|
7
|
+
|
|
8
|
+
The program should handle invalid hexadecimal strings.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
## Getting Started
|
|
12
|
+
For installation and learning resources, refer to the
|
|
13
|
+
[exercism help page](http://exercism.io/languages/ocaml).
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
To work on the exercises, you will need `Opam` and `Core`. Consult [opam](https://opam.ocaml.org) website for instructions on how to install `opam` for your OS. Once `opam` is installed open a terminal window and run the following command to install core:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
opam install core
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
To run the tests you will need `OUnit`. Install it using `opam`:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
opam install ounit
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Running Tests
|
|
29
|
+
A Makefile is provided with a default target to compile your solution and run the tests. At the command line, type:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
make
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Interactive Shell
|
|
36
|
+
`utop` is a command line program which allows you to run Ocaml code interactively. The easiest way to install it is via opam:
|
|
37
|
+
```bash
|
|
38
|
+
opam install utop
|
|
39
|
+
```
|
|
40
|
+
Consult [utop](https://github.com/diml/utop/blob/master/README.md) for more detail.
|
|
41
|
+
|
|
42
|
+
## Feedback, Issues, Pull Requests
|
|
43
|
+
The [exercism/ocaml](https://github.com/exercism/ocaml) repository on
|
|
44
|
+
GitHub is the home for all of the Ocaml exercises.
|
|
45
|
+
|
|
46
|
+
If you have feedback about an exercise, or want to help implementing a new
|
|
47
|
+
one, head over there and create an issue. We'll do our best to help you!
|
|
48
|
+
|
|
49
|
+
## Source
|
|
50
|
+
|
|
51
|
+
All of Computer Science [http://www.wolframalpha.com/examples/NumberBases.html](http://www.wolframalpha.com/examples/NumberBases.html)
|
|
52
|
+
|
|
53
|
+
## Submitting Incomplete Solutions
|
|
54
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Leap
|
|
2
|
+
|
|
3
|
+
Given a year, report if it is a leap year.
|
|
4
|
+
|
|
5
|
+
The tricky thing here is that a leap year in the Gregorian calendar occurs:
|
|
6
|
+
|
|
7
|
+
```plain
|
|
8
|
+
on every year that is evenly divisible by 4
|
|
9
|
+
except every year that is evenly divisible by 100
|
|
10
|
+
unless the year is also evenly divisible by 400
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
For example, 1997 is not a leap year, but 1996 is. 1900 is not a leap
|
|
14
|
+
year, but 2000 is.
|
|
15
|
+
|
|
16
|
+
If your language provides a method in the standard library that does
|
|
17
|
+
this look-up, pretend it doesn't exist and implement it yourself.
|
|
18
|
+
|
|
19
|
+
## Notes
|
|
20
|
+
|
|
21
|
+
Though our exercise adopts some very simple rules, there is more to
|
|
22
|
+
learn!
|
|
23
|
+
|
|
24
|
+
For a delightful, four minute explanation of the whole leap year
|
|
25
|
+
phenomenon, go watch [this youtube video][video].
|
|
26
|
+
|
|
27
|
+
[video]: http://www.youtube.com/watch?v=xX96xng7sAE
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
## Getting Started
|
|
31
|
+
For installation and learning resources, refer to the
|
|
32
|
+
[exercism help page](http://exercism.io/languages/ocaml).
|
|
33
|
+
|
|
34
|
+
## Installation
|
|
35
|
+
To work on the exercises, you will need `Opam` and `Core`. Consult [opam](https://opam.ocaml.org) website for instructions on how to install `opam` for your OS. Once `opam` is installed open a terminal window and run the following command to install core:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
opam install core
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
To run the tests you will need `OUnit`. Install it using `opam`:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
opam install ounit
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Running Tests
|
|
48
|
+
A Makefile is provided with a default target to compile your solution and run the tests. At the command line, type:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
make
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Interactive Shell
|
|
55
|
+
`utop` is a command line program which allows you to run Ocaml code interactively. The easiest way to install it is via opam:
|
|
56
|
+
```bash
|
|
57
|
+
opam install utop
|
|
58
|
+
```
|
|
59
|
+
Consult [utop](https://github.com/diml/utop/blob/master/README.md) for more detail.
|
|
60
|
+
|
|
61
|
+
## Feedback, Issues, Pull Requests
|
|
62
|
+
The [exercism/ocaml](https://github.com/exercism/ocaml) repository on
|
|
63
|
+
GitHub is the home for all of the Ocaml exercises.
|
|
64
|
+
|
|
65
|
+
If you have feedback about an exercise, or want to help implementing a new
|
|
66
|
+
one, head over there and create an issue. We'll do our best to help you!
|
|
67
|
+
|
|
68
|
+
## Source
|
|
69
|
+
|
|
70
|
+
JavaRanch Cattle Drive, exercise 3 [http://www.javaranch.com/leap.jsp](http://www.javaranch.com/leap.jsp)
|
|
71
|
+
|
|
72
|
+
## Submitting Incomplete Solutions
|
|
73
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# List Ops
|
|
2
|
+
|
|
3
|
+
Implement basic list operations.
|
|
4
|
+
|
|
5
|
+
In functional languages list operations like `length`, `map`, and
|
|
6
|
+
`reduce` are very common. Implement a series of basic list operations,
|
|
7
|
+
without using existing functions.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## Getting Started
|
|
11
|
+
For installation and learning resources, refer to the
|
|
12
|
+
[exercism help page](http://exercism.io/languages/ocaml).
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
To work on the exercises, you will need `Opam` and `Core`. Consult [opam](https://opam.ocaml.org) website for instructions on how to install `opam` for your OS. Once `opam` is installed open a terminal window and run the following command to install core:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
opam install core
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
To run the tests you will need `OUnit`. Install it using `opam`:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
opam install ounit
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Running Tests
|
|
28
|
+
A Makefile is provided with a default target to compile your solution and run the tests. At the command line, type:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
make
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Interactive Shell
|
|
35
|
+
`utop` is a command line program which allows you to run Ocaml code interactively. The easiest way to install it is via opam:
|
|
36
|
+
```bash
|
|
37
|
+
opam install utop
|
|
38
|
+
```
|
|
39
|
+
Consult [utop](https://github.com/diml/utop/blob/master/README.md) for more detail.
|
|
40
|
+
|
|
41
|
+
## Feedback, Issues, Pull Requests
|
|
42
|
+
The [exercism/ocaml](https://github.com/exercism/ocaml) repository on
|
|
43
|
+
GitHub is the home for all of the Ocaml exercises.
|
|
44
|
+
|
|
45
|
+
If you have feedback about an exercise, or want to help implementing a new
|
|
46
|
+
one, head over there and create an issue. We'll do our best to help you!
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
## Submitting Incomplete Solutions
|
|
50
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Luhn
|
|
2
|
+
|
|
3
|
+
Given a number determine whether or not it is valid per the Luhn formula.
|
|
4
|
+
|
|
5
|
+
The [Luhn algorithm](https://en.wikipedia.org/wiki/Luhn_algorithm) is
|
|
6
|
+
a simple checksum formula used to validate a variety of identification
|
|
7
|
+
numbers, such as credit card numbers and Canadian Social Insurance
|
|
8
|
+
Numbers.
|
|
9
|
+
|
|
10
|
+
The task is to check if a given string is valid.
|
|
11
|
+
|
|
12
|
+
Validating a Number
|
|
13
|
+
------
|
|
14
|
+
|
|
15
|
+
Strings of length 1 or less are not valid. Spaces are allowed in the input,
|
|
16
|
+
but they should be stripped before checking. All other non-digit characters
|
|
17
|
+
are disallowed.
|
|
18
|
+
|
|
19
|
+
## Example 1: valid credit card number
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
4539 1488 0343 6467
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The first step of the Luhn algorithm is to double every second digit,
|
|
26
|
+
starting from the right. We will be doubling
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
4_3_ 1_8_ 0_4_ 6_6_
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
If doubling the number results in a number greater than 9 then subtract 9
|
|
33
|
+
from the product. The results of our doubling:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
8569 2478 0383 3437
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Then sum all of the digits:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
8+5+6+9+2+4+7+8+0+3+8+3+3+4+3+7 = 80
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If the sum is evenly divisible by 10, then the number is valid. This number is valid!
|
|
46
|
+
|
|
47
|
+
## Example 2: invalid credit card number
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
8273 1232 7352 0569
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Double the second digits, starting from the right
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
7253 2262 5312 0539
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Sum the digits
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
7+2+5+3+2+2+6+2+5+3+1+2+0+5+3+9 = 57
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
57 is not evenly divisible by 10, so this number is not valid.
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
## Getting Started
|
|
69
|
+
For installation and learning resources, refer to the
|
|
70
|
+
[exercism help page](http://exercism.io/languages/ocaml).
|
|
71
|
+
|
|
72
|
+
## Installation
|
|
73
|
+
To work on the exercises, you will need `Opam` and `Core`. Consult [opam](https://opam.ocaml.org) website for instructions on how to install `opam` for your OS. Once `opam` is installed open a terminal window and run the following command to install core:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
opam install core
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
To run the tests you will need `OUnit`. Install it using `opam`:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
opam install ounit
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Running Tests
|
|
86
|
+
A Makefile is provided with a default target to compile your solution and run the tests. At the command line, type:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
make
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Interactive Shell
|
|
93
|
+
`utop` is a command line program which allows you to run Ocaml code interactively. The easiest way to install it is via opam:
|
|
94
|
+
```bash
|
|
95
|
+
opam install utop
|
|
96
|
+
```
|
|
97
|
+
Consult [utop](https://github.com/diml/utop/blob/master/README.md) for more detail.
|
|
98
|
+
|
|
99
|
+
## Feedback, Issues, Pull Requests
|
|
100
|
+
The [exercism/ocaml](https://github.com/exercism/ocaml) repository on
|
|
101
|
+
GitHub is the home for all of the Ocaml exercises.
|
|
102
|
+
|
|
103
|
+
If you have feedback about an exercise, or want to help implementing a new
|
|
104
|
+
one, head over there and create an issue. We'll do our best to help you!
|
|
105
|
+
|
|
106
|
+
## Source
|
|
107
|
+
|
|
108
|
+
The Luhn Algorithm on Wikipedia [http://en.wikipedia.org/wiki/Luhn_algorithm](http://en.wikipedia.org/wiki/Luhn_algorithm)
|
|
109
|
+
|
|
110
|
+
## Submitting Incomplete Solutions
|
|
111
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,70 @@
|
|
|
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
|
+
|
|
26
|
+
|
|
27
|
+
## Getting Started
|
|
28
|
+
For installation and learning resources, refer to the
|
|
29
|
+
[exercism help page](http://exercism.io/languages/ocaml).
|
|
30
|
+
|
|
31
|
+
## Installation
|
|
32
|
+
To work on the exercises, you will need `Opam` and `Core`. Consult [opam](https://opam.ocaml.org) website for instructions on how to install `opam` for your OS. Once `opam` is installed open a terminal window and run the following command to install core:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
opam install core
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
To run the tests you will need `OUnit`. Install it using `opam`:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
opam install ounit
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Running Tests
|
|
45
|
+
A Makefile is provided with a default target to compile your solution and run the tests. At the command line, type:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
make
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Interactive Shell
|
|
52
|
+
`utop` is a command line program which allows you to run Ocaml code interactively. The easiest way to install it is via opam:
|
|
53
|
+
```bash
|
|
54
|
+
opam install utop
|
|
55
|
+
```
|
|
56
|
+
Consult [utop](https://github.com/diml/utop/blob/master/README.md) for more detail.
|
|
57
|
+
|
|
58
|
+
## Feedback, Issues, Pull Requests
|
|
59
|
+
The [exercism/ocaml](https://github.com/exercism/ocaml) repository on
|
|
60
|
+
GitHub is the home for all of the Ocaml exercises.
|
|
61
|
+
|
|
62
|
+
If you have feedback about an exercise, or want to help implementing a new
|
|
63
|
+
one, head over there and create an issue. We'll do our best to help you!
|
|
64
|
+
|
|
65
|
+
## Source
|
|
66
|
+
|
|
67
|
+
Jeremy Hinegardner mentioned a Boulder meetup that happens on the Wednesteenth of every month [https://twitter.com/copiousfreetime](https://twitter.com/copiousfreetime)
|
|
68
|
+
|
|
69
|
+
## Submitting Incomplete Solutions
|
|
70
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|