trackler 2.2.1.110 → 2.2.1.111
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/problem-specifications/exercises/house/canonical-data.json +28 -200
- data/problem-specifications/exercises/react/canonical-data.json +49 -2
- data/tracks/c/config.json +49 -0
- data/tracks/c/exercises/crypto-square/README.md +69 -0
- data/tracks/c/exercises/crypto-square/makefile +25 -0
- data/tracks/c/exercises/crypto-square/src/example.c +87 -0
- data/tracks/c/exercises/crypto-square/src/example.h +6 -0
- data/tracks/c/exercises/crypto-square/test/test_crypto_square.c +99 -0
- data/tracks/c/exercises/crypto-square/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/crypto-square/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/crypto-square/test/vendor/unity_internals.h +701 -0
- data/tracks/c/exercises/pig-latin/README.md +17 -0
- data/tracks/c/exercises/pig-latin/makefile +25 -0
- data/tracks/c/exercises/pig-latin/src/example.c +128 -0
- data/tracks/c/exercises/pig-latin/src/example.h +6 -0
- data/tracks/c/exercises/pig-latin/test/test_pig_latin.c +239 -0
- data/tracks/c/exercises/pig-latin/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/pig-latin/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/pig-latin/test/vendor/unity_internals.h +701 -0
- data/tracks/c/exercises/say/README.md +62 -0
- data/tracks/c/exercises/say/makefile +27 -0
- data/tracks/c/exercises/say/src/example.c +144 -0
- data/tracks/c/exercises/say/src/example.h +7 -0
- data/tracks/c/exercises/say/test/test_say.c +185 -0
- data/tracks/c/exercises/say/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/say/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/say/test/vendor/unity_internals.h +701 -0
- data/tracks/c/exercises/secret-handshake/README.md +28 -0
- data/tracks/c/exercises/secret-handshake/makefile +25 -0
- data/tracks/c/exercises/secret-handshake/src/example.c +60 -0
- data/tracks/c/exercises/secret-handshake/src/example.h +7 -0
- data/tracks/c/exercises/secret-handshake/test/test_secret_handshake.c +133 -0
- data/tracks/c/exercises/secret-handshake/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/secret-handshake/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/secret-handshake/test/vendor/unity_internals.h +701 -0
- data/tracks/coffeescript/config/exercise_readme.go.tmpl +7 -4
- data/tracks/coffeescript/exercises/accumulate/README.md +0 -3
- data/tracks/coffeescript/exercises/atbash-cipher/README.md +2 -1
- data/tracks/coffeescript/exercises/beer-song/README.md +2 -2
- data/tracks/coffeescript/exercises/binary/README.md +2 -0
- data/tracks/coffeescript/exercises/linked-list/README.md +10 -10
- data/tracks/coffeescript/exercises/luhn/README.md +7 -7
- data/tracks/coffeescript/exercises/nucleotide-count/README.md +8 -22
- data/tracks/coffeescript/exercises/palindrome-products/README.md +15 -16
- data/tracks/coffeescript/exercises/pascals-triangle/README.md +2 -2
- data/tracks/coffeescript/exercises/queen-attack/README.md +1 -1
- data/tracks/coffeescript/exercises/triangle/README.md +9 -6
- data/tracks/coffeescript/exercises/trinary/README.md +1 -1
- data/tracks/coffeescript/exercises/word-count/README.md +1 -2
- data/tracks/coffeescript/exercises/wordy/README.md +0 -5
- data/tracks/coq/config/exercise_readme.go.tmpl +23 -4
- data/tracks/coq/exercises/rna-transcription/README.md +2 -2
- data/tracks/cpp/config/exercise_readme.go.tmpl +31 -4
- data/tracks/cpp/exercises/allergies/README.md +0 -1
- data/tracks/cpp/exercises/atbash-cipher/README.md +2 -1
- data/tracks/cpp/exercises/beer-song/README.md +2 -2
- data/tracks/cpp/exercises/binary/README.md +2 -0
- data/tracks/cpp/exercises/crypto-square/README.md +10 -8
- data/tracks/cpp/exercises/etl/README.md +3 -1
- data/tracks/cpp/exercises/food-chain/README.md +1 -1
- data/tracks/cpp/exercises/grade-school/README.md +0 -1
- data/tracks/cpp/exercises/grains/README.md +0 -1
- data/tracks/cpp/exercises/leap/README.md +1 -1
- data/tracks/cpp/exercises/meetup/README.md +16 -13
- data/tracks/cpp/exercises/nucleotide-count/README.md +2 -4
- data/tracks/cpp/exercises/pangram/README.md +1 -1
- data/tracks/cpp/exercises/phone-number/README.md +4 -3
- data/tracks/cpp/exercises/queen-attack/README.md +1 -1
- data/tracks/cpp/exercises/rna-transcription/README.md +2 -2
- data/tracks/cpp/exercises/roman-numerals/README.md +1 -1
- data/tracks/cpp/exercises/scrabble-score/README.md +3 -1
- data/tracks/cpp/exercises/space-age/README.md +1 -2
- data/tracks/cpp/exercises/sum-of-multiples/README.md +3 -6
- data/tracks/cpp/exercises/triangle/README.md +9 -6
- data/tracks/cpp/exercises/trinary/README.md +1 -1
- data/tracks/cpp/exercises/word-count/README.md +1 -2
- data/tracks/d/config/exercise_readme.go.tmpl +30 -4
- data/tracks/d/exercises/circular-buffer/README.md +13 -6
- data/tracks/d/exercises/crypto-square/README.md +10 -8
- data/tracks/d/exercises/etl/README.md +3 -1
- data/tracks/d/exercises/leap/README.md +1 -1
- data/tracks/d/exercises/nucleotide-count/README.md +8 -22
- data/tracks/d/exercises/pangram/README.md +1 -1
- data/tracks/d/exercises/react/README.md +0 -1
- data/tracks/d/exercises/rna-transcription/README.md +2 -2
- data/tracks/d/exercises/roman-numerals/README.md +1 -1
- data/tracks/d/exercises/triangle/README.md +9 -6
- data/tracks/ecmascript/config/exercise_readme.go.tmpl +29 -4
- data/tracks/ecmascript/exercises/accumulate/README.md +1 -4
- data/tracks/ecmascript/exercises/acronym/README.md +1 -2
- data/tracks/ecmascript/exercises/all-your-base/README.md +2 -3
- data/tracks/ecmascript/exercises/allergies/README.md +1 -2
- data/tracks/ecmascript/exercises/alphametics/README.md +3 -4
- data/tracks/ecmascript/exercises/anagram/README.md +1 -1
- data/tracks/ecmascript/exercises/atbash-cipher/README.md +3 -2
- data/tracks/ecmascript/exercises/beer-song/README.md +3 -3
- data/tracks/ecmascript/exercises/binary-search-tree/README.md +1 -1
- data/tracks/ecmascript/exercises/binary-search/README.md +1 -1
- data/tracks/ecmascript/exercises/binary/README.md +3 -1
- data/tracks/ecmascript/exercises/bowling/README.md +32 -15
- data/tracks/ecmascript/exercises/bracket-push/README.md +1 -1
- data/tracks/ecmascript/exercises/change/README.md +19 -10
- data/tracks/ecmascript/exercises/circular-buffer/README.md +14 -7
- data/tracks/ecmascript/exercises/clock/README.md +1 -1
- data/tracks/ecmascript/exercises/collatz-conjecture/README.md +5 -1
- data/tracks/ecmascript/exercises/complex-numbers/README.md +2 -2
- data/tracks/ecmascript/exercises/connect/README.md +2 -3
- data/tracks/ecmascript/exercises/crypto-square/README.md +11 -9
- data/tracks/ecmascript/exercises/custom-set/README.md +1 -2
- data/tracks/ecmascript/exercises/diamond/README.md +7 -7
- data/tracks/ecmascript/exercises/difference-of-squares/README.md +1 -1
- data/tracks/ecmascript/exercises/diffie-hellman/README.md +1 -1
- data/tracks/ecmascript/exercises/etl/README.md +4 -2
- data/tracks/ecmascript/exercises/flatten-array/README.md +2 -3
- data/tracks/ecmascript/exercises/food-chain/README.md +2 -2
- data/tracks/ecmascript/exercises/gigasecond/README.md +1 -1
- data/tracks/ecmascript/exercises/grade-school/README.md +1 -2
- data/tracks/ecmascript/exercises/grains/README.md +1 -2
- data/tracks/ecmascript/exercises/hamming/README.md +1 -1
- data/tracks/ecmascript/exercises/hello-world/README.md +1 -1
- data/tracks/ecmascript/exercises/hexadecimal/README.md +1 -1
- data/tracks/ecmascript/exercises/house/README.md +1 -5
- data/tracks/ecmascript/exercises/isbn-verifier/README.md +32 -17
- data/tracks/ecmascript/exercises/isogram/README.md +3 -2
- data/tracks/ecmascript/exercises/kindergarten-garden/README.md +14 -14
- data/tracks/ecmascript/exercises/largest-series-product/README.md +1 -1
- data/tracks/ecmascript/exercises/leap/README.md +2 -2
- data/tracks/ecmascript/exercises/linked-list/README.md +11 -11
- data/tracks/ecmascript/exercises/list-ops/README.md +1 -2
- data/tracks/ecmascript/exercises/luhn/README.md +8 -8
- data/tracks/ecmascript/exercises/matrix/README.md +7 -5
- data/tracks/ecmascript/exercises/meetup/README.md +17 -14
- data/tracks/ecmascript/exercises/minesweeper/README.md +1 -2
- data/tracks/ecmascript/exercises/nth-prime/README.md +1 -1
- data/tracks/ecmascript/exercises/ocr-numbers/README.md +7 -7
- data/tracks/ecmascript/exercises/octal/README.md +7 -3
- data/tracks/ecmascript/exercises/palindrome-products/README.md +16 -17
- data/tracks/ecmascript/exercises/pangram/README.md +2 -2
- data/tracks/ecmascript/exercises/pascals-triangle/README.md +3 -3
- data/tracks/ecmascript/exercises/perfect-numbers/README.md +3 -3
- data/tracks/ecmascript/exercises/phone-number/README.md +5 -4
- data/tracks/ecmascript/exercises/pig-latin/README.md +1 -1
- data/tracks/ecmascript/exercises/prime-factors/README.md +1 -1
- data/tracks/ecmascript/exercises/protein-translation/README.md +8 -8
- data/tracks/ecmascript/exercises/proverb/README.md +17 -27
- data/tracks/ecmascript/exercises/pythagorean-triplet/README.md +4 -4
- data/tracks/ecmascript/exercises/queen-attack/README.md +2 -2
- data/tracks/ecmascript/exercises/raindrops/README.md +1 -1
- data/tracks/ecmascript/exercises/react/README.md +8 -1
- data/tracks/ecmascript/exercises/rectangles/README.md +11 -10
- data/tracks/ecmascript/exercises/rna-transcription/README.md +3 -3
- data/tracks/ecmascript/exercises/robot-name/README.md +1 -1
- data/tracks/ecmascript/exercises/robot-simulator/README.md +1 -1
- data/tracks/ecmascript/exercises/roman-numerals/README.md +2 -2
- data/tracks/ecmascript/exercises/rotational-cipher/README.md +3 -2
- data/tracks/ecmascript/exercises/run-length-encoding/README.md +9 -8
- data/tracks/ecmascript/exercises/saddle-points/README.md +3 -3
- data/tracks/ecmascript/exercises/say/README.md +1 -1
- data/tracks/ecmascript/exercises/scrabble-score/README.md +4 -2
- data/tracks/ecmascript/exercises/secret-handshake/README.md +3 -3
- data/tracks/ecmascript/exercises/series/README.md +1 -1
- data/tracks/ecmascript/exercises/sieve/README.md +1 -1
- data/tracks/ecmascript/exercises/simple-cipher/README.md +6 -8
- data/tracks/ecmascript/exercises/simple-linked-list/README.md +2 -1
- data/tracks/ecmascript/exercises/space-age/README.md +2 -2
- data/tracks/ecmascript/exercises/spiral-matrix/README.md +4 -3
- data/tracks/ecmascript/exercises/strain/README.md +1 -1
- data/tracks/ecmascript/exercises/sublist/README.md +1 -1
- data/tracks/ecmascript/exercises/sum-of-multiples/README.md +4 -7
- data/tracks/ecmascript/exercises/transpose/README.md +3 -2
- data/tracks/ecmascript/exercises/triangle/README.md +10 -7
- data/tracks/ecmascript/exercises/trinary/README.md +2 -2
- data/tracks/ecmascript/exercises/twelve-days/README.md +3 -4
- data/tracks/ecmascript/exercises/two-bucket/README.md +11 -11
- data/tracks/ecmascript/exercises/two-fer/README.md +8 -6
- data/tracks/ecmascript/exercises/word-count/README.md +2 -3
- data/tracks/ecmascript/exercises/word-search/README.md +2 -1
- data/tracks/ecmascript/exercises/wordy/README.md +1 -6
- data/tracks/elixir/exercises/bob/bob_test.exs +1 -1
- data/tracks/elixir/exercises/bob/example.exs +13 -9
- data/tracks/elm/config.json +28 -0
- data/tracks/elm/config/exercise_readme.go.tmpl +3 -3
- data/tracks/elm/docs/INSTALLATION.md +6 -2
- data/tracks/elm/exercises/accumulate/README.md +3 -3
- data/tracks/elm/exercises/acronym/Acronym.elm +1 -0
- data/tracks/elm/exercises/acronym/Acronym.example.elm +22 -0
- data/tracks/elm/exercises/acronym/README.md +44 -0
- data/tracks/elm/exercises/acronym/elm-package.json +15 -0
- data/tracks/elm/exercises/acronym/tests/Tests.elm +35 -0
- data/tracks/elm/exercises/acronym/tests/elm-package.json +16 -0
- data/tracks/elm/exercises/all-your-base/README.md +3 -3
- data/tracks/elm/exercises/allergies/README.md +3 -3
- data/tracks/elm/exercises/anagram/README.md +3 -3
- data/tracks/elm/exercises/atbash-cipher/README.md +3 -3
- data/tracks/elm/exercises/binary-search/README.md +3 -3
- data/tracks/elm/exercises/bob/README.md +3 -5
- data/tracks/elm/exercises/collatz-conjecture/README.md +3 -3
- data/tracks/elm/exercises/difference-of-squares/README.md +3 -3
- data/tracks/elm/exercises/etl/README.md +3 -3
- data/tracks/elm/exercises/gigasecond/README.md +3 -3
- data/tracks/elm/exercises/grade-school/README.md +3 -3
- data/tracks/elm/exercises/grains/README.md +3 -3
- data/tracks/elm/exercises/hamming/README.md +3 -3
- data/tracks/elm/exercises/hello-world/README.md +3 -3
- data/tracks/elm/exercises/isogram/README.md +3 -3
- data/tracks/elm/exercises/largest-series-product/README.md +3 -3
- data/tracks/elm/exercises/leap/README.md +3 -3
- data/tracks/elm/exercises/list-ops/README.md +3 -3
- data/tracks/elm/exercises/luhn/Luhn.elm +1 -0
- data/tracks/elm/exercises/luhn/Luhn.example.elm +51 -0
- data/tracks/elm/exercises/luhn/README.md +101 -0
- data/tracks/elm/exercises/luhn/elm-package.json +15 -0
- data/tracks/elm/exercises/luhn/tests/Tests.elm +62 -0
- data/tracks/elm/exercises/luhn/tests/elm-package.json +16 -0
- data/tracks/elm/exercises/nucleotide-count/README.md +3 -3
- data/tracks/elm/exercises/pangram/.meta/description.md +7 -0
- data/tracks/elm/exercises/pangram/README.md +4 -4
- data/tracks/elm/exercises/pascals-triangle/README.md +3 -3
- data/tracks/elm/exercises/phone-number/README.md +3 -3
- data/tracks/elm/exercises/raindrops/README.md +3 -3
- data/tracks/elm/exercises/rna-transcription/README.md +4 -4
- data/tracks/elm/exercises/robot-simulator/README.md +3 -3
- data/tracks/elm/exercises/roman-numerals/README.md +3 -3
- data/tracks/elm/exercises/run-length-encoding/README.md +3 -3
- data/tracks/elm/exercises/say/README.md +3 -3
- data/tracks/elm/exercises/scrabble-score/README.md +3 -3
- data/tracks/elm/exercises/series/README.md +3 -3
- data/tracks/elm/exercises/space-age/README.md +3 -3
- data/tracks/elm/exercises/strain/README.md +3 -3
- data/tracks/elm/exercises/sublist/README.md +3 -3
- data/tracks/elm/exercises/sum-of-multiples/README.md +3 -3
- data/tracks/elm/exercises/triangle/README.md +3 -3
- data/tracks/elm/exercises/twelve-days/README.md +65 -0
- data/tracks/elm/exercises/twelve-days/TwelveDays.elm +1 -0
- data/tracks/elm/exercises/twelve-days/TwelveDays.example.elm +148 -0
- data/tracks/elm/exercises/twelve-days/elm-package.json +14 -0
- data/tracks/elm/exercises/twelve-days/tests/Tests.elm +130 -0
- data/tracks/elm/exercises/twelve-days/tests/elm-package.json +16 -0
- data/tracks/elm/exercises/word-count/README.md +3 -3
- data/tracks/elm/package-lock.json +2329 -0
- data/tracks/elm/package.json +6 -1
- data/tracks/erlang/config/exercise_readme.go.tmpl +42 -4
- data/tracks/erlang/exercises/accumulate/README.md +0 -3
- data/tracks/erlang/exercises/all-your-base/README.md +1 -2
- data/tracks/erlang/exercises/allergies/README.md +0 -1
- data/tracks/erlang/exercises/atbash-cipher/README.md +2 -1
- data/tracks/erlang/exercises/bank-account/README.md +0 -1
- data/tracks/erlang/exercises/beer-song/README.md +2 -2
- data/tracks/erlang/exercises/circular-buffer/README.md +13 -6
- data/tracks/erlang/exercises/collatz-conjecture/README.md +1 -1
- data/tracks/erlang/exercises/custom-set/README.md +0 -1
- data/tracks/erlang/exercises/etl/README.md +3 -1
- data/tracks/erlang/exercises/grade-school/README.md +0 -1
- data/tracks/erlang/exercises/grains/README.md +0 -1
- data/tracks/erlang/exercises/isogram/README.md +5 -7
- data/tracks/erlang/exercises/leap/README.md +1 -1
- data/tracks/erlang/exercises/luhn/README.md +7 -7
- data/tracks/erlang/exercises/meetup/README.md +16 -13
- data/tracks/erlang/exercises/nucleotide-count/README.md +8 -22
- data/tracks/erlang/exercises/pangram/README.md +7 -9
- data/tracks/erlang/exercises/parallel-letter-frequency/README.md +0 -1
- data/tracks/erlang/exercises/phone-number/README.md +4 -3
- data/tracks/erlang/exercises/raindrops/README.md +1 -1
- data/tracks/erlang/exercises/rna-transcription/README.md +2 -2
- data/tracks/erlang/exercises/roman-numerals/README.md +1 -1
- data/tracks/erlang/exercises/rotational-cipher/README.md +2 -1
- data/tracks/erlang/exercises/scrabble-score/README.md +3 -1
- data/tracks/erlang/exercises/sieve/README.md +26 -37
- data/tracks/erlang/exercises/space-age/README.md +1 -1
- data/tracks/erlang/exercises/spiral-matrix/README.md +2 -2
- data/tracks/erlang/exercises/sum-of-multiples/README.md +3 -6
- data/tracks/erlang/exercises/triangle/README.md +9 -6
- data/tracks/erlang/exercises/two-fer/README.md +48 -5
- data/tracks/erlang/exercises/word-count/README.md +1 -2
- data/tracks/erlang/exercises/zipper/README.md +1 -2
- data/tracks/go/config.json +11 -0
- data/tracks/go/exercises/bowling/cases_test.go +17 -2
- data/tracks/go/exercises/grep/.meta/gen.go +9 -7
- data/tracks/go/exercises/grep/cases_test.go +2 -2
- data/tracks/go/exercises/scale-generator/.meta/gen.go +59 -0
- data/tracks/go/exercises/scale-generator/README.md +76 -0
- data/tracks/go/exercises/scale-generator/cases_test.go +117 -0
- data/tracks/go/exercises/scale-generator/example.go +62 -0
- data/tracks/go/exercises/scale-generator/scale_generator_test.go +24 -0
- data/tracks/haskell/.travis.yml +16 -0
- data/tracks/haskell/config.json +9 -0
- data/tracks/haskell/config/exercise_readme.go.tmpl +53 -4
- data/tracks/haskell/exercises/all-your-base/README.md +0 -1
- data/tracks/haskell/exercises/alphametics/README.md +0 -1
- data/tracks/haskell/exercises/alphametics/examples/success-standard/src/Alphametics.hs +2 -2
- data/tracks/haskell/exercises/bank-account/README.md +0 -1
- data/tracks/haskell/exercises/bank-account/examples/success-standard/src/BankAccount.hs +1 -1
- data/tracks/haskell/exercises/connect/README.md +0 -1
- data/tracks/haskell/exercises/custom-set/README.md +0 -1
- data/tracks/haskell/exercises/dominoes/README.md +0 -1
- data/tracks/haskell/exercises/forth/README.md +0 -1
- data/tracks/haskell/exercises/go-counting/README.md +0 -1
- data/tracks/haskell/exercises/lens-person/README.md +0 -1
- data/tracks/haskell/exercises/list-ops/README.md +0 -1
- data/tracks/haskell/exercises/minesweeper/README.md +0 -1
- data/tracks/haskell/exercises/parallel-letter-frequency/README.md +0 -1
- data/tracks/haskell/exercises/sgf-parsing/README.md +0 -1
- data/tracks/haskell/exercises/sgf-parsing/examples/success-standard/src/Sgf.hs +2 -3
- data/tracks/haskell/exercises/sublist/README.md +0 -1
- data/tracks/haskell/exercises/transpose/README.md +119 -0
- data/tracks/haskell/exercises/transpose/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/transpose/examples/success-standard/src/Transpose.hs +16 -0
- data/tracks/haskell/exercises/transpose/package.yaml +20 -0
- data/tracks/haskell/exercises/transpose/src/Transpose.hs +4 -0
- data/tracks/haskell/exercises/transpose/stack.yaml +1 -0
- data/tracks/haskell/exercises/transpose/test/Tests.hs +181 -0
- data/tracks/haskell/exercises/zipper/README.md +0 -1
- data/tracks/java/config.json +38 -0
- data/tracks/java/exercises/atbash-cipher/.meta/version +1 -1
- data/tracks/java/exercises/collatz-conjecture/.meta/version +1 -1
- data/tracks/java/exercises/diffie-hellman/.meta/hints.md +3 -0
- data/tracks/java/exercises/diffie-hellman/.meta/src/reference/java/DiffieHellman.java +24 -0
- data/tracks/java/exercises/diffie-hellman/README.md +63 -0
- data/tracks/java/exercises/diffie-hellman/build.gradle +19 -0
- data/tracks/java/exercises/diffie-hellman/src/main/java/.keep +0 -0
- data/tracks/java/exercises/diffie-hellman/src/test/java/DiffieHellmanTest.java +98 -0
- data/tracks/java/exercises/error-handling/.meta/hints.md +35 -0
- data/tracks/java/exercises/error-handling/.meta/src/reference/java/CustomCheckedException.java +11 -0
- data/tracks/java/exercises/error-handling/.meta/src/reference/java/CustomUncheckedException.java +11 -0
- data/tracks/java/exercises/error-handling/.meta/src/reference/java/ErrorHandling.java +63 -0
- data/tracks/java/exercises/error-handling/README.md +24 -0
- data/tracks/java/exercises/error-handling/build.gradle +18 -0
- data/tracks/java/exercises/error-handling/src/main/java/CustomCheckedException.java +11 -0
- data/tracks/java/exercises/error-handling/src/main/java/CustomUncheckedException.java +11 -0
- data/tracks/java/exercises/error-handling/src/main/java/ErrorHandling.java +49 -0
- data/tracks/java/exercises/error-handling/src/test/java/ErrorHandlingTest.java +116 -0
- data/tracks/java/exercises/flatten-array/.meta/version +1 -1
- data/tracks/java/exercises/nth-prime/.meta/version +1 -1
- data/tracks/java/exercises/pig-latin/README.md +4 -4
- data/tracks/java/exercises/protein-translation/.meta/version +1 -1
- data/tracks/java/exercises/saddle-points/.meta/version +1 -1
- data/tracks/java/exercises/settings.gradle +3 -0
- data/tracks/java/exercises/variable-length-quantity/.meta/src/reference/java/VariableLengthQuantity.java +53 -0
- data/tracks/java/exercises/variable-length-quantity/.meta/version +1 -0
- data/tracks/java/exercises/variable-length-quantity/README.md +50 -0
- data/tracks/java/exercises/variable-length-quantity/build.gradle +18 -0
- data/tracks/java/exercises/variable-length-quantity/src/main/java/VariableLengthQuantity.java +12 -0
- data/tracks/java/exercises/variable-length-quantity/src/test/java/VariableLengthQuantityTest.java +265 -0
- data/tracks/java/exercises/word-count/.meta/version +1 -1
- data/tracks/javascript/.eslintignore +0 -6
- data/tracks/javascript/config.json +47 -0
- data/tracks/javascript/exercises/bowling/bowling.spec.js +105 -41
- data/tracks/javascript/exercises/bowling/example.js +112 -59
- data/tracks/javascript/exercises/custom-set/example-gen.js +4 -4
- data/tracks/javascript/exercises/flatten-array/example.js +6 -5
- data/tracks/javascript/exercises/flatten-array/flatten-array.spec.js +15 -15
- data/tracks/javascript/exercises/grade-school/example.js +6 -6
- data/tracks/javascript/exercises/kindergarten-garden/example.js +9 -9
- data/tracks/javascript/exercises/nth-prime/example.js +6 -6
- data/tracks/javascript/exercises/perfect-numbers/example.js +6 -2
- data/tracks/javascript/exercises/queen-attack/example.js +5 -5
- data/tracks/javascript/exercises/queen-attack/queen-attack.spec.js +11 -9
- data/tracks/javascript/exercises/rational-numbers/README.md +62 -0
- data/tracks/javascript/exercises/rational-numbers/example.js +69 -0
- data/tracks/javascript/exercises/rational-numbers/rational-numbers.spec.js +197 -0
- data/tracks/javascript/exercises/rectangles/README.md +91 -0
- data/tracks/javascript/exercises/rectangles/example.js +66 -0
- data/tracks/javascript/exercises/rectangles/rectangles.spec.js +108 -0
- data/tracks/javascript/exercises/rotational-cipher/README.md +64 -0
- data/tracks/javascript/exercises/rotational-cipher/example.js +24 -0
- data/tracks/javascript/exercises/rotational-cipher/rotational-cipher.spec.js +55 -0
- data/tracks/javascript/exercises/secret-handshake/example.js +1 -2
- data/tracks/javascript/exercises/secret-handshake/secret-handshake.spec.js +2 -1
- data/tracks/javascript/exercises/simple-linked-list/example.js +10 -6
- data/tracks/javascript/exercises/simple-linked-list/simple-linked-list.spec.js +6 -3
- data/tracks/javascript/exercises/variable-length-quantity/README.md +62 -0
- data/tracks/javascript/exercises/variable-length-quantity/example.js +51 -0
- data/tracks/javascript/exercises/variable-length-quantity/variable-length-quantity.spec.js +115 -0
- data/tracks/javascript/package.json +4 -2
- data/tracks/lfe/config/exercise_readme.go.tmpl +15 -4
- data/tracks/lfe/exercises/accumulate/README.md +0 -3
- data/tracks/lfe/exercises/allergies/README.md +0 -1
- data/tracks/lfe/exercises/atbash-cipher/README.md +2 -1
- data/tracks/lfe/exercises/bank-account/README.md +0 -1
- data/tracks/lfe/exercises/beer-song/README.md +2 -2
- data/tracks/lfe/exercises/binary/README.md +2 -0
- data/tracks/lfe/exercises/circular-buffer/README.md +13 -6
- data/tracks/lfe/exercises/etl/README.md +3 -1
- data/tracks/lfe/exercises/grade-school/README.md +0 -1
- data/tracks/lfe/exercises/grains/README.md +0 -1
- data/tracks/lfe/exercises/leap/README.md +1 -1
- data/tracks/lfe/exercises/luhn/README.md +7 -7
- data/tracks/lfe/exercises/meetup/README.md +16 -13
- data/tracks/lfe/exercises/nucleotide-count/README.md +8 -22
- data/tracks/lfe/exercises/parallel-letter-frequency/README.md +0 -1
- data/tracks/lfe/exercises/phone-number/README.md +4 -3
- data/tracks/lfe/exercises/rna-transcription/README.md +2 -2
- data/tracks/lfe/exercises/space-age/README.md +1 -1
- data/tracks/lfe/exercises/sum-of-multiples/README.md +3 -6
- data/tracks/lfe/exercises/trinary/README.md +1 -1
- data/tracks/lfe/exercises/word-count/README.md +1 -2
- data/tracks/objective-c/config.json +11 -0
- data/tracks/objective-c/exercises/prime-factors/PrimeFactorsExample.h +9 -0
- data/tracks/objective-c/exercises/prime-factors/PrimeFactorsExample.m +24 -0
- data/tracks/objective-c/exercises/prime-factors/PrimeFactorsTest.m +67 -0
- data/tracks/objective-c/exercises/prime-factors/README.md +58 -0
- data/tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/project.pbxproj +18 -0
- data/tracks/ocaml/README.md +11 -2
- data/tracks/ocaml/docs/INSTALLATION.md +4 -4
- data/tracks/ocaml/docs/LEARNING.md +4 -2
- data/tracks/ocaml/docs/TESTS.md +7 -14
- data/tracks/ocaml/exercises/acronym/Makefile +4 -6
- data/tracks/ocaml/exercises/acronym/example.ml +2 -2
- data/tracks/ocaml/exercises/acronym/jbuild +11 -0
- data/tracks/ocaml/exercises/acronym/test.ml +1 -2
- data/tracks/ocaml/exercises/all-your-base/Makefile +4 -6
- data/tracks/ocaml/exercises/all-your-base/example.ml +1 -1
- data/tracks/ocaml/exercises/all-your-base/jbuild +11 -0
- data/tracks/ocaml/exercises/all-your-base/test.ml +1 -2
- data/tracks/ocaml/exercises/anagram/Makefile +4 -6
- data/tracks/ocaml/exercises/anagram/example.ml +2 -2
- data/tracks/ocaml/exercises/anagram/jbuild +11 -0
- data/tracks/ocaml/exercises/anagram/test.ml +2 -2
- data/tracks/ocaml/exercises/atbash-cipher/Makefile +4 -6
- data/tracks/ocaml/exercises/atbash-cipher/example.ml +1 -1
- data/tracks/ocaml/exercises/atbash-cipher/jbuild +11 -0
- data/tracks/ocaml/exercises/atbash-cipher/test.ml +1 -2
- data/tracks/ocaml/exercises/beer-song/Makefile +4 -6
- data/tracks/ocaml/exercises/beer-song/example.ml +3 -3
- data/tracks/ocaml/exercises/beer-song/jbuild +11 -0
- data/tracks/ocaml/exercises/beer-song/test.ml +3 -3
- data/tracks/ocaml/exercises/binary-search/Makefile +4 -6
- data/tracks/ocaml/exercises/binary-search/example.ml +1 -1
- data/tracks/ocaml/exercises/binary-search/jbuild +11 -0
- data/tracks/ocaml/exercises/binary-search/test.ml +1 -2
- data/tracks/ocaml/exercises/bob/Makefile +4 -6
- data/tracks/ocaml/exercises/bob/example.ml +2 -2
- data/tracks/ocaml/exercises/bob/jbuild +11 -0
- data/tracks/ocaml/exercises/bowling/Makefile +4 -6
- data/tracks/ocaml/exercises/bowling/bowling.mli +1 -1
- data/tracks/ocaml/exercises/bowling/example.ml +1 -1
- data/tracks/ocaml/exercises/bowling/jbuild +11 -0
- data/tracks/ocaml/exercises/bowling/test.ml +1 -1
- data/tracks/ocaml/exercises/bracket-push/Makefile +4 -6
- data/tracks/ocaml/exercises/bracket-push/example.ml +2 -2
- data/tracks/ocaml/exercises/bracket-push/jbuild +11 -0
- data/tracks/ocaml/exercises/bracket-push/test.ml +1 -1
- data/tracks/ocaml/exercises/change/Makefile +4 -6
- data/tracks/ocaml/exercises/change/example.ml +1 -1
- data/tracks/ocaml/exercises/change/jbuild +11 -0
- data/tracks/ocaml/exercises/change/test.ml +2 -2
- data/tracks/ocaml/exercises/connect/Makefile +4 -10
- data/tracks/ocaml/exercises/connect/example.ml +23 -17
- data/tracks/ocaml/exercises/connect/jbuild +11 -0
- data/tracks/ocaml/exercises/connect/test.ml +1 -1
- data/tracks/ocaml/exercises/custom-set/Makefile +4 -6
- data/tracks/ocaml/exercises/custom-set/jbuild +11 -0
- data/tracks/ocaml/exercises/difference-of-squares/Makefile +4 -6
- data/tracks/ocaml/exercises/difference-of-squares/example.ml +1 -1
- data/tracks/ocaml/exercises/difference-of-squares/jbuild +11 -0
- data/tracks/ocaml/exercises/difference-of-squares/test.ml +0 -1
- data/tracks/ocaml/exercises/dominoes/Makefile +4 -6
- data/tracks/ocaml/exercises/dominoes/example.ml +1 -1
- data/tracks/ocaml/exercises/dominoes/jbuild +11 -0
- data/tracks/ocaml/exercises/dominoes/test.ml +9 -4
- data/tracks/ocaml/exercises/etl/Makefile +4 -6
- data/tracks/ocaml/exercises/etl/example.ml +1 -1
- data/tracks/ocaml/exercises/etl/jbuild +11 -0
- data/tracks/ocaml/exercises/etl/test.ml +1 -3
- data/tracks/ocaml/exercises/forth/Makefile +4 -6
- data/tracks/ocaml/exercises/forth/example.ml +7 -4
- data/tracks/ocaml/exercises/forth/jbuild +11 -0
- data/tracks/ocaml/exercises/forth/test.ml +1 -1
- data/tracks/ocaml/exercises/grade-school/Makefile +4 -6
- data/tracks/ocaml/exercises/grade-school/example.ml +5 -6
- data/tracks/ocaml/exercises/grade-school/grade_school.mli +1 -6
- data/tracks/ocaml/exercises/grade-school/jbuild +11 -0
- data/tracks/ocaml/exercises/grade-school/test.ml +24 -56
- data/tracks/ocaml/exercises/hamming/Makefile +4 -6
- data/tracks/ocaml/exercises/hamming/example.ml +9 -2
- data/tracks/ocaml/exercises/hamming/jbuild +11 -0
- data/tracks/ocaml/exercises/hamming/test.ml +6 -6
- data/tracks/ocaml/exercises/hangman/Makefile +4 -6
- data/tracks/ocaml/exercises/hangman/example.ml +1 -1
- data/tracks/ocaml/exercises/hangman/jbuild +11 -0
- data/tracks/ocaml/exercises/hangman/test.ml +0 -1
- data/tracks/ocaml/exercises/hello-world/Makefile +4 -6
- data/tracks/ocaml/exercises/hello-world/jbuild +11 -0
- data/tracks/ocaml/exercises/hello-world/test.ml +1 -2
- data/tracks/ocaml/exercises/hexadecimal/Makefile +4 -6
- data/tracks/ocaml/exercises/hexadecimal/example.ml +2 -2
- data/tracks/ocaml/exercises/hexadecimal/jbuild +11 -0
- data/tracks/ocaml/exercises/hexadecimal/test.ml +1 -1
- data/tracks/ocaml/exercises/leap/Makefile +4 -6
- data/tracks/ocaml/exercises/leap/jbuild +11 -0
- data/tracks/ocaml/exercises/leap/test.ml +1 -2
- data/tracks/ocaml/exercises/list-ops/Makefile +4 -6
- data/tracks/ocaml/exercises/list-ops/jbuild +11 -0
- data/tracks/ocaml/exercises/list-ops/test.ml +2 -2
- data/tracks/ocaml/exercises/luhn/Makefile +4 -6
- data/tracks/ocaml/exercises/luhn/example.ml +2 -2
- data/tracks/ocaml/exercises/luhn/jbuild +11 -0
- data/tracks/ocaml/exercises/luhn/test.ml +1 -1
- data/tracks/ocaml/exercises/meetup/Makefile +4 -6
- data/tracks/ocaml/exercises/meetup/example.ml +1 -1
- data/tracks/ocaml/exercises/meetup/jbuild +11 -0
- data/tracks/ocaml/exercises/meetup/test.ml +1 -1
- data/tracks/ocaml/exercises/minesweeper/Makefile +4 -6
- data/tracks/ocaml/exercises/minesweeper/example.ml +2 -2
- data/tracks/ocaml/exercises/minesweeper/jbuild +11 -0
- data/tracks/ocaml/exercises/minesweeper/test.ml +1 -1
- data/tracks/ocaml/exercises/nucleotide-count/Makefile +4 -6
- data/tracks/ocaml/exercises/nucleotide-count/example.ml +1 -1
- data/tracks/ocaml/exercises/nucleotide-count/jbuild +11 -0
- data/tracks/ocaml/exercises/nucleotide-count/nucleotide_count.mli +1 -1
- data/tracks/ocaml/exercises/nucleotide-count/test.ml +1 -1
- data/tracks/ocaml/exercises/palindrome-products/Makefile +4 -6
- data/tracks/ocaml/exercises/palindrome-products/example.ml +5 -5
- data/tracks/ocaml/exercises/palindrome-products/jbuild +12 -0
- data/tracks/ocaml/exercises/pangram/Makefile +4 -6
- data/tracks/ocaml/exercises/pangram/example.ml +15 -6
- data/tracks/ocaml/exercises/pangram/jbuild +11 -0
- data/tracks/ocaml/exercises/pangram/test.ml +1 -2
- data/tracks/ocaml/exercises/phone-number/Makefile +4 -6
- data/tracks/ocaml/exercises/phone-number/example.ml +5 -5
- data/tracks/ocaml/exercises/phone-number/jbuild +11 -0
- data/tracks/ocaml/exercises/phone-number/test.ml +2 -2
- data/tracks/ocaml/exercises/prime-factors/Makefile +4 -6
- data/tracks/ocaml/exercises/prime-factors/example.ml +2 -2
- data/tracks/ocaml/exercises/prime-factors/jbuild +11 -0
- data/tracks/ocaml/exercises/prime-factors/test.ml +2 -2
- data/tracks/ocaml/exercises/raindrops/Makefile +4 -6
- data/tracks/ocaml/exercises/raindrops/example.ml +0 -2
- data/tracks/ocaml/exercises/raindrops/jbuild +11 -0
- data/tracks/ocaml/exercises/raindrops/test.ml +1 -2
- data/tracks/ocaml/exercises/react/Makefile +4 -6
- data/tracks/ocaml/exercises/react/example.ml +1 -1
- data/tracks/ocaml/exercises/react/jbuild +11 -0
- data/tracks/ocaml/exercises/react/test.ml +1 -1
- data/tracks/ocaml/exercises/rectangles/Makefile +4 -6
- data/tracks/ocaml/exercises/rectangles/jbuild +11 -0
- data/tracks/ocaml/exercises/rectangles/test.ml +1 -2
- data/tracks/ocaml/exercises/rna-transcription/Makefile +4 -6
- data/tracks/ocaml/exercises/rna-transcription/example.ml +1 -3
- data/tracks/ocaml/exercises/rna-transcription/jbuild +11 -0
- data/tracks/ocaml/exercises/rna-transcription/test.ml +1 -1
- data/tracks/ocaml/exercises/robot-name/Makefile +4 -6
- data/tracks/ocaml/exercises/robot-name/example.ml +2 -2
- data/tracks/ocaml/exercises/robot-name/jbuild +11 -0
- data/tracks/ocaml/exercises/robot-name/test.ml +6 -5
- data/tracks/ocaml/exercises/roman-numerals/Makefile +4 -6
- data/tracks/ocaml/exercises/roman-numerals/jbuild +11 -0
- data/tracks/ocaml/exercises/roman-numerals/test.ml +1 -2
- data/tracks/ocaml/exercises/run-length-encoding/Makefile +4 -6
- data/tracks/ocaml/exercises/run-length-encoding/example.ml +3 -3
- data/tracks/ocaml/exercises/run-length-encoding/jbuild +11 -0
- data/tracks/ocaml/exercises/run-length-encoding/test.ml +1 -1
- data/tracks/ocaml/exercises/say/Makefile +4 -6
- data/tracks/ocaml/exercises/say/example.ml +2 -2
- data/tracks/ocaml/exercises/say/jbuild +11 -0
- data/tracks/ocaml/exercises/say/test.ml +1 -1
- data/tracks/ocaml/exercises/space-age/Makefile +4 -6
- data/tracks/ocaml/exercises/space-age/example.ml +1 -1
- data/tracks/ocaml/exercises/space-age/jbuild +11 -0
- data/tracks/ocaml/exercises/space-age/test.ml +2 -2
- data/tracks/ocaml/exercises/triangle/Makefile +4 -6
- data/tracks/ocaml/exercises/triangle/example.ml +1 -1
- data/tracks/ocaml/exercises/triangle/jbuild +11 -0
- data/tracks/ocaml/exercises/triangle/test.ml +1 -1
- data/tracks/ocaml/exercises/word-count/Makefile +4 -6
- data/tracks/ocaml/exercises/word-count/example.ml +1 -1
- data/tracks/ocaml/exercises/word-count/jbuild +11 -0
- data/tracks/ocaml/exercises/word-count/test.ml +1 -1
- data/tracks/ocaml/exercises/word-count/word_count.mli +1 -1
- data/tracks/ocaml/exercises/zipper/Makefile +4 -6
- data/tracks/ocaml/exercises/zipper/example.ml +1 -1
- data/tracks/ocaml/exercises/zipper/jbuild +12 -0
- data/tracks/ocaml/exercises/zipper/test.ml +1 -1
- data/tracks/ocaml/exercises/zipper/tree.ml +1 -1
- data/tracks/ocaml/exercises/zipper/tree.mli +1 -1
- data/tracks/ocaml/exercises/zipper/zipper.mli +1 -1
- data/tracks/ocaml/tools/test-generator/Makefile +4 -13
- data/tracks/ocaml/tools/test-generator/jbuild +11 -0
- data/tracks/perl5/exercises/bob/.meta/exercise-data.yaml +9 -10
- data/tracks/perl5/exercises/bob/.meta/solutions/Bob.pm +7 -7
- data/tracks/perl5/exercises/bob/Bob.pm +1 -1
- data/tracks/perl5/exercises/bob/bob.t +81 -44
- data/tracks/perl5/exercises/clock/.meta/exercise-data.yaml +82 -0
- data/tracks/perl5/exercises/clock/.meta/solutions/Clock.pm +25 -52
- data/tracks/perl5/exercises/clock/Clock.pm +22 -0
- data/tracks/perl5/exercises/clock/clock.t +628 -92
- data/tracks/perl5/exercises/hello-world/.meta/exercise-data.yaml +1 -2
- data/tracks/perl5/exercises/hello-world/hello-world.t +4 -16
- data/tracks/perl5/exercises/leap/.meta/exercise-data.yaml +2 -3
- data/tracks/perl5/exercises/leap/leap.t +16 -21
- data/tracks/perl5/exercises/luhn/.meta/exercise-data.yaml +2 -2
- data/tracks/perl5/exercises/luhn/luhn.t +44 -30
- data/tracks/perl5/exercises/phone-number/.meta/exercise-data.yaml +3 -3
- data/tracks/perl5/exercises/phone-number/.meta/solutions/PhoneNumber.pm +1 -1
- data/tracks/perl5/exercises/phone-number/PhoneNumber.pm +1 -1
- data/tracks/perl5/exercises/phone-number/phone-number.t +59 -31
- data/tracks/perl6/exercises/all-your-base/.meta/exercise-data.yaml +1 -1
- data/tracks/perl6/exercises/all-your-base/all-your-base.t +45 -45
- data/tracks/plsql/config/exercise_readme.go.tmpl +19 -4
- data/tracks/plsql/exercises/binary/README.md +2 -0
- data/tracks/plsql/exercises/grains/README.md +0 -1
- data/tracks/plsql/exercises/leap/README.md +1 -1
- data/tracks/plsql/exercises/rna-transcription/README.md +2 -2
- data/tracks/plsql/exercises/roman-numerals/README.md +1 -1
- data/tracks/prolog/config.json +30 -0
- data/tracks/prolog/config/maintainers.json +10 -0
- data/tracks/prolog/docs/INSTALLATION.md +4 -4
- data/tracks/prolog/docs/LEARNING.md +1 -0
- data/tracks/prolog/docs/TESTS.md +1 -1
- data/tracks/prolog/exercises/complex-numbers/README.md +38 -0
- data/tracks/prolog/exercises/complex-numbers/complex_numbers.example +14 -0
- data/tracks/prolog/exercises/complex-numbers/complex_numbers.pl +11 -0
- data/tracks/prolog/exercises/complex-numbers/complex_numbers_tests.plt +123 -0
- data/tracks/prolog/exercises/hello-world/README.md +1 -1
- data/tracks/prolog/exercises/hello-world/hello_world.pl +1 -1
- data/tracks/prolog/exercises/hello-world/hello_world_tests.plt +1 -1
- data/tracks/prolog/exercises/isogram/README.md +19 -0
- data/tracks/prolog/exercises/isogram/isogram.example +10 -0
- data/tracks/prolog/exercises/isogram/isogram.pl +1 -0
- data/tracks/prolog/exercises/isogram/isogram_tests.plt +39 -0
- data/tracks/prolog/exercises/queen-attack/README.md +32 -0
- data/tracks/prolog/exercises/queen-attack/queen_attack.example +12 -0
- data/tracks/prolog/exercises/queen-attack/queen_attack.pl +11 -0
- data/tracks/prolog/exercises/queen-attack/queen_attack_tests.plt +62 -0
- data/tracks/python/config/exercise_readme.go.tmpl +20 -1
- data/tracks/python/exercises/accumulate/README.md +20 -1
- data/tracks/python/exercises/acronym/README.md +20 -1
- data/tracks/python/exercises/all-your-base/README.md +20 -1
- data/tracks/python/exercises/allergies/README.md +20 -1
- data/tracks/python/exercises/alphametics/README.md +20 -1
- data/tracks/python/exercises/anagram/README.md +20 -1
- data/tracks/python/exercises/armstrong-numbers/README.md +20 -1
- data/tracks/python/exercises/atbash-cipher/README.md +20 -1
- data/tracks/python/exercises/beer-song/README.md +20 -1
- data/tracks/python/exercises/binary-search-tree/README.md +20 -1
- data/tracks/python/exercises/binary-search/README.md +20 -1
- data/tracks/python/exercises/binary/README.md +20 -1
- data/tracks/python/exercises/bob/README.md +20 -1
- data/tracks/python/exercises/book-store/README.md +20 -1
- data/tracks/python/exercises/bowling/README.md +20 -1
- data/tracks/python/exercises/bracket-push/README.md +20 -1
- data/tracks/python/exercises/change/README.md +20 -1
- data/tracks/python/exercises/circular-buffer/README.md +20 -1
- data/tracks/python/exercises/clock/README.md +20 -1
- data/tracks/python/exercises/collatz-conjecture/README.md +20 -1
- data/tracks/python/exercises/complex-numbers/README.md +20 -1
- data/tracks/python/exercises/connect/README.md +20 -1
- data/tracks/python/exercises/crypto-square/README.md +20 -1
- data/tracks/python/exercises/custom-set/README.md +20 -1
- data/tracks/python/exercises/diamond/README.md +20 -1
- data/tracks/python/exercises/difference-of-squares/README.md +20 -1
- data/tracks/python/exercises/diffie-hellman/README.md +20 -1
- data/tracks/python/exercises/dominoes/README.md +20 -1
- data/tracks/python/exercises/dot-dsl/README.md +20 -1
- data/tracks/python/exercises/error-handling/README.md +20 -1
- data/tracks/python/exercises/etl/README.md +20 -1
- data/tracks/python/exercises/flatten-array/README.md +20 -1
- data/tracks/python/exercises/food-chain/README.md +20 -1
- data/tracks/python/exercises/food-chain/example.py +9 -0
- data/tracks/python/exercises/food-chain/food_chain.py +1 -1
- data/tracks/python/exercises/food-chain/food_chain_test.py +79 -80
- data/tracks/python/exercises/forth/README.md +20 -1
- data/tracks/python/exercises/gigasecond/README.md +20 -1
- data/tracks/python/exercises/go-counting/README.md +20 -1
- data/tracks/python/exercises/grade-school/README.md +20 -1
- data/tracks/python/exercises/grains/README.md +20 -1
- data/tracks/python/exercises/grains/grains_test.py +1 -1
- data/tracks/python/exercises/grep/README.md +20 -1
- data/tracks/python/exercises/hamming/README.md +20 -1
- data/tracks/python/exercises/hello-world/README.md +20 -1
- data/tracks/python/exercises/hexadecimal/README.md +20 -1
- data/tracks/python/exercises/house/README.md +20 -1
- data/tracks/python/exercises/isbn-verifier/README.md +20 -1
- data/tracks/python/exercises/isogram/README.md +20 -1
- data/tracks/python/exercises/kindergarten-garden/README.md +20 -1
- data/tracks/python/exercises/largest-series-product/README.md +20 -1
- data/tracks/python/exercises/leap/README.md +20 -1
- data/tracks/python/exercises/linked-list/README.md +20 -1
- data/tracks/python/exercises/list-ops/README.md +20 -1
- data/tracks/python/exercises/luhn/README.md +20 -1
- data/tracks/python/exercises/markdown/README.md +20 -1
- data/tracks/python/exercises/matrix/README.md +20 -1
- data/tracks/python/exercises/meetup/README.md +20 -1
- data/tracks/python/exercises/minesweeper/README.md +20 -1
- data/tracks/python/exercises/nth-prime/README.md +20 -1
- data/tracks/python/exercises/nucleotide-count/README.md +20 -1
- data/tracks/python/exercises/ocr-numbers/README.md +20 -1
- data/tracks/python/exercises/octal/README.md +20 -1
- data/tracks/python/exercises/palindrome-products/README.md +20 -1
- data/tracks/python/exercises/pangram/README.md +20 -1
- data/tracks/python/exercises/parallel-letter-frequency/README.md +20 -1
- data/tracks/python/exercises/pascals-triangle/README.md +20 -1
- data/tracks/python/exercises/perfect-numbers/README.md +20 -1
- data/tracks/python/exercises/phone-number/README.md +20 -1
- data/tracks/python/exercises/pig-latin/README.md +24 -5
- data/tracks/python/exercises/point-mutations/README.md +20 -1
- data/tracks/python/exercises/poker/README.md +20 -1
- data/tracks/python/exercises/pov/README.md +20 -1
- data/tracks/python/exercises/prime-factors/README.md +20 -1
- data/tracks/python/exercises/protein-translation/README.md +20 -1
- data/tracks/python/exercises/proverb/README.md +20 -1
- data/tracks/python/exercises/pythagorean-triplet/README.md +20 -1
- data/tracks/python/exercises/queen-attack/README.md +20 -1
- data/tracks/python/exercises/queen-attack/example.py +16 -26
- data/tracks/python/exercises/queen-attack/queen_attack.py +5 -5
- data/tracks/python/exercises/queen-attack/queen_attack_test.py +18 -49
- data/tracks/python/exercises/rail-fence-cipher/README.md +20 -1
- data/tracks/python/exercises/raindrops/README.md +20 -1
- data/tracks/python/exercises/rational-numbers/README.md +20 -1
- data/tracks/python/exercises/react/README.md +20 -1
- data/tracks/python/exercises/rectangles/README.md +20 -1
- data/tracks/python/exercises/reverse-string/README.md +20 -1
- data/tracks/python/exercises/rna-transcription/README.md +20 -1
- data/tracks/python/exercises/robot-name/README.md +20 -1
- data/tracks/python/exercises/robot-simulator/README.md +20 -1
- data/tracks/python/exercises/roman-numerals/README.md +20 -1
- data/tracks/python/exercises/rotational-cipher/README.md +20 -1
- data/tracks/python/exercises/run-length-encoding/README.md +20 -1
- data/tracks/python/exercises/saddle-points/README.md +20 -1
- data/tracks/python/exercises/say/README.md +20 -1
- data/tracks/python/exercises/scale-generator/README.md +20 -1
- data/tracks/python/exercises/scrabble-score/README.md +20 -1
- data/tracks/python/exercises/secret-handshake/README.md +20 -1
- data/tracks/python/exercises/series/README.md +20 -1
- data/tracks/python/exercises/sieve/README.md +20 -1
- data/tracks/python/exercises/simple-cipher/README.md +20 -1
- data/tracks/python/exercises/simple-linked-list/README.md +20 -1
- data/tracks/python/exercises/space-age/README.md +20 -1
- data/tracks/python/exercises/spiral-matrix/README.md +20 -1
- data/tracks/python/exercises/strain/README.md +20 -1
- data/tracks/python/exercises/sublist/README.md +20 -1
- data/tracks/python/exercises/sum-of-multiples/README.md +20 -1
- data/tracks/python/exercises/tournament/README.md +20 -1
- data/tracks/python/exercises/transpose/README.md +20 -1
- data/tracks/python/exercises/tree-building/README.md +20 -1
- data/tracks/python/exercises/triangle/README.md +20 -1
- data/tracks/python/exercises/trinary/README.md +20 -1
- data/tracks/python/exercises/twelve-days/README.md +20 -1
- data/tracks/python/exercises/two-bucket/README.md +21 -2
- data/tracks/python/exercises/two-fer/README.md +20 -1
- data/tracks/python/exercises/variable-length-quantity/README.md +20 -1
- data/tracks/python/exercises/word-count/README.md +20 -1
- data/tracks/python/exercises/word-search/README.md +20 -1
- data/tracks/python/exercises/wordy/README.md +20 -1
- data/tracks/python/exercises/zebra-puzzle/README.md +20 -1
- data/tracks/python/exercises/zipper/README.md +20 -1
- data/tracks/rust/_test/check-exercises.sh +3 -0
- data/tracks/rust/config.json +1 -1
- data/tracks/rust/exercises/collatz-conjecture/example.rs +3 -3
- data/tracks/rust/exercises/collatz-conjecture/src/lib.rs +2 -2
- data/tracks/rust/exercises/collatz-conjecture/tests/collatz-conjecture.rs +5 -5
- data/tracks/rust/exercises/nth-prime/example.rs +4 -4
- data/tracks/rust/exercises/nth-prime/src/lib.rs +3 -0
- data/tracks/rust/exercises/nth-prime/tests/nth-prime.rs +5 -5
- data/tracks/rust/exercises/perfect-numbers/example.rs +5 -5
- data/tracks/rust/exercises/perfect-numbers/src/lib.rs +1 -1
- data/tracks/rust/exercises/perfect-numbers/tests/perfect-numbers.rs +2 -2
- data/tracks/rust/exercises/reverse-string/src/lib.rs +2 -2
- data/tracks/scala/exercises/nth-prime/src/test/scala/NthPrimeTest.scala +2 -2
- data/tracks/scala/exercises/nucleotide-count/src/test/scala/NucleotideCountTest.scala +16 -16
- data/tracks/scala/exercises/ocr-numbers/src/test/scala/OcrNumbersTest.scala +6 -5
- data/tracks/scala/exercises/palindrome-products/src/test/scala/PalindromeProductsTest.scala +15 -19
- data/tracks/scala/exercises/pangram/src/test/scala/PangramTest.scala +10 -5
- data/tracks/scala/exercises/pascals-triangle/src/test/scala/PascalsTriangleTest.scala +47 -8
- data/tracks/scala/exercises/perfect-numbers/src/main/scala/.keep +0 -0
- data/tracks/scala/exercises/perfect-numbers/src/test/scala/PerfectNumbersTest.scala +17 -15
- data/tracks/scala/exercises/phone-number/src/test/scala/PhoneNumberTest.scala +26 -16
- data/tracks/scala/exercises/pig-latin/src/test/scala/PigLatinTest.scala +24 -24
- data/tracks/scala/exercises/prime-factors/src/test/scala/PrimefactorsTest.scala +9 -9
- data/tracks/scala/exercises/protein-translation/example.scala +5 -5
- data/tracks/scala/exercises/protein-translation/src/test/scala/ProteinTranslationTest.scala +91 -29
- data/tracks/scala/exercises/queen-attack/src/test/scala/QueenAttackTest.scala +20 -20
- data/tracks/scala/exercises/rail-fence-cipher/src/test/scala/RailFenceCipherTest.scala +15 -9
- data/tracks/scala/exercises/raindrops/src/test/scala/RaindropsTest.scala +2 -2
- data/tracks/scala/exercises/rna-transcription/src/test/scala/RnaTranscriptionTest.scala +8 -23
- data/tracks/scala/exercises/roman-numerals/src/test/scala/RomanNumeralsTest.scala +6 -1
- data/tracks/scala/testgen/src/main/scala/KindergartenGardenTestGenerator.scala +0 -6
- data/tracks/scala/testgen/src/main/scala/NthPrimeTestGenerator.scala +3 -3
- data/tracks/scala/testgen/src/main/scala/NucleotideCountTestGenerator.scala +3 -3
- data/tracks/scala/testgen/src/main/scala/OcrNumbersTestGenerator.scala +3 -3
- data/tracks/scala/testgen/src/main/scala/PalindromeProductsTestGenerator.scala +3 -3
- data/tracks/scala/testgen/src/main/scala/PangramsTestGenerator.scala +3 -3
- data/tracks/scala/testgen/src/main/scala/PascalsTriangleTestGenerator.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/PerfectNumbersTestGenerator.scala +3 -3
- data/tracks/scala/testgen/src/main/scala/PhoneNumberTestGenerator.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/PigLatinTestGenerator.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/PrimeFactorsTestGenerator.scala +6 -8
- data/tracks/scala/testgen/src/main/scala/QueenAttackTestGenerator.scala +24 -22
- data/tracks/scala/testgen/src/main/scala/RailFenceCipherTestGenerator.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/RaindropsTestGenerator.scala +2 -2
- data/tracks/scala/testgen/src/main/scala/RnaTranscriptionTestGenerator.scala +3 -3
- data/tracks/scala/testgen/src/main/scala/RomanNumeralsTestGenerator.scala +2 -2
- data/tracks/scala/testgen/src/main/scala/testgen/TestSuiteBuilder.scala +5 -0
- data/tracks/scheme/docs/RESOURCES.md +1 -0
- data/tracks/swift/.travis.yml +5 -0
- data/tracks/typescript/config.json +154 -1
- data/tracks/typescript/config/maintainers.json +10 -0
- data/tracks/typescript/exercises/allergies/README.md +62 -0
- data/tracks/typescript/exercises/allergies/allergies.example.ts +48 -0
- data/tracks/typescript/exercises/allergies/allergies.test.ts +113 -0
- data/tracks/typescript/exercises/allergies/allergies.ts +0 -0
- data/tracks/typescript/exercises/allergies/package.json +36 -0
- data/tracks/typescript/exercises/allergies/tsconfig.json +22 -0
- data/tracks/typescript/exercises/allergies/tslint.json +127 -0
- data/tracks/typescript/exercises/allergies/yarn.lock +2624 -0
- data/tracks/typescript/exercises/collatz-conjecture/README.md +59 -0
- data/tracks/typescript/exercises/collatz-conjecture/collatz-conjecture.example.ts +20 -0
- data/tracks/typescript/exercises/collatz-conjecture/collatz-conjecture.test.ts +33 -0
- data/tracks/typescript/exercises/collatz-conjecture/collatz-conjecture.ts +7 -0
- data/tracks/typescript/exercises/collatz-conjecture/package.json +36 -0
- data/tracks/typescript/exercises/collatz-conjecture/tsconfig.json +22 -0
- data/tracks/typescript/exercises/collatz-conjecture/tslint.json +127 -0
- data/tracks/typescript/exercises/collatz-conjecture/yarn.lock +2624 -0
- data/tracks/typescript/exercises/isogram/README.md +46 -0
- data/tracks/typescript/exercises/isogram/isogram.example.ts +31 -0
- data/tracks/typescript/exercises/isogram/isogram.test.ts +48 -0
- data/tracks/typescript/exercises/isogram/isogram.ts +7 -0
- data/tracks/typescript/exercises/isogram/package.json +36 -0
- data/tracks/typescript/exercises/isogram/tsconfig.json +22 -0
- data/tracks/typescript/exercises/isogram/tslint.json +127 -0
- data/tracks/typescript/exercises/isogram/yarn.lock +2624 -0
- data/tracks/typescript/exercises/matrix/README.md +73 -0
- data/tracks/typescript/exercises/matrix/matrix.example.ts +36 -0
- data/tracks/typescript/exercises/matrix/matrix.test.ts +43 -0
- data/tracks/typescript/exercises/matrix/matrix.ts +7 -0
- data/tracks/typescript/exercises/matrix/package.json +36 -0
- data/tracks/typescript/exercises/matrix/tsconfig.json +22 -0
- data/tracks/typescript/exercises/matrix/tslint.json +127 -0
- data/tracks/typescript/exercises/matrix/yarn.lock +2624 -0
- data/tracks/typescript/exercises/nucleotide-count/README.md +45 -0
- data/tracks/typescript/exercises/nucleotide-count/nucleotide-count.example.ts +25 -0
- data/tracks/typescript/exercises/nucleotide-count/nucleotide-count.test.ts +48 -0
- data/tracks/typescript/exercises/nucleotide-count/nucleotide-count.ts +7 -0
- data/tracks/typescript/exercises/nucleotide-count/package.json +36 -0
- data/tracks/typescript/exercises/nucleotide-count/tsconfig.json +22 -0
- data/tracks/typescript/exercises/nucleotide-count/tslint.json +127 -0
- data/tracks/typescript/exercises/nucleotide-count/yarn.lock +2624 -0
- data/tracks/typescript/exercises/protein-translation/README.md +74 -0
- data/tracks/typescript/exercises/protein-translation/package.json +36 -0
- data/tracks/typescript/exercises/protein-translation/protein-translation.example.ts +61 -0
- data/tracks/typescript/exercises/protein-translation/protein-translation.test.ts +118 -0
- data/tracks/typescript/exercises/protein-translation/protein-translation.ts +7 -0
- data/tracks/typescript/exercises/protein-translation/tsconfig.json +22 -0
- data/tracks/typescript/exercises/protein-translation/tslint.json +127 -0
- data/tracks/typescript/exercises/protein-translation/yarn.lock +2624 -0
- data/tracks/typescript/exercises/reverse-string/README.md +39 -0
- data/tracks/typescript/exercises/reverse-string/package.json +36 -0
- data/tracks/typescript/exercises/reverse-string/reverse-string.example.ts +7 -0
- data/tracks/typescript/exercises/reverse-string/reverse-string.test.ts +28 -0
- data/tracks/typescript/exercises/reverse-string/reverse-string.ts +7 -0
- data/tracks/typescript/exercises/reverse-string/tsconfig.json +22 -0
- data/tracks/typescript/exercises/reverse-string/tslint.json +127 -0
- data/tracks/typescript/exercises/reverse-string/yarn.lock +2624 -0
- data/tracks/typescript/exercises/roman-numerals/README.md +75 -0
- data/tracks/typescript/exercises/roman-numerals/package.json +36 -0
- data/tracks/typescript/exercises/roman-numerals/roman-numerals.example.ts +32 -0
- data/tracks/typescript/exercises/roman-numerals/roman-numerals.test.ts +98 -0
- data/tracks/typescript/exercises/roman-numerals/roman-numerals.ts +7 -0
- data/tracks/typescript/exercises/roman-numerals/tsconfig.json +22 -0
- data/tracks/typescript/exercises/roman-numerals/tslint.json +127 -0
- data/tracks/typescript/exercises/roman-numerals/yarn.lock +2624 -0
- data/tracks/typescript/exercises/saddle-points/README.md +59 -0
- data/tracks/typescript/exercises/saddle-points/package.json +36 -0
- data/tracks/typescript/exercises/saddle-points/saddle-points.example.ts +35 -0
- data/tracks/typescript/exercises/saddle-points/saddle-points.test.ts +54 -0
- data/tracks/typescript/exercises/saddle-points/saddle-points.ts +7 -0
- data/tracks/typescript/exercises/saddle-points/tsconfig.json +22 -0
- data/tracks/typescript/exercises/saddle-points/tslint.json +127 -0
- data/tracks/typescript/exercises/saddle-points/yarn.lock +2624 -0
- data/tracks/typescript/exercises/twelve-days/README.md +61 -0
- data/tracks/typescript/exercises/twelve-days/package.json +36 -0
- data/tracks/typescript/exercises/twelve-days/tsconfig.json +22 -0
- data/tracks/typescript/exercises/twelve-days/tslint.json +127 -0
- data/tracks/typescript/exercises/twelve-days/twelve-days.example.ts +53 -0
- data/tracks/typescript/exercises/twelve-days/twelve-days.test.ts +80 -0
- data/tracks/typescript/exercises/twelve-days/twelve-days.ts +7 -0
- data/tracks/typescript/exercises/twelve-days/yarn.lock +2624 -0
- data/tracks/typescript/exercises/two-fer/README.md +45 -0
- data/tracks/typescript/exercises/two-fer/package.json +36 -0
- data/tracks/typescript/exercises/two-fer/tsconfig.json +22 -0
- data/tracks/typescript/exercises/two-fer/tslint.json +127 -0
- data/tracks/typescript/exercises/two-fer/two-fer.example.ts +7 -0
- data/tracks/typescript/exercises/two-fer/two-fer.test.ts +18 -0
- data/tracks/typescript/exercises/two-fer/two-fer.ts +7 -0
- data/tracks/typescript/exercises/two-fer/yarn.lock +2624 -0
- data/tracks/vbnet/config/exercise_readme.go.tmpl +5 -4
- data/tracks/vbnet/exercises/accumulate/README.md +0 -3
- data/tracks/vbnet/exercises/allergies/README.md +0 -1
- data/tracks/vbnet/exercises/atbash-cipher/README.md +2 -1
- data/tracks/vbnet/exercises/binary/README.md +2 -0
- data/tracks/vbnet/exercises/crypto-square/README.md +10 -8
- metadata +251 -47
- data/tracks/coffeescript/docs/EXERCISE_README_INSERT.md +0 -6
- data/tracks/coq/docs/EXERCISE_README_INSERT.md +0 -22
- data/tracks/cpp/docs/EXERCISE_README_INSERT.md +0 -30
- data/tracks/d/docs/EXERCISE_README_INSERT.md +0 -29
- data/tracks/ecmascript/docs/EXERCISE_README_INSERT.md +0 -28
- data/tracks/elm/exercises/accumulate/package.json +0 -14
- data/tracks/elm/exercises/allergies/package.json +0 -14
- data/tracks/elm/exercises/anagram/package.json +0 -14
- data/tracks/elm/exercises/atbash-cipher/package.json +0 -14
- data/tracks/elm/exercises/bob/package.json +0 -14
- data/tracks/elm/exercises/collatz-conjecture/package.json +0 -14
- data/tracks/elm/exercises/difference-of-squares/package.json +0 -14
- data/tracks/elm/exercises/etl/package.json +0 -14
- data/tracks/elm/exercises/gigasecond/package.json +0 -14
- data/tracks/elm/exercises/grade-school/package.json +0 -14
- data/tracks/elm/exercises/grains/package.json +0 -14
- data/tracks/elm/exercises/hamming/package.json +0 -14
- data/tracks/elm/exercises/hello-world/package.json +0 -14
- data/tracks/elm/exercises/isogram/package.json +0 -14
- data/tracks/elm/exercises/largest-series-product/package.json +0 -14
- data/tracks/elm/exercises/leap/package.json +0 -14
- data/tracks/elm/exercises/list-ops/package.json +0 -14
- data/tracks/elm/exercises/nucleotide-count/package.json +0 -14
- data/tracks/elm/exercises/pangram/package.json +0 -14
- data/tracks/elm/exercises/pascals-triangle/package.json +0 -14
- data/tracks/elm/exercises/phone-number/package.json +0 -14
- data/tracks/elm/exercises/raindrops/package.json +0 -14
- data/tracks/elm/exercises/rna-transcription/package.json +0 -14
- data/tracks/elm/exercises/robot-simulator/package.json +0 -14
- data/tracks/elm/exercises/roman-numerals/package.json +0 -14
- data/tracks/elm/exercises/run-length-encoding/package.json +0 -14
- data/tracks/elm/exercises/say/package.json +0 -14
- data/tracks/elm/exercises/scrabble-score/package.json +0 -14
- data/tracks/elm/exercises/series/package.json +0 -14
- data/tracks/elm/exercises/space-age/package.json +0 -14
- data/tracks/elm/exercises/strain/package.json +0 -14
- data/tracks/elm/exercises/sublist/package.json +0 -14
- data/tracks/elm/exercises/sum-of-multiples/package.json +0 -14
- data/tracks/elm/exercises/triangle/package.json +0 -14
- data/tracks/elm/exercises/word-count/package.json +0 -14
- data/tracks/erlang/docs/EXERCISE_README_INSERT.md +0 -41
- data/tracks/haskell/docs/EXERCISE_README_INSERT.md +0 -52
- data/tracks/lfe/docs/EXERCISE_README_INSERT.md +0 -14
- data/tracks/plsql/docs/EXERCISE_README_INSERT.md +0 -18
- data/tracks/vbnet/docs/EXERCISE_README_INSERT.md +0 -5
@@ -1,4 +1,4 @@
|
|
1
|
-
open
|
1
|
+
open Base
|
2
2
|
|
3
3
|
let is_empty = String.for_all ~f:Char.is_whitespace
|
4
4
|
|
@@ -6,7 +6,7 @@ let is_shouting s =
|
|
6
6
|
String.exists ~f:Char.is_alpha s &&
|
7
7
|
String.for_all ~f:(fun c -> not (Char.is_alpha c) || Char.is_uppercase c) s
|
8
8
|
|
9
|
-
let is_question s = s.[String.length s - 1] = '?'
|
9
|
+
let is_question s = Char.(s.[String.length s - 1] = '?')
|
10
10
|
|
11
11
|
let response_for s =
|
12
12
|
let s = String.strip s in
|
@@ -1,4 +1,4 @@
|
|
1
|
-
open
|
1
|
+
open Base
|
2
2
|
|
3
3
|
type 'a stack = 'a list
|
4
4
|
|
@@ -17,7 +17,7 @@ let update (s: (char stack) option) (ch: char): (char stack) option =
|
|
17
17
|
match s with
|
18
18
|
| None -> None
|
19
19
|
| Some s ->
|
20
|
-
let pop_matching m = Option.filter (pop s) ~f:(fun (top, _) -> top = m)
|
20
|
+
let pop_matching m = Option.filter (pop s) ~f:(fun (top, _) -> Char.(top = m))
|
21
21
|
|> Option.map ~f:snd in
|
22
22
|
match ch with
|
23
23
|
| '(' | '{' | '[' -> Some (push s ch)
|
@@ -1,10 +1,10 @@
|
|
1
1
|
(* Test/exercise version: "1.1.0" *)
|
2
2
|
|
3
|
-
open
|
3
|
+
open Base
|
4
4
|
open OUnit2
|
5
5
|
open Change
|
6
6
|
|
7
|
-
let printer = Option.value_map ~default:"None" ~f:(List.
|
7
|
+
let printer = Option.value_map ~default:"None" ~f:(fun xs -> String.concat ~sep:";" (List.map ~f:Int.to_string xs))
|
8
8
|
let ae exp got _test_ctxt = assert_equal ~printer exp got
|
9
9
|
|
10
10
|
let tests = [
|
@@ -1,15 +1,9 @@
|
|
1
|
-
|
2
|
-
@./test.native
|
1
|
+
default: clean test
|
3
2
|
|
4
|
-
test
|
5
|
-
|
6
|
-
|
7
|
-
main.byte: clean
|
8
|
-
@corebuild -r -quiet main.byte
|
3
|
+
test:
|
4
|
+
jbuilder runtest
|
9
5
|
|
10
6
|
clean:
|
11
|
-
|
12
|
-
rm -f test.native
|
13
|
-
rm -f main.byte
|
7
|
+
jbuilder clean
|
14
8
|
|
15
9
|
.PHONY: clean
|
@@ -1,21 +1,27 @@
|
|
1
|
-
open
|
1
|
+
open Base
|
2
2
|
|
3
3
|
type player = O | X
|
4
4
|
type cell = O | X | Empty
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
let eq_cell c1 c2 = match (c1, c2) with
|
7
|
+
| (O, O) -> true
|
8
|
+
| (X, X) -> true
|
9
|
+
| _ -> false
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
module IntTuple = struct
|
12
|
+
module T = struct
|
13
|
+
type t = int * int
|
14
|
+
let compare (x0, y0) (x1, y1) =
|
15
|
+
match Int.compare x0 x1 with
|
16
|
+
0 -> Int.compare y0 y1
|
17
|
+
| c -> c
|
18
|
+
let sexp_of_t (x, y) = Sexp.List [Sexp.Atom (Int.to_string x); Sexp.Atom (Int.to_string y)]
|
19
|
+
end
|
20
|
+
include T
|
21
|
+
include Comparable.Make(T)
|
16
22
|
end
|
17
23
|
|
18
|
-
|
24
|
+
let emptyIntIntSet = Set.empty (module IntTuple)
|
19
25
|
|
20
26
|
let (>|>) f g = Fn.compose g f
|
21
27
|
|
@@ -42,7 +48,7 @@ let neighbouring_positions rows cols (r, c): (int * int) list =
|
|
42
48
|
let neighbours board rows cols (r,c) =
|
43
49
|
let cell = board.(r).(c) in
|
44
50
|
let positions = neighbouring_positions rows cols (r,c) in
|
45
|
-
List.filter positions ~f:(fun (r1,c1) -> cell
|
51
|
+
List.filter positions ~f:(fun (r1,c1) -> eq_cell cell board.(r1).(c1))
|
46
52
|
|
47
53
|
let search successors initial ~matches =
|
48
54
|
let rec go visited node =
|
@@ -61,20 +67,20 @@ let search successors initial ~matches =
|
|
61
67
|
end
|
62
68
|
else (false, visited)
|
63
69
|
in
|
64
|
-
Array.exists initial ~f:(go
|
70
|
+
Array.exists initial ~f:(go emptyIntIntSet >|> fst)
|
65
71
|
|
66
72
|
let connect board: player option =
|
67
73
|
let board = to_matrix board in
|
68
74
|
let rows = Array.length board in
|
69
75
|
let cols = Array.length board.(0) in
|
70
76
|
let search = search (neighbours board rows cols) in
|
71
|
-
let initials_x = Array.filter_mapi board ~f:(fun row cell -> if cell.(0)
|
72
|
-
if search initials_x ~matches:(fun (r,c) -> (c = cols - 1) && board.(r).(c)
|
77
|
+
let initials_x = Array.filter_mapi board ~f:(fun row cell -> if eq_cell cell.(0) X then Some (row, 0) else None) in
|
78
|
+
if search initials_x ~matches:(fun (r,c) -> (c = cols - 1) && eq_cell board.(r).(c) X)
|
73
79
|
then Some X
|
74
80
|
else
|
75
81
|
begin
|
76
|
-
let initials_o = Array.filter_mapi board.(0) ~f:(fun col cell -> if cell
|
77
|
-
if search initials_o ~matches:(fun (r,c) -> (r = rows - 1) && board.(r).(c)
|
82
|
+
let initials_o = Array.filter_mapi board.(0) ~f:(fun col cell -> if eq_cell cell O then Some (0, col) else None) in
|
83
|
+
if search initials_o ~matches:(fun (r,c) -> (r = rows - 1) && eq_cell board.(r).(c) O)
|
78
84
|
then Some O
|
79
85
|
else None
|
80
86
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
(* Test/exercise version: "2.1.0" *)
|
2
2
|
|
3
|
-
open
|
3
|
+
open Base
|
4
4
|
open OUnit2
|
5
5
|
open Dominoes
|
6
6
|
|
7
|
-
let print_dominoe (d1, d2) = sprintf "(%d,%d)" d1 d2
|
7
|
+
let print_dominoe (d1, d2) = Printf.sprintf "(%d,%d)" d1 d2
|
8
8
|
|
9
9
|
let dominoes_printer xs = "[" ^ String.concat ~sep:";" (List.map xs ~f:print_dominoe) ^ "]"
|
10
10
|
let option_printer = function
|
@@ -13,14 +13,19 @@ let option_printer = function
|
|
13
13
|
|
14
14
|
let rotate_1 xs = List.tl_exn xs @ [List.hd_exn xs]
|
15
15
|
|
16
|
+
let tuple_compare (x0, y0) (x1, y1) =
|
17
|
+
if x0 < x1 then (-1)
|
18
|
+
else if x0 > x1 then 1
|
19
|
+
else Int.compare y0 y1
|
20
|
+
|
16
21
|
let norm l =
|
17
22
|
let norm1 (x, y) = if x > y then (y, x) else (x, y) in
|
18
|
-
List.map ~f:norm1 l |> List.sort ~cmp:
|
23
|
+
List.map ~f:norm1 l |> List.sort ~cmp:tuple_compare
|
19
24
|
|
20
25
|
let check_chain (input: dominoe list) (chained: dominoe list) =
|
21
26
|
assert_equal (norm input) (norm chained) ~printer:dominoes_printer ~msg:"chain doesn't use the same dominoes as the input";
|
22
27
|
let assert_dominoes_match d1 d2 =
|
23
|
-
if snd d1 <> fst d2 then failwith @@ sprintf "%s and %s cannot be chained together" (print_dominoe d1) (print_dominoe d2) else () in
|
28
|
+
if snd d1 <> fst d2 then failwith @@ Printf.sprintf "%s and %s cannot be chained together" (print_dominoe d1) (print_dominoe d2) else () in
|
24
29
|
let consecutives = List.zip_exn chained (rotate_1 chained) in
|
25
30
|
List.iter consecutives ~f:(fun (d1, d2) -> assert_dominoes_match d1 d2)
|
26
31
|
|