trackler 2.2.1.104 → 2.2.1.105
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/.travis.yml +41 -1
- data/problem-specifications/README.md +5 -5
- data/problem-specifications/canonical-schema.json +11 -6
- data/problem-specifications/exercises/all-your-base/canonical-data.json +2 -2
- data/problem-specifications/exercises/circular-buffer/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/complex-numbers/canonical-data.json +9 -1
- data/problem-specifications/exercises/forth/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/grains/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/grep/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/house/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/isogram/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/list-ops/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/pov/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/scale-generator/canonical-data.json +181 -0
- data/problem-specifications/exercises/trinary/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/word-search/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/zipper/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/old-schema.json +137 -0
- data/tracks/bash/config.json +13 -1
- data/tracks/bash/exercises/scrabble-score/.meta/version +1 -0
- data/tracks/bash/exercises/scrabble-score/README.md +55 -0
- data/tracks/bash/exercises/scrabble-score/example.sh +14 -0
- data/tracks/bash/exercises/scrabble-score/scrabble_score_test.sh +89 -0
- data/tracks/c/config/exercise_readme.go.tmpl +31 -4
- data/tracks/c/exercises/all-your-base/README.md +0 -1
- data/tracks/c/exercises/beer-song/README.md +1 -1
- data/tracks/c/exercises/collatz-conjecture/README.md +1 -1
- data/tracks/c/exercises/complex-numbers/README.md +21 -18
- data/tracks/c/exercises/nucleotide-count/README.md +2 -2
- data/tracks/c/exercises/palindrome-products/README.md +5 -12
- data/tracks/c/exercises/pangram/test/test_pangram.c +11 -22
- data/tracks/c/exercises/pascals-triangle/README.md +1 -1
- data/tracks/c/exercises/phone-number/README.md +1 -1
- data/tracks/c/exercises/react/README.md +0 -1
- data/tracks/c/exercises/rna-transcription/README.md +2 -2
- data/tracks/c/exercises/sublist/README.md +0 -1
- data/tracks/c/exercises/sum-of-multiples/README.md +3 -6
- data/tracks/ceylon/config/exercise_readme.go.tmpl +15 -4
- data/tracks/ceylon/exercises/react/README.md +0 -1
- data/tracks/cfml/{docs/EXERCISE_README_INSERT.md → config/exercise-readme-insert.md} +0 -0
- data/tracks/cfml/exercises/acronym/AcronymTest.cfc +2 -6
- data/tracks/cfml/exercises/acronym/README.md +0 -1
- data/tracks/cfml/exercises/anagram/AnagramTest.cfc +0 -16
- data/tracks/cfml/exercises/atbash-cipher/README.md +2 -1
- data/tracks/cfml/exercises/bob/Bob.cfc +1 -1
- data/tracks/cfml/exercises/bob/BobTest.cfc +25 -25
- data/tracks/cfml/exercises/bob/README.md +2 -0
- data/tracks/cfml/exercises/bob/Solution.cfc +17 -5
- data/tracks/cfml/exercises/diamond/Diamond.cfc +1 -1
- data/tracks/cfml/exercises/diamond/DiamondTest.cfc +5 -5
- data/tracks/cfml/exercises/diamond/README.md +6 -6
- data/tracks/cfml/exercises/diamond/Solution.cfc +2 -2
- data/tracks/cfml/exercises/flatten-array/FlattenArray.cfc +1 -1
- data/tracks/cfml/exercises/flatten-array/FlattenArrayTest.cfc +6 -9
- data/tracks/cfml/exercises/flatten-array/README.md +1 -2
- data/tracks/cfml/exercises/flatten-array/Solution.cfc +2 -2
- data/tracks/cfml/exercises/gigasecond/Gigasecond.cfc +1 -1
- data/tracks/cfml/exercises/gigasecond/GigasecondTest.cfc +5 -5
- data/tracks/cfml/exercises/gigasecond/Solution.cfc +3 -3
- data/tracks/cfml/exercises/grains/README.md +0 -1
- data/tracks/cfml/exercises/grains/Solution.cfc +4 -1
- data/tracks/cfml/exercises/hamming/HammingTest.cfc +2 -2
- data/tracks/cfml/exercises/hello-world/HelloWorld.cfc +1 -1
- data/tracks/cfml/exercises/hello-world/HelloWorldTest.cfc +5 -4
- data/tracks/cfml/exercises/hello-world/Solution.cfc +1 -1
- data/tracks/cfml/exercises/isogram/IsogramTest.cfc +2 -2
- data/tracks/cfml/exercises/isogram/README.md +2 -1
- data/tracks/cfml/exercises/leap/Leap.cfc +1 -1
- data/tracks/cfml/exercises/leap/LeapTest.cfc +14 -22
- data/tracks/cfml/exercises/leap/README.md +1 -1
- data/tracks/cfml/exercises/leap/Solution.cfc +1 -1
- data/tracks/cfml/exercises/luhn/Luhn.cfc +1 -1
- data/tracks/cfml/exercises/luhn/LuhnTest.cfc +14 -14
- data/tracks/cfml/exercises/luhn/README.md +7 -7
- data/tracks/cfml/exercises/luhn/Solution.cfc +6 -6
- data/tracks/cfml/exercises/markdown/Markdown.cfc +4 -4
- data/tracks/cfml/exercises/markdown/MarkdownTest.cfc +9 -9
- data/tracks/cfml/exercises/markdown/Solution.cfc +4 -4
- data/tracks/cfml/exercises/nth-prime/NthPrime.cfc +1 -1
- data/tracks/cfml/exercises/nth-prime/NthPrimeTest.cfc +5 -5
- data/tracks/cfml/exercises/nth-prime/Solution.cfc +4 -4
- data/tracks/cfml/exercises/pangram/Pangram.cfc +1 -1
- data/tracks/cfml/exercises/pangram/PangramTest.cfc +14 -10
- data/tracks/cfml/exercises/pangram/README.md +1 -1
- data/tracks/cfml/exercises/pangram/Solution.cfc +4 -4
- data/tracks/cfml/exercises/pig-latin/PigLatin.cfc +1 -1
- data/tracks/cfml/exercises/pig-latin/PigLatinTest.cfc +35 -23
- data/tracks/cfml/exercises/pig-latin/Solution.cfc +4 -4
- data/tracks/cfml/exercises/rna-transcription/README.md +2 -2
- data/tracks/cfml/exercises/rna-transcription/RnaTranscriptionTest.cfc +0 -12
- data/tracks/cfml/exercises/saddle-points/README.md +2 -2
- data/tracks/cfml/exercises/saddle-points/SaddlePoints.cfc +1 -1
- data/tracks/cfml/exercises/saddle-points/SaddlePointsTest.cfc +5 -5
- data/tracks/cfml/exercises/saddle-points/Solution.cfc +10 -10
- data/tracks/cfml/exercises/scrabble-score/README.md +3 -1
- data/tracks/cfml/exercises/scrabble-score/ScrabbleScore.cfc +1 -1
- data/tracks/cfml/exercises/scrabble-score/ScrabbleScoreTest.cfc +11 -11
- data/tracks/cfml/exercises/scrabble-score/Solution.cfc +2 -2
- data/tracks/cfml/exercises/secret-handshake/README.md +2 -2
- data/tracks/cfml/exercises/secret-handshake/SecretHandshake.cfc +1 -1
- data/tracks/cfml/exercises/secret-handshake/SecretHandshakeTest.cfc +11 -11
- data/tracks/cfml/exercises/secret-handshake/Solution.cfc +6 -6
- data/tracks/cfml/exercises/space-age/README.md +1 -2
- data/tracks/cfml/exercises/sum-of-multiples/README.md +3 -6
- data/tracks/cfml/exercises/sum-of-multiples/SumOfMultiplesTest.cfc +4 -0
- data/tracks/cfml/exercises/triangle/README.md +9 -6
- data/tracks/cfml/exercises/word-count/README.md +1 -2
- data/tracks/cfml/exercises/word-count/Solution.cfc +2 -2
- data/tracks/cfml/exercises/word-count/WordCount.cfc +1 -1
- data/tracks/cfml/exercises/word-count/WordCountTest.cfc +14 -10
- data/tracks/cfml/tasks/GenerateReadme.cfc +2 -2
- data/tracks/cfml/tasks/GenerateTests.cfc +17 -4
- data/tracks/cfml/tasks/TestAllSolutions.cfc +3 -0
- data/tracks/common-lisp/config/exercise_readme.go.tmpl +46 -4
- data/tracks/common-lisp/exercises/acronym/README.md +1 -1
- data/tracks/common-lisp/exercises/beer-song/README.md +1 -1
- data/tracks/common-lisp/exercises/crypto-square/README.md +6 -4
- data/tracks/common-lisp/exercises/etl/README.md +2 -2
- data/tracks/common-lisp/exercises/isogram/README.md +3 -1
- data/tracks/common-lisp/exercises/meetup/README.md +16 -12
- data/tracks/common-lisp/exercises/nucleotide-count/README.md +2 -2
- data/tracks/common-lisp/exercises/pascals-triangle/README.md +1 -1
- data/tracks/common-lisp/exercises/phone-number/README.md +1 -1
- data/tracks/common-lisp/exercises/rna-transcription/README.md +2 -2
- data/tracks/common-lisp/exercises/space-age/README.md +1 -2
- data/tracks/common-lisp/exercises/sublist/README.md +2 -0
- data/tracks/crystal/config/exercise_readme.go.tmpl +22 -4
- data/tracks/crystal/exercises/acronym/README.md +0 -1
- data/tracks/crystal/exercises/atbash-cipher/README.md +2 -1
- data/tracks/crystal/exercises/binary/README.md +2 -0
- data/tracks/{php → crystal}/exercises/bob/.meta/description.md +0 -0
- data/tracks/crystal/exercises/flatten-array/README.md +1 -2
- data/tracks/crystal/exercises/forth/README.md +0 -1
- data/tracks/crystal/exercises/leap/README.md +1 -1
- data/tracks/crystal/exercises/pangram/README.md +1 -1
- data/tracks/crystal/exercises/pascals-triangle/README.md +2 -2
- data/tracks/crystal/exercises/react/README.md +0 -1
- data/tracks/crystal/exercises/rna-transcription/README.md +2 -2
- data/tracks/crystal/exercises/roman-numerals/README.md +1 -1
- data/tracks/crystal/exercises/run-length-encoding/README.md +4 -4
- data/tracks/csharp/config/exercise_readme.go.tmpl +0 -3
- data/tracks/csharp/exercises/accumulate/README.md +0 -3
- data/tracks/csharp/exercises/acronym/README.md +0 -3
- data/tracks/csharp/exercises/all-your-base/README.md +0 -3
- data/tracks/csharp/exercises/allergies/README.md +0 -3
- data/tracks/csharp/exercises/alphametics/README.md +0 -3
- data/tracks/csharp/exercises/anagram/README.md +0 -3
- data/tracks/csharp/exercises/armstrong-numbers/README.md +0 -3
- data/tracks/csharp/exercises/atbash-cipher/README.md +0 -3
- data/tracks/csharp/exercises/bank-account/README.md +0 -3
- data/tracks/csharp/exercises/beer-song/README.md +0 -3
- data/tracks/csharp/exercises/binary-search-tree/README.md +0 -3
- data/tracks/csharp/exercises/binary-search/README.md +0 -3
- data/tracks/csharp/exercises/binary/README.md +0 -3
- data/tracks/csharp/exercises/bob/README.md +0 -3
- data/tracks/csharp/exercises/book-store/README.md +0 -3
- data/tracks/csharp/exercises/bowling/README.md +0 -3
- data/tracks/csharp/exercises/bracket-push/README.md +0 -3
- data/tracks/csharp/exercises/change/README.md +0 -3
- data/tracks/csharp/exercises/circular-buffer/README.md +0 -3
- data/tracks/csharp/exercises/clock/README.md +0 -3
- data/tracks/csharp/exercises/collatz-conjecture/README.md +0 -3
- data/tracks/csharp/exercises/complex-numbers/README.md +0 -3
- data/tracks/csharp/exercises/connect/README.md +0 -3
- data/tracks/csharp/exercises/crypto-square/README.md +0 -3
- data/tracks/csharp/exercises/custom-set/README.md +0 -3
- data/tracks/csharp/exercises/diamond/README.md +0 -3
- data/tracks/csharp/exercises/difference-of-squares/README.md +0 -3
- data/tracks/csharp/exercises/diffie-hellman/README.md +0 -3
- data/tracks/csharp/exercises/dominoes/README.md +0 -3
- data/tracks/csharp/exercises/dot-dsl/README.md +0 -3
- data/tracks/csharp/exercises/error-handling/README.md +0 -3
- data/tracks/csharp/exercises/etl/README.md +0 -3
- data/tracks/csharp/exercises/flatten-array/README.md +0 -3
- data/tracks/csharp/exercises/food-chain/README.md +0 -3
- data/tracks/csharp/exercises/forth/README.md +0 -3
- data/tracks/csharp/exercises/gigasecond/README.md +0 -3
- data/tracks/csharp/exercises/go-counting/README.md +0 -3
- data/tracks/csharp/exercises/grade-school/README.md +0 -3
- data/tracks/csharp/exercises/grains/README.md +0 -3
- data/tracks/csharp/exercises/grep/README.md +0 -3
- data/tracks/csharp/exercises/hamming/README.md +0 -3
- data/tracks/csharp/exercises/hangman/README.md +0 -3
- data/tracks/csharp/exercises/hello-world/README.md +0 -3
- data/tracks/csharp/exercises/hexadecimal/README.md +0 -3
- data/tracks/csharp/exercises/house/README.md +0 -3
- data/tracks/csharp/exercises/isbn-verifier/README.md +0 -3
- data/tracks/csharp/exercises/isogram/README.md +0 -3
- data/tracks/csharp/exercises/kindergarten-garden/README.md +0 -3
- data/tracks/csharp/exercises/largest-series-product/README.md +0 -3
- data/tracks/csharp/exercises/leap/README.md +0 -3
- data/tracks/csharp/exercises/ledger/README.md +0 -3
- data/tracks/csharp/exercises/linked-list/README.md +0 -3
- data/tracks/csharp/exercises/list-ops/README.md +0 -3
- data/tracks/csharp/exercises/luhn/README.md +0 -3
- data/tracks/csharp/exercises/markdown/README.md +0 -3
- data/tracks/csharp/exercises/matrix/README.md +0 -3
- data/tracks/csharp/exercises/meetup/README.md +0 -3
- data/tracks/csharp/exercises/minesweeper/README.md +0 -3
- data/tracks/csharp/exercises/nth-prime/README.md +0 -3
- data/tracks/csharp/exercises/nucleotide-count/README.md +0 -3
- data/tracks/csharp/exercises/ocr-numbers/README.md +0 -3
- data/tracks/csharp/exercises/octal/README.md +0 -3
- data/tracks/csharp/exercises/palindrome-products/README.md +0 -3
- data/tracks/csharp/exercises/pangram/README.md +0 -3
- data/tracks/csharp/exercises/parallel-letter-frequency/README.md +0 -3
- data/tracks/csharp/exercises/pascals-triangle/README.md +0 -3
- data/tracks/csharp/exercises/perfect-numbers/README.md +0 -3
- data/tracks/csharp/exercises/phone-number/README.md +0 -3
- data/tracks/csharp/exercises/pig-latin/README.md +0 -3
- data/tracks/csharp/exercises/poker/README.md +0 -3
- data/tracks/csharp/exercises/pov/README.md +0 -3
- data/tracks/csharp/exercises/prime-factors/README.md +0 -3
- data/tracks/csharp/exercises/protein-translation/README.md +0 -3
- data/tracks/csharp/exercises/proverb/README.md +0 -3
- data/tracks/csharp/exercises/pythagorean-triplet/README.md +0 -3
- data/tracks/csharp/exercises/queen-attack/README.md +0 -3
- data/tracks/csharp/exercises/rail-fence-cipher/README.md +0 -3
- data/tracks/csharp/exercises/raindrops/README.md +0 -3
- data/tracks/csharp/exercises/react/README.md +0 -3
- data/tracks/csharp/exercises/rectangles/README.md +0 -3
- data/tracks/csharp/exercises/reverse-string/README.md +0 -3
- data/tracks/csharp/exercises/rna-transcription/README.md +0 -3
- data/tracks/csharp/exercises/robot-name/README.md +0 -3
- data/tracks/csharp/exercises/robot-simulator/README.md +0 -3
- data/tracks/csharp/exercises/roman-numerals/README.md +0 -3
- data/tracks/csharp/exercises/rotational-cipher/README.md +0 -3
- data/tracks/csharp/exercises/run-length-encoding/README.md +0 -3
- data/tracks/csharp/exercises/saddle-points/README.md +0 -3
- data/tracks/csharp/exercises/say/README.md +0 -3
- data/tracks/csharp/exercises/scale-generator/README.md +0 -3
- data/tracks/csharp/exercises/scrabble-score/README.md +0 -3
- data/tracks/csharp/exercises/secret-handshake/README.md +0 -3
- data/tracks/csharp/exercises/series/README.md +0 -3
- data/tracks/csharp/exercises/sgf-parsing/README.md +0 -3
- data/tracks/csharp/exercises/sieve/README.md +0 -3
- data/tracks/csharp/exercises/simple-cipher/README.md +0 -3
- data/tracks/csharp/exercises/simple-linked-list/README.md +0 -3
- data/tracks/csharp/exercises/space-age/README.md +0 -3
- data/tracks/csharp/exercises/spiral-matrix/README.md +0 -3
- data/tracks/csharp/exercises/strain/README.md +0 -3
- data/tracks/csharp/exercises/sublist/README.md +0 -3
- data/tracks/csharp/exercises/sum-of-multiples/README.md +0 -3
- data/tracks/csharp/exercises/tournament/README.md +0 -3
- data/tracks/csharp/exercises/transpose/README.md +0 -3
- data/tracks/csharp/exercises/tree-building/README.md +0 -3
- data/tracks/csharp/exercises/triangle/README.md +0 -3
- data/tracks/csharp/exercises/trinary/README.md +0 -3
- data/tracks/csharp/exercises/twelve-days/README.md +0 -3
- data/tracks/csharp/exercises/two-bucket/README.md +0 -3
- data/tracks/csharp/exercises/two-fer/README.md +0 -3
- data/tracks/csharp/exercises/variable-length-quantity/README.md +0 -3
- data/tracks/csharp/exercises/word-count/README.md +0 -3
- data/tracks/csharp/exercises/word-search/README.md +0 -3
- data/tracks/csharp/exercises/wordy/README.md +0 -3
- data/tracks/csharp/exercises/zebra-puzzle/README.md +0 -3
- data/tracks/csharp/exercises/zipper/README.md +0 -3
- data/tracks/dart/config/exercise_readme.go.tmpl +9 -4
- data/tracks/dart/exercises/anagram/README.md +0 -1
- data/tracks/dart/exercises/difference-of-squares/README.md +0 -1
- data/tracks/dart/exercises/gigasecond/README.md +0 -1
- data/tracks/dart/exercises/hamming/README.md +0 -1
- data/tracks/dart/exercises/hello-world/README.md +0 -1
- data/tracks/dart/exercises/leap/README.md +0 -1
- data/tracks/dart/exercises/phone-number/.meta/hints.md +24 -0
- data/tracks/dart/exercises/phone-number/README.md +17 -2
- data/tracks/dart/exercises/raindrops/README.md +0 -1
- data/tracks/dart/exercises/rna-transcription/README.md +2 -3
- data/tracks/dart/exercises/word-count/README.md +0 -1
- data/tracks/delphi/config/exercise_readme.go.tmpl +20 -4
- data/tracks/delphi/exercises/bank-account/README.md +0 -1
- data/tracks/delphi/exercises/minesweeper/README.md +0 -1
- data/tracks/delphi/exercises/two-fer/README.md +1 -1
- data/tracks/elixir/exercises/all-your-base/all-your-base-test.exs +1 -2
- data/tracks/elm/README.md +23 -20
- data/tracks/elm/bin/build.sh +1 -1
- data/tracks/elm/bin/install-elm-format +2 -2
- data/tracks/elm/exercises/accumulate/tests/Tests.elm +2 -2
- data/tracks/elm/exercises/all-your-base/AllYourBase.example.elm +10 -10
- data/tracks/elm/exercises/all-your-base/tests/Tests.elm +62 -42
- data/tracks/elm/exercises/allergies/Allergies.example.elm +1 -1
- data/tracks/elm/exercises/allergies/tests/Tests.elm +4 -4
- data/tracks/elm/exercises/anagram/Anagram.example.elm +2 -2
- data/tracks/elm/exercises/anagram/tests/Tests.elm +2 -2
- data/tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm +11 -11
- data/tracks/elm/exercises/atbash-cipher/tests/Tests.elm +2 -2
- data/tracks/elm/exercises/bob/Bob.example.elm +1 -1
- data/tracks/elm/exercises/bob/tests/Tests.elm +5 -5
- data/tracks/elm/exercises/collatz-conjecture/tests/Tests.elm +2 -2
- data/tracks/elm/exercises/difference-of-squares/DifferenceOfSquares.example.elm +1 -1
- data/tracks/elm/exercises/difference-of-squares/tests/Tests.elm +2 -2
- data/tracks/elm/exercises/gigasecond/tests/Tests.elm +2 -2
- data/tracks/elm/exercises/grade-school/GradeSchool.example.elm +2 -2
- data/tracks/elm/exercises/grade-school/tests/Tests.elm +3 -3
- data/tracks/elm/exercises/hamming/tests/Tests.elm +1 -1
- data/tracks/elm/exercises/hello-world/tests/Tests.elm +1 -1
- data/tracks/elm/exercises/isogram/Isogram.example.elm +7 -7
- data/tracks/elm/exercises/isogram/tests/Tests.elm +1 -1
- data/tracks/elm/exercises/largest-series-product/LargestSeriesProduct.example.elm +4 -4
- data/tracks/elm/exercises/largest-series-product/tests/Tests.elm +1 -1
- data/tracks/elm/exercises/leap/tests/Tests.elm +1 -1
- data/tracks/elm/exercises/list-ops/tests/Tests.elm +1 -1
- data/tracks/elm/exercises/nucleotide-count/NucleotideCount.elm +1 -1
- data/tracks/elm/exercises/nucleotide-count/tests/Tests.elm +1 -1
- data/tracks/elm/exercises/pangram/Pangram.example.elm +2 -2
- data/tracks/elm/exercises/pangram/tests/Tests.elm +1 -1
- data/tracks/elm/exercises/pascals-triangle/Triangle.example.elm +4 -4
- data/tracks/elm/exercises/phone-number/PhoneNumber.example.elm +3 -3
- data/tracks/elm/exercises/phone-number/tests/Tests.elm +1 -1
- data/tracks/elm/exercises/raindrops/Raindrops.example.elm +4 -4
- data/tracks/elm/exercises/raindrops/tests/Tests.elm +1 -1
- data/tracks/elm/exercises/rna-transcription/tests/Tests.elm +1 -7
- data/tracks/elm/exercises/robot-simulator/RobotSimulator.example.elm +5 -5
- data/tracks/elm/exercises/robot-simulator/tests/Tests.elm +65 -65
- data/tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm +1 -1
- data/tracks/elm/exercises/roman-numerals/tests/Tests.elm +19 -19
- data/tracks/elm/exercises/run-length-encoding/RunLengthEncoding.elm +1 -1
- data/tracks/elm/exercises/run-length-encoding/RunLengthEncoding.example.elm +2 -2
- data/tracks/elm/exercises/run-length-encoding/RunLengthEncodingPropertyChecks.elm +3 -3
- data/tracks/elm/exercises/run-length-encoding/tests/Tests.elm +2 -2
- data/tracks/elm/exercises/say/Say.example.elm +4 -4
- data/tracks/elm/exercises/say/tests/Tests.elm +2 -2
- data/tracks/elm/exercises/scrabble-score/ScrabbleScore.example.elm +16 -16
- data/tracks/elm/exercises/scrabble-score/tests/Tests.elm +1 -1
- data/tracks/elm/exercises/series/Series.example.elm +5 -5
- data/tracks/elm/exercises/series/tests/Tests.elm +2 -2
- data/tracks/elm/exercises/space-age/SpaceAge.elm +9 -8
- data/tracks/elm/exercises/space-age/SpaceAge.example.elm +3 -2
- data/tracks/elm/exercises/space-age/tests/Tests.elm +1 -1
- data/tracks/elm/exercises/strain/tests/Tests.elm +3 -3
- data/tracks/elm/exercises/sublist/Sublist.elm +1 -1
- data/tracks/elm/exercises/sublist/Sublist.example.elm +6 -6
- data/tracks/elm/exercises/sublist/tests/Tests.elm +2 -2
- data/tracks/elm/exercises/sum-of-multiples/tests/Tests.elm +1 -1
- data/tracks/elm/exercises/triangle/tests/Tests.elm +2 -2
- data/tracks/elm/exercises/word-count/WordCount.example.elm +2 -2
- data/tracks/elm/exercises/word-count/tests/Tests.elm +2 -2
- data/tracks/factor/config/exercise_readme.go.tmpl +12 -4
- data/tracks/factor/exercises/isogram/README.md +4 -3
- data/tracks/factor/exercises/leap/README.md +1 -1
- data/tracks/factor/exercises/two-fer/README.md +3 -32
- data/tracks/fsharp/config.json +10 -0
- data/tracks/fsharp/exercises/Exercises.sln +6 -0
- data/tracks/fsharp/exercises/rational-numbers/Example.fs +46 -0
- data/tracks/fsharp/exercises/rational-numbers/Program.fs +1 -0
- data/tracks/fsharp/exercises/rational-numbers/README.md +29 -0
- data/tracks/fsharp/exercises/rational-numbers/RationalNumbers.fs +19 -0
- data/tracks/fsharp/exercises/rational-numbers/RationalNumbers.fsproj +23 -0
- data/tracks/fsharp/exercises/rational-numbers/RationalNumbersTest.fs +153 -0
- data/tracks/fsharp/exercises/two-bucket/Example.fs +49 -57
- data/tracks/fsharp/exercises/two-bucket/TwoBucketTest.fs +40 -25
- data/tracks/fsharp/exercises/variable-length-quantity/Example.fs +21 -17
- data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantityTest.fs +85 -42
- data/tracks/fsharp/exercises/word-search/Example.fs +20 -14
- data/tracks/fsharp/exercises/word-search/WordSearch.fs +1 -1
- data/tracks/fsharp/exercises/word-search/WordSearchTest.fs +303 -48
- data/tracks/fsharp/generators/Formatting.fs +7 -2
- data/tracks/fsharp/generators/Generators.fs +97 -2
- data/tracks/fsharp/generators/Templates/_AssertEqualWithin.liquid +1 -0
- data/tracks/go/config.json +14 -0
- data/tracks/go/exercises/all-your-base/.meta/gen.go +2 -2
- data/tracks/go/exercises/all-your-base/cases_test.go +2 -2
- data/tracks/go/exercises/rectangles/.meta/gen.go +57 -0
- data/tracks/go/exercises/rectangles/README.md +85 -0
- data/tracks/go/exercises/rectangles/cases_test.go +134 -0
- data/tracks/go/exercises/rectangles/example.go +51 -0
- data/tracks/go/exercises/rectangles/rectangles_test.go +22 -0
- data/tracks/go/exercises/reverse-string/.meta/gen.go +4 -2
- data/tracks/go/exercises/reverse-string/cases_test.go +4 -2
- data/tracks/go/exercises/reverse-string/reverse_string_test.go +12 -1
- data/tracks/haskell/exercises/matrix/package.yaml +1 -1
- data/tracks/haskell/exercises/matrix/test/Tests.hs +1 -1
- data/tracks/java/config.json +12 -0
- data/tracks/java/config/exercise_readme.go.tmpl +10 -4
- data/tracks/java/exercises/all-your-base/README.md +0 -1
- data/tracks/java/exercises/alphametics/README.md +0 -1
- data/tracks/java/exercises/bank-account/README.md +0 -1
- data/tracks/java/exercises/complex-numbers/src/test/java/ComplexNumberTest.java +17 -15
- data/tracks/java/exercises/custom-set/README.md +0 -1
- data/tracks/java/exercises/diamond/.meta/version +1 -1
- data/tracks/java/exercises/diamond/src/test/java/DiamondPrinterTest.java +9 -11
- data/tracks/java/exercises/forth/README.md +0 -11
- data/tracks/java/exercises/list-ops/README.md +0 -1
- data/tracks/java/exercises/markdown/README.md +0 -1
- data/tracks/java/exercises/minesweeper/README.md +0 -1
- data/tracks/java/exercises/palindrome-products/.meta/src/reference/java/PalindromeCalculator.java +9 -0
- data/tracks/java/exercises/palindrome-products/.meta/version +1 -0
- data/tracks/java/exercises/palindrome-products/src/test/java/PalindromeCalculatorTest.java +110 -15
- data/tracks/java/exercises/parallel-letter-frequency/README.md +0 -1
- data/tracks/java/exercises/pig-latin/.meta/src/reference/java/PigLatinTranslator.java +16 -0
- data/tracks/java/exercises/pig-latin/.meta/version +1 -0
- data/tracks/java/exercises/pig-latin/src/test/java/PigLatinTranslatorTest.java +15 -1
- data/tracks/java/exercises/prime-factors/.meta/version +1 -1
- data/tracks/java/exercises/rational-numbers/.meta/src/reference/java/Rational.java +128 -0
- data/tracks/java/exercises/rational-numbers/.meta/version +1 -0
- data/tracks/java/exercises/rational-numbers/README.md +47 -0
- data/tracks/java/exercises/rational-numbers/build.gradle +17 -0
- data/tracks/java/exercises/rational-numbers/src/main/java/Rational.java +40 -0
- data/tracks/java/exercises/rational-numbers/src/test/java/RationalTest.java +288 -0
- data/tracks/java/exercises/rectangles/README.md +0 -1
- data/tracks/java/exercises/settings.gradle +1 -0
- data/tracks/java/exercises/sublist/README.md +0 -1
- data/tracks/java/exercises/tournament/README.md +0 -1
- data/tracks/java/exercises/two-fer/README.md +1 -1
- data/tracks/java/exercises/word-search/README.md +0 -1
- data/tracks/lua/config/exercise_readme.go.tmpl +9 -4
- data/tracks/lua/exercises/all-your-base/README.md +0 -1
- data/tracks/lua/exercises/alphametics/README.md +0 -1
- data/tracks/lua/exercises/bank-account/README.md +0 -1
- data/tracks/lua/exercises/custom-set/README.md +0 -1
- data/tracks/lua/exercises/isbn-verifier/README.md +1 -1
- data/tracks/lua/exercises/list-ops/README.md +0 -1
- data/tracks/lua/exercises/minesweeper/README.md +0 -1
- data/tracks/lua/exercises/protein-translation/README.md +2 -2
- data/tracks/lua/exercises/react/README.md +0 -1
- data/tracks/lua/exercises/rectangles/README.md +0 -1
- data/tracks/lua/exercises/reverse-string/README.md +1 -1
- data/tracks/lua/exercises/rna-transcription/README.md +1 -1
- data/tracks/lua/exercises/sublist/README.md +0 -1
- data/tracks/lua/exercises/tournament/README.md +0 -1
- data/tracks/lua/exercises/word-search/README.md +0 -1
- data/tracks/perl5/bin/exercise-gen.pl +4 -1
- data/tracks/perl5/exercises/bob/bob.t +9 -15
- data/tracks/perl5/exercises/bob/example.yaml +0 -4
- data/tracks/perl5/exercises/hello-world/example.yaml +0 -4
- data/tracks/perl5/exercises/hello-world/hello-world.t +9 -15
- data/tracks/perl5/exercises/leap/example.yaml +0 -4
- data/tracks/perl5/exercises/leap/leap.t +9 -15
- data/tracks/perl5/exercises/luhn/luhn.t +9 -13
- data/tracks/perl5/exercises/phone-number/phone-number.t +9 -13
- data/tracks/perl5/templates/test.mustache +10 -18
- data/tracks/perl6/bin/exercise-gen.pl6 +12 -2
- data/tracks/perl6/config/exercise_readme.go.tmpl +18 -4
- data/tracks/perl6/exercises/all-your-base/README.md +0 -1
- data/tracks/perl6/exercises/raindrops/.meta/exercise-data.yaml +2 -2
- data/tracks/perl6/exercises/raindrops/raindrops.t +57 -21
- data/tracks/perl6/exercises/two-fer/README.md +1 -1
- data/tracks/php/.travis.yml +1 -0
- data/tracks/php/exercises/bob/README.md +2 -0
- data/tracks/php/exercises/bob/bob_test.php +4 -1
- data/tracks/php/exercises/bob/example.php +4 -0
- data/tracks/php/exercises/connect/example.php +3 -4
- data/tracks/python/config.json +12 -12
- data/tracks/python/exercises/beer-song/beer_song.py +1 -5
- data/tracks/python/exercises/beer-song/beer_song_test.py +376 -57
- data/tracks/python/exercises/beer-song/example.py +18 -13
- data/tracks/r/config/exercise_readme.go.tmpl +9 -4
- data/tracks/r/exercises/allergies/README.md +0 -1
- data/tracks/r/exercises/beer-song/README.md +2 -2
- data/tracks/r/exercises/collatz-conjecture/README.md +1 -1
- data/tracks/r/exercises/diamond/README.md +6 -6
- data/tracks/r/exercises/grains/README.md +0 -1
- data/tracks/r/exercises/isogram/README.md +2 -1
- data/tracks/r/exercises/leap/README.md +1 -1
- data/tracks/r/exercises/luhn/README.md +7 -7
- data/tracks/r/exercises/nucleotide-count/README.md +8 -22
- data/tracks/r/exercises/pangram/README.md +1 -1
- data/tracks/r/exercises/pascals-triangle/README.md +2 -2
- data/tracks/r/exercises/perfect-numbers/README.md +2 -2
- data/tracks/r/exercises/phone-number/README.md +4 -3
- data/tracks/r/exercises/rna-transcription/README.md +2 -2
- data/tracks/r/exercises/rotational-cipher/README.md +2 -1
- data/tracks/r/exercises/scrabble-score/README.md +3 -1
- data/tracks/r/exercises/secret-handshake/README.md +2 -2
- data/tracks/r/exercises/space-age/README.md +1 -1
- data/tracks/r/exercises/sum-of-multiples/README.md +3 -6
- data/tracks/r/exercises/tournament/README.md +5 -6
- data/tracks/r/exercises/triangle/README.md +9 -6
- data/tracks/r/exercises/word-count/README.md +1 -2
- data/tracks/rust/.gitignore +1 -0
- data/tracks/rust/exercises/reverse-string/.meta/hints.md +3 -0
- data/tracks/rust/exercises/reverse-string/README.md +5 -0
- data/tracks/rust/exercises/reverse-string/tests/reverse-string.rs +7 -0
- data/tracks/scala/config/exercise_readme.go.tmpl +10 -4
- data/tracks/scala/exercises/accumulate/README.md +0 -3
- data/tracks/scala/exercises/acronym/README.md +0 -1
- data/tracks/scala/exercises/acronym/src/test/scala/AcronymTest.scala +6 -12
- data/tracks/scala/exercises/all-your-base/README.md +1 -2
- data/tracks/scala/exercises/all-your-base/example.scala +5 -4
- data/tracks/scala/exercises/all-your-base/src/test/scala/AllYourBaseTest.scala +26 -27
- data/tracks/scala/exercises/allergies/README.md +0 -1
- data/tracks/scala/exercises/allergies/src/test/scala/AllergiesTest.scala +1 -1
- data/tracks/scala/exercises/alphametics/README.md +2 -3
- data/tracks/scala/exercises/alphametics/example.scala +25 -25
- data/tracks/scala/exercises/alphametics/src/test/scala/AlphameticsTest.scala +58 -42
- data/tracks/scala/exercises/anagram/src/test/scala/AnagramTest.scala +4 -30
- data/tracks/scala/exercises/atbash-cipher/README.md +2 -1
- data/tracks/scala/exercises/atbash-cipher/src/test/scala/AtbashCipherTest.scala +18 -14
- data/tracks/scala/exercises/bank-account/README.md +0 -1
- data/tracks/scala/exercises/beer-song/README.md +2 -2
- data/tracks/scala/exercises/binary/README.md +2 -0
- data/tracks/scala/exercises/bob/example.scala +11 -0
- data/tracks/scala/exercises/bob/src/test/scala/BobTest.scala +3 -2
- data/tracks/scala/exercises/book-store/README.md +5 -5
- data/tracks/scala/exercises/bowling/README.md +20 -6
- data/tracks/scala/exercises/change/README.md +1 -1
- data/tracks/scala/exercises/collatz-conjecture/README.md +4 -3
- data/tracks/scala/exercises/connect/README.md +1 -2
- data/tracks/scala/exercises/crypto-square/README.md +10 -8
- data/tracks/scala/exercises/custom-set/README.md +0 -1
- data/tracks/scala/exercises/dominoes/README.md +3 -4
- data/tracks/scala/exercises/etl/README.md +3 -1
- data/tracks/scala/exercises/flatten-array/README.md +7 -8
- data/tracks/scala/exercises/food-chain/README.md +1 -1
- data/tracks/scala/exercises/forth/README.md +0 -1
- data/tracks/scala/exercises/grade-school/README.md +0 -1
- data/tracks/scala/exercises/grains/README.md +0 -1
- data/tracks/scala/exercises/house/README.md +2 -3
- data/tracks/scala/exercises/isogram/README.md +2 -1
- data/tracks/scala/exercises/kindergarten-garden/README.md +13 -13
- data/tracks/scala/exercises/leap/README.md +1 -1
- data/tracks/scala/exercises/lens-person/README.md +1 -2
- data/tracks/scala/exercises/linked-list/README.md +10 -10
- data/tracks/scala/exercises/luhn/README.md +7 -7
- data/tracks/scala/exercises/matrix/README.md +6 -4
- data/tracks/scala/exercises/meetup/README.md +16 -13
- data/tracks/scala/exercises/minesweeper/README.md +0 -1
- data/tracks/scala/exercises/nucleotide-count/README.md +8 -22
- data/tracks/scala/exercises/ocr-numbers/README.md +6 -6
- data/tracks/scala/exercises/octal/README.md +6 -2
- data/tracks/scala/exercises/palindrome-products/README.md +15 -16
- data/tracks/scala/exercises/pangram/README.md +1 -1
- data/tracks/scala/exercises/parallel-letter-frequency/README.md +0 -1
- data/tracks/scala/exercises/pascals-triangle/README.md +2 -2
- data/tracks/scala/exercises/perfect-numbers/README.md +2 -2
- data/tracks/scala/exercises/phone-number/README.md +4 -3
- data/tracks/scala/exercises/protein-translation/README.md +5 -6
- data/tracks/scala/exercises/pythagorean-triplet/README.md +3 -3
- data/tracks/scala/exercises/queen-attack/README.md +1 -1
- data/tracks/scala/exercises/rail-fence-cipher/README.md +12 -7
- data/tracks/scala/exercises/rna-transcription/README.md +2 -2
- data/tracks/scala/exercises/roman-numerals/README.md +1 -1
- data/tracks/scala/exercises/run-length-encoding/README.md +4 -4
- data/tracks/scala/exercises/saddle-points/README.md +2 -2
- data/tracks/scala/exercises/scrabble-score/README.md +3 -1
- data/tracks/scala/exercises/secret-handshake/README.md +2 -2
- data/tracks/scala/exercises/sgf-parsing/README.md +4 -5
- data/tracks/scala/exercises/simple-cipher/README.md +5 -7
- data/tracks/scala/exercises/space-age/README.md +1 -1
- data/tracks/scala/exercises/spiral-matrix/README.md +2 -2
- data/tracks/scala/exercises/sublist/README.md +0 -1
- data/tracks/scala/exercises/sum-of-multiples/README.md +3 -6
- data/tracks/scala/exercises/triangle/README.md +9 -6
- data/tracks/scala/exercises/trinary/README.md +1 -1
- data/tracks/scala/exercises/variable-length-quantity/README.md +6 -7
- data/tracks/scala/exercises/word-count/README.md +1 -2
- data/tracks/scala/exercises/wordy/README.md +0 -5
- data/tracks/scala/exercises/zipper/README.md +1 -2
- data/tracks/scala/testgen/src/main/scala/AcronymTestGenerator.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/AllYourBaseTestGenerator.scala +3 -5
- data/tracks/scala/testgen/src/main/scala/AllergiesTestGenerator.scala +8 -5
- data/tracks/scala/testgen/src/main/scala/{AlphametricsTestGenerator.scala → AlphameticsTestGenerator.scala} +5 -5
- data/tracks/scala/testgen/src/main/scala/AnagramTestGenerator.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/AtbashCipherTestGenerator.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/BobTestGenerator.scala +4 -3
- data/tracks/scala/testgen/src/main/scala/testgen/TestSuiteBuilder.scala +35 -0
- data/tracks/sml/config/exercise_readme.go.tmpl +29 -4
- data/tracks/sml/exercises/accumulate/README.md +2 -2
- data/tracks/sml/exercises/all-your-base/README.md +13 -10
- data/tracks/sml/exercises/atbash-cipher/README.md +2 -1
- data/tracks/sml/exercises/collatz-conjecture/README.md +1 -1
- data/tracks/sml/exercises/diamond/README.md +6 -6
- data/tracks/sml/exercises/leap/README.md +1 -1
- data/tracks/sml/exercises/list-ops/README.md +0 -1
- data/tracks/sml/exercises/nth-prime/README.md +1 -1
- data/tracks/sml/exercises/pangram/README.md +1 -1
- data/tracks/sml/exercises/perfect-numbers/README.md +2 -2
- data/tracks/sml/exercises/phone-number/README.md +4 -3
- data/tracks/sml/exercises/rna-transcription/README.md +2 -2
- data/tracks/sml/exercises/roman-numerals/README.md +1 -1
- data/tracks/sml/exercises/sum-of-multiples/README.md +3 -6
- data/tracks/sml/exercises/two-fer/README.md +2 -31
- data/tracks/vimscript/config/exercise_readme.go.tmpl +8 -4
- data/tracks/vimscript/exercises/allergies/README.md +0 -1
- data/tracks/vimscript/exercises/atbash-cipher/README.md +2 -1
- data/tracks/vimscript/exercises/beer-song/README.md +2 -2
- data/tracks/vimscript/exercises/etl/README.md +3 -1
- data/tracks/vimscript/exercises/leap/README.md +1 -1
- data/tracks/vimscript/exercises/nucleotide-count/README.md +8 -22
- data/tracks/vimscript/exercises/pangram/README.md +1 -1
- data/tracks/vimscript/exercises/phone-number/README.md +4 -3
- data/tracks/vimscript/exercises/rna-transcription/README.md +2 -2
- data/tracks/vimscript/exercises/roman-numerals/README.md +1 -1
- data/tracks/vimscript/exercises/scrabble-score/README.md +3 -1
- data/tracks/vimscript/exercises/triangle/README.md +9 -6
- data/tracks/vimscript/exercises/word-count/README.md +1 -2
- metadata +44 -78
- data/tracks/c/docs/EXERCISE_README_INSERT.md +0 -30
- data/tracks/ceylon/config/exercise-readme-insert.md +0 -1
- data/tracks/common-lisp/docs/EXERCISE_README_INSERT.md +0 -45
- data/tracks/crystal/docs/EXERCISE_README_INSERT.md +0 -21
- data/tracks/dart/docs/EXERCISE_README_INSERT.md +0 -8
- data/tracks/delphi/docs/EXERCISE_README_INSERT.md +0 -19
- data/tracks/factor/docs/EXERCISE_README_INSERT.md +0 -12
- data/tracks/java/config/exercise-readme-insert.md +0 -9
- data/tracks/lua/docs/EXERCISE_README_INSERT.md +0 -8
- data/tracks/perl6/docs/EXERCISE_README_INSERT.md +0 -17
- data/tracks/r/docs/EXERCISE_README_INSERT.md +0 -8
- data/tracks/rust/exercises/binary-search/Cargo.lock +0 -4
- data/tracks/rust/exercises/collatz-conjecture/Cargo.lock +0 -4
- data/tracks/rust/exercises/isbn-verifier/Cargo.lock +0 -4
- data/tracks/rust/exercises/two-bucket/Cargo.lock +0 -4
- data/tracks/scala/docs/EXERCISE_README_INSERT.md +0 -9
- data/tracks/scala/exercises/bob/.meta/description.md +0 -10
- data/tracks/sml/docs/EXERCISE_README_INSERT.md +0 -28
- data/tracks/vimscript/docs/EXERCISE_README_INSERT.md +0 -7
@@ -1,75 +1,330 @@
|
|
1
|
-
// This file was
|
1
|
+
// This file was auto-generated based on version 1.1.0 of the canonical data.
|
2
2
|
|
3
3
|
module WordSearchTest
|
4
4
|
|
5
|
-
open Xunit
|
6
5
|
open FsUnit.Xunit
|
6
|
+
open Xunit
|
7
7
|
|
8
8
|
open WordSearch
|
9
9
|
|
10
|
-
let puzzle =
|
11
|
-
["jefblpepre";
|
12
|
-
"camdcimgtc";
|
13
|
-
"oivokprjsm";
|
14
|
-
"pbwasqroua";
|
15
|
-
"rixilelhrs";
|
16
|
-
"wolcqlirpc";
|
17
|
-
"screeaumgr";
|
18
|
-
"alxhpburyi";
|
19
|
-
"jalaycalmp";
|
20
|
-
"clojurermt"]
|
21
|
-
|
22
10
|
[<Fact>]
|
23
|
-
let ``Should
|
24
|
-
let
|
25
|
-
|
11
|
+
let ``Should accept an initial game grid and a target search word`` () =
|
12
|
+
let grid = ["jefblpepre"]
|
13
|
+
let wordsToSearchFor = ["clojure"]
|
14
|
+
let expected = [("clojure", Option<((int * int) * (int * int))>.None)] |> Map.ofList
|
15
|
+
search grid wordsToSearchFor |> should equal expected
|
16
|
+
|
17
|
+
[<Fact(Skip = "Remove to run test")>]
|
18
|
+
let ``Should locate one word written left to right`` () =
|
19
|
+
let grid = ["clojurermt"]
|
20
|
+
let wordsToSearchFor = ["clojure"]
|
21
|
+
let expected = [("clojure", Some (((1, 1), (7, 1))))] |> Map.ofList
|
22
|
+
search grid wordsToSearchFor |> should equal expected
|
23
|
+
|
24
|
+
[<Fact(Skip = "Remove to run test")>]
|
25
|
+
let ``Should locate the same word written left to right in a different position`` () =
|
26
|
+
let grid = ["mtclojurer"]
|
27
|
+
let wordsToSearchFor = ["clojure"]
|
28
|
+
let expected = [("clojure", Some (((3, 1), (9, 1))))] |> Map.ofList
|
29
|
+
search grid wordsToSearchFor |> should equal expected
|
30
|
+
|
31
|
+
[<Fact(Skip = "Remove to run test")>]
|
32
|
+
let ``Should locate a different left to right word`` () =
|
33
|
+
let grid = ["coffeelplx"]
|
34
|
+
let wordsToSearchFor = ["coffee"]
|
35
|
+
let expected = [("coffee", Some (((1, 1), (6, 1))))] |> Map.ofList
|
36
|
+
search grid wordsToSearchFor |> should equal expected
|
37
|
+
|
38
|
+
[<Fact(Skip = "Remove to run test")>]
|
39
|
+
let ``Should locate that different left to right word in a different position`` () =
|
40
|
+
let grid = ["xcoffeezlp"]
|
41
|
+
let wordsToSearchFor = ["coffee"]
|
42
|
+
let expected = [("coffee", Some (((2, 1), (7, 1))))] |> Map.ofList
|
43
|
+
search grid wordsToSearchFor |> should equal expected
|
44
|
+
|
45
|
+
[<Fact(Skip = "Remove to run test")>]
|
46
|
+
let ``Should locate a left to right word in two line grid`` () =
|
47
|
+
let grid =
|
48
|
+
[ "jefblpepre";
|
49
|
+
"tclojurerm" ]
|
50
|
+
let wordsToSearchFor = ["clojure"]
|
51
|
+
let expected = [("clojure", Some (((2, 2), (8, 2))))] |> Map.ofList
|
52
|
+
search grid wordsToSearchFor |> should equal expected
|
53
|
+
|
54
|
+
[<Fact(Skip = "Remove to run test")>]
|
55
|
+
let ``Should locate a left to right word in three line grid`` () =
|
56
|
+
let grid =
|
57
|
+
[ "camdcimgtc";
|
58
|
+
"jefblpepre";
|
59
|
+
"clojurermt" ]
|
60
|
+
let wordsToSearchFor = ["clojure"]
|
61
|
+
let expected = [("clojure", Some (((1, 3), (7, 3))))] |> Map.ofList
|
62
|
+
search grid wordsToSearchFor |> should equal expected
|
63
|
+
|
64
|
+
[<Fact(Skip = "Remove to run test")>]
|
65
|
+
let ``Should locate a left to right word in ten line grid`` () =
|
66
|
+
let grid =
|
67
|
+
[ "jefblpepre";
|
68
|
+
"camdcimgtc";
|
69
|
+
"oivokprjsm";
|
70
|
+
"pbwasqroua";
|
71
|
+
"rixilelhrs";
|
72
|
+
"wolcqlirpc";
|
73
|
+
"screeaumgr";
|
74
|
+
"alxhpburyi";
|
75
|
+
"jalaycalmp";
|
76
|
+
"clojurermt" ]
|
77
|
+
let wordsToSearchFor = ["clojure"]
|
78
|
+
let expected = [("clojure", Some (((1, 10), (7, 10))))] |> Map.ofList
|
79
|
+
search grid wordsToSearchFor |> should equal expected
|
80
|
+
|
81
|
+
[<Fact(Skip = "Remove to run test")>]
|
82
|
+
let ``Should locate that left to right word in a different position in a ten line grid`` () =
|
83
|
+
let grid =
|
84
|
+
[ "jefblpepre";
|
85
|
+
"camdcimgtc";
|
86
|
+
"oivokprjsm";
|
87
|
+
"pbwasqroua";
|
88
|
+
"rixilelhrs";
|
89
|
+
"wolcqlirpc";
|
90
|
+
"screeaumgr";
|
91
|
+
"alxhpburyi";
|
92
|
+
"clojurermt";
|
93
|
+
"jalaycalmp" ]
|
94
|
+
let wordsToSearchFor = ["clojure"]
|
95
|
+
let expected = [("clojure", Some (((1, 9), (7, 9))))] |> Map.ofList
|
96
|
+
search grid wordsToSearchFor |> should equal expected
|
97
|
+
|
98
|
+
[<Fact(Skip = "Remove to run test")>]
|
99
|
+
let ``Should locate a different left to right word in a ten line grid`` () =
|
100
|
+
let grid =
|
101
|
+
[ "jefblpepre";
|
102
|
+
"camdcimgtc";
|
103
|
+
"oivokprjsm";
|
104
|
+
"pbwasqroua";
|
105
|
+
"rixilelhrs";
|
106
|
+
"wolcqlirpc";
|
107
|
+
"fortranftw";
|
108
|
+
"alxhpburyi";
|
109
|
+
"clojurermt";
|
110
|
+
"jalaycalmp" ]
|
111
|
+
let wordsToSearchFor = ["fortran"]
|
112
|
+
let expected = [("fortran", Some (((1, 7), (7, 7))))] |> Map.ofList
|
113
|
+
search grid wordsToSearchFor |> should equal expected
|
114
|
+
|
115
|
+
[<Fact(Skip = "Remove to run test")>]
|
116
|
+
let ``Should locate multiple words`` () =
|
117
|
+
let grid =
|
118
|
+
[ "jefblpepre";
|
119
|
+
"camdcimgtc";
|
120
|
+
"oivokprjsm";
|
121
|
+
"pbwasqroua";
|
122
|
+
"rixilelhrs";
|
123
|
+
"wolcqlirpc";
|
124
|
+
"fortranftw";
|
125
|
+
"alxhpburyi";
|
126
|
+
"jalaycalmp";
|
127
|
+
"clojurermt" ]
|
128
|
+
let wordsToSearchFor = ["fortran"; "clojure"]
|
129
|
+
let expected =
|
130
|
+
[ ("clojure", Some (((1, 10), (7, 10))));
|
131
|
+
("fortran", Some (((1, 7), (7, 7)))) ]
|
132
|
+
|> Map.ofList
|
133
|
+
search grid wordsToSearchFor |> should equal expected
|
26
134
|
|
27
135
|
[<Fact(Skip = "Remove to run test")>]
|
28
|
-
let ``Should
|
29
|
-
let
|
30
|
-
|
136
|
+
let ``Should locate a single word written right to left`` () =
|
137
|
+
let grid = ["rixilelhrs"]
|
138
|
+
let wordsToSearchFor = ["elixir"]
|
139
|
+
let expected = [("elixir", Some (((6, 1), (1, 1))))] |> Map.ofList
|
140
|
+
search grid wordsToSearchFor |> should equal expected
|
31
141
|
|
32
142
|
[<Fact(Skip = "Remove to run test")>]
|
33
|
-
let ``Should
|
34
|
-
let
|
35
|
-
|
143
|
+
let ``Should locate multiple words written in different horizontal directions`` () =
|
144
|
+
let grid =
|
145
|
+
[ "jefblpepre";
|
146
|
+
"camdcimgtc";
|
147
|
+
"oivokprjsm";
|
148
|
+
"pbwasqroua";
|
149
|
+
"rixilelhrs";
|
150
|
+
"wolcqlirpc";
|
151
|
+
"screeaumgr";
|
152
|
+
"alxhpburyi";
|
153
|
+
"jalaycalmp";
|
154
|
+
"clojurermt" ]
|
155
|
+
let wordsToSearchFor = ["elixir"; "clojure"]
|
156
|
+
let expected =
|
157
|
+
[ ("clojure", Some (((1, 10), (7, 10))));
|
158
|
+
("elixir", Some (((6, 5), (1, 5)))) ]
|
159
|
+
|> Map.ofList
|
160
|
+
search grid wordsToSearchFor |> should equal expected
|
36
161
|
|
37
162
|
[<Fact(Skip = "Remove to run test")>]
|
38
|
-
let ``Should
|
39
|
-
let
|
40
|
-
|
163
|
+
let ``Should locate words written top to bottom`` () =
|
164
|
+
let grid =
|
165
|
+
[ "jefblpepre";
|
166
|
+
"camdcimgtc";
|
167
|
+
"oivokprjsm";
|
168
|
+
"pbwasqroua";
|
169
|
+
"rixilelhrs";
|
170
|
+
"wolcqlirpc";
|
171
|
+
"screeaumgr";
|
172
|
+
"alxhpburyi";
|
173
|
+
"jalaycalmp";
|
174
|
+
"clojurermt" ]
|
175
|
+
let wordsToSearchFor = ["clojure"; "elixir"; "ecmascript"]
|
176
|
+
let expected =
|
177
|
+
[ ("clojure", Some (((1, 10), (7, 10))));
|
178
|
+
("elixir", Some (((6, 5), (1, 5))));
|
179
|
+
("ecmascript", Some (((10, 1), (10, 10)))) ]
|
180
|
+
|> Map.ofList
|
181
|
+
search grid wordsToSearchFor |> should equal expected
|
41
182
|
|
42
183
|
[<Fact(Skip = "Remove to run test")>]
|
43
|
-
let ``Should
|
44
|
-
let
|
45
|
-
|
184
|
+
let ``Should locate words written bottom to top`` () =
|
185
|
+
let grid =
|
186
|
+
[ "jefblpepre";
|
187
|
+
"camdcimgtc";
|
188
|
+
"oivokprjsm";
|
189
|
+
"pbwasqroua";
|
190
|
+
"rixilelhrs";
|
191
|
+
"wolcqlirpc";
|
192
|
+
"screeaumgr";
|
193
|
+
"alxhpburyi";
|
194
|
+
"jalaycalmp";
|
195
|
+
"clojurermt" ]
|
196
|
+
let wordsToSearchFor = ["clojure"; "elixir"; "ecmascript"; "rust"]
|
197
|
+
let expected =
|
198
|
+
[ ("clojure", Some (((1, 10), (7, 10))));
|
199
|
+
("elixir", Some (((6, 5), (1, 5))));
|
200
|
+
("ecmascript", Some (((10, 1), (10, 10))));
|
201
|
+
("rust", Some (((9, 5), (9, 2)))) ]
|
202
|
+
|> Map.ofList
|
203
|
+
search grid wordsToSearchFor |> should equal expected
|
46
204
|
|
47
205
|
[<Fact(Skip = "Remove to run test")>]
|
48
|
-
let ``Should
|
49
|
-
let
|
50
|
-
|
206
|
+
let ``Should locate words written top left to bottom right`` () =
|
207
|
+
let grid =
|
208
|
+
[ "jefblpepre";
|
209
|
+
"camdcimgtc";
|
210
|
+
"oivokprjsm";
|
211
|
+
"pbwasqroua";
|
212
|
+
"rixilelhrs";
|
213
|
+
"wolcqlirpc";
|
214
|
+
"screeaumgr";
|
215
|
+
"alxhpburyi";
|
216
|
+
"jalaycalmp";
|
217
|
+
"clojurermt" ]
|
218
|
+
let wordsToSearchFor = ["clojure"; "elixir"; "ecmascript"; "rust"; "java"]
|
219
|
+
let expected =
|
220
|
+
[ ("clojure", Some (((1, 10), (7, 10))));
|
221
|
+
("elixir", Some (((6, 5), (1, 5))));
|
222
|
+
("ecmascript", Some (((10, 1), (10, 10))));
|
223
|
+
("rust", Some (((9, 5), (9, 2))));
|
224
|
+
("java", Some (((1, 1), (4, 4)))) ]
|
225
|
+
|> Map.ofList
|
226
|
+
search grid wordsToSearchFor |> should equal expected
|
51
227
|
|
52
228
|
[<Fact(Skip = "Remove to run test")>]
|
53
|
-
let ``Should
|
54
|
-
let
|
55
|
-
|
229
|
+
let ``Should locate words written bottom right to top left`` () =
|
230
|
+
let grid =
|
231
|
+
[ "jefblpepre";
|
232
|
+
"camdcimgtc";
|
233
|
+
"oivokprjsm";
|
234
|
+
"pbwasqroua";
|
235
|
+
"rixilelhrs";
|
236
|
+
"wolcqlirpc";
|
237
|
+
"screeaumgr";
|
238
|
+
"alxhpburyi";
|
239
|
+
"jalaycalmp";
|
240
|
+
"clojurermt" ]
|
241
|
+
let wordsToSearchFor = ["clojure"; "elixir"; "ecmascript"; "rust"; "java"; "lua"]
|
242
|
+
let expected =
|
243
|
+
[ ("clojure", Some (((1, 10), (7, 10))));
|
244
|
+
("elixir", Some (((6, 5), (1, 5))));
|
245
|
+
("ecmascript", Some (((10, 1), (10, 10))));
|
246
|
+
("rust", Some (((9, 5), (9, 2))));
|
247
|
+
("java", Some (((1, 1), (4, 4))));
|
248
|
+
("lua", Some (((8, 9), (6, 7)))) ]
|
249
|
+
|> Map.ofList
|
250
|
+
search grid wordsToSearchFor |> should equal expected
|
56
251
|
|
57
252
|
[<Fact(Skip = "Remove to run test")>]
|
58
|
-
let ``Should
|
59
|
-
let
|
60
|
-
|
253
|
+
let ``Should locate words written bottom left to top right`` () =
|
254
|
+
let grid =
|
255
|
+
[ "jefblpepre";
|
256
|
+
"camdcimgtc";
|
257
|
+
"oivokprjsm";
|
258
|
+
"pbwasqroua";
|
259
|
+
"rixilelhrs";
|
260
|
+
"wolcqlirpc";
|
261
|
+
"screeaumgr";
|
262
|
+
"alxhpburyi";
|
263
|
+
"jalaycalmp";
|
264
|
+
"clojurermt" ]
|
265
|
+
let wordsToSearchFor = ["clojure"; "elixir"; "ecmascript"; "rust"; "java"; "lua"; "lisp"]
|
266
|
+
let expected =
|
267
|
+
[ ("clojure", Some (((1, 10), (7, 10))));
|
268
|
+
("elixir", Some (((6, 5), (1, 5))));
|
269
|
+
("ecmascript", Some (((10, 1), (10, 10))));
|
270
|
+
("rust", Some (((9, 5), (9, 2))));
|
271
|
+
("java", Some (((1, 1), (4, 4))));
|
272
|
+
("lua", Some (((8, 9), (6, 7))));
|
273
|
+
("lisp", Some (((3, 6), (6, 3)))) ]
|
274
|
+
|> Map.ofList
|
275
|
+
search grid wordsToSearchFor |> should equal expected
|
61
276
|
|
62
277
|
[<Fact(Skip = "Remove to run test")>]
|
63
|
-
let ``Should
|
64
|
-
let
|
65
|
-
|
278
|
+
let ``Should locate words written top right to bottom left`` () =
|
279
|
+
let grid =
|
280
|
+
[ "jefblpepre";
|
281
|
+
"camdcimgtc";
|
282
|
+
"oivokprjsm";
|
283
|
+
"pbwasqroua";
|
284
|
+
"rixilelhrs";
|
285
|
+
"wolcqlirpc";
|
286
|
+
"screeaumgr";
|
287
|
+
"alxhpburyi";
|
288
|
+
"jalaycalmp";
|
289
|
+
"clojurermt" ]
|
290
|
+
let wordsToSearchFor = ["clojure"; "elixir"; "ecmascript"; "rust"; "java"; "lua"; "lisp"; "ruby"]
|
291
|
+
let expected =
|
292
|
+
[ ("clojure", Some (((1, 10), (7, 10))));
|
293
|
+
("elixir", Some (((6, 5), (1, 5))));
|
294
|
+
("ecmascript", Some (((10, 1), (10, 10))));
|
295
|
+
("rust", Some (((9, 5), (9, 2))));
|
296
|
+
("java", Some (((1, 1), (4, 4))));
|
297
|
+
("lua", Some (((8, 9), (6, 7))));
|
298
|
+
("lisp", Some (((3, 6), (6, 3))));
|
299
|
+
("ruby", Some (((8, 6), (5, 9)))) ]
|
300
|
+
|> Map.ofList
|
301
|
+
search grid wordsToSearchFor |> should equal expected
|
66
302
|
|
67
303
|
[<Fact(Skip = "Remove to run test")>]
|
68
|
-
let ``Should
|
69
|
-
let
|
70
|
-
["
|
71
|
-
|
72
|
-
|
304
|
+
let ``Should fail to locate a word that is not in the puzzle`` () =
|
305
|
+
let grid =
|
306
|
+
[ "jefblpepre";
|
307
|
+
"camdcimgtc";
|
308
|
+
"oivokprjsm";
|
309
|
+
"pbwasqroua";
|
310
|
+
"rixilelhrs";
|
311
|
+
"wolcqlirpc";
|
312
|
+
"screeaumgr";
|
313
|
+
"alxhpburyi";
|
314
|
+
"jalaycalmp";
|
315
|
+
"clojurermt" ]
|
316
|
+
let wordsToSearchFor = ["clojure"; "elixir"; "ecmascript"; "rust"; "java"; "lua"; "lisp"; "ruby";
|
317
|
+
"haskell"]
|
318
|
+
let expected =
|
319
|
+
[ ("clojure", Some (((1, 10), (7, 10))));
|
320
|
+
("elixir", Some (((6, 5), (1, 5))));
|
321
|
+
("ecmascript", Some (((10, 1), (10, 10))));
|
322
|
+
("rust", Some (((9, 5), (9, 2))));
|
323
|
+
("java", Some (((1, 1), (4, 4))));
|
324
|
+
("lua", Some (((8, 9), (6, 7))));
|
325
|
+
("lisp", Some (((3, 6), (6, 3))));
|
326
|
+
("ruby", Some (((8, 6), (5, 9))));
|
327
|
+
("haskell", Option<((int * int) * (int * int))>.None) ]
|
328
|
+
|> Map.ofList
|
329
|
+
search grid wordsToSearchFor |> should equal expected
|
73
330
|
|
74
|
-
let actual = find differentSizePuzzle "exercism"
|
75
|
-
actual |> should equal <| Some ((11, 2), (4, 2))
|
@@ -44,6 +44,8 @@ let formatDateTime (dateTime: DateTime) =
|
|
44
44
|
let formatTimeSpan (timeSpan: TimeSpan) =
|
45
45
|
sprintf "TimeSpan(%d, %d, %d)" timeSpan.Hours timeSpan.Minutes timeSpan.Seconds
|
46
46
|
|
47
|
+
let isInt (jToken: JToken) = jToken.Value<int64>() <= int64 Int32.MaxValue
|
48
|
+
|
47
49
|
let rec normalizeJArray (jArray: JArray): obj list =
|
48
50
|
let toBoxedList seq =
|
49
51
|
seq
|
@@ -52,8 +54,10 @@ let rec normalizeJArray (jArray: JArray): obj list =
|
|
52
54
|
|
53
55
|
if jArray.Count = 0 then
|
54
56
|
[]
|
55
|
-
else if jArray.Children() |> Seq.forall (fun x -> x.Type = JTokenType.Integer) then
|
57
|
+
else if jArray.Children() |> Seq.forall (fun x -> x.Type = JTokenType.Integer && isInt x) then
|
56
58
|
jArray.Values<int>() |> toBoxedList
|
59
|
+
else if jArray.Children() |> Seq.forall (fun x -> x.Type = JTokenType.Integer) then
|
60
|
+
jArray.Values<int64>() |> toBoxedList
|
57
61
|
else if jArray.Children() |> Seq.forall (fun x -> x.Type = JTokenType.Float) then
|
58
62
|
jArray.Values<float>() |> toBoxedList
|
59
63
|
else if jArray.Children() |> Seq.forall (fun x -> x.Type = JTokenType.Boolean) then
|
@@ -73,7 +77,8 @@ let rec normalizeJArray (jArray: JArray): obj list =
|
|
73
77
|
|
74
78
|
let formatToken (jToken: JToken) =
|
75
79
|
match jToken.Type with
|
76
|
-
| JTokenType.Integer
|
80
|
+
| JTokenType.Integer when isInt jToken -> jToken.ToObject<int>() |> string
|
81
|
+
| JTokenType.Integer -> jToken.ToObject<int64>() |> string
|
77
82
|
| JTokenType.Float -> jToken.ToObject<float>() |> string
|
78
83
|
| JTokenType.Boolean -> jToken.ToObject<bool>() |> formatBool
|
79
84
|
| JTokenType.String -> jToken.ToObject<string>() |> formatString
|
@@ -292,7 +292,7 @@ type ComplexNumbers() =
|
|
292
292
|
| :? JArray as jArray ->
|
293
293
|
let renderAssertion testedFunction expected =
|
294
294
|
{ Sut = sprintf "%s sut" testedFunction; Expected = expected }
|
295
|
-
|>
|
295
|
+
|> renderPartialTemplate "AssertEqualWithin"
|
296
296
|
|
297
297
|
[ renderAssertion "real" (renderNumber jArray.[0])
|
298
298
|
renderAssertion "imaginary" (renderNumber jArray.[1]) |> indent 1 ]
|
@@ -933,6 +933,19 @@ type RailFenceCipher() =
|
|
933
933
|
type Raindrops() =
|
934
934
|
inherit GeneratorExercise()
|
935
935
|
|
936
|
+
type RationalNumbers() =
|
937
|
+
inherit GeneratorExercise()
|
938
|
+
|
939
|
+
override __.RenderValue (canonicalDataCase, key, value) =
|
940
|
+
match value with
|
941
|
+
| :? JArray as jArray -> sprintf "(create %d %d)" (jArray.[0].Value<int>()) (jArray.[1].Value<int>())
|
942
|
+
| _ -> base.RenderValue (canonicalDataCase, key, value)
|
943
|
+
|
944
|
+
override __.TestMethodBodyAssertTemplate canonicalDataCase =
|
945
|
+
match canonicalDataCase.Expected with
|
946
|
+
| :? double -> "AssertEqualWithin"
|
947
|
+
| _ -> base.TestMethodBodyAssertTemplate(canonicalDataCase)
|
948
|
+
|
936
949
|
type React() =
|
937
950
|
inherit GeneratorExercise()
|
938
951
|
|
@@ -1248,13 +1261,58 @@ type Triangle() =
|
|
1248
1261
|
value :?> JArray
|
1249
1262
|
|> normalizeJArray
|
1250
1263
|
|> Seq.map formatFloat
|
1251
|
-
|> formatList
|
1264
|
+
|> formatList
|
1265
|
+
|
1266
|
+
type TwoBucket() =
|
1267
|
+
inherit GeneratorExercise()
|
1268
|
+
|
1269
|
+
let renderBucket (value: obj) =
|
1270
|
+
value |> string |> String.upperCaseFirst |> sprintf "Bucket.%s"
|
1271
|
+
|
1272
|
+
override this.PropertiesWithIdentifier canonicalDataCase = this.Properties canonicalDataCase
|
1273
|
+
|
1274
|
+
override __.RenderInput (canonicalDataCase, key, value) =
|
1275
|
+
match key with
|
1276
|
+
| "startBucket" -> renderBucket value
|
1277
|
+
| _ -> base.RenderInput (canonicalDataCase, key, value)
|
1278
|
+
|
1279
|
+
override __.RenderExpected (_, _, value) =
|
1280
|
+
let jObject = value :?> JObject
|
1281
|
+
let moves = jObject.Value<int>("moves")
|
1282
|
+
let goalBucket = jObject.Value<string>("goalBucket") |> renderBucket
|
1283
|
+
let otherBucket = jObject.Value<int>("otherBucket")
|
1284
|
+
sprintf "{ Moves = %d; GoalBucket = %s; OtherBucket = %d }" moves goalBucket otherBucket
|
1252
1285
|
|
1253
1286
|
type TwoFer() =
|
1254
1287
|
inherit GeneratorExercise()
|
1255
1288
|
|
1256
1289
|
override __.RenderInput (_, _, value) =
|
1257
1290
|
value |> Option.ofObj |> formatValue |> parenthesizeOption
|
1291
|
+
|
1292
|
+
type VariableLengthQuantity() =
|
1293
|
+
inherit GeneratorExercise()
|
1294
|
+
|
1295
|
+
let formatUnsignedByteList (value: obj) =
|
1296
|
+
value :?> JArray
|
1297
|
+
|> Seq.map (fun x -> x.Value<byte>() |> sprintf "0x%xuy")
|
1298
|
+
|> formatList
|
1299
|
+
|
1300
|
+
let formatUnsignedIntList (value: obj) =
|
1301
|
+
value :?> JArray
|
1302
|
+
|> Seq.map (fun x -> x.Value<uint32>() |> sprintf "0x%xu")
|
1303
|
+
|> formatList
|
1304
|
+
|
1305
|
+
override __.RenderInput (canonicalDataCase, key, value) =
|
1306
|
+
match canonicalDataCase.Property with
|
1307
|
+
| "encode" -> value |> formatUnsignedIntList
|
1308
|
+
| "decode" -> value |> formatUnsignedByteList
|
1309
|
+
| _ -> base.RenderInput (canonicalDataCase, key, value)
|
1310
|
+
|
1311
|
+
override __.RenderExpected (canonicalDataCase, key, value) =
|
1312
|
+
match canonicalDataCase.Property with
|
1313
|
+
| "encode" -> value |> formatUnsignedByteList
|
1314
|
+
| "decode" -> value |> Option.ofObj |> Option.map formatUnsignedIntList |> formatOption |> parenthesizeOption
|
1315
|
+
| _ -> base.RenderExpected (canonicalDataCase, key, value)
|
1258
1316
|
|
1259
1317
|
type WordCount() =
|
1260
1318
|
inherit GeneratorExercise()
|
@@ -1275,6 +1333,43 @@ type WordCount() =
|
|
1275
1333
|
|
1276
1334
|
override __.PropertiesWithIdentifier _ = ["expected"]
|
1277
1335
|
|
1336
|
+
type WordSearch() =
|
1337
|
+
inherit GeneratorExercise()
|
1338
|
+
|
1339
|
+
let toCoordinates (value: JToken) = value.Value<int>("column"), value.Value<int>("row")
|
1340
|
+
|
1341
|
+
let renderExpectedCoordinates (value: JObject) =
|
1342
|
+
formatTuple (value.Item("start") |> toCoordinates, value.Item("end") |> toCoordinates)
|
1343
|
+
|
1344
|
+
let renderExpectedValue (value: JObject) =
|
1345
|
+
match isNull value with
|
1346
|
+
| true -> "Option<((int * int) * (int * int))>.None"
|
1347
|
+
| false -> sprintf "Some (%s)" (renderExpectedCoordinates value)
|
1348
|
+
|
1349
|
+
override __.RenderExpected (_, _, value) =
|
1350
|
+
let input = value :?> JObject
|
1351
|
+
let formattedList =
|
1352
|
+
input.ToObject<Collections.Generic.Dictionary<string, JObject>>()
|
1353
|
+
|> Seq.map (fun kv -> sprintf "(%s, %s)" (formatValue kv.Key) (renderExpectedValue kv.Value))
|
1354
|
+
|> formatMultiLineList
|
1355
|
+
|
1356
|
+
if (formattedList.Contains("\n")) then
|
1357
|
+
sprintf "%s\n%s" formattedList (indent 2 "|> Map.ofList")
|
1358
|
+
else
|
1359
|
+
sprintf "%s |> Map.ofList" formattedList
|
1360
|
+
|
1361
|
+
override __.RenderInput (canonicalDataCase, key, value) =
|
1362
|
+
match key with
|
1363
|
+
| "grid" ->
|
1364
|
+
value :?> JArray
|
1365
|
+
|> normalizeJArray
|
1366
|
+
|> Seq.map formatValue
|
1367
|
+
|> formatMultiLineList
|
1368
|
+
| _ ->
|
1369
|
+
base.RenderInput(canonicalDataCase, key, value)
|
1370
|
+
|
1371
|
+
override this.PropertiesWithIdentifier canonicalDataCase = this.Properties canonicalDataCase
|
1372
|
+
|
1278
1373
|
type Wordy() =
|
1279
1374
|
inherit GeneratorExercise()
|
1280
1375
|
|