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
@@ -46,7 +46,7 @@ specs = do
|
|
46
46
|
column 2 (intMatrix "1 2 3\n4 5 6\n7 8 9") `shouldBe` vector [3, 6, 9]
|
47
47
|
|
48
48
|
it "can extract column from non-square matrix" $
|
49
|
-
column 2 (intMatrix "1 2 3\n4 5 6\n7 8 9\
|
49
|
+
column 2 (intMatrix "1 2 3\n4 5 6\n7 8 9\n8 7 6") `shouldBe` vector [3, 6, 9, 6]
|
50
50
|
|
51
51
|
it "extract column where numbers have different widths" $
|
52
52
|
column 1 (intMatrix "89 1903 3\n18 3 1\n9 4 800") `shouldBe` vector [1903, 3, 4]
|
data/tracks/java/config.json
CHANGED
@@ -1116,6 +1116,18 @@
|
|
1116
1116
|
"unlocked_by": "triangle",
|
1117
1117
|
"uuid": "52d11278-0d65-4b5b-b387-1374fced3243"
|
1118
1118
|
},
|
1119
|
+
{
|
1120
|
+
"core": false,
|
1121
|
+
"difficulty": 8,
|
1122
|
+
"slug": "rational-numbers",
|
1123
|
+
"topics": [
|
1124
|
+
"floating_point_numbers",
|
1125
|
+
"mathematics",
|
1126
|
+
"algorithms"
|
1127
|
+
],
|
1128
|
+
"unlocked_by": "triangle",
|
1129
|
+
"uuid": "50ed54ce-3047-4590-9fda-0a7e9aeeba30"
|
1130
|
+
},
|
1119
1131
|
{
|
1120
1132
|
"core": false,
|
1121
1133
|
"difficulty": 8,
|
@@ -6,10 +6,16 @@
|
|
6
6
|
|
7
7
|
{{ . }}
|
8
8
|
{{ end }}
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
# Running the tests
|
10
|
+
|
11
|
+
You can run all the tests for an exercise by entering
|
12
|
+
|
13
|
+
```sh
|
14
|
+
$ gradle test
|
15
|
+
```
|
16
|
+
|
17
|
+
in your terminal.
|
18
|
+
{{ with .Spec.Credits }}
|
13
19
|
## Source
|
14
20
|
|
15
21
|
{{ . }}
|
@@ -9,13 +9,15 @@ public class ComplexNumberTest {
|
|
9
9
|
|
10
10
|
private static final double DOUBLE_EQUALITY_TOLERANCE = 1e-15;
|
11
11
|
|
12
|
-
private void assertDoublesEqual(double d1, double d2) {
|
13
|
-
|
12
|
+
private void assertDoublesEqual(double d1, double d2, String numberPart) {
|
13
|
+
String errorMessage = "While testing " + numberPart + " part of number,";
|
14
|
+
|
15
|
+
assertEquals(errorMessage, d1, d2, DOUBLE_EQUALITY_TOLERANCE);
|
14
16
|
}
|
15
17
|
|
16
18
|
private void assertComplexNumbersEqual(ComplexNumber c1, ComplexNumber c2) {
|
17
|
-
assertDoublesEqual(c1.getReal(), c2.getReal());
|
18
|
-
assertDoublesEqual(c1.getImag(), c2.getImag());
|
19
|
+
assertDoublesEqual(c1.getReal(), c2.getReal(), "real");
|
20
|
+
assertDoublesEqual(c1.getImag(), c2.getImag(), "imaginary");
|
19
21
|
}
|
20
22
|
|
21
23
|
// Tests
|
@@ -128,7 +130,7 @@ public class ComplexNumberTest {
|
|
128
130
|
public void testAbsoluteValueOfPositivePurelyRealNumber() {
|
129
131
|
double expected = 5.0;
|
130
132
|
double actual = new ComplexNumber(5.0, 0).abs();
|
131
|
-
assertDoublesEqual(expected, actual);
|
133
|
+
assertDoublesEqual(expected, actual, "real");
|
132
134
|
}
|
133
135
|
|
134
136
|
@Ignore("Remove to run test")
|
@@ -136,7 +138,7 @@ public class ComplexNumberTest {
|
|
136
138
|
public void testAbsoluteValueOfNegativePurelyRealNumber() {
|
137
139
|
double expected = 5.0;
|
138
140
|
double actual = new ComplexNumber(-5.0, 0).abs();
|
139
|
-
assertDoublesEqual(expected, actual);
|
141
|
+
assertDoublesEqual(expected, actual, "real");
|
140
142
|
}
|
141
143
|
|
142
144
|
@Ignore("Remove to run test")
|
@@ -144,7 +146,7 @@ public class ComplexNumberTest {
|
|
144
146
|
public void testAbsoluteValueOfPurelyImaginaryNumberWithPositiveImaginaryPart() {
|
145
147
|
double expected = 5.0;
|
146
148
|
double actual = new ComplexNumber(0, 5.0).abs();
|
147
|
-
assertDoublesEqual(expected, actual);
|
149
|
+
assertDoublesEqual(expected, actual, "real");
|
148
150
|
}
|
149
151
|
|
150
152
|
@Ignore("Remove to run test")
|
@@ -152,7 +154,7 @@ public class ComplexNumberTest {
|
|
152
154
|
public void testAbsoluteValueOfPurelyImaginaryNumberWithNegativeImaginaryPart() {
|
153
155
|
double expected = 5.0;
|
154
156
|
double actual = new ComplexNumber(0, -5.0).abs();
|
155
|
-
assertDoublesEqual(expected, actual);
|
157
|
+
assertDoublesEqual(expected, actual, "real");
|
156
158
|
}
|
157
159
|
|
158
160
|
@Ignore("Remove to run test")
|
@@ -160,7 +162,7 @@ public class ComplexNumberTest {
|
|
160
162
|
public void testAbsoluteValueOfNumberWithRealAndImaginaryParts() {
|
161
163
|
double expected = 5.0;
|
162
164
|
double actual = new ComplexNumber(3.0, 4.0).abs();
|
163
|
-
assertDoublesEqual(expected, actual);
|
165
|
+
assertDoublesEqual(expected, actual, "real");
|
164
166
|
}
|
165
167
|
|
166
168
|
@Ignore("Remove to run test")
|
@@ -192,7 +194,7 @@ public class ComplexNumberTest {
|
|
192
194
|
public void testRealPartOfPurelyRealNumber() {
|
193
195
|
double expected = 1.0;
|
194
196
|
double actual = new ComplexNumber(1.0, 0).getReal();
|
195
|
-
assertDoublesEqual(expected, actual);
|
197
|
+
assertDoublesEqual(expected, actual, "real");
|
196
198
|
}
|
197
199
|
|
198
200
|
@Ignore("Remove to run test")
|
@@ -200,7 +202,7 @@ public class ComplexNumberTest {
|
|
200
202
|
public void testRealPartOfPurelyImaginaryNumber() {
|
201
203
|
double expected = 0.0;
|
202
204
|
double actual = new ComplexNumber(0, 1.0).getReal();
|
203
|
-
assertDoublesEqual(expected, actual);
|
205
|
+
assertDoublesEqual(expected, actual, "real");
|
204
206
|
}
|
205
207
|
|
206
208
|
@Ignore("Remove to run test")
|
@@ -208,7 +210,7 @@ public class ComplexNumberTest {
|
|
208
210
|
public void testRealPartOfNumberWithRealAndImaginaryParts() {
|
209
211
|
double expected = 1.0;
|
210
212
|
double actual = new ComplexNumber(1.0, 2.0).getReal();
|
211
|
-
assertDoublesEqual(expected, actual);
|
213
|
+
assertDoublesEqual(expected, actual, "real");
|
212
214
|
}
|
213
215
|
|
214
216
|
@Ignore("Remove to run test")
|
@@ -216,7 +218,7 @@ public class ComplexNumberTest {
|
|
216
218
|
public void testImaginaryPartOfPurelyRealNumber() {
|
217
219
|
double expected = 0.0;
|
218
220
|
double actual = new ComplexNumber(1.0, 0).getImag();
|
219
|
-
assertDoublesEqual(expected, actual);
|
221
|
+
assertDoublesEqual(expected, actual, "imaginary");
|
220
222
|
}
|
221
223
|
|
222
224
|
@Ignore("Remove to run test")
|
@@ -224,7 +226,7 @@ public class ComplexNumberTest {
|
|
224
226
|
public void testImaginaryPartOfPurelyImaginaryNumber() {
|
225
227
|
double expected = 1.0;
|
226
228
|
double actual = new ComplexNumber(0, 1.0).getImag();
|
227
|
-
assertDoublesEqual(expected, actual);
|
229
|
+
assertDoublesEqual(expected, actual, "imaginary");
|
228
230
|
}
|
229
231
|
|
230
232
|
@Ignore("Remove to run test")
|
@@ -232,7 +234,7 @@ public class ComplexNumberTest {
|
|
232
234
|
public void testImaginaryPartOfNumberWithRealAndImaginaryParts() {
|
233
235
|
double expected = 2.0;
|
234
236
|
double actual = new ComplexNumber(1.0, 2.0).getImag();
|
235
|
-
assertDoublesEqual(expected, actual);
|
237
|
+
assertDoublesEqual(expected, actual, "imaginary");
|
236
238
|
}
|
237
239
|
|
238
240
|
@Ignore("Remove to run test")
|
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.1.0
|
@@ -46,17 +46,15 @@ public class DiamondPrinterTest {
|
|
46
46
|
|
47
47
|
@Ignore("Remove to run test")
|
48
48
|
@Test
|
49
|
-
public void
|
50
|
-
List<String> output = diamondPrinter.printToList('
|
51
|
-
assertThat(output, is(asList("
|
52
|
-
"
|
53
|
-
"
|
54
|
-
"
|
55
|
-
"
|
56
|
-
"
|
57
|
-
"
|
58
|
-
" B B ",
|
59
|
-
" A ")));
|
49
|
+
public void testFourByFourDiamond() {
|
50
|
+
List<String> output = diamondPrinter.printToList('D');
|
51
|
+
assertThat(output, is(asList(" A ",
|
52
|
+
" B B ",
|
53
|
+
" C C ",
|
54
|
+
"D D",
|
55
|
+
" C C ",
|
56
|
+
" B B ",
|
57
|
+
" A ")));
|
60
58
|
}
|
61
59
|
|
62
60
|
@Ignore("Remove to run test")
|
@@ -25,17 +25,6 @@ enough.)
|
|
25
25
|
|
26
26
|
Words are case-insensitive.
|
27
27
|
|
28
|
-
# Running the tests
|
29
|
-
|
30
|
-
You can run all the tests for an exercise by entering
|
31
|
-
|
32
|
-
```sh
|
33
|
-
$ gradle test
|
34
|
-
```
|
35
|
-
|
36
|
-
in your terminal.
|
37
|
-
|
38
|
-
|
39
28
|
## Submitting Incomplete Solutions
|
40
29
|
|
41
30
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
data/tracks/java/exercises/palindrome-products/.meta/src/reference/java/PalindromeCalculator.java
CHANGED
@@ -3,6 +3,10 @@ import java.util.*;
|
|
3
3
|
public class PalindromeCalculator {
|
4
4
|
|
5
5
|
public SortedMap<Long, List<List<Integer>>> getPalindromeProductsWithFactors(int minFactor, int maxFactor) {
|
6
|
+
if(minFactor > maxFactor) {
|
7
|
+
throw new IllegalArgumentException("invalid input: min is " + minFactor + " and max is " + maxFactor);
|
8
|
+
}
|
9
|
+
|
6
10
|
SortedMap<Long, List<List<Integer>>> palindromeSortedList = new TreeMap<>();
|
7
11
|
long num;
|
8
12
|
List<List<Integer>> factors;
|
@@ -19,6 +23,11 @@ public class PalindromeCalculator {
|
|
19
23
|
}
|
20
24
|
}
|
21
25
|
}
|
26
|
+
|
27
|
+
if(palindromeSortedList.size() == 0) {
|
28
|
+
throw new NoSuchElementException("no palindrome with factors in the range " + minFactor + " to " + maxFactor);
|
29
|
+
}
|
30
|
+
|
22
31
|
return Collections.unmodifiableSortedMap(palindromeSortedList);
|
23
32
|
}
|
24
33
|
|
@@ -0,0 +1 @@
|
|
1
|
+
1.1.0
|
@@ -1,12 +1,17 @@
|
|
1
1
|
import org.junit.Before;
|
2
2
|
import org.junit.Ignore;
|
3
3
|
import org.junit.Test;
|
4
|
+
import org.junit.Rule;
|
5
|
+
import org.junit.rules.ExpectedException;
|
4
6
|
|
5
7
|
import java.util.Arrays;
|
6
8
|
import java.util.Collections;
|
7
9
|
import java.util.List;
|
8
10
|
import java.util.SortedMap;
|
9
11
|
import java.util.stream.Collectors;
|
12
|
+
import java.util.NoSuchElementException;
|
13
|
+
|
14
|
+
import java.lang.IllegalArgumentException;
|
10
15
|
|
11
16
|
import static org.junit.Assert.assertEquals;
|
12
17
|
import static org.junit.Assert.assertFalse;
|
@@ -14,23 +19,41 @@ import static org.junit.Assert.assertNotNull;
|
|
14
19
|
|
15
20
|
public class PalindromeCalculatorTest {
|
16
21
|
private PalindromeCalculator palindromeCalculator;
|
22
|
+
|
23
|
+
@Rule
|
24
|
+
public ExpectedException expectedException = ExpectedException.none();
|
17
25
|
|
18
26
|
@Before
|
19
27
|
public void setup() {
|
20
28
|
palindromeCalculator = new PalindromeCalculator();
|
21
29
|
}
|
30
|
+
|
31
|
+
@Test
|
32
|
+
public void smallestPalindromeFromSingleDigitFactors() {
|
33
|
+
List<List<Integer>> expected = Collections.unmodifiableList(
|
34
|
+
Arrays.asList(
|
35
|
+
Arrays.asList(1, 1)
|
36
|
+
)
|
37
|
+
);
|
38
|
+
long expectedValue = 1l;
|
39
|
+
|
40
|
+
SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(1, 9);
|
22
41
|
|
42
|
+
checkPalindromeWithFactorsMatchesExpected(expected, expectedValue, palindromes, palindromes.firstKey());
|
43
|
+
}
|
44
|
+
|
45
|
+
@Ignore("Remove to run test")
|
23
46
|
@Test
|
24
47
|
public void largestPalindromeFromSingleDigitFactors() {
|
25
|
-
|
48
|
+
List<List<Integer>> expected = Collections.unmodifiableList(
|
26
49
|
Arrays.asList(
|
27
50
|
Arrays.asList(1, 9),
|
28
51
|
Arrays.asList(3, 3)
|
29
52
|
)
|
30
53
|
);
|
31
|
-
|
54
|
+
long expectedValue = 9l;
|
32
55
|
|
33
|
-
|
56
|
+
SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(1, 9);
|
34
57
|
|
35
58
|
checkPalindromeWithFactorsMatchesExpected(expected, expectedValue, palindromes, palindromes.lastKey());
|
36
59
|
}
|
@@ -38,14 +61,14 @@ public class PalindromeCalculatorTest {
|
|
38
61
|
@Ignore("Remove to run test")
|
39
62
|
@Test
|
40
63
|
public void largestPalindromeFromDoubleDigitFactors() {
|
41
|
-
|
64
|
+
List<List<Integer>> expected = Collections.unmodifiableList(
|
42
65
|
Arrays.asList(
|
43
66
|
Arrays.asList(91, 99)
|
44
67
|
)
|
45
68
|
);
|
46
|
-
|
69
|
+
long expectedValue = 9009l;
|
47
70
|
|
48
|
-
|
71
|
+
SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(10, 99);
|
49
72
|
|
50
73
|
checkPalindromeWithFactorsMatchesExpected(expected, expectedValue, palindromes, palindromes.lastKey());
|
51
74
|
}
|
@@ -53,14 +76,14 @@ public class PalindromeCalculatorTest {
|
|
53
76
|
@Ignore("Remove to run test")
|
54
77
|
@Test
|
55
78
|
public void smallestPalindromeFromDoubleDigitFactors() {
|
56
|
-
|
79
|
+
List<List<Integer>> expected = Collections.unmodifiableList(
|
57
80
|
Arrays.asList(
|
58
81
|
Arrays.asList(11, 11)
|
59
82
|
)
|
60
83
|
);
|
61
|
-
|
84
|
+
long expectedValue = 121l;
|
62
85
|
|
63
|
-
|
86
|
+
SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(10, 99);
|
64
87
|
|
65
88
|
checkPalindromeWithFactorsMatchesExpected(expected, expectedValue, palindromes, palindromes.firstKey());
|
66
89
|
}
|
@@ -68,14 +91,14 @@ public class PalindromeCalculatorTest {
|
|
68
91
|
@Ignore("Remove to run test")
|
69
92
|
@Test
|
70
93
|
public void largestPalindromeFromTripleDigitFactors() {
|
71
|
-
|
94
|
+
List<List<Integer>> expected = Collections.unmodifiableList(
|
72
95
|
Arrays.asList(
|
73
96
|
Arrays.asList(913, 993)
|
74
97
|
)
|
75
98
|
);
|
76
|
-
|
99
|
+
long expectedValue = 906609l;
|
77
100
|
|
78
|
-
|
101
|
+
SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(100, 999);
|
79
102
|
|
80
103
|
checkPalindromeWithFactorsMatchesExpected(expected, expectedValue, palindromes, palindromes.lastKey());
|
81
104
|
}
|
@@ -83,17 +106,89 @@ public class PalindromeCalculatorTest {
|
|
83
106
|
@Ignore("Remove to run test")
|
84
107
|
@Test
|
85
108
|
public void smallestPalindromeFromTripleDigitFactors() {
|
86
|
-
|
109
|
+
List<List<Integer>> expected = Collections.unmodifiableList(
|
87
110
|
Arrays.asList(
|
88
111
|
Arrays.asList(101, 101)
|
89
112
|
)
|
90
113
|
);
|
91
|
-
|
114
|
+
long expectedValue = 10201l;
|
115
|
+
|
116
|
+
SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(100, 999);
|
117
|
+
|
118
|
+
checkPalindromeWithFactorsMatchesExpected(expected, expectedValue, palindromes, palindromes.firstKey());
|
119
|
+
}
|
120
|
+
|
121
|
+
@Ignore("Remove to run test")
|
122
|
+
@Test
|
123
|
+
public void smallestPalindromeFromQuadDigitFactors() {
|
124
|
+
List<List<Integer>> expected = Collections.unmodifiableList(
|
125
|
+
Arrays.asList(
|
126
|
+
Arrays.asList(1001, 1001)
|
127
|
+
)
|
128
|
+
);
|
129
|
+
long expectedValue = 1002001l;
|
92
130
|
|
93
|
-
|
131
|
+
SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(1000, 9999);
|
94
132
|
|
95
133
|
checkPalindromeWithFactorsMatchesExpected(expected, expectedValue, palindromes, palindromes.firstKey());
|
96
134
|
}
|
135
|
+
|
136
|
+
@Ignore("Remove to run test")
|
137
|
+
@Test
|
138
|
+
public void largestPalindromeFromQuadDigitFactors() {
|
139
|
+
List<List<Integer>> expected = Collections.unmodifiableList(
|
140
|
+
Arrays.asList(
|
141
|
+
Arrays.asList(9901, 9999)
|
142
|
+
)
|
143
|
+
);
|
144
|
+
long expectedValue = 99000099l;
|
145
|
+
|
146
|
+
SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(1000, 9999);
|
147
|
+
|
148
|
+
checkPalindromeWithFactorsMatchesExpected(expected, expectedValue, palindromes, palindromes.lastKey());
|
149
|
+
}
|
150
|
+
|
151
|
+
@Ignore("Remove to run test")
|
152
|
+
@Test
|
153
|
+
public void emtpyResultSmallestNoPalindromeInRange() {
|
154
|
+
|
155
|
+
expectedException.expect(NoSuchElementException.class);
|
156
|
+
expectedException.expectMessage("no palindrome with factors in the range 1002 to 1003");
|
157
|
+
|
158
|
+
SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(1002, 1003);
|
159
|
+
}
|
160
|
+
|
161
|
+
@Ignore("Remove to run test")
|
162
|
+
@Test
|
163
|
+
public void emtpyResultLargestNoPalindromeInRange() {
|
164
|
+
|
165
|
+
expectedException.expect(NoSuchElementException.class);
|
166
|
+
expectedException.expectMessage("no palindrome with factors in the range 15 to 15");
|
167
|
+
|
168
|
+
SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(15, 15);
|
169
|
+
}
|
170
|
+
|
171
|
+
@Ignore("Remove to run test")
|
172
|
+
@Test
|
173
|
+
public void errorSmallestMinIsMoreThanMax() {
|
174
|
+
|
175
|
+
expectedException.expect(IllegalArgumentException.class);
|
176
|
+
expectedException.expectMessage("invalid input: min is 10000 and max is 1");
|
177
|
+
|
178
|
+
SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(10000, 1);
|
179
|
+
}
|
180
|
+
|
181
|
+
@Ignore("Remove to run test")
|
182
|
+
@Test
|
183
|
+
public void errorLargestMinIsMoreThanMax() {
|
184
|
+
|
185
|
+
expectedException.expect(IllegalArgumentException.class);
|
186
|
+
expectedException.expectMessage("invalid input: min is 2 and max is 1");
|
187
|
+
|
188
|
+
SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(2, 1);
|
189
|
+
}
|
190
|
+
|
191
|
+
|
97
192
|
|
98
193
|
private void checkPalindromeWithFactorsMatchesExpected(List<List<Integer>> expectedPalindromeFactors,
|
99
194
|
long expectedValueOfPalindrome,
|