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
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
class TeamResult {
|
|
2
|
+
|
|
3
|
+
private int wins;
|
|
4
|
+
private int losses;
|
|
5
|
+
private int draws;
|
|
6
|
+
|
|
7
|
+
TeamResult() {
|
|
8
|
+
wins = 0;
|
|
9
|
+
losses = 0;
|
|
10
|
+
draws = 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
int getPlayed() {
|
|
14
|
+
return wins + losses + draws;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
int getPoints() {
|
|
18
|
+
return wins * 3 + draws;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
int getWins() {
|
|
22
|
+
return wins;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
int getLosses() {
|
|
26
|
+
return losses;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
int getDraws() {
|
|
30
|
+
return draws;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
void applyResult(final Result result) {
|
|
34
|
+
switch (result) {
|
|
35
|
+
case WIN: wins++; break;
|
|
36
|
+
case DRAW: draws++; break;
|
|
37
|
+
case LOSS: losses++; break;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import java.util.HashMap;
|
|
2
|
+
import java.util.Map;
|
|
3
|
+
import java.util.regex.Pattern;
|
|
4
|
+
|
|
5
|
+
class Tournament {
|
|
6
|
+
|
|
7
|
+
private static Pattern separatorPattern = Pattern.compile(";");
|
|
8
|
+
private static Pattern newlinePattern = Pattern.compile("\\n");
|
|
9
|
+
|
|
10
|
+
private Map<String, TeamResult> results;
|
|
11
|
+
|
|
12
|
+
Tournament() {
|
|
13
|
+
results = new HashMap<>();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
String printTable() {
|
|
17
|
+
StringBuilder sb = new StringBuilder();
|
|
18
|
+
sb.append(String.format("%-30s | %2s | %2s | %2s | %2s | %2s\n",
|
|
19
|
+
"Team", "MP", "W", "D", "L", "P"));
|
|
20
|
+
results.entrySet()
|
|
21
|
+
.stream()
|
|
22
|
+
.sorted(Tournament::comparator)
|
|
23
|
+
.forEach(e -> sb.append(
|
|
24
|
+
String.format("%-30s | %2d | %2d | %2d | %2d | %2d\n",
|
|
25
|
+
e.getKey(), e.getValue().getPlayed(), e.getValue().getWins(), e.getValue().getDraws(),
|
|
26
|
+
e.getValue().getLosses(), e.getValue().getPoints())));
|
|
27
|
+
return sb.toString();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
private static int comparator(Map.Entry<String, TeamResult> teamA, Map.Entry<String, TeamResult> teamB) {
|
|
31
|
+
int compareByPoints = Integer.compare(teamB.getValue().getPoints(), teamA.getValue().getPoints());
|
|
32
|
+
return compareByPoints == 0 ? teamA.getKey().compareTo(teamB.getKey()) : compareByPoints;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
void applyResults(final String resultString) {
|
|
36
|
+
String[] matches = newlinePattern.split(resultString);
|
|
37
|
+
for (String matchString: matches) {
|
|
38
|
+
String[] column = separatorPattern.split(matchString);
|
|
39
|
+
final TeamResult home = results.getOrDefault(column[0], new TeamResult());
|
|
40
|
+
final TeamResult away = results.getOrDefault(column[1], new TeamResult());
|
|
41
|
+
final Result result = Result.valueOf(column[2].toUpperCase());
|
|
42
|
+
switch (result) {
|
|
43
|
+
case WIN:
|
|
44
|
+
home.applyResult(Result.WIN);
|
|
45
|
+
away.applyResult(Result.LOSS);
|
|
46
|
+
break;
|
|
47
|
+
case LOSS:
|
|
48
|
+
home.applyResult(Result.LOSS);
|
|
49
|
+
away.applyResult(Result.WIN);
|
|
50
|
+
break;
|
|
51
|
+
case DRAW:
|
|
52
|
+
home.applyResult(Result.DRAW);
|
|
53
|
+
away.applyResult(Result.DRAW);
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
results.put(column[0], home);
|
|
57
|
+
results.put(column[1], away);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Tournament
|
|
2
|
+
|
|
3
|
+
Tally the results of a small football competition.
|
|
4
|
+
|
|
5
|
+
Based on an input file containing which team played against which and what the
|
|
6
|
+
outcome was, create a file with a table like this:
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
Team | MP | W | D | L | P
|
|
10
|
+
Devastating Donkeys | 3 | 2 | 1 | 0 | 7
|
|
11
|
+
Allegoric Alaskans | 3 | 2 | 0 | 1 | 6
|
|
12
|
+
Blithering Badgers | 3 | 1 | 0 | 2 | 3
|
|
13
|
+
Courageous Californians | 3 | 0 | 1 | 2 | 1
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
What do those abbreviations mean?
|
|
17
|
+
|
|
18
|
+
- MP: Matches Played
|
|
19
|
+
- W: Matches Won
|
|
20
|
+
- D: Matches Drawn (Tied)
|
|
21
|
+
- L: Matches Lost
|
|
22
|
+
- P: Points
|
|
23
|
+
|
|
24
|
+
A win earns a team 3 points. A draw earns 1. A loss earns 0.
|
|
25
|
+
|
|
26
|
+
The outcome should be ordered by points, descending. In case of a tie, teams are ordered alphabetically.
|
|
27
|
+
|
|
28
|
+
###
|
|
29
|
+
|
|
30
|
+
Input
|
|
31
|
+
|
|
32
|
+
Your tallying program will receive input that looks like:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Allegoric Alaskans;Blithering Badgers;win
|
|
36
|
+
Devastating Donkeys;Courageous Californians;draw
|
|
37
|
+
Devastating Donkeys;Allegoric Alaskans;win
|
|
38
|
+
Courageous Californians;Blithering Badgers;loss
|
|
39
|
+
Blithering Badgers;Devastating Donkeys;loss
|
|
40
|
+
Allegoric Alaskans;Courageous Californians;win
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The result of the match refers to the first team listed. So this line
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
Allegoric Alaskans;Blithering Badgers;win
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Means that the Allegoric Alaskans beat the Blithering Badgers.
|
|
50
|
+
|
|
51
|
+
This line:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
Courageous Californians;Blithering Badgers;loss
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Means that the Blithering Badgers beat the Courageous Californians.
|
|
58
|
+
|
|
59
|
+
And this line:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
Devastating Donkeys;Courageous Californians;draw
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Means that the Devastating Donkeys and Courageous Californians tied.
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
To run the tests:
|
|
69
|
+
|
|
70
|
+
```sh
|
|
71
|
+
$ gradle test
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
For more detailed info about the Java track see the [help page](http://exercism.io/languages/java).
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
## Submitting Incomplete Solutions
|
|
78
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
apply plugin: "java"
|
|
2
|
+
apply plugin: "eclipse"
|
|
3
|
+
apply plugin: "idea"
|
|
4
|
+
|
|
5
|
+
repositories {
|
|
6
|
+
mavenCentral()
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
dependencies {
|
|
10
|
+
testCompile "junit:junit:4.12"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
test {
|
|
14
|
+
testLogging {
|
|
15
|
+
exceptionFormat = 'full'
|
|
16
|
+
events = ["passed", "failed", "skipped"]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import org.junit.Before;
|
|
2
|
+
import org.junit.Ignore;
|
|
3
|
+
import org.junit.Test;
|
|
4
|
+
|
|
5
|
+
import static org.junit.Assert.assertEquals;
|
|
6
|
+
|
|
7
|
+
public class TournamentTest {
|
|
8
|
+
|
|
9
|
+
private Tournament tournament;
|
|
10
|
+
|
|
11
|
+
@Before
|
|
12
|
+
public void setUp() {
|
|
13
|
+
tournament = new Tournament();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@Test
|
|
17
|
+
public void justTheHeaderIfNoInput() {
|
|
18
|
+
assertEquals("Team | MP | W | D | L | P\n", tournament.printTable());
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@Ignore("Remove to run test")
|
|
22
|
+
@Test
|
|
23
|
+
public void aWinIsThreePointsALossIsZeroPoints() {
|
|
24
|
+
tournament.applyResults("Allegoric Alaskans;Blithering Badgers;win");
|
|
25
|
+
assertEquals(
|
|
26
|
+
"Team | MP | W | D | L | P\n" +
|
|
27
|
+
"Allegoric Alaskans | 1 | 1 | 0 | 0 | 3\n" +
|
|
28
|
+
"Blithering Badgers | 1 | 0 | 0 | 1 | 0\n",
|
|
29
|
+
tournament.printTable());
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@Ignore("Remove to run test")
|
|
33
|
+
@Test
|
|
34
|
+
public void aWinCanAlsoBeExpressedAsALoss() {
|
|
35
|
+
tournament.applyResults("Blithering Badgers;Allegoric Alaskans;loss");
|
|
36
|
+
assertEquals(
|
|
37
|
+
"Team | MP | W | D | L | P\n" +
|
|
38
|
+
"Allegoric Alaskans | 1 | 1 | 0 | 0 | 3\n" +
|
|
39
|
+
"Blithering Badgers | 1 | 0 | 0 | 1 | 0\n",
|
|
40
|
+
tournament.printTable());
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@Ignore("Remove to run test")
|
|
44
|
+
@Test
|
|
45
|
+
public void aDifferentTeamCanWin() {
|
|
46
|
+
tournament.applyResults("Blithering Badgers;Allegoric Alaskans;win");
|
|
47
|
+
assertEquals(
|
|
48
|
+
"Team | MP | W | D | L | P\n" +
|
|
49
|
+
"Blithering Badgers | 1 | 1 | 0 | 0 | 3\n" +
|
|
50
|
+
"Allegoric Alaskans | 1 | 0 | 0 | 1 | 0\n",
|
|
51
|
+
tournament.printTable());
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@Ignore("Remove to run test")
|
|
55
|
+
@Test
|
|
56
|
+
public void aDrawIsOnePointEach() {
|
|
57
|
+
tournament.applyResults( "Allegoric Alaskans;Blithering Badgers;draw");
|
|
58
|
+
assertEquals(
|
|
59
|
+
"Team | MP | W | D | L | P\n" +
|
|
60
|
+
"Allegoric Alaskans | 1 | 0 | 1 | 0 | 1\n" +
|
|
61
|
+
"Blithering Badgers | 1 | 0 | 1 | 0 | 1\n",
|
|
62
|
+
tournament.printTable());
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@Ignore("Remove to run test")
|
|
66
|
+
@Test
|
|
67
|
+
public void thereCanBeMoreThanOneMatch() {
|
|
68
|
+
tournament.applyResults(
|
|
69
|
+
"Allegoric Alaskans;Blithering Badgers;win\n" +
|
|
70
|
+
"Allegoric Alaskans;Blithering Badgers;win");
|
|
71
|
+
assertEquals(
|
|
72
|
+
"Team | MP | W | D | L | P\n" +
|
|
73
|
+
"Allegoric Alaskans | 2 | 2 | 0 | 0 | 6\n" +
|
|
74
|
+
"Blithering Badgers | 2 | 0 | 0 | 2 | 0\n",
|
|
75
|
+
tournament.printTable());
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@Ignore("Remove to run test")
|
|
79
|
+
@Test
|
|
80
|
+
public void thereCanBeMoreThanOneWinner() {
|
|
81
|
+
tournament.applyResults(
|
|
82
|
+
"Allegoric Alaskans;Blithering Badgers;loss\n" +
|
|
83
|
+
"Allegoric Alaskans;Blithering Badgers;win");
|
|
84
|
+
assertEquals(
|
|
85
|
+
"Team | MP | W | D | L | P\n" +
|
|
86
|
+
"Allegoric Alaskans | 2 | 1 | 0 | 1 | 3\n" +
|
|
87
|
+
"Blithering Badgers | 2 | 1 | 0 | 1 | 3\n",
|
|
88
|
+
tournament.printTable());
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
@Ignore("Remove to run test")
|
|
92
|
+
@Test
|
|
93
|
+
public void thereCanBeMoreThanTwoTeams() {
|
|
94
|
+
tournament.applyResults(
|
|
95
|
+
"Allegoric Alaskans;Blithering Badgers;win\n" +
|
|
96
|
+
"Blithering Badgers;Courageous Californians;win\n" +
|
|
97
|
+
"Courageous Californians;Allegoric Alaskans;loss");
|
|
98
|
+
assertEquals(
|
|
99
|
+
"Team | MP | W | D | L | P\n" +
|
|
100
|
+
"Allegoric Alaskans | 2 | 2 | 0 | 0 | 6\n" +
|
|
101
|
+
"Blithering Badgers | 2 | 1 | 0 | 1 | 3\n" +
|
|
102
|
+
"Courageous Californians | 2 | 0 | 0 | 2 | 0\n",
|
|
103
|
+
tournament.printTable());
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@Ignore("Remove to run test")
|
|
107
|
+
@Test
|
|
108
|
+
public void typicalInput() {
|
|
109
|
+
tournament.applyResults(
|
|
110
|
+
"Allegoric Alaskans;Blithering Badgers;win\n" +
|
|
111
|
+
"Devastating Donkeys;Courageous Californians;draw\n" +
|
|
112
|
+
"Devastating Donkeys;Allegoric Alaskans;win\n" +
|
|
113
|
+
"Courageous Californians;Blithering Badgers;loss\n" +
|
|
114
|
+
"Blithering Badgers;Devastating Donkeys;loss\n" +
|
|
115
|
+
"Allegoric Alaskans;Courageous Californians;win");
|
|
116
|
+
assertEquals(
|
|
117
|
+
"Team | MP | W | D | L | P\n" +
|
|
118
|
+
"Devastating Donkeys | 3 | 2 | 1 | 0 | 7\n" +
|
|
119
|
+
"Allegoric Alaskans | 3 | 2 | 0 | 1 | 6\n" +
|
|
120
|
+
"Blithering Badgers | 3 | 1 | 0 | 2 | 3\n" +
|
|
121
|
+
"Courageous Californians | 3 | 0 | 1 | 2 | 1\n",
|
|
122
|
+
tournament.printTable());
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
@Ignore("Remove to run test")
|
|
126
|
+
@Test
|
|
127
|
+
public void incompleteCompetition() {
|
|
128
|
+
tournament.applyResults(
|
|
129
|
+
"Allegoric Alaskans;Blithering Badgers;loss\n" +
|
|
130
|
+
"Devastating Donkeys;Allegoric Alaskans;loss\n" +
|
|
131
|
+
"Courageous Californians;Blithering Badgers;draw\n" +
|
|
132
|
+
"Allegoric Alaskans;Courageous Californians;win");
|
|
133
|
+
assertEquals(
|
|
134
|
+
"Team | MP | W | D | L | P\n" +
|
|
135
|
+
"Allegoric Alaskans | 3 | 2 | 0 | 1 | 6\n" +
|
|
136
|
+
"Blithering Badgers | 2 | 1 | 1 | 0 | 4\n" +
|
|
137
|
+
"Courageous Californians | 2 | 0 | 1 | 1 | 1\n" +
|
|
138
|
+
"Devastating Donkeys | 1 | 0 | 0 | 1 | 0\n",
|
|
139
|
+
tournament.printTable());
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
@Ignore("Remove to run test")
|
|
143
|
+
@Test
|
|
144
|
+
public void tiesBrokenAlphabetically() {
|
|
145
|
+
tournament.applyResults(
|
|
146
|
+
"Courageous Californians;Devastating Donkeys;win\n" +
|
|
147
|
+
"Allegoric Alaskans;Blithering Badgers;win\n" +
|
|
148
|
+
"Devastating Donkeys;Allegoric Alaskans;loss\n" +
|
|
149
|
+
"Courageous Californians;Blithering Badgers;win\n" +
|
|
150
|
+
"Blithering Badgers;Devastating Donkeys;draw\n" +
|
|
151
|
+
"Allegoric Alaskans;Courageous Californians;draw");
|
|
152
|
+
assertEquals(
|
|
153
|
+
"Team | MP | W | D | L | P\n" +
|
|
154
|
+
"Allegoric Alaskans | 3 | 2 | 1 | 0 | 7\n" +
|
|
155
|
+
"Courageous Californians | 3 | 2 | 1 | 0 | 7\n" +
|
|
156
|
+
"Blithering Badgers | 3 | 0 | 1 | 2 | 1\n" +
|
|
157
|
+
"Devastating Donkeys | 3 | 0 | 1 | 2 | 1\n",
|
|
158
|
+
tournament.printTable());
|
|
159
|
+
}
|
|
160
|
+
}
|
data/tracks/php/config.json
CHANGED
|
@@ -574,6 +574,20 @@
|
|
|
574
574
|
"topics": [
|
|
575
575
|
"Arrays"
|
|
576
576
|
]
|
|
577
|
+
},
|
|
578
|
+
{
|
|
579
|
+
"uuid": "94f22d74-e358-41cb-be64-8abc111ff95a",
|
|
580
|
+
"core" : false,
|
|
581
|
+
"difficulty" : 1,
|
|
582
|
+
"slug" : "collatz-conjecture",
|
|
583
|
+
"topics": [
|
|
584
|
+
"Control-flow (loops)",
|
|
585
|
+
"Control-flow (conditionals)",
|
|
586
|
+
"Integers",
|
|
587
|
+
"Algorithms",
|
|
588
|
+
"Mathematics"
|
|
589
|
+
],
|
|
590
|
+
"unlocked_by": "null"
|
|
577
591
|
}
|
|
578
592
|
]
|
|
579
593
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
require "collatz-conjecture.php";
|
|
4
|
+
|
|
5
|
+
class CollatzConjecture extends PHPUnit\Framework\TestCase
|
|
6
|
+
{
|
|
7
|
+
|
|
8
|
+
public function testZeroStepsForOne()
|
|
9
|
+
{
|
|
10
|
+
$this->assertEquals(0, steps(1));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public function testDivideIfEven()
|
|
14
|
+
{
|
|
15
|
+
$this->markTestSkipped();
|
|
16
|
+
$this->assertEquals(4, steps(16));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
public function testEvenAndOddSteps()
|
|
20
|
+
{
|
|
21
|
+
$this->markTestSkipped();
|
|
22
|
+
$this->assertEquals(9, steps(12));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public function testLargeNumberOfEvenAndOddSteps()
|
|
26
|
+
{
|
|
27
|
+
$this->markTestSkipped();
|
|
28
|
+
$this->assertEquals(152, steps(1000000));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public function testZeroIsAnError()
|
|
32
|
+
{
|
|
33
|
+
$this->markTestSkipped();
|
|
34
|
+
$this->expectException('InvalidArgumentException', 'Only positive numbers are allowed');
|
|
35
|
+
steps(0);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public function testNegativeValueIsAnError()
|
|
39
|
+
{
|
|
40
|
+
$this->markTestSkipped();
|
|
41
|
+
$this->expectException('InvalidArgumentException', 'Only positive numbers are allowed');
|
|
42
|
+
steps(-1);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
function steps($number)
|
|
4
|
+
{
|
|
5
|
+
$stepCount = 0;
|
|
6
|
+
if ($number < 1) {
|
|
7
|
+
throw new InvalidArgumentException('Only positive numbers are allowed');
|
|
8
|
+
}
|
|
9
|
+
do {
|
|
10
|
+
if ($number === 1) {
|
|
11
|
+
break;
|
|
12
|
+
}
|
|
13
|
+
$stepCount++;
|
|
14
|
+
$number = ( $number % 2 === 0 ? $number / 2 : 3 * $number + 1);
|
|
15
|
+
} while ($number !== 0);
|
|
16
|
+
|
|
17
|
+
return $stepCount;
|
|
18
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
def transform():
|
|
1
|
+
def transform(legacy_data):
|
|
2
2
|
pass
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
def count():
|
|
1
|
+
def count(ascii_diagram):
|
|
2
2
|
pass
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
def sum_of_multiples():
|
|
1
|
+
def sum_of_multiples(limit, multiples):
|
|
2
2
|
pass
|
|
@@ -12,6 +12,7 @@ fn test_empty_input() {
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
#[test]
|
|
15
|
+
#[ignore]
|
|
15
16
|
fn test_encrypt_also_decrypts_square() {
|
|
16
17
|
// note that you only get the exact input back if:
|
|
17
18
|
// 1. no punctuation
|
|
@@ -23,6 +24,7 @@ fn test_encrypt_also_decrypts_square() {
|
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
#[test]
|
|
27
|
+
#[ignore]
|
|
26
28
|
fn test_example() {
|
|
27
29
|
test(
|
|
28
30
|
"If man was meant to stay on the ground, god would have given us roots.",
|
|
@@ -31,11 +33,13 @@ fn test_example() {
|
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
#[test]
|
|
36
|
+
#[ignore]
|
|
34
37
|
fn test_empty_last_line() {
|
|
35
38
|
test("congratulate", "crl oaa ntt gue")
|
|
36
39
|
}
|
|
37
40
|
|
|
38
41
|
#[test]
|
|
42
|
+
#[ignore]
|
|
39
43
|
fn test_spaces_are_reorganized() {
|
|
40
44
|
test("abet", "ae bt");
|
|
41
45
|
test("a bet", "ae bt");
|
|
@@ -43,6 +47,7 @@ fn test_spaces_are_reorganized() {
|
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
#[test]
|
|
50
|
+
#[ignore]
|
|
46
51
|
fn test_everything_becomes_lowercase() {
|
|
47
52
|
test("caSe", "cs ae");
|
|
48
53
|
test("cAsE", "cs ae");
|
|
@@ -50,6 +55,7 @@ fn test_everything_becomes_lowercase() {
|
|
|
50
55
|
}
|
|
51
56
|
|
|
52
57
|
#[test]
|
|
58
|
+
#[ignore]
|
|
53
59
|
fn test_ignore_non_ascii_chars() {
|
|
54
60
|
test(
|
|
55
61
|
"She got her education, then got rich programming: 👩🎓🎓👩💻💰",
|
|
@@ -58,6 +64,7 @@ fn test_ignore_non_ascii_chars() {
|
|
|
58
64
|
}
|
|
59
65
|
|
|
60
66
|
#[test]
|
|
67
|
+
#[ignore]
|
|
61
68
|
fn test_long() {
|
|
62
69
|
test(
|
|
63
70
|
r#"
|
|
@@ -8,7 +8,7 @@ extern crate gigasecond;
|
|
|
8
8
|
*
|
|
9
9
|
* The first time you run `cargo test`, the Chrono crate will automatically be downloaded
|
|
10
10
|
* and installed. More information on crates can be found at
|
|
11
|
-
* https://doc.rust-lang.org/book/guessing-game.html#generating-a-
|
|
11
|
+
* https://doc.rust-lang.org/book/second-edition/ch02-00-guessing-game-tutorial.html#generating-a-random-number
|
|
12
12
|
*
|
|
13
13
|
* In order to use the crate, your solution will need to start with the two following lines
|
|
14
14
|
*/
|
|
@@ -1,27 +1,21 @@
|
|
|
1
1
|
pub fn number(s: &str) -> Option<String> {
|
|
2
|
-
let digits: String = s
|
|
3
|
-
.chars()
|
|
4
|
-
.filter(|&c| c.is_digit(10))
|
|
5
|
-
.collect();
|
|
2
|
+
let digits: String = s.chars().filter(|&c| c.is_digit(10)).collect();
|
|
6
3
|
match digits.len() {
|
|
7
|
-
10 =>
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
10 => {
|
|
5
|
+
match (digits.chars().nth(0), digits.chars().nth(3)) {
|
|
6
|
+
(Some('0'), _) => None,
|
|
7
|
+
(Some('1'), _) => None,
|
|
8
|
+
(_, Some('0')) => None,
|
|
9
|
+
(_, Some('1')) => None,
|
|
10
|
+
_ => Some(digits),
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
11 => {
|
|
14
|
+
match digits.chars().nth(0) {
|
|
15
|
+
Some('1') => Some(digits[1..].to_string()),
|
|
16
|
+
_ => None,
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
_ => None,
|
|
13
20
|
}
|
|
14
21
|
}
|
|
15
|
-
|
|
16
|
-
pub fn area_code(s: &str) -> Option<String> {
|
|
17
|
-
number(s).map(|n| n[..3].to_string())
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
pub fn pretty_print(s: &str) -> String {
|
|
21
|
-
number(s).map(|n|
|
|
22
|
-
format!("({area}) {prefix}-{exchange}",
|
|
23
|
-
area=&n[..3],
|
|
24
|
-
prefix=&n[3..6],
|
|
25
|
-
exchange=&n[6..])
|
|
26
|
-
).unwrap_or("invalid".to_string())
|
|
27
|
-
}
|