trackler 2.2.0.2 → 2.2.0.3
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/fixtures/deprecation-fixtures/tracks/repo-nope/config.json +2 -0
- data/fixtures/deprecation-fixtures/tracks/repo-yepp/config.json +3 -0
- data/lib/trackler/track.rb +1 -1
- data/lib/trackler/version.rb +1 -1
- data/tracks/csharp/config/exercise_readme.go.tmpl +16 -0
- data/tracks/csharp/exercises/accumulate/README.md +44 -0
- data/tracks/csharp/exercises/acronym/README.md +21 -0
- data/tracks/csharp/exercises/all-your-base/README.md +41 -0
- data/tracks/csharp/exercises/allergies/README.md +46 -0
- data/tracks/csharp/exercises/alphametics/README.md +48 -0
- data/tracks/csharp/exercises/anagram/README.md +19 -0
- data/tracks/csharp/exercises/atbash-cipher/README.md +40 -0
- data/tracks/csharp/exercises/bank-account/README.md +41 -0
- data/tracks/csharp/exercises/beer-song/README.md +336 -0
- data/tracks/csharp/exercises/binary-search-tree/README.md +66 -0
- data/tracks/csharp/exercises/binary-search/README.md +47 -0
- data/tracks/csharp/exercises/bob/README.md +24 -0
- data/tracks/csharp/exercises/book-store/README.md +80 -0
- data/tracks/csharp/exercises/bowling/README.md +59 -0
- data/tracks/csharp/exercises/bracket-push/README.md +16 -0
- data/tracks/csharp/exercises/change/README.md +29 -0
- data/tracks/csharp/exercises/circular-buffer/README.md +56 -0
- data/tracks/csharp/exercises/clock/README.md +25 -0
- data/tracks/csharp/exercises/connect/README.md +40 -0
- data/tracks/csharp/exercises/crypto-square/README.md +80 -0
- data/tracks/csharp/exercises/custom-set/README.md +23 -0
- data/tracks/csharp/exercises/diamond/README.md +75 -0
- data/tracks/csharp/exercises/difference-of-squares/README.md +30 -0
- data/tracks/csharp/exercises/diffie-hellman/README.md +55 -0
- data/tracks/csharp/exercises/dominoes/README.md +24 -0
- data/tracks/csharp/exercises/dot-dsl/README.md +37 -0
- data/tracks/csharp/exercises/error-handling/README.md +19 -0
- data/tracks/csharp/exercises/etl/README.md +57 -0
- data/tracks/csharp/exercises/flatten-array/README.md +24 -0
- data/tracks/csharp/exercises/food-chain/README.md +80 -0
- data/tracks/csharp/exercises/forth/README.md +39 -0
- data/tracks/csharp/exercises/gigasecond/README.md +17 -0
- data/tracks/csharp/exercises/go-counting/README.md +43 -0
- data/tracks/csharp/exercises/grade-school/README.md +48 -0
- data/tracks/csharp/exercises/grains/README.md +40 -0
- data/tracks/csharp/exercises/grep/README.md +77 -0
- data/tracks/csharp/exercises/hamming/README.md +48 -0
- data/tracks/csharp/exercises/hangman/README.md +32 -0
- data/tracks/csharp/exercises/hello-world/README.md +27 -0
- data/tracks/csharp/exercises/house/README.md +123 -0
- data/tracks/csharp/exercises/isogram/README.md +25 -0
- data/tracks/csharp/exercises/kindergarten-garden/README.md +72 -0
- data/tracks/csharp/exercises/largest-series-product/README.md +26 -0
- data/tracks/csharp/exercises/leap/README.md +39 -0
- data/tracks/csharp/exercises/ledger/README.md +24 -0
- data/tracks/csharp/exercises/linked-list/README.md +40 -0
- data/tracks/csharp/exercises/list-ops/README.md +19 -0
- data/tracks/csharp/exercises/luhn/README.md +77 -0
- data/tracks/csharp/exercises/markdown/README.md +28 -0
- data/tracks/csharp/exercises/matrix/README.md +51 -0
- data/tracks/csharp/exercises/meetup/README.md +36 -0
- data/tracks/csharp/exercises/minesweeper/README.md +36 -0
- data/tracks/csharp/exercises/nth-prime/README.md +29 -0
- data/tracks/csharp/exercises/nucleotide-count/README.md +43 -0
- data/tracks/csharp/exercises/ocr-numbers/README.md +91 -0
- data/tracks/csharp/exercises/palindrome-products/README.md +51 -0
- data/tracks/csharp/exercises/pangram/README.md +21 -0
- data/tracks/csharp/exercises/parallel-letter-frequency/README.md +17 -0
- data/tracks/csharp/exercises/pascals-triangle/README.md +27 -0
- data/tracks/csharp/exercises/perfect-numbers/README.md +30 -0
- data/tracks/csharp/exercises/phone-number/README.md +40 -0
- data/tracks/csharp/exercises/pig-latin/README.md +30 -0
- data/tracks/csharp/exercises/poker/README.md +18 -0
- data/tracks/csharp/exercises/pov/README.md +52 -0
- data/tracks/csharp/exercises/prime-factors/README.md +42 -0
- data/tracks/csharp/exercises/protein-translation/README.md +55 -0
- data/tracks/csharp/exercises/proverb/README.md +28 -0
- data/tracks/csharp/exercises/pythagorean-triplet/README.md +30 -0
- data/tracks/csharp/exercises/queen-attack/README.md +39 -0
- data/tracks/csharp/exercises/rail-fence-cipher/README.md +66 -0
- data/tracks/csharp/exercises/raindrops/README.md +30 -0
- data/tracks/csharp/exercises/react/README.md +29 -0
- data/tracks/csharp/exercises/rectangles/README.md +73 -0
- data/tracks/csharp/exercises/rna-transcription/README.md +31 -0
- data/tracks/csharp/exercises/robot-name/README.md +28 -0
- data/tracks/csharp/exercises/robot-simulator/README.md +40 -0
- data/tracks/csharp/exercises/roman-numerals/README.md +59 -0
- data/tracks/csharp/exercises/rotational-cipher/README.md +42 -0
- data/tracks/csharp/exercises/run-length-encoding/README.md +36 -0
- data/tracks/csharp/exercises/saddle-points/README.md +44 -0
- data/tracks/csharp/exercises/say/README.md +75 -0
- data/tracks/csharp/exercises/scale-generator/README.md +66 -0
- data/tracks/csharp/exercises/scrabble-score/README.md +50 -0
- data/tracks/csharp/exercises/secret-handshake/README.md +41 -0
- data/tracks/csharp/exercises/series/README.md +33 -0
- data/tracks/csharp/exercises/sgf-parsing/README.md +78 -0
- data/tracks/csharp/exercises/sieve/README.md +40 -0
- data/tracks/csharp/exercises/simple-cipher/README.md +96 -0
- data/tracks/csharp/exercises/simple-linked-list/README.md +38 -0
- data/tracks/csharp/exercises/space-age/README.md +30 -0
- data/tracks/csharp/exercises/strain/README.md +46 -0
- data/tracks/csharp/exercises/sublist/README.md +32 -0
- data/tracks/csharp/exercises/sum-of-multiples/README.md +28 -0
- data/tracks/csharp/exercises/tournament/README.md +74 -0
- data/tracks/csharp/exercises/transpose/README.md +71 -0
- data/tracks/csharp/exercises/tree-building/README.md +36 -0
- data/tracks/csharp/exercises/triangle/README.md +32 -0
- data/tracks/csharp/exercises/twelve-days/README.md +45 -0
- data/tracks/csharp/exercises/two-bucket/README.md +42 -0
- data/tracks/csharp/exercises/variable-length-quantity/README.md +50 -0
- data/tracks/csharp/exercises/word-count/README.md +25 -0
- data/tracks/csharp/exercises/word-search/README.md +43 -0
- data/tracks/csharp/exercises/wordy/README.md +73 -0
- data/tracks/csharp/exercises/zebra-puzzle/README.md +43 -0
- data/tracks/csharp/exercises/zipper/README.md +41 -0
- data/tracks/dart/config/exercise_readme.go.tmpl +16 -0
- data/tracks/dart/exercises/bob/README.md +18 -0
- data/tracks/dart/exercises/difference-of-squares/README.md +19 -0
- data/tracks/dart/exercises/gigasecond/README.md +11 -0
- data/tracks/dart/exercises/hamming/README.md +42 -0
- data/tracks/dart/exercises/hello-world/README.md +21 -0
- data/tracks/dart/exercises/leap/README.md +33 -0
- data/tracks/dart/exercises/rna-transcription/README.md +25 -0
- data/tracks/delphi/config.json +25 -32
- data/tracks/elixir/config.json +255 -3
- data/tracks/elixir/config/exercise_readme.go.tmpl +16 -0
- data/tracks/elixir/exercises/accumulate/README.md +72 -0
- data/tracks/elixir/exercises/acronym/README.md +52 -0
- data/tracks/elixir/exercises/all-your-base/README.md +72 -0
- data/tracks/elixir/exercises/allergies/README.md +74 -0
- data/tracks/elixir/exercises/anagram/README.md +50 -0
- data/tracks/elixir/exercises/atbash-cipher/README.md +71 -0
- data/tracks/elixir/exercises/bank-account/README.md +67 -0
- data/tracks/elixir/exercises/beer-song/README.md +364 -0
- data/tracks/elixir/exercises/binary-search/README.md +78 -0
- data/tracks/elixir/exercises/binary/README.md +72 -0
- data/tracks/elixir/exercises/bob/README.md +55 -0
- data/tracks/elixir/exercises/bowling/README.md +90 -0
- data/tracks/elixir/exercises/bowling/bowling_test.exs +91 -18
- data/tracks/elixir/exercises/bowling/example.exs +4 -4
- data/tracks/elixir/exercises/bracket-push/README.md +47 -0
- data/tracks/elixir/exercises/change/README.md +60 -0
- data/tracks/elixir/exercises/clock/README.md +50 -0
- data/tracks/elixir/exercises/collatz-conjecture/README.md +70 -0
- data/tracks/elixir/exercises/connect/README.md +71 -0
- data/tracks/elixir/exercises/crypto-square/README.md +111 -0
- data/tracks/elixir/exercises/custom-set/README.md +48 -0
- data/tracks/elixir/exercises/diamond/README.md +96 -0
- data/tracks/elixir/exercises/difference-of-squares/README.md +56 -0
- data/tracks/elixir/exercises/diffie-hellman/README.md +93 -0
- data/tracks/elixir/exercises/dominoes/README.md +55 -0
- data/tracks/elixir/exercises/dot-dsl/README.md +65 -0
- data/tracks/elixir/exercises/etl/README.md +88 -0
- data/tracks/elixir/exercises/flatten-array/README.md +55 -0
- data/tracks/elixir/exercises/forth/README.md +66 -0
- data/tracks/elixir/exercises/gigasecond/README.md +48 -0
- data/tracks/elixir/exercises/grade-school/README.md +79 -0
- data/tracks/elixir/exercises/grains/README.md +71 -0
- data/tracks/elixir/exercises/grep/README.md +108 -0
- data/tracks/elixir/exercises/hamming/README.md +79 -0
- data/tracks/elixir/exercises/hello-world/README.md +58 -0
- data/tracks/elixir/exercises/hexadecimal/README.md +51 -0
- data/tracks/elixir/exercises/isogram/README.md +56 -0
- data/tracks/elixir/exercises/kindergarten-garden/README.md +103 -0
- data/tracks/elixir/exercises/largest-series-product/README.md +57 -0
- data/tracks/elixir/exercises/leap/README.md +70 -0
- data/tracks/elixir/exercises/list-ops/README.md +47 -0
- data/tracks/elixir/exercises/luhn/README.md +108 -0
- data/tracks/elixir/exercises/markdown/README.md +55 -0
- data/tracks/elixir/exercises/matrix/README.md +82 -0
- data/tracks/elixir/exercises/meetup/README.md +67 -0
- data/tracks/elixir/exercises/minesweeper/README.md +67 -0
- data/tracks/elixir/exercises/nth-prime/README.md +52 -0
- data/tracks/elixir/exercises/nucleotide-count/README.md +70 -0
- data/tracks/elixir/exercises/ocr-numbers/README.md +122 -0
- data/tracks/elixir/exercises/palindrome-products/README.md +77 -0
- data/tracks/elixir/exercises/pangram/README.md +52 -0
- data/tracks/elixir/exercises/parallel-letter-frequency/README.md +48 -0
- data/tracks/elixir/exercises/pascals-triangle/README.md +58 -0
- data/tracks/elixir/exercises/perfect-numbers/README.md +61 -0
- data/tracks/elixir/exercises/phone-number/README.md +71 -0
- data/tracks/elixir/exercises/pig-latin/README.md +61 -0
- data/tracks/elixir/exercises/poker/README.md +49 -0
- data/tracks/elixir/exercises/prime-factors/README.md +73 -0
- data/tracks/elixir/exercises/protein-translation/README.md +86 -0
- data/tracks/elixir/exercises/pythagorean-triplet/README.md +61 -0
- data/tracks/elixir/exercises/queen-attack/README.md +70 -0
- data/tracks/elixir/exercises/rail-fence-cipher/README.md +97 -0
- data/tracks/elixir/exercises/raindrops/README.md +61 -0
- data/tracks/elixir/exercises/rna-transcription/README.md +62 -0
- data/tracks/elixir/exercises/robot-simulator/README.md +71 -0
- data/tracks/elixir/exercises/roman-numerals/README.md +86 -0
- data/tracks/elixir/exercises/rotational-cipher/README.md +73 -0
- data/tracks/elixir/exercises/run-length-encoding/README.md +67 -0
- data/tracks/elixir/exercises/saddle-points/README.md +70 -0
- data/tracks/elixir/exercises/say/README.md +106 -0
- data/tracks/elixir/exercises/scale-generator/README.md +97 -0
- data/tracks/elixir/exercises/scrabble-score/README.md +81 -0
- data/tracks/elixir/exercises/secret-handshake/README.md +94 -0
- data/tracks/elixir/exercises/series/README.md +64 -0
- data/tracks/elixir/exercises/sieve/README.md +71 -0
- data/tracks/elixir/exercises/simple-cipher/README.md +127 -0
- data/tracks/elixir/exercises/simple-linked-list/README.md +65 -0
- data/tracks/elixir/exercises/space-age/README.md +61 -0
- data/tracks/elixir/exercises/strain/README.md +80 -0
- data/tracks/elixir/exercises/sublist/README.md +58 -0
- data/tracks/elixir/exercises/sum-of-multiples/README.md +55 -0
- data/tracks/elixir/exercises/tournament/README.md +110 -0
- data/tracks/elixir/exercises/triangle/README.md +63 -0
- data/tracks/elixir/exercises/twelve-days/README.md +72 -0
- data/tracks/elixir/exercises/word-count/README.md +56 -0
- data/tracks/elixir/exercises/wordy/README.md +100 -0
- data/tracks/elixir/exercises/zipper/README.md +68 -0
- data/tracks/fsharp/config/exercise_readme.go.tmpl +16 -0
- data/tracks/fsharp/exercises/accumulate/README.md +40 -0
- data/tracks/fsharp/exercises/acronym/README.md +15 -0
- data/tracks/fsharp/exercises/all-your-base/README.md +35 -0
- data/tracks/fsharp/exercises/allergies/README.md +37 -0
- data/tracks/fsharp/exercises/alphametics/README.md +41 -0
- data/tracks/fsharp/exercises/anagram/README.md +13 -0
- data/tracks/fsharp/exercises/atbash-cipher/README.md +34 -0
- data/tracks/fsharp/exercises/bank-account/README.md +30 -0
- data/tracks/fsharp/exercises/beer-song/README.md +331 -0
- data/tracks/fsharp/exercises/binary-search-tree/README.md +60 -0
- data/tracks/fsharp/exercises/binary-search/README.md +41 -0
- data/tracks/fsharp/exercises/bob/README.md +18 -0
- data/tracks/fsharp/exercises/book-store/README.md +74 -0
- data/tracks/fsharp/exercises/bowling/README.md +53 -0
- data/tracks/fsharp/exercises/bracket-push/README.md +10 -0
- data/tracks/fsharp/exercises/change/README.md +23 -0
- data/tracks/fsharp/exercises/circular-buffer/README.md +50 -0
- data/tracks/fsharp/exercises/clock/README.md +13 -0
- data/tracks/fsharp/exercises/connect/README.md +34 -0
- data/tracks/fsharp/exercises/crypto-square/README.md +74 -0
- data/tracks/fsharp/exercises/custom-set/README.md +11 -0
- data/tracks/fsharp/exercises/diamond/README.md +62 -0
- data/tracks/fsharp/exercises/difference-of-squares/README.md +25 -0
- data/tracks/fsharp/exercises/diffie-hellman/README.md +49 -0
- data/tracks/fsharp/exercises/dominoes/README.md +18 -0
- data/tracks/fsharp/exercises/dot-dsl/README.md +28 -0
- data/tracks/fsharp/exercises/error-handling/README.md +13 -0
- data/tracks/fsharp/exercises/etl/README.md +51 -0
- data/tracks/fsharp/exercises/food-chain/README.md +74 -0
- data/tracks/fsharp/exercises/forth/README.md +29 -0
- data/tracks/fsharp/exercises/gigasecond/README.md +15 -0
- data/tracks/fsharp/exercises/go-counting/README.md +37 -0
- data/tracks/fsharp/exercises/grade-school/README.md +47 -0
- data/tracks/fsharp/exercises/grains/README.md +39 -0
- data/tracks/fsharp/exercises/grep/README.md +71 -0
- data/tracks/fsharp/exercises/hamming/README.md +42 -0
- data/tracks/fsharp/exercises/hangman/README.md +21 -0
- data/tracks/fsharp/exercises/hello-world/README.md +21 -0
- data/tracks/fsharp/exercises/house/README.md +117 -0
- data/tracks/fsharp/exercises/isogram/README.md +19 -0
- data/tracks/fsharp/exercises/kindergarten-garden/README.md +66 -0
- data/tracks/fsharp/exercises/largest-series-product/README.md +20 -0
- data/tracks/fsharp/exercises/leap/README.md +33 -0
- data/tracks/fsharp/exercises/ledger/README.md +18 -0
- data/tracks/fsharp/exercises/lens-person/README.md +15 -0
- data/tracks/fsharp/exercises/linked-list/README.md +50 -0
- data/tracks/fsharp/exercises/list-ops/README.md +10 -0
- data/tracks/fsharp/exercises/luhn/README.md +71 -0
- data/tracks/fsharp/exercises/markdown/README.md +18 -0
- data/tracks/fsharp/exercises/matrix/README.md +45 -0
- data/tracks/fsharp/exercises/meetup/README.md +30 -0
- data/tracks/fsharp/exercises/minesweeper/README.md +30 -0
- data/tracks/fsharp/exercises/nth-prime/README.md +21 -0
- data/tracks/fsharp/exercises/nucleotide-count/README.md +33 -0
- data/tracks/fsharp/exercises/ocr-numbers/README.md +85 -0
- data/tracks/fsharp/exercises/palindrome-products/README.md +44 -0
- data/tracks/fsharp/exercises/pangram/README.md +15 -0
- data/tracks/fsharp/exercises/parallel-letter-frequency/README.md +15 -0
- data/tracks/fsharp/exercises/pascals-triangle/README.md +21 -0
- data/tracks/fsharp/exercises/perfect-numbers/README.md +24 -0
- data/tracks/fsharp/exercises/phone-number/README.md +34 -0
- data/tracks/fsharp/exercises/pig-latin/README.md +24 -0
- data/tracks/fsharp/exercises/poker/README.md +15 -0
- data/tracks/fsharp/exercises/pov/README.md +46 -0
- data/tracks/fsharp/exercises/prime-factors/README.md +36 -0
- data/tracks/fsharp/exercises/protein-translation/README.md +49 -0
- data/tracks/fsharp/exercises/proverb/README.md +22 -0
- data/tracks/fsharp/exercises/pythagorean-triplet/README.md +24 -0
- data/tracks/fsharp/exercises/queen-attack/README.md +33 -0
- data/tracks/fsharp/exercises/rail-fence-cipher/README.md +60 -0
- data/tracks/fsharp/exercises/raindrops/README.md +27 -0
- data/tracks/fsharp/exercises/react/README.md +19 -0
- data/tracks/fsharp/exercises/rectangles/README.md +67 -0
- data/tracks/fsharp/exercises/rna-transcription/README.md +29 -0
- data/tracks/fsharp/exercises/robot-name/README.md +22 -0
- data/tracks/fsharp/exercises/robot-simulator/README.md +34 -0
- data/tracks/fsharp/exercises/roman-numerals/README.md +49 -0
- data/tracks/fsharp/exercises/run-length-encoding/README.md +30 -0
- data/tracks/fsharp/exercises/saddle-points/README.md +33 -0
- data/tracks/fsharp/exercises/say/README.md +69 -0
- data/tracks/fsharp/exercises/scale-generator/README.md +60 -0
- data/tracks/fsharp/exercises/scrabble-score/README.md +44 -0
- data/tracks/fsharp/exercises/secret-handshake/README.md +35 -0
- data/tracks/fsharp/exercises/series/README.md +27 -0
- data/tracks/fsharp/exercises/sgf-parsing/README.md +68 -0
- data/tracks/fsharp/exercises/sieve/README.md +34 -0
- data/tracks/fsharp/exercises/simple-cipher/README.md +90 -0
- data/tracks/fsharp/exercises/simple-linked-list/README.md +28 -0
- data/tracks/fsharp/exercises/space-age/README.md +28 -0
- data/tracks/fsharp/exercises/strain/README.md +40 -0
- data/tracks/fsharp/exercises/sublist/README.md +21 -0
- data/tracks/fsharp/exercises/sum-of-multiples/README.md +18 -0
- data/tracks/fsharp/exercises/tournament/README.md +68 -0
- data/tracks/fsharp/exercises/transpose/README.md +65 -0
- data/tracks/fsharp/exercises/tree-building/README.md +30 -0
- data/tracks/fsharp/exercises/triangle/README.md +26 -0
- data/tracks/fsharp/exercises/twelve-days/README.md +39 -0
- data/tracks/fsharp/exercises/two-bucket/README.md +36 -0
- data/tracks/fsharp/exercises/variable-length-quantity/README.md +39 -0
- data/tracks/fsharp/exercises/word-count/README.md +19 -0
- data/tracks/fsharp/exercises/word-search/README.md +30 -0
- data/tracks/fsharp/exercises/wordy/README.md +68 -0
- data/tracks/fsharp/exercises/zebra-puzzle/README.md +32 -0
- data/tracks/fsharp/exercises/zipper/README.md +31 -0
- data/tracks/haskell/README.md +2 -2
- data/tracks/javascript/config.json +232 -4
- data/tracks/kotlin/config.json +8 -1
- data/tracks/kotlin/exercises/rotational-cipher/build.gradle +28 -0
- data/tracks/kotlin/exercises/rotational-cipher/src/example/kotlin/RotationalCipher.kt +18 -0
- data/tracks/kotlin/exercises/rotational-cipher/src/main/kotlin/.keep +0 -0
- data/tracks/kotlin/exercises/rotational-cipher/src/test/kotlin/RotationalCipherTest.kt +81 -0
- data/tracks/kotlin/exercises/settings.gradle +1 -0
- data/tracks/powershell/config/exercise_readme.go.tmpl +16 -0
- data/tracks/powershell/exercises/hamming/README.md +42 -0
- data/tracks/powershell/exercises/hello-world/README.md +21 -0
- data/tracks/purescript/README.md +4 -4
- data/tracks/scala/config.json +266 -6
- data/tracks/scala/config/exercise_readme.go.tmpl +16 -0
- data/tracks/scala/exercises/accumulate/README.md +46 -0
- data/tracks/scala/exercises/acronym/README.md +26 -0
- data/tracks/scala/exercises/all-your-base/README.md +46 -0
- data/tracks/scala/exercises/allergies/README.md +48 -0
- data/tracks/scala/exercises/alphametics/README.md +46 -0
- data/tracks/scala/exercises/anagram/README.md +24 -0
- data/tracks/scala/exercises/atbash-cipher/README.md +45 -0
- data/tracks/scala/exercises/bank-account/README.md +54 -0
- data/tracks/scala/exercises/beer-song/README.md +338 -0
- data/tracks/scala/exercises/binary-search-tree/README.md +71 -0
- data/tracks/scala/exercises/binary-search/README.md +52 -0
- data/tracks/scala/exercises/binary/README.md +46 -0
- data/tracks/scala/exercises/bob/README.md +29 -0
- data/tracks/scala/exercises/book-store/README.md +85 -0
- data/tracks/scala/exercises/bowling/README.md +64 -0
- data/tracks/scala/exercises/bracket-push/README.md +21 -0
- data/tracks/scala/exercises/change/README.md +34 -0
- data/tracks/scala/exercises/clock/README.md +24 -0
- data/tracks/scala/exercises/connect/README.md +53 -0
- data/tracks/scala/exercises/crypto-square/README.md +85 -0
- data/tracks/scala/exercises/custom-set/README.md +22 -0
- data/tracks/scala/exercises/difference-of-squares/README.md +30 -0
- data/tracks/scala/exercises/dominoes/README.md +29 -0
- data/tracks/scala/exercises/etl/README.md +62 -0
- data/tracks/scala/exercises/food-chain/README.md +81 -0
- data/tracks/scala/exercises/forth/README.md +40 -0
- data/tracks/scala/exercises/gigasecond/README.md +26 -0
- data/tracks/scala/exercises/grade-school/README.md +53 -0
- data/tracks/scala/exercises/grains/README.md +45 -0
- data/tracks/scala/exercises/hamming/README.md +112 -0
- data/tracks/scala/exercises/hello-world/README.md +38 -0
- data/tracks/scala/exercises/hexadecimal/README.md +25 -0
- data/tracks/scala/exercises/house/README.md +124 -0
- data/tracks/scala/exercises/isogram/README.md +30 -0
- data/tracks/scala/exercises/kindergarten-garden/README.md +77 -0
- data/tracks/scala/exercises/largest-series-product/README.md +31 -0
- data/tracks/scala/exercises/leap/README.md +50 -0
- data/tracks/scala/exercises/lens-person/README.md +11 -7
- data/tracks/scala/exercises/linked-list/README.md +45 -0
- data/tracks/scala/exercises/luhn/README.md +82 -0
- data/tracks/scala/exercises/matrix/README.md +56 -0
- data/tracks/scala/exercises/meetup/README.md +41 -0
- data/tracks/scala/exercises/minesweeper/README.md +41 -0
- data/tracks/scala/exercises/nth-prime/README.md +26 -0
- data/tracks/scala/exercises/nucleotide-count/README.md +107 -0
- data/tracks/scala/exercises/ocr-numbers/README.md +96 -0
- data/tracks/scala/exercises/octal/README.md +60 -0
- data/tracks/scala/exercises/palindrome-products/README.md +51 -0
- data/tracks/scala/exercises/pangram/README.md +26 -0
- data/tracks/scala/exercises/parallel-letter-frequency/README.md +50 -0
- data/tracks/scala/exercises/pascals-triangle/README.md +32 -0
- data/tracks/scala/exercises/perfect-numbers/README.md +35 -0
- data/tracks/scala/exercises/phone-number/README.md +56 -0
- data/tracks/scala/exercises/pig-latin/README.md +35 -0
- data/tracks/scala/exercises/prime-factors/README.md +47 -0
- data/tracks/scala/exercises/protein-translation/README.md +60 -0
- data/tracks/scala/exercises/pythagorean-triplet/README.md +35 -0
- data/tracks/scala/exercises/queen-attack/README.md +44 -0
- data/tracks/scala/exercises/rail-fence-cipher/README.md +71 -0
- data/tracks/scala/exercises/raindrops/README.md +35 -0
- data/tracks/scala/exercises/rna-transcription/README.md +36 -0
- data/tracks/scala/exercises/robot-name/README.md +40 -0
- data/tracks/scala/exercises/robot-simulator/README.md +45 -0
- data/tracks/scala/exercises/roman-numerals/README.md +72 -0
- data/tracks/scala/exercises/run-length-encoding/README.md +41 -0
- data/tracks/scala/exercises/saddle-points/README.md +44 -0
- data/tracks/scala/exercises/say/README.md +80 -0
- data/tracks/scala/exercises/scrabble-score/README.md +55 -0
- data/tracks/scala/exercises/secret-handshake/README.md +46 -0
- data/tracks/scala/exercises/series/README.md +38 -0
- data/tracks/scala/exercises/sgf-parsing/README.md +79 -0
- data/tracks/scala/exercises/sieve/README.md +45 -0
- data/tracks/scala/exercises/simple-cipher/README.md +101 -0
- data/tracks/scala/exercises/simple-linked-list/README.md +39 -0
- data/tracks/scala/exercises/space-age/README.md +35 -0
- data/tracks/scala/exercises/spiral-matrix/README.md +41 -0
- data/tracks/scala/exercises/strain/README.md +51 -0
- data/tracks/scala/exercises/sublist/README.md +32 -0
- data/tracks/scala/exercises/sum-of-multiples/README.md +29 -0
- data/tracks/scala/exercises/triangle/README.md +37 -0
- data/tracks/scala/exercises/trinary/README.md +39 -0
- data/tracks/scala/exercises/variable-length-quantity/README.md +54 -0
- data/tracks/scala/exercises/word-count/README.md +30 -0
- data/tracks/scala/exercises/wordy/README.md +74 -0
- data/tracks/scala/exercises/zebra-puzzle/README.md +43 -0
- data/tracks/scala/exercises/zipper/README.md +42 -0
- metadata +401 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Bob
|
|
2
|
+
|
|
3
|
+
Bob is a lackadaisical teenager. In conversation, his responses are very limited.
|
|
4
|
+
|
|
5
|
+
Bob answers 'Sure.' if you ask him a question.
|
|
6
|
+
|
|
7
|
+
He answers 'Whoa, chill out!' if you yell at him.
|
|
8
|
+
|
|
9
|
+
He says 'Fine. Be that way!' if you address him without actually saying
|
|
10
|
+
anything.
|
|
11
|
+
|
|
12
|
+
He answers 'Whatever.' to anything else.
|
|
13
|
+
|
|
14
|
+
## Running tests
|
|
15
|
+
|
|
16
|
+
Execute the tests with:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
$ elixir bob_test.exs
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
(Replace `bob_test.exs` with the name of the test file.)
|
|
23
|
+
|
|
24
|
+
### Pending tests
|
|
25
|
+
|
|
26
|
+
In the test suites, all but the first test have been skipped.
|
|
27
|
+
|
|
28
|
+
Once you get a test passing, you can unskip the next one by
|
|
29
|
+
commenting out the relevant `@tag :pending` with a `#` symbol.
|
|
30
|
+
|
|
31
|
+
For example:
|
|
32
|
+
|
|
33
|
+
```elixir
|
|
34
|
+
# @tag :pending
|
|
35
|
+
test "shouting" do
|
|
36
|
+
assert Bob.hey("WATCH OUT!") == "Whoa, chill out!"
|
|
37
|
+
end
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Or, you can enable all the tests by commenting out the
|
|
41
|
+
`ExUnit.configure` line in the test suite.
|
|
42
|
+
|
|
43
|
+
```elixir
|
|
44
|
+
# ExUnit.configure exclude: :pending, trace: true
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
For more detailed information about the Elixir track, please
|
|
48
|
+
see the [help page](http://exercism.io/languages/elixir).
|
|
49
|
+
|
|
50
|
+
## Source
|
|
51
|
+
|
|
52
|
+
Inspired by the 'Deaf Grandma' exercise in Chris Pine's Learn to Program tutorial. [http://pine.fm/LearnToProgram/?Chapter=06](http://pine.fm/LearnToProgram/?Chapter=06)
|
|
53
|
+
|
|
54
|
+
## Submitting Incomplete Solutions
|
|
55
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Bowling
|
|
2
|
+
|
|
3
|
+
Score a bowling game.
|
|
4
|
+
|
|
5
|
+
Bowling is game where players roll a heavy ball to knock down pins
|
|
6
|
+
arranged in a triangle. Write code to keep track of the score
|
|
7
|
+
of a game of bowling.
|
|
8
|
+
|
|
9
|
+
## Scoring Bowling
|
|
10
|
+
|
|
11
|
+
The game consists of 10 frames. A frame is composed of one or two ball throws with 10 pins standing at frame initialization. There are three cases for the tabulation of a frame.
|
|
12
|
+
|
|
13
|
+
* An open frame is where a score of less than 10 is recorded for the frame. In this case the score for the frame is the number of pins knocked down.
|
|
14
|
+
|
|
15
|
+
* A spare is where all ten pins are knocked down after the second throw. The total value of a spare is 10 plus the number of pins knocked down in their next throw.
|
|
16
|
+
|
|
17
|
+
* A strike is where all ten pins are knocked down after the first throw. The total value of a strike is 10 plus the number of pins knocked down in their next two throws. If a strike is immediately followed by a second strike, then we can not total the value of first strike until they throw the ball one more time.
|
|
18
|
+
|
|
19
|
+
Here is a three frame example:
|
|
20
|
+
|
|
21
|
+
| Frame 1 | Frame 2 | Frame 3 |
|
|
22
|
+
| :-------------: |:-------------:| :---------------------:|
|
|
23
|
+
| X (strike) | 5/ (spare) | 9 0 (open frame) |
|
|
24
|
+
|
|
25
|
+
Frame 1 is (10 + 5 + 5) = 20
|
|
26
|
+
|
|
27
|
+
Frame 2 is (5 + 5 + 9) = 19
|
|
28
|
+
|
|
29
|
+
Frame 3 is (9 + 0) = 9
|
|
30
|
+
|
|
31
|
+
This means the current running total is 48.
|
|
32
|
+
|
|
33
|
+
The tenth frame in the game is a special case. If someone throws a strike or a spare then they get a fill ball. Fill balls exist to calculate the total of the 10th frame. Scoring a strike or spare on the fill ball does not give the player more fill balls. The total value of the 10th frame is the total number of pins knocked down.
|
|
34
|
+
|
|
35
|
+
For a tenth frame of X1/ (strike and a spare), the total value is 20.
|
|
36
|
+
|
|
37
|
+
For a tenth frame of XXX (three strikes), the total value is 30.
|
|
38
|
+
|
|
39
|
+
## Requirements
|
|
40
|
+
|
|
41
|
+
Write code to keep track of the score of a game of bowling. It should
|
|
42
|
+
support two operations:
|
|
43
|
+
|
|
44
|
+
* `roll(pins : int)` is called each time the player rolls a ball. The
|
|
45
|
+
argument is the number of pins knocked down.
|
|
46
|
+
* `score() : int` is called only at the very end of the game. It
|
|
47
|
+
returns the total score for that game.
|
|
48
|
+
|
|
49
|
+
## Running tests
|
|
50
|
+
|
|
51
|
+
Execute the tests with:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
$ elixir bob_test.exs
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
(Replace `bob_test.exs` with the name of the test file.)
|
|
58
|
+
|
|
59
|
+
### Pending tests
|
|
60
|
+
|
|
61
|
+
In the test suites, all but the first test have been skipped.
|
|
62
|
+
|
|
63
|
+
Once you get a test passing, you can unskip the next one by
|
|
64
|
+
commenting out the relevant `@tag :pending` with a `#` symbol.
|
|
65
|
+
|
|
66
|
+
For example:
|
|
67
|
+
|
|
68
|
+
```elixir
|
|
69
|
+
# @tag :pending
|
|
70
|
+
test "shouting" do
|
|
71
|
+
assert Bob.hey("WATCH OUT!") == "Whoa, chill out!"
|
|
72
|
+
end
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Or, you can enable all the tests by commenting out the
|
|
76
|
+
`ExUnit.configure` line in the test suite.
|
|
77
|
+
|
|
78
|
+
```elixir
|
|
79
|
+
# ExUnit.configure exclude: :pending, trace: true
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
For more detailed information about the Elixir track, please
|
|
83
|
+
see the [help page](http://exercism.io/languages/elixir).
|
|
84
|
+
|
|
85
|
+
## Source
|
|
86
|
+
|
|
87
|
+
The Bowling Game Kata at but UncleBob [http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata](http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata)
|
|
88
|
+
|
|
89
|
+
## Submitting Incomplete Solutions
|
|
90
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -12,7 +12,7 @@ defmodule BowlingTest do
|
|
|
12
12
|
Enum.reduce(rolls, game, fn(roll, game) -> Bowling.roll(game, roll) end)
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
test "
|
|
15
|
+
test "should be able to score a game with all zeros" do
|
|
16
16
|
game = Bowling.start
|
|
17
17
|
rolls = [0, 0,
|
|
18
18
|
0, 0,
|
|
@@ -29,7 +29,7 @@ defmodule BowlingTest do
|
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
@tag :pending
|
|
32
|
-
test "
|
|
32
|
+
test "should be able to score a game with no strikes or spares" do
|
|
33
33
|
game = Bowling.start
|
|
34
34
|
rolls = [3, 6,
|
|
35
35
|
3, 6,
|
|
@@ -46,7 +46,7 @@ defmodule BowlingTest do
|
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
@tag :pending
|
|
49
|
-
test "spare followed by
|
|
49
|
+
test "a spare followed by zeros is worth ten points" do
|
|
50
50
|
game = Bowling.start
|
|
51
51
|
rolls = [6, 4,
|
|
52
52
|
0, 0,
|
|
@@ -63,7 +63,7 @@ defmodule BowlingTest do
|
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
@tag :pending
|
|
66
|
-
test "points scored in the roll after
|
|
66
|
+
test "points scored in the roll after a spare are counted twice" do
|
|
67
67
|
game = Bowling.start
|
|
68
68
|
rolls = [6, 4,
|
|
69
69
|
3, 0,
|
|
@@ -115,7 +115,7 @@ defmodule BowlingTest do
|
|
|
115
115
|
end
|
|
116
116
|
|
|
117
117
|
@tag :pending
|
|
118
|
-
test "a strike earns ten points in frame with a single roll" do
|
|
118
|
+
test "a strike earns ten points in a frame with a single roll" do
|
|
119
119
|
game = Bowling.start
|
|
120
120
|
rolls = [10,
|
|
121
121
|
0, 0,
|
|
@@ -258,26 +258,26 @@ defmodule BowlingTest do
|
|
|
258
258
|
end
|
|
259
259
|
|
|
260
260
|
@tag :pending
|
|
261
|
-
test "rolls
|
|
261
|
+
test "rolls cannot score negative points" do
|
|
262
262
|
game = Bowling.start
|
|
263
|
-
assert Bowling.roll(game, -1) == {:error, "
|
|
263
|
+
assert Bowling.roll(game, -1) == {:error, "Negative roll is invalid"}
|
|
264
264
|
end
|
|
265
265
|
|
|
266
266
|
@tag :pending
|
|
267
|
-
test "a roll
|
|
267
|
+
test "a roll cannot score more than 10 points" do
|
|
268
268
|
game = Bowling.start
|
|
269
|
-
assert Bowling.roll(game, 11) == {:error, "
|
|
269
|
+
assert Bowling.roll(game, 11) == {:error, "Pin count exceeds pins on the lane"}
|
|
270
270
|
end
|
|
271
271
|
|
|
272
272
|
@tag :pending
|
|
273
|
-
test "two rolls in a frame
|
|
273
|
+
test "two rolls in a frame cannot score more than 10 points" do
|
|
274
274
|
game = Bowling.start
|
|
275
275
|
game = Bowling.roll(game, 5)
|
|
276
276
|
assert Bowling.roll(game, 6) == {:error, "Pin count exceeds pins on the lane"}
|
|
277
277
|
end
|
|
278
278
|
|
|
279
279
|
@tag :pending
|
|
280
|
-
test "
|
|
280
|
+
test "bonus roll after a strike in the last frame cannot score more than 10 points" do
|
|
281
281
|
game = Bowling.start
|
|
282
282
|
rolls = [0, 0,
|
|
283
283
|
0, 0,
|
|
@@ -288,26 +288,100 @@ defmodule BowlingTest do
|
|
|
288
288
|
0, 0,
|
|
289
289
|
0, 0,
|
|
290
290
|
0, 0,
|
|
291
|
+
10]
|
|
292
|
+
game = roll_reduce(game, rolls)
|
|
293
|
+
assert Bowling.roll(game, 11) == {:error, "Pin count exceeds pins on the lane"}
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
@tag :pending
|
|
297
|
+
test "two bonus rolls after a strike in the last frame cannot score more than 10 points" do
|
|
298
|
+
game = Bowling.start
|
|
299
|
+
rolls = [0, 0,
|
|
300
|
+
0, 0,
|
|
301
|
+
0, 0,
|
|
302
|
+
0, 0,
|
|
303
|
+
0, 0,
|
|
304
|
+
0, 0,
|
|
305
|
+
0, 0,
|
|
306
|
+
0, 0,
|
|
307
|
+
0, 0,
|
|
308
|
+
10,
|
|
291
309
|
5]
|
|
292
310
|
game = roll_reduce(game, rolls)
|
|
293
311
|
assert Bowling.roll(game, 6) == {:error, "Pin count exceeds pins on the lane"}
|
|
294
312
|
end
|
|
295
313
|
|
|
296
314
|
@tag :pending
|
|
297
|
-
test "
|
|
315
|
+
test "two bonus rolls after a strike in the last frame can score more than 10 points if one is a strike" do
|
|
316
|
+
game = Bowling.start
|
|
317
|
+
rolls = [0, 0,
|
|
318
|
+
0, 0,
|
|
319
|
+
0, 0,
|
|
320
|
+
0, 0,
|
|
321
|
+
0, 0,
|
|
322
|
+
0, 0,
|
|
323
|
+
0, 0,
|
|
324
|
+
0, 0,
|
|
325
|
+
0, 0,
|
|
326
|
+
10,
|
|
327
|
+
10,
|
|
328
|
+
6]
|
|
329
|
+
game = roll_reduce(game, rolls)
|
|
330
|
+
assert Bowling.score(game) == 26
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
@tag :pending
|
|
334
|
+
test "the second bonus rolls after a strike in the last frame cannot be a strike if the first one is not a strike" do
|
|
335
|
+
game = Bowling.start
|
|
336
|
+
rolls = [0, 0,
|
|
337
|
+
0, 0,
|
|
338
|
+
0, 0,
|
|
339
|
+
0, 0,
|
|
340
|
+
0, 0,
|
|
341
|
+
0, 0,
|
|
342
|
+
0, 0,
|
|
343
|
+
0, 0,
|
|
344
|
+
0, 0,
|
|
345
|
+
10,
|
|
346
|
+
6]
|
|
347
|
+
game = roll_reduce(game, rolls)
|
|
348
|
+
assert Bowling.roll(game, 10) == {:error, "Pin count exceeds pins on the lane"}
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
@tag :pending
|
|
352
|
+
test "second bonus roll after a strike in the last frame cannot score more than 10 points" do
|
|
353
|
+
game = Bowling.start
|
|
354
|
+
rolls = [0, 0,
|
|
355
|
+
0, 0,
|
|
356
|
+
0, 0,
|
|
357
|
+
0, 0,
|
|
358
|
+
0, 0,
|
|
359
|
+
0, 0,
|
|
360
|
+
0, 0,
|
|
361
|
+
0, 0,
|
|
362
|
+
0, 0,
|
|
363
|
+
10,
|
|
364
|
+
10]
|
|
365
|
+
game = roll_reduce(game, rolls)
|
|
366
|
+
assert Bowling.roll(game, 11) == {:error, "Pin count exceeds pins on the lane"}
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
@tag :pending
|
|
370
|
+
test "an unstarted game cannot be scored" do
|
|
298
371
|
game = Bowling.start
|
|
299
372
|
assert Bowling.score(game) == {:error, "Score cannot be taken until the end of the game"}
|
|
300
373
|
end
|
|
301
374
|
|
|
302
375
|
@tag :pending
|
|
303
|
-
test "
|
|
376
|
+
test "an incomplete game cannot be scored" do
|
|
304
377
|
game = Bowling.start
|
|
305
|
-
|
|
378
|
+
rolls = [0, 0]
|
|
379
|
+
game = roll_reduce(game, rolls)
|
|
306
380
|
assert Bowling.score(game) == {:error, "Score cannot be taken until the end of the game"}
|
|
307
381
|
end
|
|
308
382
|
|
|
309
383
|
@tag :pending
|
|
310
|
-
test "
|
|
384
|
+
test "cannot roll if game already has ten frames" do
|
|
311
385
|
game = Bowling.start
|
|
312
386
|
rolls = [0, 0,
|
|
313
387
|
0, 0,
|
|
@@ -318,10 +392,9 @@ defmodule BowlingTest do
|
|
|
318
392
|
0, 0,
|
|
319
393
|
0, 0,
|
|
320
394
|
0, 0,
|
|
321
|
-
0, 0
|
|
322
|
-
0]
|
|
395
|
+
0, 0]
|
|
323
396
|
game = roll_reduce(game, rolls)
|
|
324
|
-
assert Bowling.
|
|
397
|
+
assert Bowling.roll(game, 0) == {:error, "Cannot roll after game is over"}
|
|
325
398
|
end
|
|
326
399
|
|
|
327
400
|
@tag :pending
|
|
@@ -10,16 +10,18 @@ defmodule Bowling do
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def roll(_, score) when score < 0 do
|
|
13
|
-
{:error, "
|
|
13
|
+
{:error, "Negative roll is invalid"}
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def roll(_, score) when score > 10 do
|
|
17
|
-
{:error, "
|
|
17
|
+
{:error, "Pin count exceeds pins on the lane"}
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def roll(game, score) do
|
|
21
21
|
updates = update_score(game.roll_in_frame, game, score)
|
|
22
22
|
cond do
|
|
23
|
+
too_many_frames?(updates) ->
|
|
24
|
+
{:error, "Cannot roll after game is over"}
|
|
23
25
|
valid_updates?(updates) ->
|
|
24
26
|
updates
|
|
25
27
|
true ->
|
|
@@ -58,8 +60,6 @@ defmodule Bowling do
|
|
|
58
60
|
{:error, "Score cannot be taken until the end of the game"}
|
|
59
61
|
bonus_roll_remaining?(game) ->
|
|
60
62
|
{:error, "Score cannot be taken until the end of the game"}
|
|
61
|
-
too_many_frames?(game) ->
|
|
62
|
-
{:error, "Invalid game: too many frames"}
|
|
63
63
|
true ->
|
|
64
64
|
parse_scores(game.scores)
|
|
65
65
|
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Bracket Push
|
|
2
|
+
|
|
3
|
+
Given a string containing brackets `[]`, braces `{}` and parentheses `()`,
|
|
4
|
+
verify that all the pairs are matched and nested correctly.
|
|
5
|
+
|
|
6
|
+
## Running tests
|
|
7
|
+
|
|
8
|
+
Execute the tests with:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
$ elixir bob_test.exs
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
(Replace `bob_test.exs` with the name of the test file.)
|
|
15
|
+
|
|
16
|
+
### Pending tests
|
|
17
|
+
|
|
18
|
+
In the test suites, all but the first test have been skipped.
|
|
19
|
+
|
|
20
|
+
Once you get a test passing, you can unskip the next one by
|
|
21
|
+
commenting out the relevant `@tag :pending` with a `#` symbol.
|
|
22
|
+
|
|
23
|
+
For example:
|
|
24
|
+
|
|
25
|
+
```elixir
|
|
26
|
+
# @tag :pending
|
|
27
|
+
test "shouting" do
|
|
28
|
+
assert Bob.hey("WATCH OUT!") == "Whoa, chill out!"
|
|
29
|
+
end
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Or, you can enable all the tests by commenting out the
|
|
33
|
+
`ExUnit.configure` line in the test suite.
|
|
34
|
+
|
|
35
|
+
```elixir
|
|
36
|
+
# ExUnit.configure exclude: :pending, trace: true
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
For more detailed information about the Elixir track, please
|
|
40
|
+
see the [help page](http://exercism.io/languages/elixir).
|
|
41
|
+
|
|
42
|
+
## Source
|
|
43
|
+
|
|
44
|
+
Ginna Baker
|
|
45
|
+
|
|
46
|
+
## Submitting Incomplete Solutions
|
|
47
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Change
|
|
2
|
+
|
|
3
|
+
Correctly determine the fewest number of coins to be given to a customer such
|
|
4
|
+
that the sum of the coins' value would equal the correct amount of change.
|
|
5
|
+
|
|
6
|
+
## For example
|
|
7
|
+
|
|
8
|
+
- An input of 15 with [1, 5, 10, 25, 100] should return one nickel (5)
|
|
9
|
+
and one dime (10) or [0, 1, 1, 0, 0]
|
|
10
|
+
- An input of 40 with [1, 5, 10, 25, 100] should return one nickel (5)
|
|
11
|
+
and one dime (10) and one quarter (25) or [0, 1, 1, 1, 0]
|
|
12
|
+
|
|
13
|
+
## Edge cases
|
|
14
|
+
|
|
15
|
+
- Does your algorithm work for any given set of coins?
|
|
16
|
+
- Can you ask for negative change?
|
|
17
|
+
- Can you ask for a change value smaller than the smallest coin value?
|
|
18
|
+
|
|
19
|
+
## Running tests
|
|
20
|
+
|
|
21
|
+
Execute the tests with:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
$ elixir bob_test.exs
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
(Replace `bob_test.exs` with the name of the test file.)
|
|
28
|
+
|
|
29
|
+
### Pending tests
|
|
30
|
+
|
|
31
|
+
In the test suites, all but the first test have been skipped.
|
|
32
|
+
|
|
33
|
+
Once you get a test passing, you can unskip the next one by
|
|
34
|
+
commenting out the relevant `@tag :pending` with a `#` symbol.
|
|
35
|
+
|
|
36
|
+
For example:
|
|
37
|
+
|
|
38
|
+
```elixir
|
|
39
|
+
# @tag :pending
|
|
40
|
+
test "shouting" do
|
|
41
|
+
assert Bob.hey("WATCH OUT!") == "Whoa, chill out!"
|
|
42
|
+
end
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Or, you can enable all the tests by commenting out the
|
|
46
|
+
`ExUnit.configure` line in the test suite.
|
|
47
|
+
|
|
48
|
+
```elixir
|
|
49
|
+
# ExUnit.configure exclude: :pending, trace: true
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
For more detailed information about the Elixir track, please
|
|
53
|
+
see the [help page](http://exercism.io/languages/elixir).
|
|
54
|
+
|
|
55
|
+
## Source
|
|
56
|
+
|
|
57
|
+
Software Craftsmanship - Kata-logue [http://craftsmanship.sv.cmu.edu/exercises/coin-change-kata](http://craftsmanship.sv.cmu.edu/exercises/coin-change-kata)
|
|
58
|
+
|
|
59
|
+
## Submitting Incomplete Solutions
|
|
60
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|