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
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<ItemGroup>
|
|
12
12
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
13
|
-
<PackageReference Include="xunit" Version="2.
|
|
14
|
-
<PackageReference Include="xunit.runner.visualstudio" Version="2.
|
|
13
|
+
<PackageReference Include="xunit" Version="2.3.0" />
|
|
14
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
|
|
15
15
|
</ItemGroup>
|
|
16
16
|
|
|
17
17
|
</Project>
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<ItemGroup>
|
|
12
12
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
13
|
-
<PackageReference Include="xunit" Version="2.
|
|
14
|
-
<PackageReference Include="xunit.runner.visualstudio" Version="2.
|
|
13
|
+
<PackageReference Include="xunit" Version="2.3.0" />
|
|
14
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
|
|
15
15
|
</ItemGroup>
|
|
16
16
|
|
|
17
17
|
</Project>
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<ItemGroup>
|
|
12
12
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
13
|
-
<PackageReference Include="xunit" Version="2.
|
|
14
|
-
<PackageReference Include="xunit.runner.visualstudio" Version="2.
|
|
13
|
+
<PackageReference Include="xunit" Version="2.3.0" />
|
|
14
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
|
|
15
15
|
</ItemGroup>
|
|
16
16
|
|
|
17
17
|
</Project>
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<ItemGroup>
|
|
12
12
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
13
|
-
<PackageReference Include="xunit" Version="2.
|
|
14
|
-
<PackageReference Include="xunit.runner.visualstudio" Version="2.
|
|
13
|
+
<PackageReference Include="xunit" Version="2.3.0" />
|
|
14
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
|
|
15
15
|
</ItemGroup>
|
|
16
16
|
|
|
17
17
|
</Project>
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<ItemGroup>
|
|
12
12
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
13
|
-
<PackageReference Include="xunit" Version="2.
|
|
14
|
-
<PackageReference Include="xunit.runner.visualstudio" Version="2.
|
|
13
|
+
<PackageReference Include="xunit" Version="2.3.0" />
|
|
14
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
|
|
15
15
|
</ItemGroup>
|
|
16
16
|
|
|
17
17
|
</Project>
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
using System;
|
|
2
2
|
|
|
3
|
-
public enum TriangleKind
|
|
4
|
-
{
|
|
5
|
-
Equilateral,
|
|
6
|
-
Isosceles,
|
|
7
|
-
Scalene
|
|
8
|
-
}
|
|
9
|
-
|
|
10
3
|
public static class Triangle
|
|
11
4
|
{
|
|
12
5
|
public static bool IsScalene(double side1, double side2, double side3)
|
|
@@ -24,10 +17,6 @@ public static class Triangle
|
|
|
24
17
|
throw new NotImplementedException("You need to implement this function.");
|
|
25
18
|
}
|
|
26
19
|
|
|
27
|
-
private static TriangleKind Kind(double side1, double side2, double side3)
|
|
28
|
-
{
|
|
29
|
-
throw new NotImplementedException("You need to implement this function.");
|
|
30
|
-
}
|
|
31
20
|
}
|
|
32
21
|
|
|
33
22
|
public class TriangleException : Exception { }
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<ItemGroup>
|
|
12
12
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
13
|
-
<PackageReference Include="xunit" Version="2.
|
|
14
|
-
<PackageReference Include="xunit.runner.visualstudio" Version="2.
|
|
13
|
+
<PackageReference Include="xunit" Version="2.3.0" />
|
|
14
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
|
|
15
15
|
</ItemGroup>
|
|
16
16
|
|
|
17
17
|
</Project>
|
|
@@ -7,102 +7,102 @@ public class TriangleTest
|
|
|
7
7
|
[Fact]
|
|
8
8
|
public void Returns_true_if_the_triangle_is_equilateral_true_if_all_sides_are_equal()
|
|
9
9
|
{
|
|
10
|
-
Assert.True(Triangle.IsEquilateral(2,2,2));
|
|
10
|
+
Assert.True(Triangle.IsEquilateral(2, 2, 2));
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
[Fact(Skip = "Remove to run test")]
|
|
14
14
|
public void Returns_true_if_the_triangle_is_equilateral_false_if_any_side_is_unequal()
|
|
15
15
|
{
|
|
16
|
-
Assert.False(Triangle.IsEquilateral(2,3,2));
|
|
16
|
+
Assert.False(Triangle.IsEquilateral(2, 3, 2));
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
[Fact(Skip = "Remove to run test")]
|
|
20
20
|
public void Returns_true_if_the_triangle_is_equilateral_false_if_no_sides_are_equal()
|
|
21
21
|
{
|
|
22
|
-
Assert.False(Triangle.IsEquilateral(5,4,6));
|
|
22
|
+
Assert.False(Triangle.IsEquilateral(5, 4, 6));
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
[Fact(Skip = "Remove to run test")]
|
|
26
26
|
public void Returns_true_if_the_triangle_is_equilateral_all_zero_sides_are_illegal_so_the_triangle_is_not_equilateral()
|
|
27
27
|
{
|
|
28
|
-
Assert.False(Triangle.IsEquilateral(0,0,0));
|
|
28
|
+
Assert.False(Triangle.IsEquilateral(0, 0, 0));
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
[Fact(Skip = "Remove to run test")]
|
|
32
32
|
public void Returns_true_if_the_triangle_is_equilateral_sides_may_be_floats()
|
|
33
33
|
{
|
|
34
|
-
Assert.True(Triangle.IsEquilateral(0.5,0.5,0.5));
|
|
34
|
+
Assert.True(Triangle.IsEquilateral(0.5, 0.5, 0.5));
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
[Fact(Skip = "Remove to run test")]
|
|
38
38
|
public void Returns_true_if_the_triangle_is_isosceles_true_if_last_two_sides_are_equal()
|
|
39
39
|
{
|
|
40
|
-
Assert.True(Triangle.IsIsosceles(3,4,4));
|
|
40
|
+
Assert.True(Triangle.IsIsosceles(3, 4, 4));
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
[Fact(Skip = "Remove to run test")]
|
|
44
44
|
public void Returns_true_if_the_triangle_is_isosceles_true_if_first_two_sides_are_equal()
|
|
45
45
|
{
|
|
46
|
-
Assert.True(Triangle.IsIsosceles(4,4,3));
|
|
46
|
+
Assert.True(Triangle.IsIsosceles(4, 4, 3));
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
[Fact(Skip = "Remove to run test")]
|
|
50
50
|
public void Returns_true_if_the_triangle_is_isosceles_true_if_first_and_last_sides_are_equal()
|
|
51
51
|
{
|
|
52
|
-
Assert.True(Triangle.IsIsosceles(4,3,4));
|
|
52
|
+
Assert.True(Triangle.IsIsosceles(4, 3, 4));
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
[Fact(Skip = "Remove to run test")]
|
|
56
56
|
public void Returns_true_if_the_triangle_is_isosceles_equilateral_triangles_are_also_isosceles()
|
|
57
57
|
{
|
|
58
|
-
Assert.True(Triangle.IsIsosceles(4,4,4));
|
|
58
|
+
Assert.True(Triangle.IsIsosceles(4, 4, 4));
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
[Fact(Skip = "Remove to run test")]
|
|
62
62
|
public void Returns_true_if_the_triangle_is_isosceles_false_if_no_sides_are_equal()
|
|
63
63
|
{
|
|
64
|
-
Assert.False(Triangle.IsIsosceles(2,3,4));
|
|
64
|
+
Assert.False(Triangle.IsIsosceles(2, 3, 4));
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
[Fact(Skip = "Remove to run test")]
|
|
68
68
|
public void Returns_true_if_the_triangle_is_isosceles_sides_that_violate_triangle_inequality_are_not_isosceles_even_if_two_are_equal()
|
|
69
69
|
{
|
|
70
|
-
Assert.False(Triangle.IsIsosceles(1,1,3));
|
|
70
|
+
Assert.False(Triangle.IsIsosceles(1, 1, 3));
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
[Fact(Skip = "Remove to run test")]
|
|
74
74
|
public void Returns_true_if_the_triangle_is_isosceles_sides_may_be_floats()
|
|
75
75
|
{
|
|
76
|
-
Assert.True(Triangle.IsIsosceles(0.5,0.4,0.5));
|
|
76
|
+
Assert.True(Triangle.IsIsosceles(0.5, 0.4, 0.5));
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
[Fact(Skip = "Remove to run test")]
|
|
80
80
|
public void Returns_true_if_the_triangle_is_scalene_true_if_no_sides_are_equal()
|
|
81
81
|
{
|
|
82
|
-
Assert.True(Triangle.IsScalene(5,4,6));
|
|
82
|
+
Assert.True(Triangle.IsScalene(5, 4, 6));
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
[Fact(Skip = "Remove to run test")]
|
|
86
86
|
public void Returns_true_if_the_triangle_is_scalene_false_if_all_sides_are_equal()
|
|
87
87
|
{
|
|
88
|
-
Assert.False(Triangle.IsScalene(4,4,4));
|
|
88
|
+
Assert.False(Triangle.IsScalene(4, 4, 4));
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
[Fact(Skip = "Remove to run test")]
|
|
92
92
|
public void Returns_true_if_the_triangle_is_scalene_false_if_two_sides_are_equal()
|
|
93
93
|
{
|
|
94
|
-
Assert.False(Triangle.IsScalene(4,4,3));
|
|
94
|
+
Assert.False(Triangle.IsScalene(4, 4, 3));
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
[Fact(Skip = "Remove to run test")]
|
|
98
98
|
public void Returns_true_if_the_triangle_is_scalene_sides_that_violate_triangle_inequality_are_not_scalene_even_if_they_are_all_different()
|
|
99
99
|
{
|
|
100
|
-
Assert.False(Triangle.IsScalene(7,3,2));
|
|
100
|
+
Assert.False(Triangle.IsScalene(7, 3, 2));
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
[Fact(Skip = "Remove to run test")]
|
|
104
104
|
public void Returns_true_if_the_triangle_is_scalene_sides_may_be_floats()
|
|
105
105
|
{
|
|
106
|
-
Assert.True(Triangle.IsScalene(0.5,0.4,0.6));
|
|
106
|
+
Assert.True(Triangle.IsScalene(0.5, 0.4, 0.6));
|
|
107
107
|
}
|
|
108
108
|
}
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<ItemGroup>
|
|
12
12
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
13
|
-
<PackageReference Include="xunit" Version="2.
|
|
14
|
-
<PackageReference Include="xunit.runner.visualstudio" Version="2.
|
|
13
|
+
<PackageReference Include="xunit" Version="2.3.0" />
|
|
14
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
|
|
15
15
|
</ItemGroup>
|
|
16
16
|
|
|
17
17
|
</Project>
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<ItemGroup>
|
|
12
12
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
13
|
-
<PackageReference Include="xunit" Version="2.
|
|
14
|
-
<PackageReference Include="xunit.runner.visualstudio" Version="2.
|
|
13
|
+
<PackageReference Include="xunit" Version="2.3.0" />
|
|
14
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
|
|
15
15
|
</ItemGroup>
|
|
16
16
|
|
|
17
17
|
</Project>
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<ItemGroup>
|
|
12
12
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
13
|
-
<PackageReference Include="xunit" Version="2.
|
|
14
|
-
<PackageReference Include="xunit.runner.visualstudio" Version="2.
|
|
13
|
+
<PackageReference Include="xunit" Version="2.3.0" />
|
|
14
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
|
|
15
15
|
</ItemGroup>
|
|
16
16
|
|
|
17
17
|
</Project>
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<ItemGroup>
|
|
12
12
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
13
|
-
<PackageReference Include="xunit" Version="2.
|
|
14
|
-
<PackageReference Include="xunit.runner.visualstudio" Version="2.
|
|
13
|
+
<PackageReference Include="xunit" Version="2.3.0" />
|
|
14
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
|
|
15
15
|
</ItemGroup>
|
|
16
16
|
|
|
17
17
|
</Project>
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<ItemGroup>
|
|
12
12
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
13
|
-
<PackageReference Include="xunit" Version="2.
|
|
14
|
-
<PackageReference Include="xunit.runner.visualstudio" Version="2.
|
|
13
|
+
<PackageReference Include="xunit" Version="2.3.0" />
|
|
14
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
|
|
15
15
|
</ItemGroup>
|
|
16
16
|
|
|
17
17
|
</Project>
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<ItemGroup>
|
|
12
12
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
13
|
-
<PackageReference Include="xunit" Version="2.
|
|
14
|
-
<PackageReference Include="xunit.runner.visualstudio" Version="2.
|
|
13
|
+
<PackageReference Include="xunit" Version="2.3.0" />
|
|
14
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
|
|
15
15
|
</ItemGroup>
|
|
16
16
|
|
|
17
17
|
</Project>
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<ItemGroup>
|
|
12
12
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
13
|
-
<PackageReference Include="xunit" Version="2.
|
|
14
|
-
<PackageReference Include="xunit.runner.visualstudio" Version="2.
|
|
13
|
+
<PackageReference Include="xunit" Version="2.3.0" />
|
|
14
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
|
|
15
15
|
</ItemGroup>
|
|
16
16
|
|
|
17
17
|
</Project>
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<ItemGroup>
|
|
12
12
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
13
|
-
<PackageReference Include="xunit" Version="2.
|
|
14
|
-
<PackageReference Include="xunit.runner.visualstudio" Version="2.
|
|
13
|
+
<PackageReference Include="xunit" Version="2.3.0" />
|
|
14
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
|
|
15
15
|
</ItemGroup>
|
|
16
16
|
|
|
17
17
|
</Project>
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
<ItemGroup>
|
|
12
12
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
13
|
-
<PackageReference Include="xunit" Version="2.
|
|
14
|
-
<PackageReference Include="xunit.runner.visualstudio" Version="2.
|
|
13
|
+
<PackageReference Include="xunit" Version="2.3.0" />
|
|
14
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
|
|
15
15
|
</ItemGroup>
|
|
16
16
|
|
|
17
17
|
</Project>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
using System;
|
|
2
|
+
using System.Collections.Generic;
|
|
3
|
+
using Generators.Input;
|
|
4
|
+
using Generators.Output;
|
|
5
|
+
|
|
6
|
+
namespace Generators.Exercises
|
|
7
|
+
{
|
|
8
|
+
public class Connect : Exercise
|
|
9
|
+
{
|
|
10
|
+
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
|
11
|
+
{
|
|
12
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
|
13
|
+
{
|
|
14
|
+
canonicalDataCase.UseVariablesForConstructorParameters = true;
|
|
15
|
+
canonicalDataCase.SetConstructorInputParameters("board");
|
|
16
|
+
canonicalDataCase.Property = "result";
|
|
17
|
+
canonicalDataCase.Properties["board"] = ToMultiLineString(canonicalDataCase.Properties["board"]);
|
|
18
|
+
|
|
19
|
+
//convert to enum
|
|
20
|
+
switch (canonicalDataCase.Properties["expected"])
|
|
21
|
+
{
|
|
22
|
+
case "X":
|
|
23
|
+
canonicalDataCase.Properties["expected"] = new UnescapedValue("ConnectWinner.Black");
|
|
24
|
+
break;
|
|
25
|
+
case "O":
|
|
26
|
+
canonicalDataCase.Properties["expected"] = new UnescapedValue("ConnectWinner.White");
|
|
27
|
+
break;
|
|
28
|
+
case "":
|
|
29
|
+
canonicalDataCase.Properties["expected"] = new UnescapedValue("ConnectWinner.None");
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private UnescapedValue ToMultiLineString(string[] input)
|
|
36
|
+
{
|
|
37
|
+
const string template =
|
|
38
|
+
@"new []
|
|
39
|
+
{
|
|
40
|
+
{% if input.size == 0 %}string.Empty{% else %}{% for item in {{input}} %}{% if forloop.length == 1 %}""{{item}}""{% break %}{% endif %}""{{item}}""{% if forloop.last == false %},{% else %}{{string.Empty}}{% endif %}
|
|
41
|
+
{% endfor %}{% endif %}
|
|
42
|
+
}";
|
|
43
|
+
|
|
44
|
+
return new UnescapedValue(TemplateRenderer.RenderInline(template, new { input }));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -26,7 +26,7 @@ namespace Generators.Exercises
|
|
|
26
26
|
|
|
27
27
|
private UnescapedValue SplitArrayToValues(IEnumerable input)
|
|
28
28
|
{
|
|
29
|
-
const string template = "{% for item in {{input}} %}{{item}}{% if forloop.last == false %},{% endif %}{% endfor %}";
|
|
29
|
+
const string template = "{% for item in {{input}} %}{{item}}{% if forloop.last == false %}, {% endif %}{% endfor %}";
|
|
30
30
|
|
|
31
31
|
return new UnescapedValue(TemplateRenderer.RenderInline(template, new { input }));
|
|
32
32
|
}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
"docs_url": "https://github.com/exercism/docs/blob/master/maintaining-a-track/maintainer-configuration.md",
|
|
3
3
|
"maintainers": [
|
|
4
4
|
{
|
|
5
|
-
"alumnus": false,
|
|
6
5
|
"avatar_url": null,
|
|
7
6
|
"bio": null,
|
|
8
7
|
"github_username": "SuperPaintman",
|
|
@@ -10,6 +9,33 @@
|
|
|
10
9
|
"link_url": null,
|
|
11
10
|
"name": null,
|
|
12
11
|
"show_on_website": false
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"avatar_url": "https://avatars0.githubusercontent.com/u/7527155?v=4&s=460",
|
|
15
|
+
"bio": null,
|
|
16
|
+
"github_username": "Stargator",
|
|
17
|
+
"link_text": null,
|
|
18
|
+
"link_url": null,
|
|
19
|
+
"name": null,
|
|
20
|
+
"show_on_website": true
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"avatar_url": "https://avatars3.githubusercontent.com/u/190414?v=4&s=460",
|
|
24
|
+
"bio": null,
|
|
25
|
+
"github_username": "fwip",
|
|
26
|
+
"link_text": null,
|
|
27
|
+
"link_url": null,
|
|
28
|
+
"name": null,
|
|
29
|
+
"show_on_website": false
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"avatar_url": "https://avatars1.githubusercontent.com/u/18462563?v=4&s=460",
|
|
33
|
+
"bio": null,
|
|
34
|
+
"github_username": "kabiir",
|
|
35
|
+
"link_text": null,
|
|
36
|
+
"link_url": null,
|
|
37
|
+
"name": null,
|
|
38
|
+
"show_on_website": true
|
|
13
39
|
}
|
|
14
40
|
]
|
|
15
41
|
}
|
data/tracks/dart/pubspec.yaml
CHANGED
|
@@ -3,12 +3,15 @@
|
|
|
3
3
|
|
|
4
4
|
import "dart:io";
|
|
5
5
|
import "dart:async";
|
|
6
|
+
import "dart:convert";
|
|
6
7
|
import "package:args/args.dart";
|
|
7
8
|
|
|
8
9
|
/** Constants */
|
|
9
10
|
const ME = "create-exercise";
|
|
10
11
|
|
|
11
|
-
final parser = new ArgParser()
|
|
12
|
+
final parser = new ArgParser()
|
|
13
|
+
..addSeparator("Usage: $ME <slug> [--spec-path path]")
|
|
14
|
+
..addOption("spec-path", help: "The location of the problem-specifications directory.", valueHelp: 'path');
|
|
12
15
|
|
|
13
16
|
/** Helpers */
|
|
14
17
|
List<String> words(String str) {
|
|
@@ -54,6 +57,11 @@ class ${pascalCase(name)} {
|
|
|
54
57
|
}
|
|
55
58
|
""";
|
|
56
59
|
|
|
60
|
+
String testCasesString = """
|
|
61
|
+
test("should work", () {
|
|
62
|
+
// TODO
|
|
63
|
+
});""";
|
|
64
|
+
|
|
57
65
|
String testTemplate(String name) => """
|
|
58
66
|
import "package:test/test.dart";
|
|
59
67
|
import "package:${snakeCase(name)}/${snakeCase(name)}.dart";
|
|
@@ -62,9 +70,7 @@ void main() {
|
|
|
62
70
|
final ${camelCase(name)} = new ${pascalCase(name)}();
|
|
63
71
|
|
|
64
72
|
group("${pascalCase(name)}", () {
|
|
65
|
-
|
|
66
|
-
// TODO
|
|
67
|
-
});
|
|
73
|
+
$testCasesString
|
|
68
74
|
});
|
|
69
75
|
}
|
|
70
76
|
""";
|
|
@@ -75,6 +81,103 @@ dev_dependencies:
|
|
|
75
81
|
test: '<0.13.0'
|
|
76
82
|
""";
|
|
77
83
|
|
|
84
|
+
String testCaseTemplate(String name, Map<String, Object> testCase, {bool firstTest = true}) {
|
|
85
|
+
if (testCase['cases'] != null) {
|
|
86
|
+
// We have a group, not a case
|
|
87
|
+
String description = testCase['description'];
|
|
88
|
+
|
|
89
|
+
// Build the tests up recursively, only first test should be skipped
|
|
90
|
+
List<String> testList = [];
|
|
91
|
+
for (Map<String, Object> c in testCase['cases']) {
|
|
92
|
+
testList.add(testCaseTemplate(name, c, firstTest: firstTest));
|
|
93
|
+
firstTest = false;
|
|
94
|
+
}
|
|
95
|
+
String tests = testList.join("\n");
|
|
96
|
+
|
|
97
|
+
if (description == null) {
|
|
98
|
+
return tests;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return """
|
|
102
|
+
group("$description", () {
|
|
103
|
+
$tests
|
|
104
|
+
});
|
|
105
|
+
""";
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
String description = repr(testCase['description']);
|
|
109
|
+
String resultType = getFriendlyType(testCase['expected']);
|
|
110
|
+
String object = camelCase(name);
|
|
111
|
+
String method = camelCase(testCase['property']);
|
|
112
|
+
String expected = repr(testCase['expected']);
|
|
113
|
+
|
|
114
|
+
List<String> inputKeys = testCase.keys.toList()..remove("expected")..remove("description")..remove("property");
|
|
115
|
+
String arguments = inputKeys.map((k) => repr(testCase[k])).join(", ");
|
|
116
|
+
|
|
117
|
+
return """
|
|
118
|
+
test($description, () {
|
|
119
|
+
final $resultType result = $object.$method($arguments);
|
|
120
|
+
expect(result, equals($expected));
|
|
121
|
+
}, skip: ${!firstTest});
|
|
122
|
+
""";
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/// `repr` takes in any object and tries to coerce it to a String in such a way that it is suitable to include in code.
|
|
126
|
+
/// Based on the python `repr` function, but only works for basic types: String, Iterable, Map, and primitive types
|
|
127
|
+
String repr(Object x) {
|
|
128
|
+
if (x is String) {
|
|
129
|
+
x = x.replaceAll('"', r'\"').replaceAll("\n", r"\n").replaceAll(r"$", r"\$");
|
|
130
|
+
return '"$x"';
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (x is Iterable) {
|
|
134
|
+
return '[${x.map(repr).join(", ")}]';
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (x is Map) {
|
|
138
|
+
List<String> pairs = [];
|
|
139
|
+
for (var k in x.keys) {
|
|
140
|
+
pairs.add("${repr(k)}: ${repr(x[k])}");
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return "{${pairs.join(', ')}}";
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return "$x";
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/// A helper method to get the inside type of an iterable
|
|
150
|
+
String getIterableType(Object iter) {
|
|
151
|
+
Set<String> types = iter.map(getFriendlyType).toSet();
|
|
152
|
+
|
|
153
|
+
if (types.length == 1) {
|
|
154
|
+
return types.first;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return "Object";
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/// Get a human-friendly type of a variable
|
|
161
|
+
String getFriendlyType(Object x) {
|
|
162
|
+
if (x is String) {
|
|
163
|
+
return "String";
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (x is Iterable) {
|
|
167
|
+
return "List<${getIterableType(x)}>";
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (x is Map) {
|
|
171
|
+
return "Map<${getIterableType(x.keys)}, ${getIterableType(x.values)}>";
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (x is num) {
|
|
175
|
+
return "num";
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return x.runtimeType;
|
|
179
|
+
}
|
|
180
|
+
|
|
78
181
|
Future main(args) async {
|
|
79
182
|
final arguments = parser.parse(args);
|
|
80
183
|
final restArgs = arguments.rest;
|
|
@@ -91,6 +194,22 @@ Future main(args) async {
|
|
|
91
194
|
final exerciseDir = new Directory("exercises/${kebabCase(name)}");
|
|
92
195
|
final filename = snakeCase(name);
|
|
93
196
|
|
|
197
|
+
// Get test cases from canonical-data.json, format tests
|
|
198
|
+
if (arguments["spec-path"] != null) {
|
|
199
|
+
String filename = "${arguments['spec-path']}/exercises/$name/canonical-data.json";
|
|
200
|
+
try {
|
|
201
|
+
File file = new File(filename);
|
|
202
|
+
final specification = JSON.decode(await file.readAsString());
|
|
203
|
+
testCasesString = testCaseTemplate(name, specification);
|
|
204
|
+
} on FileSystemException {
|
|
205
|
+
stderr.write("Could not open file '$filename', exiting.\n");
|
|
206
|
+
exit(1);
|
|
207
|
+
} on FormatException {
|
|
208
|
+
stderr.write("File '$filename' is not valid JSON, exiting.\n");
|
|
209
|
+
exit(1);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
94
213
|
if (await exerciseDir.exists()) {
|
|
95
214
|
stderr.write("$name already exist");
|
|
96
215
|
exit(1);
|
|
@@ -100,11 +219,31 @@ Future main(args) async {
|
|
|
100
219
|
await new Directory("${exerciseDir.path}/test").create(recursive: true);
|
|
101
220
|
|
|
102
221
|
// Create files
|
|
222
|
+
String testFileName = "${exerciseDir.path}/test/${filename}_test.dart";
|
|
103
223
|
await new File("${exerciseDir.path}/lib/example.dart").writeAsString(exampleTemplate(name));
|
|
104
224
|
await new File("${exerciseDir.path}/lib/${filename}.dart").writeAsString(mainTemplate(name));
|
|
105
|
-
await new File(
|
|
225
|
+
await new File(testFileName).writeAsString(testTemplate(name));
|
|
106
226
|
await new File("${exerciseDir.path}/pubspec.yaml").writeAsString(pubTemplate(name));
|
|
107
227
|
|
|
228
|
+
if (arguments["spec-path"] != null) {
|
|
229
|
+
// The output from test generation is not always well-formatted, use dartfmt to clean it up
|
|
230
|
+
final res = await Process.run("dartfmt", ["-l", "120", "-w", testFileName], runInShell: true);
|
|
231
|
+
if (!res.stdout.toString().isEmpty) {
|
|
232
|
+
stdout.write(res.stdout);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (!res.stderr.toString().isEmpty) {
|
|
236
|
+
stderr.write(res.stderr);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
if (res.exitCode != 0) {
|
|
240
|
+
stderr.write("Warning: dartfmt exited with a code of ${res.exitCode}, '$testFileName' is likely malformed.\n");
|
|
241
|
+
} else {
|
|
242
|
+
stdout.write("Successfully created a rough-draft of tests at '$testFileName'.\n");
|
|
243
|
+
stdout.write("You should check this over and fix or refine as necessary.\n");
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
108
247
|
// Install deps
|
|
109
248
|
Directory.current = exerciseDir;
|
|
110
249
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* text=auto
|
|
@@ -8,12 +8,18 @@ case $(uname) in
|
|
|
8
8
|
echo "linux";;
|
|
9
9
|
(Windows*)
|
|
10
10
|
echo "windows";;
|
|
11
|
+
(MINGW*)
|
|
12
|
+
echo "windows";;
|
|
11
13
|
(*)
|
|
12
14
|
echo "linux";;
|
|
13
15
|
esac)
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
curl -L $URL |
|
|
17
|
+
if [ "$OS" == "windows" ]; then
|
|
18
|
+
URL=https://github.com/avh4/elm-format/releases/download/0.6.1-alpha/elm-format-0.18-0.6.1-alpha-win-i386.zip
|
|
19
|
+
curl -L $URL | funzip > bin/elm-format
|
|
20
|
+
else
|
|
21
|
+
URL=https://github.com/avh4/elm-format/releases/download/0.6.1-alpha/elm-format-0.18-0.6.1-alpha-$OS-x64.tgz
|
|
22
|
+
curl -L $URL | tar -xvzO > bin/elm-format
|
|
23
|
+
fi
|
|
18
24
|
|
|
19
25
|
chmod u+x bin/elm-format
|