trackler 2.2.1.44 → 2.2.1.45
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/problem-specifications/exercises/isbn-verifier/canonical-data.json +88 -0
- data/problem-specifications/exercises/isbn-verifier/description.md +35 -0
- data/problem-specifications/exercises/isbn-verifier/metadata.yml +4 -0
- data/problem-specifications/exercises/robot-simulator/canonical-data.json +125 -32
- data/problem-specifications/exercises/sum-of-multiples/description.md +0 -3
- data/problem-specifications/exercises/two-bucket/canonical-data.json +3 -3
- data/tracks/c/config.json +235 -237
- data/tracks/c/exercises/acronym/README.md +0 -1
- data/tracks/c/exercises/all-your-base/README.md +1 -1
- data/tracks/c/exercises/allergies/README.md +0 -1
- data/tracks/c/exercises/atbash-cipher/README.md +2 -1
- data/tracks/c/exercises/beer-song/README.md +1 -1
- data/tracks/c/exercises/binary/README.md +2 -0
- data/tracks/c/exercises/grains/README.md +0 -1
- data/tracks/c/exercises/isogram/README.md +2 -1
- data/tracks/c/exercises/leap/README.md +1 -1
- data/tracks/c/exercises/meetup/README.md +1 -2
- data/tracks/c/exercises/nucleotide-count/README.md +8 -22
- data/tracks/c/exercises/palindrome-products/README.md +12 -6
- data/tracks/c/exercises/pangram/README.md +1 -1
- data/tracks/c/exercises/pascals-triangle/README.md +1 -1
- data/tracks/c/exercises/perfect-numbers/README.md +2 -2
- data/tracks/c/exercises/phone-number/README.md +3 -2
- data/tracks/c/exercises/roman-numerals/README.md +1 -1
- data/tracks/c/exercises/scrabble-score/README.md +3 -1
- data/tracks/c/exercises/space-age/README.md +2 -1
- data/tracks/c/exercises/triangle/README.md +9 -6
- data/tracks/c/exercises/word-count/README.md +1 -2
- data/tracks/csharp/exercises/accumulate/Accumulate.csproj +2 -2
- data/tracks/csharp/exercises/acronym/Acronym.csproj +2 -2
- data/tracks/csharp/exercises/all-your-base/AllYourBase.csproj +2 -2
- data/tracks/csharp/exercises/allergies/Allergies.csproj +2 -2
- data/tracks/csharp/exercises/alphametics/Alphametics.csproj +2 -2
- data/tracks/csharp/exercises/anagram/Anagram.csproj +2 -2
- data/tracks/csharp/exercises/atbash-cipher/AtbashCipher.csproj +2 -2
- data/tracks/csharp/exercises/bank-account/BankAccount.csproj +2 -2
- data/tracks/csharp/exercises/beer-song/BeerSong.csproj +2 -2
- data/tracks/csharp/exercises/binary-search/BinarySearch.csproj +2 -2
- data/tracks/csharp/exercises/binary-search-tree/BinarySearchTree.csproj +2 -2
- data/tracks/csharp/exercises/bob/Bob.csproj +2 -2
- data/tracks/csharp/exercises/book-store/BookStore.csproj +2 -2
- data/tracks/csharp/exercises/bowling/Bowling.csproj +2 -2
- data/tracks/csharp/exercises/bracket-push/BracketPush.csproj +2 -2
- data/tracks/csharp/exercises/change/Change.csproj +2 -2
- data/tracks/csharp/exercises/circular-buffer/CircularBuffer.csproj +2 -2
- data/tracks/csharp/exercises/clock/Clock.csproj +2 -2
- data/tracks/csharp/exercises/collatz-conjecture/CollatzConjecture.csproj +2 -2
- data/tracks/csharp/exercises/complex-numbers/ComplexNumbers.csproj +2 -2
- data/tracks/csharp/exercises/connect/Connect.cs +1 -1
- data/tracks/csharp/exercises/connect/Connect.csproj +2 -2
- data/tracks/csharp/exercises/connect/ConnectTest.cs +120 -85
- data/tracks/csharp/exercises/connect/Example.cs +11 -7
- data/tracks/csharp/exercises/crypto-square/CryptoSquare.csproj +2 -2
- data/tracks/csharp/exercises/custom-set/CustomSet.csproj +2 -2
- data/tracks/csharp/exercises/diamond/Diamond.csproj +2 -2
- data/tracks/csharp/exercises/difference-of-squares/DifferenceOfSquares.csproj +2 -2
- data/tracks/csharp/exercises/diffie-hellman/DiffieHellman.csproj +2 -2
- data/tracks/csharp/exercises/dominoes/Dominoes.csproj +2 -2
- data/tracks/csharp/exercises/dot-dsl/DotDsl.csproj +2 -2
- data/tracks/csharp/exercises/error-handling/ErrorHandling.csproj +2 -2
- data/tracks/csharp/exercises/etl/Etl.csproj +2 -2
- data/tracks/csharp/exercises/flatten-array/FlattenArray.csproj +2 -2
- data/tracks/csharp/exercises/food-chain/FoodChain.csproj +2 -2
- data/tracks/csharp/exercises/forth/Forth.csproj +2 -2
- data/tracks/csharp/exercises/gigasecond/Gigasecond.csproj +2 -2
- data/tracks/csharp/exercises/go-counting/GoCounting.csproj +2 -2
- data/tracks/csharp/exercises/grade-school/GradeSchool.csproj +2 -2
- data/tracks/csharp/exercises/grains/Grains.csproj +2 -2
- data/tracks/csharp/exercises/grep/Grep.csproj +2 -2
- data/tracks/csharp/exercises/hamming/Hamming.csproj +2 -2
- data/tracks/csharp/exercises/hangman/Hangman.csproj +2 -2
- data/tracks/csharp/exercises/hello-world/HelloWorld.csproj +2 -2
- data/tracks/csharp/exercises/house/House.csproj +2 -2
- data/tracks/csharp/exercises/isogram/Isogram.csproj +2 -2
- data/tracks/csharp/exercises/kindergarten-garden/KindergartenGarden.csproj +2 -2
- data/tracks/csharp/exercises/largest-series-product/LargestSeriesProduct.csproj +2 -2
- data/tracks/csharp/exercises/leap/Leap.csproj +2 -2
- data/tracks/csharp/exercises/ledger/Ledger.csproj +2 -2
- data/tracks/csharp/exercises/linked-list/LinkedList.csproj +2 -2
- data/tracks/csharp/exercises/list-ops/ListOps.csproj +2 -2
- data/tracks/csharp/exercises/luhn/Luhn.csproj +2 -2
- data/tracks/csharp/exercises/markdown/Markdown.csproj +2 -2
- data/tracks/csharp/exercises/matrix/Matrix.csproj +2 -2
- data/tracks/csharp/exercises/meetup/Meetup.csproj +2 -2
- data/tracks/csharp/exercises/minesweeper/Minesweeper.csproj +2 -2
- data/tracks/csharp/exercises/nth-prime/NthPrime.csproj +2 -2
- data/tracks/csharp/exercises/nucleotide-count/NucleotideCount.csproj +2 -2
- data/tracks/csharp/exercises/ocr-numbers/OcrNumbers.csproj +2 -2
- data/tracks/csharp/exercises/palindrome-products/PalindromeProducts.csproj +2 -2
- data/tracks/csharp/exercises/pangram/Pangram.csproj +2 -2
- data/tracks/csharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.csproj +2 -2
- data/tracks/csharp/exercises/pascals-triangle/PascalsTriangle.csproj +2 -2
- data/tracks/csharp/exercises/perfect-numbers/PerfectNumbers.csproj +2 -2
- data/tracks/csharp/exercises/phone-number/PhoneNumber.csproj +2 -2
- data/tracks/csharp/exercises/pig-latin/PigLatin.csproj +2 -2
- data/tracks/csharp/exercises/poker/Poker.csproj +2 -2
- data/tracks/csharp/exercises/pov/Pov.csproj +2 -2
- data/tracks/csharp/exercises/prime-factors/PrimeFactors.csproj +2 -2
- data/tracks/csharp/exercises/protein-translation/ProteinTranslation.csproj +2 -2
- data/tracks/csharp/exercises/proverb/Proverb.csproj +2 -2
- data/tracks/csharp/exercises/pythagorean-triplet/PythagoreanTriplet.csproj +2 -2
- data/tracks/csharp/exercises/queen-attack/QueenAttack.csproj +2 -2
- data/tracks/csharp/exercises/rail-fence-cipher/RailFenceCipher.csproj +2 -2
- data/tracks/csharp/exercises/raindrops/Raindrops.csproj +2 -2
- data/tracks/csharp/exercises/react/React.csproj +2 -2
- data/tracks/csharp/exercises/rectangles/Rectangles.csproj +2 -2
- data/tracks/csharp/exercises/rna-transcription/RnaTranscription.csproj +2 -2
- data/tracks/csharp/exercises/robot-name/RobotName.csproj +2 -2
- data/tracks/csharp/exercises/robot-simulator/RobotSimulator.csproj +2 -2
- data/tracks/csharp/exercises/roman-numerals/RomanNumerals.csproj +2 -2
- data/tracks/csharp/exercises/rotational-cipher/RotationalCipher.csproj +2 -2
- data/tracks/csharp/exercises/run-length-encoding/RunLengthEncoding.csproj +2 -2
- data/tracks/csharp/exercises/saddle-points/SaddlePoints.csproj +2 -2
- data/tracks/csharp/exercises/say/Say.csproj +2 -2
- data/tracks/csharp/exercises/scale-generator/ScaleGenerator.csproj +2 -2
- data/tracks/csharp/exercises/scrabble-score/ScrabbleScore.csproj +2 -2
- data/tracks/csharp/exercises/secret-handshake/SecretHandshake.csproj +2 -2
- data/tracks/csharp/exercises/series/Series.csproj +2 -2
- data/tracks/csharp/exercises/series/SeriesTest.cs +17 -17
- data/tracks/csharp/exercises/sgf-parsing/SgfParsing.csproj +2 -2
- data/tracks/csharp/exercises/sieve/Sieve.csproj +2 -2
- data/tracks/csharp/exercises/simple-cipher/SimpleCipher.csproj +2 -2
- data/tracks/csharp/exercises/simple-linked-list/SimpleLinkedList.csproj +2 -2
- data/tracks/csharp/exercises/space-age/SpaceAge.csproj +2 -2
- data/tracks/csharp/exercises/spiral-matrix/SpiralMatrix.csproj +2 -2
- data/tracks/csharp/exercises/strain/Strain.csproj +2 -2
- data/tracks/csharp/exercises/sublist/Sublist.csproj +2 -2
- data/tracks/csharp/exercises/sum-of-multiples/SumOfMultiples.csproj +2 -2
- data/tracks/csharp/exercises/tournament/Tournament.csproj +2 -2
- data/tracks/csharp/exercises/transpose/Transpose.csproj +2 -2
- data/tracks/csharp/exercises/tree-building/TreeBuilding.csproj +2 -2
- data/tracks/csharp/exercises/triangle/Triangle.cs +0 -11
- data/tracks/csharp/exercises/triangle/Triangle.csproj +2 -2
- data/tracks/csharp/exercises/triangle/TriangleTest.cs +17 -17
- data/tracks/csharp/exercises/twelve-days/TwelveDays.csproj +2 -2
- data/tracks/csharp/exercises/two-bucket/TwoBucket.csproj +2 -2
- data/tracks/csharp/exercises/two-fer/TwoFer.csproj +2 -2
- data/tracks/csharp/exercises/variable-length-quantity/VariableLengthQuantity.csproj +2 -2
- data/tracks/csharp/exercises/word-count/WordCount.csproj +2 -2
- data/tracks/csharp/exercises/word-search/WordSearch.csproj +2 -2
- data/tracks/csharp/exercises/wordy/Wordy.csproj +2 -2
- data/tracks/csharp/exercises/zebra-puzzle/ZebraPuzzle.csproj +2 -2
- data/tracks/csharp/exercises/zipper/Zipper.csproj +2 -2
- data/tracks/csharp/generators/Exercises/Connect.cs +47 -0
- data/tracks/csharp/generators/Exercises/Triangle.cs +1 -1
- data/tracks/dart/config/maintainers.json +27 -1
- data/tracks/dart/pubspec.yaml +3 -0
- data/tracks/dart/tool/create-exercise +144 -5
- data/tracks/elm/.gitattributes +1 -0
- data/tracks/elm/bin/install-elm-format +9 -3
- data/tracks/elm/config.json +30 -0
- data/tracks/elm/exercises/all-your-base/AllYourBase.elm +1 -0
- data/tracks/elm/exercises/all-your-base/AllYourBase.example.elm +68 -0
- data/tracks/elm/exercises/all-your-base/README.md +65 -0
- data/tracks/elm/exercises/all-your-base/elm-package.json +15 -0
- data/tracks/elm/exercises/all-your-base/tests/Tests.elm +53 -0
- data/tracks/elm/exercises/all-your-base/tests/elm-package.json +16 -0
- data/tracks/elm/exercises/collatz-conjecture/CollatzConjecture.elm +2 -0
- data/tracks/elm/exercises/collatz-conjecture/CollatzConjecture.example.elm +19 -0
- data/tracks/elm/exercises/collatz-conjecture/elm-package.json +15 -0
- data/tracks/elm/exercises/collatz-conjecture/package.json +14 -0
- data/tracks/elm/exercises/collatz-conjecture/tests/Tests.elm +38 -0
- data/tracks/elm/exercises/collatz-conjecture/tests/elm-package.json +16 -0
- data/tracks/elm/exercises/isogram/Isogram.elm +1 -0
- data/tracks/elm/exercises/isogram/Isogram.example.elm +76 -0
- data/tracks/elm/exercises/isogram/README.md +50 -0
- data/tracks/elm/exercises/isogram/elm-package.json +14 -0
- data/tracks/elm/exercises/isogram/package.json +14 -0
- data/tracks/elm/exercises/isogram/tests/Tests.elm +46 -0
- data/tracks/elm/exercises/isogram/tests/elm-package.json +16 -0
- data/tracks/fsharp/.gitignore +2 -1
- data/tracks/fsharp/exercises/accumulate/Accumulate.fsproj +3 -2
- data/tracks/fsharp/exercises/acronym/Acronym.fs +1 -1
- data/tracks/fsharp/exercises/acronym/Acronym.fsproj +3 -2
- data/tracks/fsharp/exercises/acronym/AcronymTest.fs +13 -38
- data/tracks/fsharp/exercises/acronym/Example.fs +1 -1
- data/tracks/fsharp/exercises/all-your-base/AllYourBase.fsproj +3 -2
- data/tracks/fsharp/exercises/all-your-base/AllYourBaseTest.fs +64 -61
- data/tracks/fsharp/exercises/all-your-base/Example.fs +4 -1
- data/tracks/fsharp/exercises/allergies/Allergies.fs +2 -2
- data/tracks/fsharp/exercises/allergies/Allergies.fsproj +3 -2
- data/tracks/fsharp/exercises/allergies/AllergiesTest.fs +28 -37
- data/tracks/fsharp/exercises/allergies/Example.fs +3 -3
- data/tracks/fsharp/exercises/alphametics/Alphametics.fsproj +3 -2
- data/tracks/fsharp/exercises/anagram/Anagram.fsproj +3 -2
- data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fs +4 -2
- data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fsproj +3 -2
- data/tracks/fsharp/exercises/atbash-cipher/AtbashCipherTest.fs +38 -42
- data/tracks/fsharp/exercises/atbash-cipher/Example.fs +5 -3
- data/tracks/fsharp/exercises/bank-account/BankAccount.fsproj +3 -2
- data/tracks/fsharp/exercises/beer-song/BeerSong.fsproj +3 -2
- data/tracks/fsharp/exercises/beer-song/BeerSongTest.fs +36 -32
- data/tracks/fsharp/exercises/beer-song/Example.fs +2 -2
- data/tracks/fsharp/exercises/binary-search/BinarySearch.fsproj +3 -2
- data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTree.fsproj +3 -2
- data/tracks/fsharp/exercises/bob/Bob.fs +1 -1
- data/tracks/fsharp/exercises/bob/Bob.fsproj +3 -2
- data/tracks/fsharp/exercises/bob/BobTest.fs +64 -20
- data/tracks/fsharp/exercises/bob/Example.fs +3 -4
- data/tracks/fsharp/exercises/book-store/BookStore.fs +1 -1
- data/tracks/fsharp/exercises/book-store/BookStore.fsproj +3 -2
- data/tracks/fsharp/exercises/book-store/BookStoreTest.fs +32 -25
- data/tracks/fsharp/exercises/book-store/Example.fs +1 -1
- data/tracks/fsharp/exercises/bowling/Bowling.fsproj +3 -2
- data/tracks/fsharp/exercises/bracket-push/BracketPush.fs +1 -1
- data/tracks/fsharp/exercises/bracket-push/BracketPush.fsproj +3 -2
- data/tracks/fsharp/exercises/bracket-push/BracketPushTest.fs +24 -25
- data/tracks/fsharp/exercises/bracket-push/Example.fs +1 -1
- data/tracks/fsharp/exercises/change/Change.fs +1 -1
- data/tracks/fsharp/exercises/change/Change.fsproj +3 -2
- data/tracks/fsharp/exercises/change/ChangeTest.fs +42 -18
- data/tracks/fsharp/exercises/change/Example.fs +7 -4
- data/tracks/fsharp/exercises/circular-buffer/CircularBuffer.fsproj +3 -2
- data/tracks/fsharp/exercises/clock/Clock.fsproj +3 -2
- data/tracks/fsharp/exercises/connect/Connect.fsproj +3 -2
- data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fs +1 -40
- data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fsproj +3 -2
- data/tracks/fsharp/exercises/crypto-square/CryptoSquareTest.fs +16 -40
- data/tracks/fsharp/exercises/crypto-square/Example.fs +13 -16
- data/tracks/fsharp/exercises/custom-set/CustomSet.fs +12 -12
- data/tracks/fsharp/exercises/custom-set/CustomSet.fsproj +3 -2
- data/tracks/fsharp/exercises/diamond/Diamond.fsproj +3 -2
- data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fs +2 -2
- data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fsproj +3 -2
- data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquaresTest.fs +24 -20
- data/tracks/fsharp/exercises/difference-of-squares/Example.fs +3 -3
- data/tracks/fsharp/exercises/diffie-hellman/DiffieHellman.fsproj +3 -2
- data/tracks/fsharp/exercises/dominoes/Dominoes.fsproj +3 -2
- data/tracks/fsharp/exercises/dot-dsl/DotDsl.fsproj +3 -2
- data/tracks/fsharp/exercises/error-handling/ErrorHandling.fsproj +3 -2
- data/tracks/fsharp/exercises/etl/Etl.fsproj +3 -2
- data/tracks/fsharp/exercises/food-chain/FoodChain.fsproj +3 -2
- data/tracks/fsharp/exercises/forth/Forth.fsproj +3 -2
- data/tracks/fsharp/exercises/gigasecond/Example.fs +1 -3
- data/tracks/fsharp/exercises/gigasecond/Gigasecond.fs +1 -1
- data/tracks/fsharp/exercises/gigasecond/Gigasecond.fsproj +3 -2
- data/tracks/fsharp/exercises/gigasecond/GigasecondTest.fs +21 -12
- data/tracks/fsharp/exercises/go-counting/GoCounting.fsproj +3 -2
- data/tracks/fsharp/exercises/grade-school/GradeSchool.fsproj +3 -2
- data/tracks/fsharp/exercises/grains/Grains.fsproj +3 -2
- data/tracks/fsharp/exercises/grep/Grep.fsproj +3 -2
- data/tracks/fsharp/exercises/hamming/Hamming.fsproj +3 -2
- data/tracks/fsharp/exercises/hangman/Hangman.fsproj +3 -2
- data/tracks/fsharp/exercises/hello-world/HelloWorld.fsproj +3 -2
- data/tracks/fsharp/exercises/hello-world/HelloWorldTest.fs +6 -3
- data/tracks/fsharp/exercises/house/House.fsproj +3 -2
- data/tracks/fsharp/exercises/isogram/Example.fs +1 -1
- data/tracks/fsharp/exercises/isogram/Isogram.fs +1 -1
- data/tracks/fsharp/exercises/isogram/Isogram.fsproj +3 -2
- data/tracks/fsharp/exercises/isogram/IsogramTest.fs +16 -40
- data/tracks/fsharp/exercises/kindergarten-garden/Example.fs +6 -4
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fs +3 -5
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fsproj +3 -2
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGardenTest.fs +100 -47
- data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProduct.fsproj +3 -2
- data/tracks/fsharp/exercises/leap/Example.fs +2 -2
- data/tracks/fsharp/exercises/leap/Leap.fs +2 -2
- data/tracks/fsharp/exercises/leap/Leap.fsproj +3 -2
- data/tracks/fsharp/exercises/leap/LeapTest.fs +19 -15
- data/tracks/fsharp/exercises/ledger/Ledger.fsproj +3 -2
- data/tracks/fsharp/exercises/lens-person/LensPerson.fsproj +3 -2
- data/tracks/fsharp/exercises/linked-list/LinkedList.fsproj +3 -2
- data/tracks/fsharp/exercises/list-ops/ListOps.fsproj +3 -2
- data/tracks/fsharp/exercises/luhn/Luhn.fsproj +3 -2
- data/tracks/fsharp/exercises/luhn/LuhnTest.fs +30 -65
- data/tracks/fsharp/exercises/markdown/Markdown.fsproj +3 -2
- data/tracks/fsharp/exercises/matrix/Matrix.fsproj +3 -2
- data/tracks/fsharp/exercises/meetup/Meetup.fsproj +3 -2
- data/tracks/fsharp/exercises/minesweeper/Example.fs +9 -11
- data/tracks/fsharp/exercises/minesweeper/Minesweeper.fsproj +3 -2
- data/tracks/fsharp/exercises/minesweeper/MinesweeperTest.fs +117 -80
- data/tracks/fsharp/exercises/nth-prime/NthPrime.fsproj +3 -2
- data/tracks/fsharp/exercises/nucleotide-count/NucleotideCount.fsproj +3 -2
- data/tracks/fsharp/exercises/ocr-numbers/OcrNumbers.fsproj +3 -2
- data/tracks/fsharp/exercises/palindrome-products/PalindromeProducts.fsproj +3 -2
- data/tracks/fsharp/exercises/pangram/Pangram.fsproj +3 -2
- data/tracks/fsharp/exercises/pangram/PangramTest.fs +15 -27
- data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.fsproj +3 -2
- data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangle.fsproj +3 -2
- data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fsproj +3 -2
- data/tracks/fsharp/exercises/phone-number/PhoneNumber.fsproj +3 -2
- data/tracks/fsharp/exercises/pig-latin/Example.fs +1 -1
- data/tracks/fsharp/exercises/pig-latin/PigLatin.fsproj +3 -2
- data/tracks/fsharp/exercises/pig-latin/PigLatinTest.fs +64 -26
- data/tracks/fsharp/exercises/poker/Poker.fsproj +3 -2
- data/tracks/fsharp/exercises/pov/Pov.fsproj +3 -2
- data/tracks/fsharp/exercises/prime-factors/PrimeFactors.fsproj +3 -2
- data/tracks/fsharp/exercises/protein-translation/ProteinTranslation.fsproj +3 -2
- data/tracks/fsharp/exercises/proverb/Proverb.fsproj +3 -2
- data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTriplet.fsproj +3 -2
- data/tracks/fsharp/exercises/queen-attack/Example.fs +3 -1
- data/tracks/fsharp/exercises/queen-attack/QueenAttack.fs +2 -0
- data/tracks/fsharp/exercises/queen-attack/QueenAttack.fsproj +3 -2
- data/tracks/fsharp/exercises/queen-attack/QueenAttackTest.fs +50 -20
- data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipher.fsproj +3 -2
- data/tracks/fsharp/exercises/raindrops/Raindrops.fsproj +3 -2
- data/tracks/fsharp/exercises/raindrops/RaindropsTest.fs +77 -37
- data/tracks/fsharp/exercises/react/React.fsproj +3 -2
- data/tracks/fsharp/exercises/rectangles/Rectangles.fsproj +3 -2
- data/tracks/fsharp/exercises/rna-transcription/Example.fs +15 -7
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fs +2 -2
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fsproj +3 -2
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscriptionTest.fs +29 -14
- data/tracks/fsharp/exercises/robot-name/RobotName.fsproj +3 -2
- data/tracks/fsharp/exercises/robot-simulator/RobotSimulator.fsproj +3 -2
- data/tracks/fsharp/exercises/roman-numerals/Example.fs +2 -2
- data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fs +2 -2
- data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fsproj +3 -2
- data/tracks/fsharp/exercises/roman-numerals/RomanNumeralsTest.fs +79 -26
- data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncoding.fsproj +3 -2
- data/tracks/fsharp/exercises/saddle-points/SaddlePoints.fsproj +3 -2
- data/tracks/fsharp/exercises/say/Say.fsproj +3 -2
- data/tracks/fsharp/exercises/scale-generator/ScaleGenerator.fsproj +3 -2
- data/tracks/fsharp/exercises/scrabble-score/ScrabbleScore.fsproj +3 -2
- data/tracks/fsharp/exercises/scrabble-score/ScrabbleScoreTest.fs +33 -17
- data/tracks/fsharp/exercises/secret-handshake/SecretHandshake.fsproj +3 -2
- data/tracks/fsharp/exercises/series/Series.fsproj +3 -2
- data/tracks/fsharp/exercises/sgf-parsing/SgfParsing.fsproj +3 -2
- data/tracks/fsharp/exercises/sieve/Sieve.fsproj +3 -2
- data/tracks/fsharp/exercises/simple-cipher/SimpleCipher.fsproj +3 -2
- data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedList.fsproj +3 -2
- data/tracks/fsharp/exercises/space-age/SpaceAge.fsproj +3 -2
- data/tracks/fsharp/exercises/strain/Strain.fsproj +3 -2
- data/tracks/fsharp/exercises/sublist/Sublist.fsproj +3 -2
- data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiples.fsproj +3 -2
- data/tracks/fsharp/exercises/tournament/Tournament.fsproj +3 -2
- data/tracks/fsharp/exercises/transpose/Transpose.fsproj +3 -2
- data/tracks/fsharp/exercises/tree-building/TreeBuilding.fsproj +3 -2
- data/tracks/fsharp/exercises/triangle/Triangle.fsproj +3 -2
- data/tracks/fsharp/exercises/twelve-days/TwelveDays.fsproj +3 -2
- data/tracks/fsharp/exercises/two-bucket/TwoBucket.fsproj +3 -2
- data/tracks/fsharp/exercises/two-fer/TwoFer.fsproj +3 -2
- data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantity.fsproj +3 -2
- data/tracks/fsharp/exercises/word-count/WordCount.fsproj +3 -2
- data/tracks/fsharp/exercises/word-search/WordSearch.fsproj +3 -2
- data/tracks/fsharp/exercises/wordy/Wordy.fsproj +3 -2
- data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzle.fsproj +3 -2
- data/tracks/fsharp/exercises/zipper/Zipper.fsproj +3 -2
- data/tracks/fsharp/generators/Common.fs +96 -0
- data/tracks/fsharp/generators/Exercise.fs +250 -0
- data/tracks/fsharp/generators/Generators.fs +210 -0
- data/tracks/fsharp/generators/Generators.fsproj +32 -0
- data/tracks/fsharp/generators/Generators.sln +24 -0
- data/tracks/fsharp/generators/Input.fs +99 -0
- data/tracks/fsharp/generators/Options.fs +31 -0
- data/tracks/fsharp/generators/Output.fs +224 -0
- data/tracks/fsharp/generators/Program.fs +35 -0
- data/tracks/fsharp/generators/Properties/launchSettings.json +8 -0
- data/tracks/fsharp/generators/Templates/_AssertEmpty.liquid +1 -0
- data/tracks/fsharp/generators/Templates/_AssertEqual.liquid +1 -0
- data/tracks/fsharp/generators/Templates/_TestClass.liquid +13 -0
- data/tracks/fsharp/generators/Templates/_TestMethod.liquid +3 -0
- data/tracks/fsharp/generators/Templates/_TestMethodBody.liquid +4 -0
- data/tracks/go/.travis.yml +3 -3
- data/tracks/groovy/CONTRIBUTING.md +2 -2
- data/tracks/groovy/config.json +12 -0
- data/tracks/groovy/exercises/scrabble-score/Example.groovy +18 -0
- data/tracks/groovy/exercises/scrabble-score/README.md +63 -0
- data/tracks/groovy/exercises/scrabble-score/ScrabbleScore.groovy +7 -0
- data/tracks/groovy/exercises/scrabble-score/ScrabbleScoreSpec.groovy +45 -0
- data/tracks/groovy/exercises/two-fer/TwoFer.groovy +2 -2
- data/tracks/haskell/exercises/change/README.md +1 -1
- data/tracks/haskell/exercises/lens-person/README.md +1 -1
- data/tracks/haskell/exercises/palindrome-products/README.md +5 -12
- data/tracks/haskell/exercises/sum-of-multiples/README.md +0 -3
- data/tracks/idris/config.json +12 -0
- data/tracks/idris/exercises/accumulate/Accumulate.ipkg +5 -0
- data/tracks/idris/exercises/accumulate/Makefile +23 -0
- data/tracks/idris/exercises/accumulate/README.md +32 -0
- data/tracks/idris/exercises/accumulate/src/Example.idr +6 -0
- data/tracks/idris/exercises/accumulate/src/Test/Accumulate.idr +35 -0
- data/tracks/java/config/maintainers.json +4 -7
- data/tracks/java/config.json +99 -22
- data/tracks/java/exercises/binary-search-tree/.meta/src/reference/java/{BST.java → BinarySearchTree.java} +1 -1
- data/tracks/java/exercises/binary-search-tree/src/test/java/{BSTTest.java → BinarySearchTreeTest.java} +34 -36
- data/tracks/java/exercises/robot-simulator/src/main/java/GridPosition.java +19 -15
- data/tracks/java/exercises/saddle-points/.meta/src/reference/java/MatrixCoordinate.java +7 -1
- data/tracks/java/exercises/saddle-points/src/main/java/MatrixCoordinate.java +7 -1
- data/tracks/java/exercises/settings.gradle +1 -0
- data/tracks/java/exercises/tournament/.meta/src/reference/java/Result.java +5 -0
- data/tracks/java/exercises/tournament/.meta/src/reference/java/TeamResult.java +41 -0
- data/tracks/java/exercises/tournament/.meta/src/reference/java/Tournament.java +62 -0
- data/tracks/java/exercises/tournament/README.md +78 -0
- data/tracks/java/exercises/tournament/build.gradle +18 -0
- data/tracks/java/{.Rhistory → exercises/tournament/src/main/java/.keep} +0 -0
- data/tracks/java/exercises/tournament/src/test/java/TournamentTest.java +160 -0
- data/tracks/php/config.json +14 -0
- data/tracks/php/exercises/collatz-conjecture/collatz-conjecture_test.php +44 -0
- data/tracks/php/exercises/collatz-conjecture/example.php +18 -0
- data/tracks/python/exercises/circular-buffer/circular_buffer.py +1 -1
- data/tracks/python/exercises/clock/clock.py +1 -1
- data/tracks/python/exercises/etl/etl.py +1 -1
- data/tracks/python/exercises/grade-school/grade_school.py +1 -1
- data/tracks/python/exercises/grains/grains.py +2 -2
- data/tracks/python/exercises/kindergarten-garden/kindergarten_garden.py +1 -1
- data/tracks/python/exercises/linked-list/linked_list.py +1 -1
- data/tracks/python/exercises/rectangles/rectangles.py +1 -1
- data/tracks/python/exercises/sum-of-multiples/sum_of_multiples.py +1 -1
- data/tracks/rust/exercises/bob/tests/bob.rs +1 -0
- data/tracks/rust/exercises/crypto-square/tests/crypto-square.rs +7 -0
- data/tracks/rust/exercises/gigasecond/tests/gigasecond.rs +1 -1
- data/tracks/rust/exercises/phone-number/Cargo.lock +1 -1
- data/tracks/rust/exercises/phone-number/Cargo.toml +1 -1
- data/tracks/rust/exercises/phone-number/example.rs +17 -23
- data/tracks/rust/exercises/phone-number/tests/phone-number.rs +31 -40
- data/tracks/rust/exercises/say/tests/say.rs +2 -0
- data/tracks/rust/exercises/sum-of-multiples/README.md +0 -3
- data/tracks/scala/config.json +11 -0
- data/tracks/scala/exercises/collatz-conjecture/README.md +43 -0
- data/tracks/scala/exercises/collatz-conjecture/build.sbt +3 -0
- data/tracks/scala/exercises/collatz-conjecture/example.scala +17 -0
- data/tracks/scala/exercises/collatz-conjecture/src/main/scala/.keep +0 -0
- data/tracks/scala/exercises/collatz-conjecture/src/test/scala/CollatzConjectureTest.scala +34 -0
- data/tracks/scala/testgen/src/main/scala/CollatzConjectureTestGenerator.scala +35 -0
- data/tracks/scheme/config.json +8 -0
- data/tracks/scheme/exercises/word-count/README.md +19 -0
- data/tracks/scheme/exercises/word-count/example.scm +27 -0
- data/tracks/scheme/exercises/word-count/word-count-test.scm +90 -0
- data/tracks/scheme/exercises/word-count/word-count.scm +5 -0
- data/tracks/sml/README.md +20 -1
- data/tracks/sml/bin/generate +74 -20
- data/tracks/sml/exercises/binary/README.md +23 -5
- data/tracks/sml/exercises/binary/binary.sml +2 -0
- data/tracks/sml/exercises/binary/example.sml +10 -21
- data/tracks/sml/exercises/binary/test.sml +55 -30
- data/tracks/sml/exercises/binary/testlib.sml +159 -0
- data/tracks/sml/exercises/flatten-array/HINTS.md +8 -0
- data/tracks/sml/exercises/flatten-array/README.md +31 -6
- data/tracks/sml/exercises/flatten-array/example.sml +3 -4
- data/tracks/sml/exercises/flatten-array/flatten-array.sml +4 -5
- data/tracks/sml/exercises/flatten-array/test.sml +76 -52
- data/tracks/sml/exercises/flatten-array/testlib.sml +159 -0
- data/tracks/sml/exercises/nth-prime/HINTS.md +9 -0
- data/tracks/sml/exercises/nth-prime/README.md +32 -5
- data/tracks/sml/exercises/nth-prime/example.sml +28 -46
- data/tracks/sml/exercises/nth-prime/nth-prime.sml +1 -1
- data/tracks/sml/exercises/nth-prime/test.sml +19 -63
- data/tracks/sml/exercises/nth-prime/testlib.sml +159 -0
- data/tracks/sml/exercises/raindrops/README.md +21 -5
- data/tracks/typescript/config.json +14 -0
- data/tracks/typescript/exercises/triangle/README.md +55 -0
- data/tracks/typescript/exercises/triangle/package.json +36 -0
- data/tracks/typescript/exercises/triangle/triangle.example.ts +56 -0
- data/tracks/typescript/exercises/triangle/triangle.test.ts +79 -0
- data/tracks/typescript/exercises/triangle/triangle.ts +12 -0
- data/tracks/typescript/exercises/triangle/tsconfig.json +22 -0
- data/tracks/typescript/exercises/triangle/tslint.json +127 -0
- data/tracks/typescript/exercises/triangle/yarn.lock +2305 -0
- metadata +85 -6
- data/tracks/d/exercises/crypto-square/.dub/dub.json +0 -6
@@ -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
|