trackler 2.2.0.4 → 2.2.0.5
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/tracks/bash/config.json +10 -2
- data/tracks/bash/exercises/word-count/example.awk +12 -0
- data/tracks/bash/exercises/word-count/example.sh +21 -0
- data/tracks/c/config.json +0 -2
- data/tracks/ceylon/config.json +0 -2
- data/tracks/{erlang/exercises/all-your-base/.meta/readme.go.tmpl → clojure/config/exercise_readme.go.tmpl} +0 -1
- data/tracks/clojure/exercises/accumulate/README.md +35 -0
- data/tracks/clojure/exercises/acronym/README.md +15 -0
- data/tracks/clojure/exercises/all-your-base/README.md +35 -0
- data/tracks/clojure/exercises/allergies/README.md +37 -0
- data/tracks/clojure/exercises/anagram/README.md +13 -0
- data/tracks/clojure/exercises/atbash-cipher/README.md +34 -0
- data/tracks/clojure/exercises/bank-account/README.md +30 -0
- data/tracks/clojure/exercises/beer-song/README.md +327 -0
- data/tracks/clojure/exercises/binary/README.md +35 -0
- data/tracks/clojure/exercises/binary-search/README.md +41 -0
- data/tracks/clojure/exercises/binary-search-tree/README.md +60 -0
- data/tracks/clojure/exercises/bob/README.md +18 -0
- data/tracks/clojure/exercises/bracket-push/README.md +10 -0
- data/tracks/clojure/exercises/change/README.md +23 -0
- data/tracks/clojure/exercises/clock/README.md +13 -0
- data/tracks/clojure/exercises/crypto-square/README.md +74 -0
- data/tracks/clojure/exercises/difference-of-squares/README.md +19 -0
- data/tracks/clojure/exercises/etl/README.md +51 -0
- data/tracks/clojure/exercises/flatten-array/README.md +18 -0
- data/tracks/clojure/exercises/gigasecond/README.md +11 -0
- data/tracks/clojure/exercises/grade-school/README.md +42 -0
- data/tracks/clojure/exercises/grains/README.md +34 -0
- data/tracks/clojure/exercises/hamming/README.md +42 -0
- data/tracks/clojure/exercises/hello-world/README.md +51 -0
- data/tracks/clojure/exercises/hexadecimal/README.md +14 -0
- data/tracks/clojure/exercises/isogram/README.md +19 -0
- data/tracks/clojure/exercises/kindergarten-garden/README.md +66 -0
- data/tracks/clojure/exercises/largest-series-product/README.md +20 -0
- data/tracks/clojure/exercises/leap/README.md +33 -0
- data/tracks/clojure/exercises/luhn/README.md +71 -0
- data/tracks/clojure/exercises/meetup/README.md +30 -0
- data/tracks/clojure/exercises/minesweeper/README.md +30 -0
- data/tracks/clojure/exercises/nth-prime/README.md +15 -0
- data/tracks/clojure/exercises/nucleotide-count/README.md +33 -0
- data/tracks/clojure/exercises/octal/README.md +49 -0
- data/tracks/clojure/exercises/pangram/README.md +15 -0
- data/tracks/clojure/exercises/pascals-triangle/README.md +21 -0
- data/tracks/clojure/exercises/perfect-numbers/README.md +24 -0
- data/tracks/clojure/exercises/phone-number/README.md +34 -0
- data/tracks/clojure/exercises/pig-latin/README.md +24 -0
- data/tracks/clojure/exercises/pov/README.md +46 -0
- data/tracks/clojure/exercises/prime-factors/README.md +36 -0
- data/tracks/clojure/exercises/queen-attack/README.md +33 -0
- data/tracks/clojure/exercises/raindrops/README.md +24 -0
- data/tracks/clojure/exercises/rna-transcription/README.md +25 -0
- data/tracks/clojure/exercises/robot-name/README.md +22 -0
- data/tracks/clojure/exercises/robot-simulator/README.md +34 -0
- data/tracks/clojure/exercises/roman-numerals/README.md +49 -0
- data/tracks/clojure/exercises/rotational-cipher/README.md +36 -0
- data/tracks/clojure/exercises/scrabble-score/README.md +44 -0
- data/tracks/clojure/exercises/secret-handshake/README.md +35 -0
- data/tracks/clojure/exercises/sieve/README.md +34 -0
- data/tracks/clojure/exercises/space-age/README.md +24 -0
- data/tracks/clojure/exercises/strain/README.md +40 -0
- data/tracks/clojure/exercises/sublist/README.md +21 -0
- data/tracks/clojure/exercises/sum-of-multiples/README.md +18 -0
- data/tracks/clojure/exercises/triangle/README.md +26 -0
- data/tracks/clojure/exercises/trinary/README.md +28 -0
- data/tracks/clojure/exercises/word-count/README.md +19 -0
- data/tracks/clojure/exercises/wordy/README.md +63 -0
- data/tracks/{erlang/exercises/allergies/.meta/readme.go.tmpl → crystal/config/exercise_readme.go.tmpl} +0 -1
- data/tracks/crystal/config.json +0 -2
- data/tracks/crystal/exercises/acronym/README.md +38 -0
- data/tracks/crystal/exercises/anagram/README.md +36 -0
- data/tracks/crystal/exercises/atbash-cipher/README.md +57 -0
- data/tracks/crystal/exercises/binary/README.md +58 -0
- data/tracks/crystal/exercises/binary-search-tree/README.md +83 -0
- data/tracks/crystal/exercises/bob/README.md +41 -0
- data/tracks/crystal/exercises/bracket-push/README.md +33 -0
- data/tracks/crystal/exercises/difference-of-squares/README.md +42 -0
- data/tracks/crystal/exercises/flatten-array/README.md +41 -0
- data/tracks/crystal/exercises/forth/README.md +52 -0
- data/tracks/crystal/exercises/gigasecond/README.md +34 -0
- data/tracks/crystal/exercises/hamming/README.md +65 -0
- data/tracks/crystal/exercises/hello-world/README.md +78 -0
- data/tracks/crystal/exercises/largest-series-product/README.md +43 -0
- data/tracks/crystal/exercises/leap/README.md +56 -0
- data/tracks/crystal/exercises/pangram/README.md +38 -0
- data/tracks/crystal/exercises/pascals-triangle/README.md +44 -0
- data/tracks/crystal/exercises/raindrops/README.md +47 -0
- data/tracks/crystal/exercises/react/README.md +42 -0
- data/tracks/crystal/exercises/rna-transcription/README.md +48 -0
- data/tracks/crystal/exercises/roman-numerals/README.md +72 -0
- data/tracks/crystal/exercises/run-length-encoding/README.md +53 -0
- data/tracks/crystal/exercises/sieve/README.md +57 -0
- data/tracks/csharp/config.json +0 -2
- data/tracks/delphi/config.json +0 -2
- data/tracks/ecmascript/config.json +63 -2
- data/tracks/erlang/{exercises/anagram/.meta/readme.go.tmpl → config/exercise_readme.go.tmpl} +0 -1
- data/tracks/erlang/config.json +0 -2
- data/tracks/erlang/exercises/accumulate/README.md +0 -1
- data/tracks/erlang/exercises/all-your-base/README.md +0 -1
- data/tracks/erlang/exercises/allergies/README.md +0 -1
- data/tracks/erlang/exercises/anagram/README.md +0 -1
- data/tracks/erlang/exercises/atbash-cipher/README.md +0 -1
- data/tracks/erlang/exercises/bank-account/README.md +0 -1
- data/tracks/erlang/exercises/beer-song/README.md +0 -1
- data/tracks/erlang/exercises/bob/README.md +0 -1
- data/tracks/erlang/exercises/circular-buffer/README.md +0 -1
- data/tracks/erlang/exercises/clock/README.md +0 -1
- data/tracks/erlang/exercises/collatz-conjecture/README.md +0 -1
- data/tracks/erlang/exercises/difference-of-squares/README.md +0 -1
- data/tracks/erlang/exercises/etl/README.md +0 -1
- data/tracks/erlang/exercises/gigasecond/README.md +0 -1
- data/tracks/erlang/exercises/grade-school/README.md +0 -1
- data/tracks/erlang/exercises/grains/README.md +0 -1
- data/tracks/erlang/exercises/hamming/README.md +0 -1
- data/tracks/erlang/exercises/hello-world/README.md +0 -1
- data/tracks/erlang/exercises/largest-series-product/README.md +0 -1
- data/tracks/erlang/exercises/leap/README.md +0 -1
- data/tracks/erlang/exercises/luhn/README.md +0 -1
- data/tracks/erlang/exercises/meetup/README.md +0 -1
- data/tracks/erlang/exercises/nucleotide-count/README.md +0 -1
- data/tracks/erlang/exercises/parallel-letter-frequency/README.md +0 -1
- data/tracks/erlang/exercises/phone-number/README.md +0 -1
- data/tracks/erlang/exercises/rna-transcription/README.md +0 -1
- data/tracks/erlang/exercises/robot-simulator/README.md +0 -1
- data/tracks/erlang/exercises/roman-numerals/README.md +0 -1
- data/tracks/erlang/exercises/rotational-cipher/README.md +0 -1
- data/tracks/erlang/exercises/scrabble-score/README.md +0 -1
- data/tracks/erlang/exercises/series/README.md +0 -1
- data/tracks/erlang/exercises/space-age/README.md +0 -1
- data/tracks/erlang/exercises/spiral-matrix/README.md +0 -1
- data/tracks/erlang/exercises/strain/README.md +0 -1
- data/tracks/erlang/exercises/sum-of-multiples/README.md +0 -1
- data/tracks/erlang/exercises/triangle/README.md +0 -1
- data/tracks/erlang/exercises/word-count/README.md +0 -1
- data/tracks/erlang/exercises/zipper/README.md +0 -1
- data/tracks/factor/config.json +0 -2
- data/tracks/fsharp/config.json +0 -2
- data/tracks/go/config.json +12 -6
- data/tracks/go/exercises/bank-account/bank_account_test.go +60 -1
- data/tracks/go/exercises/error-handling/common.go +17 -0
- data/tracks/go/exercises/error-handling/error_handling_test.go +37 -4
- data/tracks/haskell/config.json +0 -2
- data/tracks/java/config.json +10 -2
- data/tracks/{erlang/exercises/accumulate → java/exercises/forth}/.meta/readme.go.tmpl +0 -0
- data/tracks/java/exercises/forth/README.md +41 -0
- data/tracks/java/exercises/forth/build.gradle +18 -0
- data/tracks/java/exercises/forth/src/example/java/ForthEvaluator.java +154 -0
- data/tracks/java/exercises/forth/src/example/java/Token.java +90 -0
- data/tracks/java/exercises/forth/src/main/java/.keep +0 -0
- data/tracks/java/exercises/forth/src/test/java/ForthEvaluatorTest.java +355 -0
- data/tracks/java/exercises/settings.gradle +1 -0
- data/tracks/javascript/config.json +0 -2
- data/tracks/kotlin/config.json +30 -2
- data/tracks/kotlin/exercises/forth/README.md +32 -0
- data/tracks/kotlin/exercises/forth/build.gradle +28 -0
- data/tracks/kotlin/exercises/forth/src/example/kotlin/ForthEvaluator.kt +138 -0
- data/tracks/kotlin/exercises/forth/src/main/kotlin/.keep +0 -0
- data/tracks/kotlin/exercises/forth/src/test/kotlin/ForthEvaluatorTest.kt +352 -0
- data/tracks/kotlin/exercises/meetup/README.md +33 -0
- data/tracks/kotlin/exercises/meetup/build.gradle +28 -0
- data/tracks/kotlin/exercises/meetup/src/example/kotlin/Meetup.kt +45 -0
- data/tracks/kotlin/exercises/meetup/src/example/kotlin/MeetupSchedule.kt +1 -0
- data/tracks/kotlin/exercises/meetup/src/main/kotlin/MeetupSchedule.kt +5 -0
- data/tracks/kotlin/exercises/meetup/src/test/kotlin/MeetupTest.kt +771 -0
- data/tracks/kotlin/exercises/say/README.md +72 -0
- data/tracks/kotlin/exercises/say/build.gradle +28 -0
- data/tracks/kotlin/exercises/say/src/example/kotlin/NumberSpeller.kt +88 -0
- data/tracks/kotlin/exercises/say/src/main/kotlin/.keep +0 -0
- data/tracks/kotlin/exercises/say/src/test/kotlin/NumberSpellerTest.kt +138 -0
- data/tracks/kotlin/exercises/settings.gradle +3 -0
- data/tracks/lua/config.json +0 -2
- data/tracks/mips/config.json +0 -2
- data/tracks/ocaml/config.json +0 -2
- data/tracks/perl5/config.json +262 -67
- data/tracks/perl6/config.json +98 -26
- data/tracks/php/docs/INSTALLATION.md +1 -1
- data/tracks/powershell/config.json +0 -2
- data/tracks/purescript/config.json +0 -2
- data/tracks/python/README.md +2 -2
- data/tracks/python/config/exercise_readme.go.tmpl +16 -0
- data/tracks/python/config.json +280 -15
- data/tracks/python/exercises/accumulate/README.md +46 -0
- data/tracks/python/exercises/acronym/README.md +26 -0
- data/tracks/python/exercises/all-your-base/README.md +46 -0
- data/tracks/python/exercises/allergies/README.md +48 -0
- data/tracks/python/exercises/alphametics/README.md +46 -0
- data/tracks/python/exercises/anagram/README.md +24 -0
- data/tracks/python/exercises/atbash-cipher/README.md +45 -0
- data/tracks/python/exercises/beer-song/README.md +338 -0
- data/tracks/python/exercises/binary/README.md +46 -0
- data/tracks/python/exercises/binary-search/README.md +52 -0
- data/tracks/python/exercises/bob/README.md +29 -0
- data/tracks/python/exercises/book-store/README.md +85 -0
- data/tracks/python/exercises/bracket-push/README.md +21 -0
- data/tracks/python/exercises/circular-buffer/README.md +61 -0
- data/tracks/python/exercises/clock/README.md +24 -0
- data/tracks/python/exercises/crypto-square/README.md +85 -0
- data/tracks/python/exercises/diamond/README.md +70 -0
- data/tracks/python/exercises/difference-of-squares/README.md +30 -0
- data/tracks/python/exercises/etl/README.md +62 -0
- data/tracks/python/exercises/flatten-array/README.md +29 -0
- data/tracks/python/exercises/gigasecond/README.md +22 -0
- data/tracks/python/exercises/grade-school/README.md +53 -0
- data/tracks/python/exercises/grains/README.md +45 -0
- data/tracks/python/exercises/grep/README.md +82 -0
- data/tracks/python/exercises/hamming/README.md +53 -0
- data/tracks/python/exercises/hello-world/README.md +32 -0
- data/tracks/python/exercises/hexadecimal/README.md +25 -0
- data/tracks/python/exercises/house/README.md +124 -0
- data/tracks/python/exercises/isogram/README.md +30 -0
- data/tracks/python/exercises/kindergarten-garden/README.md +77 -0
- data/tracks/python/exercises/largest-series-product/README.md +31 -0
- data/tracks/python/exercises/leap/README.md +44 -0
- data/tracks/python/exercises/linked-list/README.md +45 -0
- data/tracks/python/exercises/list-ops/README.md +21 -0
- data/tracks/python/exercises/luhn/README.md +82 -0
- data/tracks/python/exercises/matrix/README.md +56 -0
- data/tracks/python/exercises/meetup/README.md +41 -0
- data/tracks/python/exercises/minesweeper/README.md +41 -0
- data/tracks/python/exercises/nth-prime/README.md +26 -0
- data/tracks/python/exercises/nucleotide-count/README.md +44 -0
- data/tracks/python/exercises/ocr-numbers/README.md +96 -0
- data/tracks/python/exercises/octal/README.md +60 -0
- data/tracks/python/exercises/palindrome-products/README.md +51 -0
- data/tracks/python/exercises/pangram/README.md +26 -0
- data/tracks/python/exercises/pascals-triangle/README.md +32 -0
- data/tracks/python/exercises/perfect-numbers/README.md +35 -0
- data/tracks/python/exercises/phone-number/README.md +45 -0
- data/tracks/python/exercises/pig-latin/README.md +35 -0
- data/tracks/python/exercises/point-mutations/README.md +52 -0
- data/tracks/python/exercises/poker/README.md +23 -0
- data/tracks/python/exercises/prime-factors/README.md +47 -0
- data/tracks/python/exercises/protein-translation/README.md +60 -0
- data/tracks/python/exercises/proverb/README.md +29 -0
- data/tracks/python/exercises/pythagorean-triplet/README.md +35 -0
- data/tracks/python/exercises/queen-attack/README.md +44 -0
- data/tracks/python/exercises/rail-fence-cipher/README.md +71 -0
- data/tracks/python/exercises/raindrops/README.md +35 -0
- data/tracks/python/exercises/rectangles/README.md +78 -0
- data/tracks/python/exercises/rna-transcription/README.md +36 -0
- data/tracks/python/exercises/robot-name/README.md +33 -0
- data/tracks/python/exercises/robot-simulator/README.md +45 -0
- data/tracks/python/exercises/roman-numerals/README.md +60 -0
- data/tracks/python/exercises/rotational-cipher/README.md +47 -0
- data/tracks/python/exercises/run-length-encoding/README.md +41 -0
- data/tracks/python/exercises/saddle-points/README.md +44 -0
- data/tracks/python/exercises/say/README.md +80 -0
- data/tracks/python/exercises/scale-generator/README.md +71 -0
- data/tracks/python/exercises/scrabble-score/README.md +55 -0
- data/tracks/python/exercises/secret-handshake/README.md +46 -0
- data/tracks/python/exercises/series/README.md +38 -0
- data/tracks/python/exercises/sieve/README.md +45 -0
- data/tracks/python/exercises/simple-cipher/README.md +101 -0
- data/tracks/python/exercises/space-age/README.md +35 -0
- data/tracks/python/exercises/strain/README.md +51 -0
- data/tracks/python/exercises/sublist/README.md +32 -0
- data/tracks/python/exercises/sum-of-multiples/README.md +29 -0
- data/tracks/python/exercises/tournament/README.md +79 -0
- data/tracks/python/exercises/transpose/README.md +76 -0
- data/tracks/python/exercises/triangle/README.md +37 -0
- data/tracks/python/exercises/trinary/README.md +39 -0
- data/tracks/python/exercises/twelve-days/README.md +46 -0
- data/tracks/python/exercises/variable-length-quantity/README.md +50 -0
- data/tracks/python/exercises/word-count/README.md +30 -0
- data/tracks/python/exercises/word-search/README.md +41 -0
- data/tracks/python/exercises/wordy/README.md +74 -0
- data/tracks/python/exercises/zebra-puzzle/README.md +43 -0
- data/tracks/python/test/check-exercises.py +2 -3
- data/tracks/r/config.json +0 -2
- data/tracks/ruby/.travis.yml +1 -1
- data/tracks/ruby/config/exercise_readme.go.tmpl +16 -0
- data/tracks/ruby/config.json +265 -4
- data/tracks/ruby/exercises/accumulate/README.md +76 -0
- data/tracks/ruby/exercises/acronym/README.md +41 -0
- data/tracks/ruby/exercises/all-your-base/README.md +61 -0
- data/tracks/ruby/exercises/allergies/README.md +63 -0
- data/tracks/ruby/exercises/alphametics/README.md +61 -0
- data/tracks/ruby/exercises/anagram/README.md +39 -0
- data/tracks/ruby/exercises/atbash-cipher/README.md +60 -0
- data/tracks/ruby/exercises/beer-song/README.md +353 -0
- data/tracks/ruby/exercises/binary/README.md +61 -0
- data/tracks/ruby/exercises/binary-search/README.md +67 -0
- data/tracks/ruby/exercises/binary-search-tree/README.md +86 -0
- data/tracks/ruby/exercises/bob/README.md +44 -0
- data/tracks/ruby/exercises/bowling/README.md +79 -0
- data/tracks/ruby/exercises/bracket-push/README.md +36 -0
- data/tracks/ruby/exercises/circular-buffer/README.md +76 -0
- data/tracks/ruby/exercises/clock/README.md +39 -0
- data/tracks/ruby/exercises/collatz-conjecture/README.md +59 -0
- data/tracks/ruby/exercises/connect/README.md +60 -0
- data/tracks/ruby/exercises/crypto-square/README.md +100 -0
- data/tracks/ruby/exercises/custom-set/README.md +37 -0
- data/tracks/ruby/exercises/diamond/README.md +85 -0
- data/tracks/ruby/exercises/difference-of-squares/README.md +45 -0
- data/tracks/ruby/exercises/dominoes/README.md +44 -0
- data/tracks/ruby/exercises/etl/README.md +77 -0
- data/tracks/ruby/exercises/flatten-array/README.md +44 -0
- data/tracks/ruby/exercises/food-chain/README.md +96 -0
- data/tracks/ruby/exercises/gigasecond/README.md +37 -0
- data/tracks/ruby/exercises/grade-school/README.md +68 -0
- data/tracks/ruby/exercises/grains/README.md +60 -0
- data/tracks/ruby/exercises/hamming/README.md +68 -0
- data/tracks/ruby/exercises/hello-world/README.md +47 -0
- data/tracks/ruby/exercises/hexadecimal/README.md +40 -0
- data/tracks/ruby/exercises/house/README.md +139 -0
- data/tracks/ruby/exercises/isogram/README.md +45 -0
- data/tracks/ruby/exercises/kindergarten-garden/README.md +92 -0
- data/tracks/ruby/exercises/largest-series-product/README.md +46 -0
- data/tracks/ruby/exercises/leap/README.md +59 -0
- data/tracks/ruby/exercises/linked-list/README.md +60 -0
- data/tracks/ruby/exercises/list-ops/README.md +36 -0
- data/tracks/ruby/exercises/luhn/README.md +97 -0
- data/tracks/ruby/exercises/matrix/README.md +71 -0
- data/tracks/ruby/exercises/meetup/README.md +56 -0
- data/tracks/ruby/exercises/minesweeper/README.md +56 -0
- data/tracks/ruby/exercises/nth-prime/README.md +41 -0
- data/tracks/ruby/exercises/nucleotide-count/README.md +59 -0
- data/tracks/ruby/exercises/ocr-numbers/README.md +111 -0
- data/tracks/ruby/exercises/octal/README.md +75 -0
- data/tracks/ruby/exercises/palindrome-products/README.md +66 -0
- data/tracks/ruby/exercises/pangram/README.md +41 -0
- data/tracks/ruby/exercises/pascals-triangle/README.md +47 -0
- data/tracks/ruby/exercises/perfect-numbers/README.md +50 -0
- data/tracks/ruby/exercises/phone-number/README.md +60 -0
- data/tracks/ruby/exercises/pig-latin/README.md +50 -0
- data/tracks/ruby/exercises/point-mutations/README.md +67 -0
- data/tracks/ruby/exercises/poker/README.md +38 -0
- data/tracks/ruby/exercises/prime-factors/README.md +62 -0
- data/tracks/ruby/exercises/protein-translation/README.md +75 -0
- data/tracks/ruby/exercises/proverb/README.md +44 -0
- data/tracks/ruby/exercises/pythagorean-triplet/README.md +50 -0
- data/tracks/ruby/exercises/queen-attack/README.md +59 -0
- data/tracks/ruby/exercises/rail-fence-cipher/README.md +86 -0
- data/tracks/ruby/exercises/raindrops/README.md +50 -0
- data/tracks/ruby/exercises/rna-transcription/README.md +51 -0
- data/tracks/ruby/exercises/robot-name/README.md +57 -0
- data/tracks/ruby/exercises/robot-simulator/README.md +60 -0
- data/tracks/ruby/exercises/roman-numerals/README.md +75 -0
- data/tracks/ruby/exercises/run-length-encoding/README.md +56 -0
- data/tracks/ruby/exercises/saddle-points/README.md +59 -0
- data/tracks/ruby/exercises/say/README.md +95 -0
- data/tracks/ruby/exercises/scale-generator/README.md +86 -0
- data/tracks/ruby/exercises/scrabble-score/README.md +70 -0
- data/tracks/ruby/exercises/secret-handshake/README.md +61 -0
- data/tracks/ruby/exercises/series/README.md +53 -0
- data/tracks/ruby/exercises/sieve/README.md +60 -0
- data/tracks/ruby/exercises/simple-cipher/README.md +116 -0
- data/tracks/ruby/exercises/simple-linked-list/README.md +54 -0
- data/tracks/ruby/exercises/space-age/README.md +50 -0
- data/tracks/ruby/exercises/strain/README.md +66 -0
- data/tracks/ruby/exercises/sum-of-multiples/README.md +44 -0
- data/tracks/ruby/exercises/tournament/README.md +94 -0
- data/tracks/ruby/exercises/transpose/README.md +91 -0
- data/tracks/ruby/exercises/triangle/README.md +52 -0
- data/tracks/ruby/exercises/trinary/README.md +54 -0
- data/tracks/ruby/exercises/twelve-days/README.md +61 -0
- data/tracks/ruby/exercises/two-bucket/README.md +62 -0
- data/tracks/ruby/exercises/word-count/README.md +45 -0
- data/tracks/ruby/exercises/wordy/README.md +89 -0
- data/tracks/rust/README.md +3 -3
- data/tracks/rust/_test/WINDOWS_README.md +44 -0
- data/tracks/rust/config.json +9 -2
- data/tracks/rust/exercises/pig-latin/Cargo-example.toml +8 -0
- data/tracks/rust/exercises/pig-latin/Cargo.lock +4 -0
- data/tracks/rust/exercises/pig-latin/Cargo.toml +6 -0
- data/tracks/rust/exercises/pig-latin/README.md +56 -0
- data/tracks/rust/exercises/pig-latin/example.rs +28 -0
- data/tracks/rust/exercises/pig-latin/tests/pig-latin.rs +120 -0
- data/tracks/rust/problem_ordering.md +2 -2
- data/tracks/sml/config.json +0 -2
- data/tracks/swift/config/exercise_readme.go.tmpl +16 -0
- data/tracks/swift/config.json +304 -79
- data/tracks/swift/exercises/accumulate/README.md +43 -0
- data/tracks/swift/exercises/acronym/README.md +23 -0
- data/tracks/swift/exercises/all-your-base/README.md +43 -0
- data/tracks/swift/exercises/allergies/README.md +45 -0
- data/tracks/swift/exercises/anagram/README.md +21 -0
- data/tracks/swift/exercises/atbash-cipher/README.md +42 -0
- data/tracks/swift/exercises/beer-song/README.md +335 -0
- data/tracks/swift/exercises/binary/README.md +43 -0
- data/tracks/swift/exercises/binary-search/README.md +49 -0
- data/tracks/swift/exercises/binary-search-tree/README.md +68 -0
- data/tracks/swift/exercises/bob/README.md +26 -0
- data/tracks/swift/exercises/bowling/README.md +61 -0
- data/tracks/swift/exercises/bracket-push/README.md +18 -0
- data/tracks/swift/exercises/clock/README.md +21 -0
- data/tracks/swift/exercises/crypto-square/README.md +82 -0
- data/tracks/swift/exercises/custom-set/README.md +19 -0
- data/tracks/swift/exercises/difference-of-squares/README.md +27 -0
- data/tracks/swift/exercises/dominoes/README.md +26 -0
- data/tracks/swift/exercises/etl/README.md +59 -0
- data/tracks/swift/exercises/flatten-array/README.md +26 -0
- data/tracks/swift/exercises/food-chain/README.md +78 -0
- data/tracks/swift/exercises/gigasecond/README.md +19 -0
- data/tracks/swift/exercises/grade-school/README.md +50 -0
- data/tracks/swift/exercises/grains/README.md +42 -0
- data/tracks/swift/exercises/hamming/README.md +50 -0
- data/tracks/swift/exercises/hello-world/README.md +29 -0
- data/tracks/swift/exercises/hexadecimal/README.md +22 -0
- data/tracks/swift/exercises/house/README.md +121 -0
- data/tracks/swift/exercises/isogram/README.md +27 -0
- data/tracks/swift/exercises/kindergarten-garden/README.md +74 -0
- data/tracks/swift/exercises/largest-series-product/README.md +28 -0
- data/tracks/swift/exercises/leap/README.md +41 -0
- data/tracks/swift/exercises/linked-list/README.md +42 -0
- data/tracks/swift/exercises/luhn/README.md +79 -0
- data/tracks/swift/exercises/matrix/README.md +53 -0
- data/tracks/swift/exercises/meetup/README.md +38 -0
- data/tracks/swift/exercises/minesweeper/README.md +38 -0
- data/tracks/swift/exercises/nth-prime/README.md +23 -0
- data/tracks/swift/exercises/nucleotide-count/README.md +41 -0
- data/tracks/swift/exercises/ocr-numbers/README.md +93 -0
- data/tracks/swift/exercises/octal/README.md +57 -0
- data/tracks/swift/exercises/palindrome-products/README.md +48 -0
- data/tracks/swift/exercises/pangram/README.md +23 -0
- data/tracks/swift/exercises/pascals-triangle/README.md +29 -0
- data/tracks/swift/exercises/perfect-numbers/README.md +32 -0
- data/tracks/swift/exercises/phone-number/README.md +42 -0
- data/tracks/swift/exercises/pig-latin/README.md +32 -0
- data/tracks/swift/exercises/poker/README.md +20 -0
- data/tracks/swift/exercises/prime-factors/README.md +44 -0
- data/tracks/swift/exercises/pythagorean-triplet/README.md +32 -0
- data/tracks/swift/exercises/queen-attack/README.md +41 -0
- data/tracks/swift/exercises/raindrops/README.md +32 -0
- data/tracks/swift/exercises/rna-transcription/README.md +33 -0
- data/tracks/swift/exercises/robot-name/README.md +30 -0
- data/tracks/swift/exercises/robot-simulator/README.md +42 -0
- data/tracks/swift/exercises/roman-numerals/README.md +57 -0
- data/tracks/swift/exercises/run-length-encoding/README.md +38 -0
- data/tracks/swift/exercises/saddle-points/README.md +41 -0
- data/tracks/swift/exercises/scrabble-score/README.md +52 -0
- data/tracks/swift/exercises/secret-handshake/README.md +43 -0
- data/tracks/swift/exercises/series/README.md +35 -0
- data/tracks/swift/exercises/sieve/README.md +42 -0
- data/tracks/swift/exercises/simple-cipher/README.md +98 -0
- data/tracks/swift/exercises/simple-linked-list/README.md +36 -0
- data/tracks/swift/exercises/space-age/README.md +32 -0
- data/tracks/swift/exercises/strain/README.md +48 -0
- data/tracks/swift/exercises/sublist/README.md +29 -0
- data/tracks/swift/exercises/sum-of-multiples/README.md +26 -0
- data/tracks/swift/exercises/tournament/README.md +76 -0
- data/tracks/swift/exercises/transpose/README.md +73 -0
- data/tracks/swift/exercises/triangle/README.md +34 -0
- data/tracks/swift/exercises/trinary/README.md +36 -0
- data/tracks/swift/exercises/twelve-days/README.md +43 -0
- data/tracks/swift/exercises/word-count/README.md +27 -0
- data/tracks/swift/exercises/wordy/README.md +71 -0
- data/tracks/typescript/README.md +1 -1
- data/tracks/typescript/config.json +63 -3
- data/tracks/vimscript/config.json +0 -2
- metadata +371 -40
- data/tracks/erlang/exercises/atbash-cipher/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/bank-account/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/beer-song/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/bob/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/circular-buffer/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/clock/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/collatz-conjecture/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/difference-of-squares/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/etl/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/gigasecond/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/grade-school/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/grains/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/hamming/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/hello-world/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/largest-series-product/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/leap/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/luhn/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/meetup/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/nucleotide-count/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/parallel-letter-frequency/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/phone-number/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/rna-transcription/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/robot-simulator/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/roman-numerals/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/rotational-cipher/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/scrabble-score/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/series/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/space-age/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/spiral-matrix/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/strain/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/sum-of-multiples/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/triangle/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/word-count/.meta/readme.go.tmpl +0 -17
- data/tracks/erlang/exercises/zipper/.meta/readme.go.tmpl +0 -17
@@ -0,0 +1,352 @@
|
|
1
|
+
import org.junit.Before
|
2
|
+
import org.junit.Ignore
|
3
|
+
import org.junit.Rule
|
4
|
+
import org.junit.Test
|
5
|
+
import org.junit.rules.ExpectedException
|
6
|
+
import kotlin.test.assertEquals
|
7
|
+
|
8
|
+
/*
|
9
|
+
* version: 1.2.0
|
10
|
+
*/
|
11
|
+
class ForthEvaluatorTest {
|
12
|
+
|
13
|
+
@Rule
|
14
|
+
@JvmField
|
15
|
+
var expectedException: ExpectedException = ExpectedException.none()
|
16
|
+
|
17
|
+
private lateinit var forthEvaluator: ForthEvaluator
|
18
|
+
|
19
|
+
@Before
|
20
|
+
fun setUp() {
|
21
|
+
forthEvaluator = ForthEvaluator()
|
22
|
+
}
|
23
|
+
|
24
|
+
@Test
|
25
|
+
fun testEmptyProgramResultsInEmptyStack() {
|
26
|
+
assertEquals(
|
27
|
+
emptyList(),
|
28
|
+
forthEvaluator.evaluateProgram(emptyList()))
|
29
|
+
}
|
30
|
+
|
31
|
+
@Ignore
|
32
|
+
@Test
|
33
|
+
fun testNumbersAreJustPushedOntoTheStack() {
|
34
|
+
assertEquals(
|
35
|
+
listOf(1, 2, 3, 4, 5),
|
36
|
+
forthEvaluator.evaluateProgram(listOf("1 2 3 4 5")))
|
37
|
+
}
|
38
|
+
|
39
|
+
@Ignore
|
40
|
+
@Test
|
41
|
+
fun testTwoNumbersCanBeAdded() {
|
42
|
+
assertEquals(
|
43
|
+
listOf(3),
|
44
|
+
forthEvaluator.evaluateProgram(listOf("1 2 +")))
|
45
|
+
}
|
46
|
+
|
47
|
+
@Ignore
|
48
|
+
@Test
|
49
|
+
fun testErrorIfAdditionAttemptedWithNothingOnTheStack() {
|
50
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
51
|
+
expectedException.expectMessage("Addition requires that the stack contain at least 2 values")
|
52
|
+
|
53
|
+
forthEvaluator.evaluateProgram(listOf("+"))
|
54
|
+
}
|
55
|
+
|
56
|
+
@Ignore
|
57
|
+
@Test
|
58
|
+
fun testErrorIfAdditionAttemptedWithOneNumberOnTheStack() {
|
59
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
60
|
+
expectedException.expectMessage("Addition requires that the stack contain at least 2 values")
|
61
|
+
|
62
|
+
forthEvaluator.evaluateProgram(listOf("1 +"))
|
63
|
+
}
|
64
|
+
|
65
|
+
@Ignore
|
66
|
+
@Test
|
67
|
+
fun testTwoNumbersCanBeSubtracted() {
|
68
|
+
assertEquals(
|
69
|
+
listOf(-1),
|
70
|
+
forthEvaluator.evaluateProgram(listOf("3 4 -")))
|
71
|
+
}
|
72
|
+
|
73
|
+
@Ignore
|
74
|
+
@Test
|
75
|
+
fun testErrorIfSubtractionAttemptedWithNothingOnTheStack() {
|
76
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
77
|
+
expectedException.expectMessage("Subtraction requires that the stack contain at least 2 values")
|
78
|
+
|
79
|
+
forthEvaluator.evaluateProgram(listOf("-"))
|
80
|
+
}
|
81
|
+
|
82
|
+
@Ignore
|
83
|
+
@Test
|
84
|
+
fun testErrorIfSubtractionAttemptedWithOneNumberOnTheStack() {
|
85
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
86
|
+
expectedException.expectMessage("Subtraction requires that the stack contain at least 2 values")
|
87
|
+
|
88
|
+
forthEvaluator.evaluateProgram(listOf("1 -"))
|
89
|
+
}
|
90
|
+
|
91
|
+
@Ignore
|
92
|
+
@Test
|
93
|
+
fun testTwoNumbersCanBeMultiplied() {
|
94
|
+
assertEquals(
|
95
|
+
listOf(8),
|
96
|
+
forthEvaluator.evaluateProgram(listOf("2 4 *")))
|
97
|
+
}
|
98
|
+
|
99
|
+
@Ignore
|
100
|
+
@Test
|
101
|
+
fun testErrorIfMultiplicationAttemptedWithNothingOnTheStack() {
|
102
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
103
|
+
expectedException.expectMessage("Multiplication requires that the stack contain at least 2 values")
|
104
|
+
|
105
|
+
forthEvaluator.evaluateProgram(listOf("*"))
|
106
|
+
}
|
107
|
+
|
108
|
+
@Ignore
|
109
|
+
@Test
|
110
|
+
fun testErrorIfMultiplicationAttemptedWithOneNumberOnTheStack() {
|
111
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
112
|
+
expectedException.expectMessage("Multiplication requires that the stack contain at least 2 values")
|
113
|
+
|
114
|
+
forthEvaluator.evaluateProgram(listOf("1 *"))
|
115
|
+
}
|
116
|
+
|
117
|
+
@Ignore
|
118
|
+
@Test
|
119
|
+
fun testTwoNumbersCanBeDivided() {
|
120
|
+
assertEquals(
|
121
|
+
listOf(4),
|
122
|
+
forthEvaluator.evaluateProgram(listOf("12 3 /")))
|
123
|
+
}
|
124
|
+
|
125
|
+
@Ignore
|
126
|
+
@Test
|
127
|
+
fun testThatIntegerDivisionIsUsed() {
|
128
|
+
assertEquals(
|
129
|
+
listOf(2),
|
130
|
+
forthEvaluator.evaluateProgram(listOf("8 3 /")))
|
131
|
+
}
|
132
|
+
|
133
|
+
@Ignore
|
134
|
+
@Test
|
135
|
+
fun testErrorIfDividingByZero() {
|
136
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
137
|
+
expectedException.expectMessage("Division by 0 is not allowed")
|
138
|
+
|
139
|
+
forthEvaluator.evaluateProgram(listOf("4 0 /"))
|
140
|
+
}
|
141
|
+
|
142
|
+
@Ignore
|
143
|
+
@Test
|
144
|
+
fun testErrorIfDivisionAttemptedWithNothingOnTheStack() {
|
145
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
146
|
+
expectedException.expectMessage("Division requires that the stack contain at least 2 values")
|
147
|
+
|
148
|
+
forthEvaluator.evaluateProgram(listOf("/"))
|
149
|
+
}
|
150
|
+
|
151
|
+
@Ignore
|
152
|
+
@Test
|
153
|
+
fun testErrorIfDivisionAttemptedWithOneNumberOnTheStack() {
|
154
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
155
|
+
expectedException.expectMessage("Division requires that the stack contain at least 2 values")
|
156
|
+
|
157
|
+
forthEvaluator.evaluateProgram(listOf("1 /"))
|
158
|
+
}
|
159
|
+
|
160
|
+
@Ignore
|
161
|
+
@Test
|
162
|
+
fun testCombinedAdditionAndSubtraction() {
|
163
|
+
assertEquals(
|
164
|
+
listOf(-1),
|
165
|
+
forthEvaluator.evaluateProgram(listOf("1 2 + 4 -")))
|
166
|
+
}
|
167
|
+
|
168
|
+
@Ignore
|
169
|
+
@Test
|
170
|
+
fun testCombinedMultiplicationAndDivision() {
|
171
|
+
assertEquals(
|
172
|
+
listOf(2),
|
173
|
+
forthEvaluator.evaluateProgram(listOf("2 4 * 3 /")))
|
174
|
+
}
|
175
|
+
|
176
|
+
@Ignore
|
177
|
+
@Test
|
178
|
+
fun testDupCopiesTheTopValueOnTheStack() {
|
179
|
+
assertEquals(
|
180
|
+
listOf(1, 1),
|
181
|
+
forthEvaluator.evaluateProgram(listOf("1 DUP")))
|
182
|
+
}
|
183
|
+
|
184
|
+
@Ignore
|
185
|
+
@Test
|
186
|
+
fun testDupParsingIsCaseInsensitive() {
|
187
|
+
assertEquals(
|
188
|
+
listOf(1, 2, 2),
|
189
|
+
forthEvaluator.evaluateProgram(listOf("1 2 Dup")))
|
190
|
+
}
|
191
|
+
|
192
|
+
@Ignore
|
193
|
+
@Test
|
194
|
+
fun testErrorIfDuplicatingAttemptedWithNothingOnTheStack() {
|
195
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
196
|
+
expectedException.expectMessage("Duplicating requires that the stack contain at least 1 value")
|
197
|
+
|
198
|
+
forthEvaluator.evaluateProgram(listOf("dup"))
|
199
|
+
}
|
200
|
+
|
201
|
+
@Ignore
|
202
|
+
@Test
|
203
|
+
fun testDropRemovesTheTopValueOnTheStackIfItIsTheOnlyOne() {
|
204
|
+
assertEquals(
|
205
|
+
emptyList(),
|
206
|
+
forthEvaluator.evaluateProgram(listOf("1 drop")))
|
207
|
+
}
|
208
|
+
|
209
|
+
@Ignore
|
210
|
+
@Test
|
211
|
+
fun testDropRemovesTheTopValueOnTheStackIfItIsNotTheOnlyOne() {
|
212
|
+
assertEquals(
|
213
|
+
listOf(1),
|
214
|
+
forthEvaluator.evaluateProgram(listOf("1 2 drop")))
|
215
|
+
}
|
216
|
+
|
217
|
+
@Ignore
|
218
|
+
@Test
|
219
|
+
fun testErrorIfDroppingAttemptedWithNothingOnTheStack() {
|
220
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
221
|
+
expectedException.expectMessage("Dropping requires that the stack contain at least 1 value")
|
222
|
+
|
223
|
+
forthEvaluator.evaluateProgram(listOf("drop"))
|
224
|
+
}
|
225
|
+
|
226
|
+
@Ignore
|
227
|
+
@Test
|
228
|
+
fun testSwapSwapsTheTopTwosValueOnTheStackIfTheyAreTheOnlyOnes() {
|
229
|
+
assertEquals(
|
230
|
+
listOf(2, 1),
|
231
|
+
forthEvaluator.evaluateProgram(listOf("1 2 swap")))
|
232
|
+
}
|
233
|
+
|
234
|
+
@Ignore
|
235
|
+
@Test
|
236
|
+
fun testSwapSwapsTheTopTwosValueOnTheStackIfTheyAreNotTheOnlyOnes() {
|
237
|
+
assertEquals(
|
238
|
+
listOf(1, 3, 2),
|
239
|
+
forthEvaluator.evaluateProgram(listOf("1 2 3 swap")))
|
240
|
+
}
|
241
|
+
|
242
|
+
@Ignore
|
243
|
+
@Test
|
244
|
+
fun testErrorIfSwappingAttemptedWithNothingOnTheStack() {
|
245
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
246
|
+
expectedException.expectMessage("Swapping requires that the stack contain at least 2 values")
|
247
|
+
|
248
|
+
forthEvaluator.evaluateProgram(listOf("swap"))
|
249
|
+
}
|
250
|
+
|
251
|
+
@Ignore
|
252
|
+
@Test
|
253
|
+
fun testErrorIfSwappingAttemptedWithOneNumberOnTheStack() {
|
254
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
255
|
+
expectedException.expectMessage("Swapping requires that the stack contain at least 2 values")
|
256
|
+
|
257
|
+
forthEvaluator.evaluateProgram(listOf("1 swap"))
|
258
|
+
}
|
259
|
+
|
260
|
+
@Ignore
|
261
|
+
@Test
|
262
|
+
fun testOverCopiesTheSecondElementIfThereAreOnlyTwo() {
|
263
|
+
assertEquals(
|
264
|
+
listOf(1, 2, 1),
|
265
|
+
forthEvaluator.evaluateProgram(listOf("1 2 over")))
|
266
|
+
}
|
267
|
+
|
268
|
+
@Ignore
|
269
|
+
@Test
|
270
|
+
fun testOverCopiesTheSecondElementIfThereAreMoreThanTwo() {
|
271
|
+
assertEquals(
|
272
|
+
listOf(1, 2, 3, 2),
|
273
|
+
forthEvaluator.evaluateProgram(listOf("1 2 3 over")))
|
274
|
+
}
|
275
|
+
|
276
|
+
@Ignore
|
277
|
+
@Test
|
278
|
+
fun testErrorIfOveringAttemptedWithNothingOnTheStack() {
|
279
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
280
|
+
expectedException.expectMessage("Overing requires that the stack contain at least 2 values")
|
281
|
+
|
282
|
+
forthEvaluator.evaluateProgram(listOf("over"))
|
283
|
+
}
|
284
|
+
|
285
|
+
@Ignore
|
286
|
+
@Test
|
287
|
+
fun testErrorIfOveringAttemptedWithOneNumberOnTheStack() {
|
288
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
289
|
+
expectedException.expectMessage("Overing requires that the stack contain at least 2 values")
|
290
|
+
|
291
|
+
forthEvaluator.evaluateProgram(listOf("1 over"))
|
292
|
+
}
|
293
|
+
|
294
|
+
@Ignore
|
295
|
+
@Test
|
296
|
+
fun testUserDefinedOperatorsCanConsistOfBuiltInOperators() {
|
297
|
+
assertEquals(
|
298
|
+
listOf(1, 1, 1),
|
299
|
+
forthEvaluator.evaluateProgram(listOf(": dup-twice dup dup ;", "1 dup-twice")))
|
300
|
+
}
|
301
|
+
|
302
|
+
@Ignore
|
303
|
+
@Test
|
304
|
+
fun testUserDefinedOperatorsAreEvaluatedInTheCorrectOrder() {
|
305
|
+
assertEquals(
|
306
|
+
listOf(1, 2, 3),
|
307
|
+
forthEvaluator.evaluateProgram(listOf(": countup 1 2 3 ;", "countup")))
|
308
|
+
}
|
309
|
+
|
310
|
+
@Ignore
|
311
|
+
@Test
|
312
|
+
fun testCanRedefineAUserDefinedOperator() {
|
313
|
+
assertEquals(
|
314
|
+
listOf(1, 1, 1),
|
315
|
+
forthEvaluator.evaluateProgram(listOf(": foo dup ;", ": foo dup dup ;", "1 foo")))
|
316
|
+
}
|
317
|
+
|
318
|
+
@Ignore
|
319
|
+
@Test
|
320
|
+
fun testCanOverrideBuiltInWordOperators() {
|
321
|
+
assertEquals(
|
322
|
+
listOf(1, 1),
|
323
|
+
forthEvaluator.evaluateProgram(listOf(": swap dup ;", "1 swap")))
|
324
|
+
}
|
325
|
+
|
326
|
+
@Ignore
|
327
|
+
@Test
|
328
|
+
fun testCanOverrideBuiltInArithmeticOperators() {
|
329
|
+
assertEquals(
|
330
|
+
listOf(12),
|
331
|
+
forthEvaluator.evaluateProgram(listOf(": + * ;", "3 4 +")))
|
332
|
+
}
|
333
|
+
|
334
|
+
@Ignore
|
335
|
+
@Test
|
336
|
+
fun testCannotRedefineNumbers() {
|
337
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
338
|
+
expectedException.expectMessage("Cannot redefine numbers")
|
339
|
+
|
340
|
+
forthEvaluator.evaluateProgram(listOf(": 1 2 ;"))
|
341
|
+
}
|
342
|
+
|
343
|
+
@Ignore
|
344
|
+
@Test
|
345
|
+
fun testErrorIfEvaluatingAnUndefinedOperator() {
|
346
|
+
expectedException.expect(IllegalArgumentException::class.java)
|
347
|
+
expectedException.expectMessage("No definition available for operator \"foo\"")
|
348
|
+
|
349
|
+
forthEvaluator.evaluateProgram(listOf("foo"))
|
350
|
+
}
|
351
|
+
|
352
|
+
}
|
@@ -0,0 +1,33 @@
|
|
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
|
+
|
28
|
+
## Source
|
29
|
+
|
30
|
+
Jeremy Hinegardner mentioned a Boulder meetup that happens on the Wednesteenth of every month [https://twitter.com/copiousfreetime](https://twitter.com/copiousfreetime)
|
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,28 @@
|
|
1
|
+
buildscript {
|
2
|
+
ext.kotlin_version = '1.1.1'
|
3
|
+
repositories {
|
4
|
+
mavenCentral()
|
5
|
+
}
|
6
|
+
dependencies {
|
7
|
+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
8
|
+
}
|
9
|
+
}
|
10
|
+
|
11
|
+
apply plugin: 'kotlin'
|
12
|
+
|
13
|
+
repositories {
|
14
|
+
mavenCentral()
|
15
|
+
}
|
16
|
+
|
17
|
+
dependencies {
|
18
|
+
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
19
|
+
|
20
|
+
testCompile 'junit:junit:4.12'
|
21
|
+
testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
|
22
|
+
}
|
23
|
+
test {
|
24
|
+
testLogging {
|
25
|
+
exceptionFormat = 'full'
|
26
|
+
events = ["passed", "failed", "skipped"]
|
27
|
+
}
|
28
|
+
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import java.time.DayOfWeek
|
2
|
+
import java.time.LocalDate
|
3
|
+
|
4
|
+
class Meetup(monthOfYear: Int, year: Int) {
|
5
|
+
|
6
|
+
private val startOfMonth: LocalDate = LocalDate.of(year, monthOfYear, 1)
|
7
|
+
|
8
|
+
fun day(dayOfWeek: DayOfWeek, schedule: MeetupSchedule): LocalDate {
|
9
|
+
var result = cycleToNext(dayOfWeek, startOfMonth)
|
10
|
+
|
11
|
+
@Suppress("NON_EXHAUSTIVE_WHEN")
|
12
|
+
when (schedule) {
|
13
|
+
MeetupSchedule.SECOND -> result = result.plusWeeks(1)
|
14
|
+
MeetupSchedule.THIRD -> result = result.plusWeeks(2)
|
15
|
+
MeetupSchedule.FOURTH -> result = result.plusWeeks(3)
|
16
|
+
MeetupSchedule.LAST -> result = cycleToPrev(dayOfWeek, startOfMonth.plusMonths(1).minusDays(1))
|
17
|
+
MeetupSchedule.TEENTH -> {
|
18
|
+
while (result.dayOfMonth < 13) result = result.plusWeeks(1)
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
return result
|
23
|
+
}
|
24
|
+
|
25
|
+
private fun cycleToPrev(dayOfWeek: DayOfWeek, current: LocalDate): LocalDate {
|
26
|
+
var result = current
|
27
|
+
|
28
|
+
while (result.dayOfWeek != dayOfWeek) {
|
29
|
+
result = result.minusDays(1)
|
30
|
+
}
|
31
|
+
|
32
|
+
return result
|
33
|
+
}
|
34
|
+
|
35
|
+
private fun cycleToNext(dayOfWeek: DayOfWeek, current: LocalDate): LocalDate {
|
36
|
+
var result = current
|
37
|
+
|
38
|
+
while (result.dayOfWeek != dayOfWeek) {
|
39
|
+
result = result.plusDays(1)
|
40
|
+
}
|
41
|
+
|
42
|
+
return result
|
43
|
+
}
|
44
|
+
|
45
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
../../main/kotlin/MeetupSchedule.kt
|