trackler 2.2.1.44 → 2.2.1.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
}
|