trackler 2.2.1.44 → 2.2.1.45
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/problem-specifications/exercises/isbn-verifier/canonical-data.json +88 -0
- data/problem-specifications/exercises/isbn-verifier/description.md +35 -0
- data/problem-specifications/exercises/isbn-verifier/metadata.yml +4 -0
- data/problem-specifications/exercises/robot-simulator/canonical-data.json +125 -32
- data/problem-specifications/exercises/sum-of-multiples/description.md +0 -3
- data/problem-specifications/exercises/two-bucket/canonical-data.json +3 -3
- data/tracks/c/config.json +235 -237
- data/tracks/c/exercises/acronym/README.md +0 -1
- data/tracks/c/exercises/all-your-base/README.md +1 -1
- data/tracks/c/exercises/allergies/README.md +0 -1
- data/tracks/c/exercises/atbash-cipher/README.md +2 -1
- data/tracks/c/exercises/beer-song/README.md +1 -1
- data/tracks/c/exercises/binary/README.md +2 -0
- data/tracks/c/exercises/grains/README.md +0 -1
- data/tracks/c/exercises/isogram/README.md +2 -1
- data/tracks/c/exercises/leap/README.md +1 -1
- data/tracks/c/exercises/meetup/README.md +1 -2
- data/tracks/c/exercises/nucleotide-count/README.md +8 -22
- data/tracks/c/exercises/palindrome-products/README.md +12 -6
- data/tracks/c/exercises/pangram/README.md +1 -1
- data/tracks/c/exercises/pascals-triangle/README.md +1 -1
- data/tracks/c/exercises/perfect-numbers/README.md +2 -2
- data/tracks/c/exercises/phone-number/README.md +3 -2
- data/tracks/c/exercises/roman-numerals/README.md +1 -1
- data/tracks/c/exercises/scrabble-score/README.md +3 -1
- data/tracks/c/exercises/space-age/README.md +2 -1
- data/tracks/c/exercises/triangle/README.md +9 -6
- data/tracks/c/exercises/word-count/README.md +1 -2
- data/tracks/csharp/exercises/accumulate/Accumulate.csproj +2 -2
- data/tracks/csharp/exercises/acronym/Acronym.csproj +2 -2
- data/tracks/csharp/exercises/all-your-base/AllYourBase.csproj +2 -2
- data/tracks/csharp/exercises/allergies/Allergies.csproj +2 -2
- data/tracks/csharp/exercises/alphametics/Alphametics.csproj +2 -2
- data/tracks/csharp/exercises/anagram/Anagram.csproj +2 -2
- data/tracks/csharp/exercises/atbash-cipher/AtbashCipher.csproj +2 -2
- data/tracks/csharp/exercises/bank-account/BankAccount.csproj +2 -2
- data/tracks/csharp/exercises/beer-song/BeerSong.csproj +2 -2
- data/tracks/csharp/exercises/binary-search/BinarySearch.csproj +2 -2
- data/tracks/csharp/exercises/binary-search-tree/BinarySearchTree.csproj +2 -2
- data/tracks/csharp/exercises/bob/Bob.csproj +2 -2
- data/tracks/csharp/exercises/book-store/BookStore.csproj +2 -2
- data/tracks/csharp/exercises/bowling/Bowling.csproj +2 -2
- data/tracks/csharp/exercises/bracket-push/BracketPush.csproj +2 -2
- data/tracks/csharp/exercises/change/Change.csproj +2 -2
- data/tracks/csharp/exercises/circular-buffer/CircularBuffer.csproj +2 -2
- data/tracks/csharp/exercises/clock/Clock.csproj +2 -2
- data/tracks/csharp/exercises/collatz-conjecture/CollatzConjecture.csproj +2 -2
- data/tracks/csharp/exercises/complex-numbers/ComplexNumbers.csproj +2 -2
- data/tracks/csharp/exercises/connect/Connect.cs +1 -1
- data/tracks/csharp/exercises/connect/Connect.csproj +2 -2
- data/tracks/csharp/exercises/connect/ConnectTest.cs +120 -85
- data/tracks/csharp/exercises/connect/Example.cs +11 -7
- data/tracks/csharp/exercises/crypto-square/CryptoSquare.csproj +2 -2
- data/tracks/csharp/exercises/custom-set/CustomSet.csproj +2 -2
- data/tracks/csharp/exercises/diamond/Diamond.csproj +2 -2
- data/tracks/csharp/exercises/difference-of-squares/DifferenceOfSquares.csproj +2 -2
- data/tracks/csharp/exercises/diffie-hellman/DiffieHellman.csproj +2 -2
- data/tracks/csharp/exercises/dominoes/Dominoes.csproj +2 -2
- data/tracks/csharp/exercises/dot-dsl/DotDsl.csproj +2 -2
- data/tracks/csharp/exercises/error-handling/ErrorHandling.csproj +2 -2
- data/tracks/csharp/exercises/etl/Etl.csproj +2 -2
- data/tracks/csharp/exercises/flatten-array/FlattenArray.csproj +2 -2
- data/tracks/csharp/exercises/food-chain/FoodChain.csproj +2 -2
- data/tracks/csharp/exercises/forth/Forth.csproj +2 -2
- data/tracks/csharp/exercises/gigasecond/Gigasecond.csproj +2 -2
- data/tracks/csharp/exercises/go-counting/GoCounting.csproj +2 -2
- data/tracks/csharp/exercises/grade-school/GradeSchool.csproj +2 -2
- data/tracks/csharp/exercises/grains/Grains.csproj +2 -2
- data/tracks/csharp/exercises/grep/Grep.csproj +2 -2
- data/tracks/csharp/exercises/hamming/Hamming.csproj +2 -2
- data/tracks/csharp/exercises/hangman/Hangman.csproj +2 -2
- data/tracks/csharp/exercises/hello-world/HelloWorld.csproj +2 -2
- data/tracks/csharp/exercises/house/House.csproj +2 -2
- data/tracks/csharp/exercises/isogram/Isogram.csproj +2 -2
- data/tracks/csharp/exercises/kindergarten-garden/KindergartenGarden.csproj +2 -2
- data/tracks/csharp/exercises/largest-series-product/LargestSeriesProduct.csproj +2 -2
- data/tracks/csharp/exercises/leap/Leap.csproj +2 -2
- data/tracks/csharp/exercises/ledger/Ledger.csproj +2 -2
- data/tracks/csharp/exercises/linked-list/LinkedList.csproj +2 -2
- data/tracks/csharp/exercises/list-ops/ListOps.csproj +2 -2
- data/tracks/csharp/exercises/luhn/Luhn.csproj +2 -2
- data/tracks/csharp/exercises/markdown/Markdown.csproj +2 -2
- data/tracks/csharp/exercises/matrix/Matrix.csproj +2 -2
- data/tracks/csharp/exercises/meetup/Meetup.csproj +2 -2
- data/tracks/csharp/exercises/minesweeper/Minesweeper.csproj +2 -2
- data/tracks/csharp/exercises/nth-prime/NthPrime.csproj +2 -2
- data/tracks/csharp/exercises/nucleotide-count/NucleotideCount.csproj +2 -2
- data/tracks/csharp/exercises/ocr-numbers/OcrNumbers.csproj +2 -2
- data/tracks/csharp/exercises/palindrome-products/PalindromeProducts.csproj +2 -2
- data/tracks/csharp/exercises/pangram/Pangram.csproj +2 -2
- data/tracks/csharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.csproj +2 -2
- data/tracks/csharp/exercises/pascals-triangle/PascalsTriangle.csproj +2 -2
- data/tracks/csharp/exercises/perfect-numbers/PerfectNumbers.csproj +2 -2
- data/tracks/csharp/exercises/phone-number/PhoneNumber.csproj +2 -2
- data/tracks/csharp/exercises/pig-latin/PigLatin.csproj +2 -2
- data/tracks/csharp/exercises/poker/Poker.csproj +2 -2
- data/tracks/csharp/exercises/pov/Pov.csproj +2 -2
- data/tracks/csharp/exercises/prime-factors/PrimeFactors.csproj +2 -2
- data/tracks/csharp/exercises/protein-translation/ProteinTranslation.csproj +2 -2
- data/tracks/csharp/exercises/proverb/Proverb.csproj +2 -2
- data/tracks/csharp/exercises/pythagorean-triplet/PythagoreanTriplet.csproj +2 -2
- data/tracks/csharp/exercises/queen-attack/QueenAttack.csproj +2 -2
- data/tracks/csharp/exercises/rail-fence-cipher/RailFenceCipher.csproj +2 -2
- data/tracks/csharp/exercises/raindrops/Raindrops.csproj +2 -2
- data/tracks/csharp/exercises/react/React.csproj +2 -2
- data/tracks/csharp/exercises/rectangles/Rectangles.csproj +2 -2
- data/tracks/csharp/exercises/rna-transcription/RnaTranscription.csproj +2 -2
- data/tracks/csharp/exercises/robot-name/RobotName.csproj +2 -2
- data/tracks/csharp/exercises/robot-simulator/RobotSimulator.csproj +2 -2
- data/tracks/csharp/exercises/roman-numerals/RomanNumerals.csproj +2 -2
- data/tracks/csharp/exercises/rotational-cipher/RotationalCipher.csproj +2 -2
- data/tracks/csharp/exercises/run-length-encoding/RunLengthEncoding.csproj +2 -2
- data/tracks/csharp/exercises/saddle-points/SaddlePoints.csproj +2 -2
- data/tracks/csharp/exercises/say/Say.csproj +2 -2
- data/tracks/csharp/exercises/scale-generator/ScaleGenerator.csproj +2 -2
- data/tracks/csharp/exercises/scrabble-score/ScrabbleScore.csproj +2 -2
- data/tracks/csharp/exercises/secret-handshake/SecretHandshake.csproj +2 -2
- data/tracks/csharp/exercises/series/Series.csproj +2 -2
- data/tracks/csharp/exercises/series/SeriesTest.cs +17 -17
- data/tracks/csharp/exercises/sgf-parsing/SgfParsing.csproj +2 -2
- data/tracks/csharp/exercises/sieve/Sieve.csproj +2 -2
- data/tracks/csharp/exercises/simple-cipher/SimpleCipher.csproj +2 -2
- data/tracks/csharp/exercises/simple-linked-list/SimpleLinkedList.csproj +2 -2
- data/tracks/csharp/exercises/space-age/SpaceAge.csproj +2 -2
- data/tracks/csharp/exercises/spiral-matrix/SpiralMatrix.csproj +2 -2
- data/tracks/csharp/exercises/strain/Strain.csproj +2 -2
- data/tracks/csharp/exercises/sublist/Sublist.csproj +2 -2
- data/tracks/csharp/exercises/sum-of-multiples/SumOfMultiples.csproj +2 -2
- data/tracks/csharp/exercises/tournament/Tournament.csproj +2 -2
- data/tracks/csharp/exercises/transpose/Transpose.csproj +2 -2
- data/tracks/csharp/exercises/tree-building/TreeBuilding.csproj +2 -2
- data/tracks/csharp/exercises/triangle/Triangle.cs +0 -11
- data/tracks/csharp/exercises/triangle/Triangle.csproj +2 -2
- data/tracks/csharp/exercises/triangle/TriangleTest.cs +17 -17
- data/tracks/csharp/exercises/twelve-days/TwelveDays.csproj +2 -2
- data/tracks/csharp/exercises/two-bucket/TwoBucket.csproj +2 -2
- data/tracks/csharp/exercises/two-fer/TwoFer.csproj +2 -2
- data/tracks/csharp/exercises/variable-length-quantity/VariableLengthQuantity.csproj +2 -2
- data/tracks/csharp/exercises/word-count/WordCount.csproj +2 -2
- data/tracks/csharp/exercises/word-search/WordSearch.csproj +2 -2
- data/tracks/csharp/exercises/wordy/Wordy.csproj +2 -2
- data/tracks/csharp/exercises/zebra-puzzle/ZebraPuzzle.csproj +2 -2
- data/tracks/csharp/exercises/zipper/Zipper.csproj +2 -2
- data/tracks/csharp/generators/Exercises/Connect.cs +47 -0
- data/tracks/csharp/generators/Exercises/Triangle.cs +1 -1
- data/tracks/dart/config/maintainers.json +27 -1
- data/tracks/dart/pubspec.yaml +3 -0
- data/tracks/dart/tool/create-exercise +144 -5
- data/tracks/elm/.gitattributes +1 -0
- data/tracks/elm/bin/install-elm-format +9 -3
- data/tracks/elm/config.json +30 -0
- data/tracks/elm/exercises/all-your-base/AllYourBase.elm +1 -0
- data/tracks/elm/exercises/all-your-base/AllYourBase.example.elm +68 -0
- data/tracks/elm/exercises/all-your-base/README.md +65 -0
- data/tracks/elm/exercises/all-your-base/elm-package.json +15 -0
- data/tracks/elm/exercises/all-your-base/tests/Tests.elm +53 -0
- data/tracks/elm/exercises/all-your-base/tests/elm-package.json +16 -0
- data/tracks/elm/exercises/collatz-conjecture/CollatzConjecture.elm +2 -0
- data/tracks/elm/exercises/collatz-conjecture/CollatzConjecture.example.elm +19 -0
- data/tracks/elm/exercises/collatz-conjecture/elm-package.json +15 -0
- data/tracks/elm/exercises/collatz-conjecture/package.json +14 -0
- data/tracks/elm/exercises/collatz-conjecture/tests/Tests.elm +38 -0
- data/tracks/elm/exercises/collatz-conjecture/tests/elm-package.json +16 -0
- data/tracks/elm/exercises/isogram/Isogram.elm +1 -0
- data/tracks/elm/exercises/isogram/Isogram.example.elm +76 -0
- data/tracks/elm/exercises/isogram/README.md +50 -0
- data/tracks/elm/exercises/isogram/elm-package.json +14 -0
- data/tracks/elm/exercises/isogram/package.json +14 -0
- data/tracks/elm/exercises/isogram/tests/Tests.elm +46 -0
- data/tracks/elm/exercises/isogram/tests/elm-package.json +16 -0
- data/tracks/fsharp/.gitignore +2 -1
- data/tracks/fsharp/exercises/accumulate/Accumulate.fsproj +3 -2
- data/tracks/fsharp/exercises/acronym/Acronym.fs +1 -1
- data/tracks/fsharp/exercises/acronym/Acronym.fsproj +3 -2
- data/tracks/fsharp/exercises/acronym/AcronymTest.fs +13 -38
- data/tracks/fsharp/exercises/acronym/Example.fs +1 -1
- data/tracks/fsharp/exercises/all-your-base/AllYourBase.fsproj +3 -2
- data/tracks/fsharp/exercises/all-your-base/AllYourBaseTest.fs +64 -61
- data/tracks/fsharp/exercises/all-your-base/Example.fs +4 -1
- data/tracks/fsharp/exercises/allergies/Allergies.fs +2 -2
- data/tracks/fsharp/exercises/allergies/Allergies.fsproj +3 -2
- data/tracks/fsharp/exercises/allergies/AllergiesTest.fs +28 -37
- data/tracks/fsharp/exercises/allergies/Example.fs +3 -3
- data/tracks/fsharp/exercises/alphametics/Alphametics.fsproj +3 -2
- data/tracks/fsharp/exercises/anagram/Anagram.fsproj +3 -2
- data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fs +4 -2
- data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fsproj +3 -2
- data/tracks/fsharp/exercises/atbash-cipher/AtbashCipherTest.fs +38 -42
- data/tracks/fsharp/exercises/atbash-cipher/Example.fs +5 -3
- data/tracks/fsharp/exercises/bank-account/BankAccount.fsproj +3 -2
- data/tracks/fsharp/exercises/beer-song/BeerSong.fsproj +3 -2
- data/tracks/fsharp/exercises/beer-song/BeerSongTest.fs +36 -32
- data/tracks/fsharp/exercises/beer-song/Example.fs +2 -2
- data/tracks/fsharp/exercises/binary-search/BinarySearch.fsproj +3 -2
- data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTree.fsproj +3 -2
- data/tracks/fsharp/exercises/bob/Bob.fs +1 -1
- data/tracks/fsharp/exercises/bob/Bob.fsproj +3 -2
- data/tracks/fsharp/exercises/bob/BobTest.fs +64 -20
- data/tracks/fsharp/exercises/bob/Example.fs +3 -4
- data/tracks/fsharp/exercises/book-store/BookStore.fs +1 -1
- data/tracks/fsharp/exercises/book-store/BookStore.fsproj +3 -2
- data/tracks/fsharp/exercises/book-store/BookStoreTest.fs +32 -25
- data/tracks/fsharp/exercises/book-store/Example.fs +1 -1
- data/tracks/fsharp/exercises/bowling/Bowling.fsproj +3 -2
- data/tracks/fsharp/exercises/bracket-push/BracketPush.fs +1 -1
- data/tracks/fsharp/exercises/bracket-push/BracketPush.fsproj +3 -2
- data/tracks/fsharp/exercises/bracket-push/BracketPushTest.fs +24 -25
- data/tracks/fsharp/exercises/bracket-push/Example.fs +1 -1
- data/tracks/fsharp/exercises/change/Change.fs +1 -1
- data/tracks/fsharp/exercises/change/Change.fsproj +3 -2
- data/tracks/fsharp/exercises/change/ChangeTest.fs +42 -18
- data/tracks/fsharp/exercises/change/Example.fs +7 -4
- data/tracks/fsharp/exercises/circular-buffer/CircularBuffer.fsproj +3 -2
- data/tracks/fsharp/exercises/clock/Clock.fsproj +3 -2
- data/tracks/fsharp/exercises/connect/Connect.fsproj +3 -2
- data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fs +1 -40
- data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fsproj +3 -2
- data/tracks/fsharp/exercises/crypto-square/CryptoSquareTest.fs +16 -40
- data/tracks/fsharp/exercises/crypto-square/Example.fs +13 -16
- data/tracks/fsharp/exercises/custom-set/CustomSet.fs +12 -12
- data/tracks/fsharp/exercises/custom-set/CustomSet.fsproj +3 -2
- data/tracks/fsharp/exercises/diamond/Diamond.fsproj +3 -2
- data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fs +2 -2
- data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fsproj +3 -2
- data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquaresTest.fs +24 -20
- data/tracks/fsharp/exercises/difference-of-squares/Example.fs +3 -3
- data/tracks/fsharp/exercises/diffie-hellman/DiffieHellman.fsproj +3 -2
- data/tracks/fsharp/exercises/dominoes/Dominoes.fsproj +3 -2
- data/tracks/fsharp/exercises/dot-dsl/DotDsl.fsproj +3 -2
- data/tracks/fsharp/exercises/error-handling/ErrorHandling.fsproj +3 -2
- data/tracks/fsharp/exercises/etl/Etl.fsproj +3 -2
- data/tracks/fsharp/exercises/food-chain/FoodChain.fsproj +3 -2
- data/tracks/fsharp/exercises/forth/Forth.fsproj +3 -2
- data/tracks/fsharp/exercises/gigasecond/Example.fs +1 -3
- data/tracks/fsharp/exercises/gigasecond/Gigasecond.fs +1 -1
- data/tracks/fsharp/exercises/gigasecond/Gigasecond.fsproj +3 -2
- data/tracks/fsharp/exercises/gigasecond/GigasecondTest.fs +21 -12
- data/tracks/fsharp/exercises/go-counting/GoCounting.fsproj +3 -2
- data/tracks/fsharp/exercises/grade-school/GradeSchool.fsproj +3 -2
- data/tracks/fsharp/exercises/grains/Grains.fsproj +3 -2
- data/tracks/fsharp/exercises/grep/Grep.fsproj +3 -2
- data/tracks/fsharp/exercises/hamming/Hamming.fsproj +3 -2
- data/tracks/fsharp/exercises/hangman/Hangman.fsproj +3 -2
- data/tracks/fsharp/exercises/hello-world/HelloWorld.fsproj +3 -2
- data/tracks/fsharp/exercises/hello-world/HelloWorldTest.fs +6 -3
- data/tracks/fsharp/exercises/house/House.fsproj +3 -2
- data/tracks/fsharp/exercises/isogram/Example.fs +1 -1
- data/tracks/fsharp/exercises/isogram/Isogram.fs +1 -1
- data/tracks/fsharp/exercises/isogram/Isogram.fsproj +3 -2
- data/tracks/fsharp/exercises/isogram/IsogramTest.fs +16 -40
- data/tracks/fsharp/exercises/kindergarten-garden/Example.fs +6 -4
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fs +3 -5
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fsproj +3 -2
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGardenTest.fs +100 -47
- data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProduct.fsproj +3 -2
- data/tracks/fsharp/exercises/leap/Example.fs +2 -2
- data/tracks/fsharp/exercises/leap/Leap.fs +2 -2
- data/tracks/fsharp/exercises/leap/Leap.fsproj +3 -2
- data/tracks/fsharp/exercises/leap/LeapTest.fs +19 -15
- data/tracks/fsharp/exercises/ledger/Ledger.fsproj +3 -2
- data/tracks/fsharp/exercises/lens-person/LensPerson.fsproj +3 -2
- data/tracks/fsharp/exercises/linked-list/LinkedList.fsproj +3 -2
- data/tracks/fsharp/exercises/list-ops/ListOps.fsproj +3 -2
- data/tracks/fsharp/exercises/luhn/Luhn.fsproj +3 -2
- data/tracks/fsharp/exercises/luhn/LuhnTest.fs +30 -65
- data/tracks/fsharp/exercises/markdown/Markdown.fsproj +3 -2
- data/tracks/fsharp/exercises/matrix/Matrix.fsproj +3 -2
- data/tracks/fsharp/exercises/meetup/Meetup.fsproj +3 -2
- data/tracks/fsharp/exercises/minesweeper/Example.fs +9 -11
- data/tracks/fsharp/exercises/minesweeper/Minesweeper.fsproj +3 -2
- data/tracks/fsharp/exercises/minesweeper/MinesweeperTest.fs +117 -80
- data/tracks/fsharp/exercises/nth-prime/NthPrime.fsproj +3 -2
- data/tracks/fsharp/exercises/nucleotide-count/NucleotideCount.fsproj +3 -2
- data/tracks/fsharp/exercises/ocr-numbers/OcrNumbers.fsproj +3 -2
- data/tracks/fsharp/exercises/palindrome-products/PalindromeProducts.fsproj +3 -2
- data/tracks/fsharp/exercises/pangram/Pangram.fsproj +3 -2
- data/tracks/fsharp/exercises/pangram/PangramTest.fs +15 -27
- data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.fsproj +3 -2
- data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangle.fsproj +3 -2
- data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fsproj +3 -2
- data/tracks/fsharp/exercises/phone-number/PhoneNumber.fsproj +3 -2
- data/tracks/fsharp/exercises/pig-latin/Example.fs +1 -1
- data/tracks/fsharp/exercises/pig-latin/PigLatin.fsproj +3 -2
- data/tracks/fsharp/exercises/pig-latin/PigLatinTest.fs +64 -26
- data/tracks/fsharp/exercises/poker/Poker.fsproj +3 -2
- data/tracks/fsharp/exercises/pov/Pov.fsproj +3 -2
- data/tracks/fsharp/exercises/prime-factors/PrimeFactors.fsproj +3 -2
- data/tracks/fsharp/exercises/protein-translation/ProteinTranslation.fsproj +3 -2
- data/tracks/fsharp/exercises/proverb/Proverb.fsproj +3 -2
- data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTriplet.fsproj +3 -2
- data/tracks/fsharp/exercises/queen-attack/Example.fs +3 -1
- data/tracks/fsharp/exercises/queen-attack/QueenAttack.fs +2 -0
- data/tracks/fsharp/exercises/queen-attack/QueenAttack.fsproj +3 -2
- data/tracks/fsharp/exercises/queen-attack/QueenAttackTest.fs +50 -20
- data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipher.fsproj +3 -2
- data/tracks/fsharp/exercises/raindrops/Raindrops.fsproj +3 -2
- data/tracks/fsharp/exercises/raindrops/RaindropsTest.fs +77 -37
- data/tracks/fsharp/exercises/react/React.fsproj +3 -2
- data/tracks/fsharp/exercises/rectangles/Rectangles.fsproj +3 -2
- data/tracks/fsharp/exercises/rna-transcription/Example.fs +15 -7
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fs +2 -2
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fsproj +3 -2
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscriptionTest.fs +29 -14
- data/tracks/fsharp/exercises/robot-name/RobotName.fsproj +3 -2
- data/tracks/fsharp/exercises/robot-simulator/RobotSimulator.fsproj +3 -2
- data/tracks/fsharp/exercises/roman-numerals/Example.fs +2 -2
- data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fs +2 -2
- data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fsproj +3 -2
- data/tracks/fsharp/exercises/roman-numerals/RomanNumeralsTest.fs +79 -26
- data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncoding.fsproj +3 -2
- data/tracks/fsharp/exercises/saddle-points/SaddlePoints.fsproj +3 -2
- data/tracks/fsharp/exercises/say/Say.fsproj +3 -2
- data/tracks/fsharp/exercises/scale-generator/ScaleGenerator.fsproj +3 -2
- data/tracks/fsharp/exercises/scrabble-score/ScrabbleScore.fsproj +3 -2
- data/tracks/fsharp/exercises/scrabble-score/ScrabbleScoreTest.fs +33 -17
- data/tracks/fsharp/exercises/secret-handshake/SecretHandshake.fsproj +3 -2
- data/tracks/fsharp/exercises/series/Series.fsproj +3 -2
- data/tracks/fsharp/exercises/sgf-parsing/SgfParsing.fsproj +3 -2
- data/tracks/fsharp/exercises/sieve/Sieve.fsproj +3 -2
- data/tracks/fsharp/exercises/simple-cipher/SimpleCipher.fsproj +3 -2
- data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedList.fsproj +3 -2
- data/tracks/fsharp/exercises/space-age/SpaceAge.fsproj +3 -2
- data/tracks/fsharp/exercises/strain/Strain.fsproj +3 -2
- data/tracks/fsharp/exercises/sublist/Sublist.fsproj +3 -2
- data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiples.fsproj +3 -2
- data/tracks/fsharp/exercises/tournament/Tournament.fsproj +3 -2
- data/tracks/fsharp/exercises/transpose/Transpose.fsproj +3 -2
- data/tracks/fsharp/exercises/tree-building/TreeBuilding.fsproj +3 -2
- data/tracks/fsharp/exercises/triangle/Triangle.fsproj +3 -2
- data/tracks/fsharp/exercises/twelve-days/TwelveDays.fsproj +3 -2
- data/tracks/fsharp/exercises/two-bucket/TwoBucket.fsproj +3 -2
- data/tracks/fsharp/exercises/two-fer/TwoFer.fsproj +3 -2
- data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantity.fsproj +3 -2
- data/tracks/fsharp/exercises/word-count/WordCount.fsproj +3 -2
- data/tracks/fsharp/exercises/word-search/WordSearch.fsproj +3 -2
- data/tracks/fsharp/exercises/wordy/Wordy.fsproj +3 -2
- data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzle.fsproj +3 -2
- data/tracks/fsharp/exercises/zipper/Zipper.fsproj +3 -2
- data/tracks/fsharp/generators/Common.fs +96 -0
- data/tracks/fsharp/generators/Exercise.fs +250 -0
- data/tracks/fsharp/generators/Generators.fs +210 -0
- data/tracks/fsharp/generators/Generators.fsproj +32 -0
- data/tracks/fsharp/generators/Generators.sln +24 -0
- data/tracks/fsharp/generators/Input.fs +99 -0
- data/tracks/fsharp/generators/Options.fs +31 -0
- data/tracks/fsharp/generators/Output.fs +224 -0
- data/tracks/fsharp/generators/Program.fs +35 -0
- data/tracks/fsharp/generators/Properties/launchSettings.json +8 -0
- data/tracks/fsharp/generators/Templates/_AssertEmpty.liquid +1 -0
- data/tracks/fsharp/generators/Templates/_AssertEqual.liquid +1 -0
- data/tracks/fsharp/generators/Templates/_TestClass.liquid +13 -0
- data/tracks/fsharp/generators/Templates/_TestMethod.liquid +3 -0
- data/tracks/fsharp/generators/Templates/_TestMethodBody.liquid +4 -0
- data/tracks/go/.travis.yml +3 -3
- data/tracks/groovy/CONTRIBUTING.md +2 -2
- data/tracks/groovy/config.json +12 -0
- data/tracks/groovy/exercises/scrabble-score/Example.groovy +18 -0
- data/tracks/groovy/exercises/scrabble-score/README.md +63 -0
- data/tracks/groovy/exercises/scrabble-score/ScrabbleScore.groovy +7 -0
- data/tracks/groovy/exercises/scrabble-score/ScrabbleScoreSpec.groovy +45 -0
- data/tracks/groovy/exercises/two-fer/TwoFer.groovy +2 -2
- data/tracks/haskell/exercises/change/README.md +1 -1
- data/tracks/haskell/exercises/lens-person/README.md +1 -1
- data/tracks/haskell/exercises/palindrome-products/README.md +5 -12
- data/tracks/haskell/exercises/sum-of-multiples/README.md +0 -3
- data/tracks/idris/config.json +12 -0
- data/tracks/idris/exercises/accumulate/Accumulate.ipkg +5 -0
- data/tracks/idris/exercises/accumulate/Makefile +23 -0
- data/tracks/idris/exercises/accumulate/README.md +32 -0
- data/tracks/idris/exercises/accumulate/src/Example.idr +6 -0
- data/tracks/idris/exercises/accumulate/src/Test/Accumulate.idr +35 -0
- data/tracks/java/config/maintainers.json +4 -7
- data/tracks/java/config.json +99 -22
- data/tracks/java/exercises/binary-search-tree/.meta/src/reference/java/{BST.java → BinarySearchTree.java} +1 -1
- data/tracks/java/exercises/binary-search-tree/src/test/java/{BSTTest.java → BinarySearchTreeTest.java} +34 -36
- data/tracks/java/exercises/robot-simulator/src/main/java/GridPosition.java +19 -15
- data/tracks/java/exercises/saddle-points/.meta/src/reference/java/MatrixCoordinate.java +7 -1
- data/tracks/java/exercises/saddle-points/src/main/java/MatrixCoordinate.java +7 -1
- data/tracks/java/exercises/settings.gradle +1 -0
- data/tracks/java/exercises/tournament/.meta/src/reference/java/Result.java +5 -0
- data/tracks/java/exercises/tournament/.meta/src/reference/java/TeamResult.java +41 -0
- data/tracks/java/exercises/tournament/.meta/src/reference/java/Tournament.java +62 -0
- data/tracks/java/exercises/tournament/README.md +78 -0
- data/tracks/java/exercises/tournament/build.gradle +18 -0
- data/tracks/java/{.Rhistory → exercises/tournament/src/main/java/.keep} +0 -0
- data/tracks/java/exercises/tournament/src/test/java/TournamentTest.java +160 -0
- data/tracks/php/config.json +14 -0
- data/tracks/php/exercises/collatz-conjecture/collatz-conjecture_test.php +44 -0
- data/tracks/php/exercises/collatz-conjecture/example.php +18 -0
- data/tracks/python/exercises/circular-buffer/circular_buffer.py +1 -1
- data/tracks/python/exercises/clock/clock.py +1 -1
- data/tracks/python/exercises/etl/etl.py +1 -1
- data/tracks/python/exercises/grade-school/grade_school.py +1 -1
- data/tracks/python/exercises/grains/grains.py +2 -2
- data/tracks/python/exercises/kindergarten-garden/kindergarten_garden.py +1 -1
- data/tracks/python/exercises/linked-list/linked_list.py +1 -1
- data/tracks/python/exercises/rectangles/rectangles.py +1 -1
- data/tracks/python/exercises/sum-of-multiples/sum_of_multiples.py +1 -1
- data/tracks/rust/exercises/bob/tests/bob.rs +1 -0
- data/tracks/rust/exercises/crypto-square/tests/crypto-square.rs +7 -0
- data/tracks/rust/exercises/gigasecond/tests/gigasecond.rs +1 -1
- data/tracks/rust/exercises/phone-number/Cargo.lock +1 -1
- data/tracks/rust/exercises/phone-number/Cargo.toml +1 -1
- data/tracks/rust/exercises/phone-number/example.rs +17 -23
- data/tracks/rust/exercises/phone-number/tests/phone-number.rs +31 -40
- data/tracks/rust/exercises/say/tests/say.rs +2 -0
- data/tracks/rust/exercises/sum-of-multiples/README.md +0 -3
- data/tracks/scala/config.json +11 -0
- data/tracks/scala/exercises/collatz-conjecture/README.md +43 -0
- data/tracks/scala/exercises/collatz-conjecture/build.sbt +3 -0
- data/tracks/scala/exercises/collatz-conjecture/example.scala +17 -0
- data/tracks/scala/exercises/collatz-conjecture/src/main/scala/.keep +0 -0
- data/tracks/scala/exercises/collatz-conjecture/src/test/scala/CollatzConjectureTest.scala +34 -0
- data/tracks/scala/testgen/src/main/scala/CollatzConjectureTestGenerator.scala +35 -0
- data/tracks/scheme/config.json +8 -0
- data/tracks/scheme/exercises/word-count/README.md +19 -0
- data/tracks/scheme/exercises/word-count/example.scm +27 -0
- data/tracks/scheme/exercises/word-count/word-count-test.scm +90 -0
- data/tracks/scheme/exercises/word-count/word-count.scm +5 -0
- data/tracks/sml/README.md +20 -1
- data/tracks/sml/bin/generate +74 -20
- data/tracks/sml/exercises/binary/README.md +23 -5
- data/tracks/sml/exercises/binary/binary.sml +2 -0
- data/tracks/sml/exercises/binary/example.sml +10 -21
- data/tracks/sml/exercises/binary/test.sml +55 -30
- data/tracks/sml/exercises/binary/testlib.sml +159 -0
- data/tracks/sml/exercises/flatten-array/HINTS.md +8 -0
- data/tracks/sml/exercises/flatten-array/README.md +31 -6
- data/tracks/sml/exercises/flatten-array/example.sml +3 -4
- data/tracks/sml/exercises/flatten-array/flatten-array.sml +4 -5
- data/tracks/sml/exercises/flatten-array/test.sml +76 -52
- data/tracks/sml/exercises/flatten-array/testlib.sml +159 -0
- data/tracks/sml/exercises/nth-prime/HINTS.md +9 -0
- data/tracks/sml/exercises/nth-prime/README.md +32 -5
- data/tracks/sml/exercises/nth-prime/example.sml +28 -46
- data/tracks/sml/exercises/nth-prime/nth-prime.sml +1 -1
- data/tracks/sml/exercises/nth-prime/test.sml +19 -63
- data/tracks/sml/exercises/nth-prime/testlib.sml +159 -0
- data/tracks/sml/exercises/raindrops/README.md +21 -5
- data/tracks/typescript/config.json +14 -0
- data/tracks/typescript/exercises/triangle/README.md +55 -0
- data/tracks/typescript/exercises/triangle/package.json +36 -0
- data/tracks/typescript/exercises/triangle/triangle.example.ts +56 -0
- data/tracks/typescript/exercises/triangle/triangle.test.ts +79 -0
- data/tracks/typescript/exercises/triangle/triangle.ts +12 -0
- data/tracks/typescript/exercises/triangle/tsconfig.json +22 -0
- data/tracks/typescript/exercises/triangle/tslint.json +127 -0
- data/tracks/typescript/exercises/triangle/yarn.lock +2305 -0
- metadata +85 -6
- data/tracks/d/exercises/crypto-square/.dub/dub.json +0 -6
@@ -5,7 +5,7 @@ Use lenses to update nested records (specific to languages with immutable data).
|
|
5
5
|
Updating fields of nested records is kind of annoying in Haskell. One solution
|
6
6
|
is to use [lenses](https://wiki.haskell.org/Lens). Implement several record
|
7
7
|
accessing functions using lenses, you may use any library you want. The test
|
8
|
-
suite also allows you to avoid lenses
|
8
|
+
suite also allows you to avoid lenses altogether so you can experiment with
|
9
9
|
different approaches.
|
10
10
|
|
11
11
|
|
@@ -5,19 +5,12 @@ Detect palindrome products in a given range.
|
|
5
5
|
A palindromic number is a number that remains the same when its digits are
|
6
6
|
reversed. For example, `121` is a palindromic number but `112` is not.
|
7
7
|
|
8
|
-
Given
|
9
|
-
|
10
|
-
`a` and `b` are integers (possibly, but _not_ necessarily palindromic numbers).
|
8
|
+
Given a range of numbers, find the largest and smallest palindromes which
|
9
|
+
are products of numbers within that range.
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
It's possible (and indeed common) for a palindrome product to be the product
|
16
|
-
of multiple combinations of numbers. For example, the palindrome product `9` has
|
17
|
-
the factors `(1, 9)` and `(3, 3)`.
|
18
|
-
|
19
|
-
Write a program that given a range of integers, returns the smallest and largest
|
20
|
-
palindromic product of factors within that range, along with all the factors in the range for that product.
|
11
|
+
Your solution should return the largest and smallest palindromes, along with the
|
12
|
+
factors of each within the range. If the largest or smallest palindrome has more
|
13
|
+
than one pair of factors within the range, then return all the pairs.
|
21
14
|
|
22
15
|
## Example 1
|
23
16
|
|
data/tracks/idris/config.json
CHANGED
@@ -43,6 +43,18 @@
|
|
43
43
|
"Export Modifiers",
|
44
44
|
"Vectors"
|
45
45
|
]
|
46
|
+
},
|
47
|
+
{
|
48
|
+
"uuid": "612f5f98-09a6-9d80-5820-edeec5ce1e1544073ed",
|
49
|
+
"slug": "accumulate",
|
50
|
+
"core": false,
|
51
|
+
"unlocked_by": null,
|
52
|
+
"difficulty": 1,
|
53
|
+
"topics": [
|
54
|
+
"Functions",
|
55
|
+
"Lists",
|
56
|
+
"Map"
|
57
|
+
]
|
46
58
|
}
|
47
59
|
]
|
48
60
|
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
idris ?= idris
|
2
|
+
pkg := Accumulate
|
3
|
+
|
4
|
+
.PHONY: build clean clobber install rebuild test
|
5
|
+
|
6
|
+
all: test
|
7
|
+
|
8
|
+
build:
|
9
|
+
@ ${idris} --build ${pkg}.ipkg
|
10
|
+
|
11
|
+
clean:
|
12
|
+
@ ${idris} --clean ${pkg}.ipkg
|
13
|
+
|
14
|
+
clobber: clean
|
15
|
+
@ find . -name '*.ibc' -delete
|
16
|
+
|
17
|
+
install:
|
18
|
+
@ ${idris} --install ${pkg}.ipkg
|
19
|
+
|
20
|
+
rebuild: clean build
|
21
|
+
|
22
|
+
test:
|
23
|
+
@ ${idris} --testpkg ${pkg}.ipkg
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# Accumulate
|
2
|
+
|
3
|
+
Implement the `accumulate` operation, which, given a collection and an
|
4
|
+
operation to perform on each element of the collection, returns a new
|
5
|
+
collection containing the result of applying that operation to each element of
|
6
|
+
the input collection.
|
7
|
+
|
8
|
+
Given the collection of numbers:
|
9
|
+
|
10
|
+
- 1, 2, 3, 4, 5
|
11
|
+
|
12
|
+
And the operation:
|
13
|
+
|
14
|
+
- square a number (`x => x * x`)
|
15
|
+
|
16
|
+
Your code should be able to produce the collection of squares:
|
17
|
+
|
18
|
+
- 1, 4, 9, 16, 25
|
19
|
+
|
20
|
+
Check out the test suite to see the expected function signature.
|
21
|
+
|
22
|
+
## Restrictions
|
23
|
+
|
24
|
+
Keep your hands off that collect/map/fmap/whatchamacallit functionality
|
25
|
+
provided by your standard library!
|
26
|
+
Solve this one yourself using other basic tools instead.
|
27
|
+
## Source
|
28
|
+
|
29
|
+
Conversation with James Edward Gray II [https://twitter.com/jeg2](https://twitter.com/jeg2)
|
30
|
+
|
31
|
+
## Submitting Incomplete Solutions
|
32
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Test.Accumulate
|
2
|
+
|
3
|
+
import Accumulate
|
4
|
+
|
5
|
+
%access export
|
6
|
+
|
7
|
+
assertEq : Eq a => String -> (given : a) -> (expected : a) -> IO ()
|
8
|
+
assertEq label g e = putStrLn $ if g == e then label ++ ": Test Passed" else label ++ ": Test Failed"
|
9
|
+
|
10
|
+
testEmptyListDoesNothing : IO ()
|
11
|
+
testEmptyListDoesNothing = assertEq "empty list does nothing" (accumulate (\x => x) []) []
|
12
|
+
|
13
|
+
testIdentityFunctionDoesNothing : IO ()
|
14
|
+
testIdentityFunctionDoesNothing = assertEq "identity function does nothing" (accumulate (\x => x) [1,2,3]) [1,2,3]
|
15
|
+
|
16
|
+
testSquareFunctionDoublesInput : IO ()
|
17
|
+
testSquareFunctionDoublesInput = assertEq "square function doubles input" (accumulate (\x => x * x) [1,2,3]) [1,4,9]
|
18
|
+
|
19
|
+
testCubeFunctionTriplesInput : IO ()
|
20
|
+
testCubeFunctionTriplesInput = assertEq "cube function triples input" (accumulate (\x => x * x * x) [1,2,3]) [1,8,27]
|
21
|
+
|
22
|
+
testIncrementFunctionAddsOneToAllInput : IO ()
|
23
|
+
testIncrementFunctionAddsOneToAllInput = assertEq "increment function adds 1 to input" (accumulate (\x => x + 1) [1,2,3]) [2,3,4]
|
24
|
+
|
25
|
+
testDecrementFunctionAddsOneToAllInput : IO ()
|
26
|
+
testDecrementFunctionAddsOneToAllInput = assertEq "decrement function subtracts 1 from input" (accumulate (\x => x - 1) [1,2,3]) [0,1,2]
|
27
|
+
|
28
|
+
runTests : IO ()
|
29
|
+
runTests = do
|
30
|
+
testEmptyListDoesNothing
|
31
|
+
testIdentityFunctionDoesNothing
|
32
|
+
testSquareFunctionDoublesInput
|
33
|
+
testCubeFunctionTriplesInput
|
34
|
+
testIncrementFunctionAddsOneToAllInput
|
35
|
+
testDecrementFunctionAddsOneToAllInput
|
@@ -49,13 +49,10 @@
|
|
49
49
|
},
|
50
50
|
{
|
51
51
|
"alumnus": false,
|
52
|
-
"
|
53
|
-
"bio": null,
|
52
|
+
"bio": "I'm a software developer working for Softwire, a UK based software company. I love programming in pretty much any language (possibly with the exception of C++) but Java is probably the language I have the most experience with.",
|
54
53
|
"github_username": "FridaTveit",
|
55
|
-
"
|
56
|
-
"
|
57
|
-
"name": null,
|
58
|
-
"show_on_website": false
|
54
|
+
"name": "Frida Johanne Tveit",
|
55
|
+
"show_on_website": true
|
59
56
|
}
|
60
57
|
]
|
61
|
-
}
|
58
|
+
}
|
data/tracks/java/config.json
CHANGED
@@ -263,7 +263,11 @@
|
|
263
263
|
"core": true,
|
264
264
|
"difficulty": 4,
|
265
265
|
"slug": "rotational-cipher",
|
266
|
-
"topics":
|
266
|
+
"topics": [
|
267
|
+
"integers",
|
268
|
+
"strings",
|
269
|
+
"cryptography"
|
270
|
+
],
|
267
271
|
"unlocked_by": null,
|
268
272
|
"uuid": "9eb41883-55ef-4681-b5ac-5c2259302772"
|
269
273
|
},
|
@@ -307,7 +311,7 @@
|
|
307
311
|
"lists",
|
308
312
|
"loops",
|
309
313
|
"integers"
|
310
|
-
|
314
|
+
],
|
311
315
|
"unlocked_by": "triangle",
|
312
316
|
"uuid": "2c69db99-648d-4bd7-8012-1fbdeff6ca0a"
|
313
317
|
},
|
@@ -315,7 +319,16 @@
|
|
315
319
|
"core": true,
|
316
320
|
"difficulty": 4,
|
317
321
|
"slug": "saddle-points",
|
318
|
-
"topics":
|
322
|
+
"topics": [
|
323
|
+
"arrays",
|
324
|
+
"conditionals",
|
325
|
+
"integers",
|
326
|
+
"lists",
|
327
|
+
"loops",
|
328
|
+
"mathematics",
|
329
|
+
"matrices",
|
330
|
+
"sets"
|
331
|
+
],
|
319
332
|
"unlocked_by": null,
|
320
333
|
"uuid": "8dfc2f0d-1141-46e9-95e2-6f35ccf6f160"
|
321
334
|
},
|
@@ -324,12 +337,12 @@
|
|
324
337
|
"difficulty": 4,
|
325
338
|
"slug": "diamond",
|
326
339
|
"topics": [
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
340
|
+
"strings",
|
341
|
+
"loops",
|
342
|
+
"arrays",
|
343
|
+
"lists",
|
344
|
+
"text_formatting"
|
345
|
+
],
|
333
346
|
"unlocked_by": "two-fer",
|
334
347
|
"uuid": "ecbd997b-86f4-4e11-9ff0-706ac2899415"
|
335
348
|
},
|
@@ -350,7 +363,12 @@
|
|
350
363
|
"core": true,
|
351
364
|
"difficulty": 5,
|
352
365
|
"slug": "flatten-array",
|
353
|
-
"topics":
|
366
|
+
"topics": [
|
367
|
+
"arrays",
|
368
|
+
"lists",
|
369
|
+
"loops",
|
370
|
+
"recursion"
|
371
|
+
],
|
354
372
|
"unlocked_by": null,
|
355
373
|
"uuid": "a732a838-8170-458a-a85e-d6b4c46f97a1"
|
356
374
|
},
|
@@ -481,7 +499,10 @@
|
|
481
499
|
"core": false,
|
482
500
|
"difficulty": 5,
|
483
501
|
"slug": "bracket-push",
|
484
|
-
"topics":
|
502
|
+
"topics": [
|
503
|
+
"stacks",
|
504
|
+
"strings"
|
505
|
+
],
|
485
506
|
"unlocked_by": "flatten-array",
|
486
507
|
"uuid": "85aa50ac-0141-49eb-bc6f-62f3f7a97647"
|
487
508
|
},
|
@@ -503,7 +524,11 @@
|
|
503
524
|
"core": false,
|
504
525
|
"difficulty": 5,
|
505
526
|
"slug": "atbash-cipher",
|
506
|
-
"topics":
|
527
|
+
"topics": [
|
528
|
+
"strings",
|
529
|
+
"cryptography",
|
530
|
+
"security"
|
531
|
+
],
|
507
532
|
"unlocked_by": "rotational-cipher",
|
508
533
|
"uuid": "d36ce010-210f-4e9a-9d6c-cb933e0a59af"
|
509
534
|
},
|
@@ -558,10 +583,10 @@
|
|
558
583
|
"difficulty": 6,
|
559
584
|
"slug": "food-chain",
|
560
585
|
"topics": [
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
586
|
+
"arrays",
|
587
|
+
"lists",
|
588
|
+
"strings"
|
589
|
+
],
|
565
590
|
"unlocked_by": "two-fer",
|
566
591
|
"uuid": "dd3e6fd6-5359-4978-acd7-c39374cead4d"
|
567
592
|
},
|
@@ -622,7 +647,12 @@
|
|
622
647
|
"core": false,
|
623
648
|
"difficulty": 6,
|
624
649
|
"slug": "robot-simulator",
|
625
|
-
"topics":
|
650
|
+
"topics": [
|
651
|
+
"classes",
|
652
|
+
"logic",
|
653
|
+
"loops",
|
654
|
+
"enumerations"
|
655
|
+
],
|
626
656
|
"unlocked_by": "secret-handshake",
|
627
657
|
"uuid": "993bde9d-7774-4e7a-a381-9eee75f28ecb"
|
628
658
|
},
|
@@ -690,6 +720,20 @@
|
|
690
720
|
"unlocked_by": "scrabble-score",
|
691
721
|
"uuid": "4b3f7771-c642-4278-a3d9-2fb958f26361"
|
692
722
|
},
|
723
|
+
{
|
724
|
+
"core": false,
|
725
|
+
"difficulty": 6,
|
726
|
+
"slug": "tournament",
|
727
|
+
"topics": [
|
728
|
+
"loops",
|
729
|
+
"maps",
|
730
|
+
"sorting",
|
731
|
+
"parsing",
|
732
|
+
"text_formatting"
|
733
|
+
],
|
734
|
+
"unlocked_by": "matrix",
|
735
|
+
"uuid": "99191d53-0fed-f680-de7a-55cfb872de17bc58629"
|
736
|
+
},
|
693
737
|
{
|
694
738
|
"core": false,
|
695
739
|
"difficulty": 7,
|
@@ -748,7 +792,12 @@
|
|
748
792
|
"core": false,
|
749
793
|
"difficulty": 7,
|
750
794
|
"slug": "meetup",
|
751
|
-
"topics":
|
795
|
+
"topics": [
|
796
|
+
"conditionals",
|
797
|
+
"dates",
|
798
|
+
"loops",
|
799
|
+
"enumerations"
|
800
|
+
],
|
752
801
|
"unlocked_by": "gigasecond",
|
753
802
|
"uuid": "602511d5-7e89-4def-b072-4dd311816810"
|
754
803
|
},
|
@@ -756,7 +805,14 @@
|
|
756
805
|
"core": false,
|
757
806
|
"difficulty": 7,
|
758
807
|
"slug": "crypto-square",
|
759
|
-
"topics":
|
808
|
+
"topics": [
|
809
|
+
"strings",
|
810
|
+
"text_formatting",
|
811
|
+
"mathematics",
|
812
|
+
"cryptography",
|
813
|
+
"security",
|
814
|
+
"lists"
|
815
|
+
],
|
760
816
|
"unlocked_by": "rotational-cipher",
|
761
817
|
"uuid": "162bebdc-9bf2-43c0-8460-a91f5fc16147"
|
762
818
|
},
|
@@ -776,7 +832,14 @@
|
|
776
832
|
"core": false,
|
777
833
|
"difficulty": 7,
|
778
834
|
"slug": "clock",
|
779
|
-
"topics":
|
835
|
+
"topics": [
|
836
|
+
"equality",
|
837
|
+
"integers",
|
838
|
+
"logic",
|
839
|
+
"object_oriented_programming",
|
840
|
+
"strings",
|
841
|
+
"time"
|
842
|
+
],
|
780
843
|
"unlocked_by": "saddle-points",
|
781
844
|
"uuid": "97c8fcd4-85b6-41cb-9de2-b4e1b4951222"
|
782
845
|
},
|
@@ -820,7 +883,14 @@
|
|
820
883
|
"core": false,
|
821
884
|
"difficulty": 8,
|
822
885
|
"slug": "simple-cipher",
|
823
|
-
"topics":
|
886
|
+
"topics": [
|
887
|
+
"strings",
|
888
|
+
"cryptography",
|
889
|
+
"security",
|
890
|
+
"mathematics",
|
891
|
+
"randomness",
|
892
|
+
"exception_handling"
|
893
|
+
],
|
824
894
|
"unlocked_by": "rotational-cipher",
|
825
895
|
"uuid": "f654831f-c34b-44f5-9dd5-054efbb486f2"
|
826
896
|
},
|
@@ -856,7 +926,14 @@
|
|
856
926
|
"core": false,
|
857
927
|
"difficulty": 8,
|
858
928
|
"slug": "palindrome-products",
|
859
|
-
"topics":
|
929
|
+
"topics": [
|
930
|
+
"conditionals",
|
931
|
+
"integers",
|
932
|
+
"lists",
|
933
|
+
"loops",
|
934
|
+
"maps",
|
935
|
+
"mathematics"
|
936
|
+
],
|
860
937
|
"unlocked_by": "saddle-points",
|
861
938
|
"uuid": "873c05de-b5f5-4c5b-97f0-d1ede8a82832"
|
862
939
|
},
|
@@ -6,15 +6,21 @@ import static org.junit.Assert.assertEquals;
|
|
6
6
|
import static org.junit.Assert.assertNotNull;
|
7
7
|
import org.junit.Ignore;
|
8
8
|
import org.junit.Test;
|
9
|
+
import org.junit.Before;
|
9
10
|
|
10
|
-
public class
|
11
|
+
public class BinarySearchTreeTest {
|
12
|
+
private BinarySearchTree<Integer> binarySearchTree;
|
13
|
+
|
14
|
+
@Before
|
15
|
+
public void setUp() {
|
16
|
+
binarySearchTree = new BinarySearchTree<>();
|
17
|
+
}
|
11
18
|
|
12
19
|
@Test
|
13
20
|
public void dataIsRetained() {
|
14
|
-
BST<Integer> bst = new BST<>();
|
15
21
|
final int actual = 4;
|
16
|
-
|
17
|
-
final
|
22
|
+
binarySearchTree.insert(actual);
|
23
|
+
final BinarySearchTree.Node<Integer> root = binarySearchTree.getRoot();
|
18
24
|
assertNotNull(root);
|
19
25
|
final int expected = root.getData();
|
20
26
|
assertEquals(expected, actual);
|
@@ -23,16 +29,15 @@ public class BSTTest {
|
|
23
29
|
@Ignore("Remove to run test")
|
24
30
|
@Test
|
25
31
|
public void insertsLess() {
|
26
|
-
BST<Integer> bst = new BST<>();
|
27
32
|
final int expectedRoot = 4;
|
28
33
|
final int expectedLeft = 2;
|
29
34
|
|
30
|
-
|
31
|
-
|
35
|
+
binarySearchTree.insert(expectedRoot);
|
36
|
+
binarySearchTree.insert(expectedLeft);
|
32
37
|
|
33
|
-
final
|
38
|
+
final BinarySearchTree.Node<Integer> root = binarySearchTree.getRoot();
|
34
39
|
assertNotNull(root);
|
35
|
-
final
|
40
|
+
final BinarySearchTree.Node<Integer> left = root.getLeft();
|
36
41
|
assertNotNull(left);
|
37
42
|
|
38
43
|
final int actualRoot = root.getData();
|
@@ -44,16 +49,15 @@ public class BSTTest {
|
|
44
49
|
@Ignore("Remove to run test")
|
45
50
|
@Test
|
46
51
|
public void insertsSame() {
|
47
|
-
BST<Integer> bst = new BST<>();
|
48
52
|
final int expectedRoot = 4;
|
49
53
|
final int expectedLeft = 4;
|
50
54
|
|
51
|
-
|
52
|
-
|
55
|
+
binarySearchTree.insert(expectedRoot);
|
56
|
+
binarySearchTree.insert(expectedLeft);
|
53
57
|
|
54
|
-
final
|
58
|
+
final BinarySearchTree.Node<Integer> root = binarySearchTree.getRoot();
|
55
59
|
assertNotNull(root);
|
56
|
-
final
|
60
|
+
final BinarySearchTree.Node<Integer> left = root.getLeft();
|
57
61
|
assertNotNull(left);
|
58
62
|
|
59
63
|
final int actualRoot = root.getData();
|
@@ -65,16 +69,15 @@ public class BSTTest {
|
|
65
69
|
@Ignore("Remove to run test")
|
66
70
|
@Test
|
67
71
|
public void insertsRight() {
|
68
|
-
BST<Integer> bst = new BST<>();
|
69
72
|
final int expectedRoot = 4;
|
70
73
|
final int expectedRight = 5;
|
71
74
|
|
72
|
-
|
73
|
-
|
75
|
+
binarySearchTree.insert(expectedRoot);
|
76
|
+
binarySearchTree.insert(expectedRight);
|
74
77
|
|
75
|
-
final
|
78
|
+
final BinarySearchTree.Node<Integer> root = binarySearchTree.getRoot();
|
76
79
|
assertNotNull(root);
|
77
|
-
final
|
80
|
+
final BinarySearchTree.Node<Integer> right = root.getRight();
|
78
81
|
assertNotNull(right);
|
79
82
|
|
80
83
|
final int actualRoot = root.getData();
|
@@ -86,7 +89,6 @@ public class BSTTest {
|
|
86
89
|
@Ignore("Remove to run test")
|
87
90
|
@Test
|
88
91
|
public void createsComplexTree() {
|
89
|
-
BST<Integer> bst = new BST<>();
|
90
92
|
List<Integer> expected = Collections.unmodifiableList(
|
91
93
|
Arrays.asList(4, 2, 6, 1, 3, 5, 7)
|
92
94
|
);
|
@@ -94,60 +96,56 @@ public class BSTTest {
|
|
94
96
|
List<Integer> treeData = Collections.unmodifiableList(
|
95
97
|
Arrays.asList(4, 2, 6, 1, 3, 7, 5)
|
96
98
|
);
|
97
|
-
treeData.forEach(
|
99
|
+
treeData.forEach(binarySearchTree::insert);
|
98
100
|
|
99
|
-
List<Integer> actual =
|
101
|
+
List<Integer> actual = binarySearchTree.getAsLevelOrderList();
|
100
102
|
assertEquals(expected, actual);
|
101
103
|
}
|
102
104
|
|
103
105
|
@Ignore("Remove to run test")
|
104
106
|
@Test
|
105
107
|
public void sortsSingleElement() {
|
106
|
-
BST<Integer> bst = new BST<>();
|
107
108
|
List<Integer> expected = Collections.unmodifiableList(
|
108
109
|
Collections.singletonList(4)
|
109
110
|
);
|
110
111
|
|
111
|
-
|
112
|
+
binarySearchTree.insert(4);
|
112
113
|
|
113
|
-
List<Integer> actual =
|
114
|
+
List<Integer> actual = binarySearchTree.getAsSortedList();
|
114
115
|
assertEquals(expected, actual);
|
115
116
|
}
|
116
117
|
|
117
118
|
@Ignore("Remove to run test")
|
118
119
|
@Test
|
119
120
|
public void sortsCollectionOfTwoIfSecondInsertedIsSmallerThanFirst() {
|
120
|
-
BST<Integer> bst = new BST<>();
|
121
121
|
List<Integer> expected = Collections.unmodifiableList(
|
122
122
|
Arrays.asList(2, 4)
|
123
123
|
);
|
124
124
|
|
125
|
-
|
126
|
-
|
125
|
+
binarySearchTree.insert(4);
|
126
|
+
binarySearchTree.insert(2);
|
127
127
|
|
128
|
-
List<Integer> actual =
|
128
|
+
List<Integer> actual = binarySearchTree.getAsSortedList();
|
129
129
|
assertEquals(expected, actual);
|
130
130
|
}
|
131
131
|
|
132
132
|
@Ignore("Remove to run test")
|
133
133
|
@Test
|
134
134
|
public void sortsCollectionOfTwoIfSecondInsertedIsBiggerThanFirst() {
|
135
|
-
BST<Integer> bst = new BST<>();
|
136
135
|
List<Integer> expected = Collections.unmodifiableList(
|
137
136
|
Arrays.asList(4, 5)
|
138
137
|
);
|
139
138
|
|
140
|
-
|
141
|
-
|
139
|
+
binarySearchTree.insert(4);
|
140
|
+
binarySearchTree.insert(5);
|
142
141
|
|
143
|
-
List<Integer> actual =
|
142
|
+
List<Integer> actual = binarySearchTree.getAsSortedList();
|
144
143
|
assertEquals(expected, actual);
|
145
144
|
}
|
146
145
|
|
147
146
|
@Ignore("Remove to run test")
|
148
147
|
@Test
|
149
148
|
public void iteratesOverComplexTree() {
|
150
|
-
BST<Integer> bst = new BST<>();
|
151
149
|
List<Integer> expected = Collections.unmodifiableList(
|
152
150
|
Arrays.asList(1, 2, 3, 4, 5, 6, 7)
|
153
151
|
);
|
@@ -155,9 +153,9 @@ public class BSTTest {
|
|
155
153
|
List<Integer> treeData = Collections.unmodifiableList(
|
156
154
|
Arrays.asList(4, 2, 1, 3, 6, 7, 5)
|
157
155
|
);
|
158
|
-
treeData.forEach(
|
156
|
+
treeData.forEach(binarySearchTree::insert);
|
159
157
|
|
160
|
-
List<Integer> actual =
|
158
|
+
List<Integer> actual = binarySearchTree.getAsSortedList();
|
161
159
|
assertEquals(expected, actual);
|
162
160
|
}
|
163
161
|
}
|
@@ -9,21 +9,25 @@ class GridPosition {
|
|
9
9
|
this.y = y;
|
10
10
|
}
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
* and
|
20
|
-
*
|
21
|
-
* https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()
|
22
|
-
*
|
23
|
-
* for more information.
|
24
|
-
*/
|
25
|
-
boolean equals(final GridPosition gridPosition) {
|
26
|
-
return this.x == gridPosition.x && this.y == gridPosition.y;
|
12
|
+
@Override
|
13
|
+
public int hashCode() {
|
14
|
+
final int prime = 31;
|
15
|
+
int result = 1;
|
16
|
+
result = prime * result + x;
|
17
|
+
result = prime * result + y;
|
18
|
+
return result;
|
27
19
|
}
|
28
20
|
|
21
|
+
@Override
|
22
|
+
public boolean equals(Object obj) {
|
23
|
+
if (this == obj) {
|
24
|
+
return true;
|
25
|
+
} else if (obj == null || getClass() != obj.getClass()) {
|
26
|
+
return false;
|
27
|
+
} else if (x != ((GridPosition) obj).x || y != ((GridPosition)obj).y) {
|
28
|
+
return false;
|
29
|
+
} else {
|
30
|
+
return true;
|
31
|
+
}
|
32
|
+
}
|
29
33
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class MatrixCoordinate {
|
1
|
+
class MatrixCoordinate implements Comparable<MatrixCoordinate> {
|
2
2
|
private final int row;
|
3
3
|
private final int col;
|
4
4
|
|
@@ -30,4 +30,10 @@ class MatrixCoordinate {
|
|
30
30
|
result = 31 * result + col;
|
31
31
|
return result;
|
32
32
|
}
|
33
|
+
|
34
|
+
@Override
|
35
|
+
public int compareTo(MatrixCoordinate o) {
|
36
|
+
int rowComparison = Integer.compare(row, o.row);
|
37
|
+
return (rowComparison == 0) ? Integer.compare(col, o.col) : rowComparison;
|
38
|
+
}
|
33
39
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class MatrixCoordinate {
|
1
|
+
class MatrixCoordinate implements Comparable<MatrixCoordinate> {
|
2
2
|
private final int row;
|
3
3
|
private final int col;
|
4
4
|
|
@@ -30,4 +30,10 @@ class MatrixCoordinate {
|
|
30
30
|
result = 31 * result + col;
|
31
31
|
return result;
|
32
32
|
}
|
33
|
+
|
34
|
+
@Override
|
35
|
+
public int compareTo(MatrixCoordinate o) {
|
36
|
+
int rowComparison = Integer.compare(row, o.row);
|
37
|
+
return (rowComparison == 0) ? Integer.compare(col, o.col) : rowComparison;
|
38
|
+
}
|
33
39
|
}
|