trackler 2.2.1.22 → 2.2.1.23
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/tracks/bash/exercises/bob/bob_test.sh +8 -6
- data/tracks/bash/exercises/bob/example.sh +30 -6
- data/tracks/coffeescript/docs/SNIPPET.txt +4 -0
- data/tracks/csharp/generators/Exercises/Allergies.cs +0 -2
- data/tracks/csharp/generators/Exercises/Anagram.cs +0 -2
- data/tracks/csharp/generators/Exercises/BinarySearch.cs +0 -2
- data/tracks/csharp/generators/Exercises/ComplexNumbers.cs +0 -2
- data/tracks/csharp/generators/Exercises/RailFenceCipher.cs +1 -2
- data/tracks/csharp/generators/Exercises/SpaceAge.cs +0 -3
- data/tracks/csharp/generators/Input/CanonicalDataCase.cs +37 -2
- data/tracks/dart/docs/SNIPPET.txt +5 -0
- data/tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js +5 -1
- data/tracks/elm/docs/SNIPPET.txt +10 -0
- data/tracks/fortran/docs/SNIPPET.txt +9 -0
- data/tracks/fsharp/.gitignore +2 -2
- data/tracks/fsharp/.travis.yml +18 -5
- data/tracks/fsharp/build.cake +92 -0
- data/tracks/fsharp/build.ps1 +81 -0
- data/tracks/fsharp/build.sh +56 -33
- data/tracks/fsharp/config.json +14 -14
- data/tracks/fsharp/docs/INSTALLATION.md +14 -45
- data/tracks/fsharp/docs/TESTS.md +12 -25
- data/tracks/fsharp/exercises/Exercises.sln +648 -0
- data/tracks/fsharp/exercises/accumulate/Accumulate.fs +3 -0
- data/tracks/fsharp/exercises/accumulate/Accumulate.fsproj +22 -0
- data/tracks/fsharp/exercises/accumulate/AccumulateTest.fs +18 -22
- data/tracks/fsharp/exercises/accumulate/HINTS.md +1 -0
- data/tracks/fsharp/exercises/accumulate/Program.fs +1 -0
- data/tracks/fsharp/exercises/acronym/Acronym.fs +3 -0
- data/tracks/fsharp/exercises/acronym/Acronym.fsproj +22 -0
- data/tracks/fsharp/exercises/acronym/AcronymTest.fs +18 -24
- data/tracks/fsharp/exercises/acronym/Program.fs +1 -0
- data/tracks/fsharp/exercises/all-your-base/AllYourBase.fs +3 -0
- data/tracks/fsharp/exercises/all-your-base/AllYourBase.fsproj +22 -0
- data/tracks/fsharp/exercises/all-your-base/AllYourBaseTest.fs +45 -64
- data/tracks/fsharp/exercises/all-your-base/Program.fs +1 -0
- data/tracks/fsharp/exercises/allergies/Allergies.fs +9 -0
- data/tracks/fsharp/exercises/allergies/Allergies.fsproj +22 -0
- data/tracks/fsharp/exercises/allergies/AllergiesTest.fs +47 -51
- data/tracks/fsharp/exercises/allergies/Program.fs +1 -0
- data/tracks/fsharp/exercises/alphametics/Alphametics.fs +3 -0
- data/tracks/fsharp/exercises/alphametics/Alphametics.fsproj +22 -0
- data/tracks/fsharp/exercises/alphametics/AlphameticsTest.fs +19 -25
- data/tracks/fsharp/exercises/alphametics/Example.fs +13 -13
- data/tracks/fsharp/exercises/alphametics/Program.fs +1 -0
- data/tracks/fsharp/exercises/anagram/Anagram.fs +3 -0
- data/tracks/fsharp/exercises/anagram/Anagram.fsproj +22 -0
- data/tracks/fsharp/exercises/anagram/AnagramTest.fs +22 -33
- data/tracks/fsharp/exercises/anagram/Program.fs +1 -0
- data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fs +3 -0
- data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fsproj +22 -0
- data/tracks/fsharp/exercises/atbash-cipher/{AtbashTest.fs → AtbashCipherTest.fs} +18 -24
- data/tracks/fsharp/exercises/atbash-cipher/Program.fs +1 -0
- data/tracks/fsharp/exercises/bank-account/BankAccount.fs +11 -0
- data/tracks/fsharp/exercises/bank-account/BankAccount.fsproj +22 -0
- data/tracks/fsharp/exercises/bank-account/BankAccountTest.fs +16 -19
- data/tracks/fsharp/exercises/bank-account/Program.fs +1 -0
- data/tracks/fsharp/exercises/beer-song/BeerSong.fs +7 -0
- data/tracks/fsharp/exercises/beer-song/BeerSong.fsproj +22 -0
- data/tracks/fsharp/exercises/beer-song/BeerSongTest.fs +17 -22
- data/tracks/fsharp/exercises/beer-song/Program.fs +1 -0
- data/tracks/fsharp/exercises/binary-search/BinarySearch.fs +3 -0
- data/tracks/fsharp/exercises/binary-search/BinarySearch.fsproj +22 -0
- data/tracks/fsharp/exercises/binary-search/BinarySearchTest.fs +21 -28
- data/tracks/fsharp/exercises/binary-search/Program.fs +1 -0
- data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTree.fs +15 -0
- data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTree.fsproj +22 -0
- data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTreeTest.fs +31 -38
- data/tracks/fsharp/exercises/binary-search-tree/Program.fs +1 -0
- data/tracks/fsharp/exercises/bob/Bob.fs +3 -0
- data/tracks/fsharp/exercises/bob/Bob.fsproj +22 -0
- data/tracks/fsharp/exercises/bob/BobTest.fs +33 -46
- data/tracks/fsharp/exercises/bob/Program.fs +1 -0
- data/tracks/fsharp/exercises/book-store/BookStore.fs +3 -0
- data/tracks/fsharp/exercises/book-store/BookStore.fsproj +22 -0
- data/tracks/fsharp/exercises/book-store/BookStoreTest.fs +27 -37
- data/tracks/fsharp/exercises/book-store/Program.fs +1 -0
- data/tracks/fsharp/exercises/bowling/Bowling.fs +7 -0
- data/tracks/fsharp/exercises/bowling/Bowling.fsproj +22 -0
- data/tracks/fsharp/exercises/bowling/BowlingTest.fs +75 -97
- data/tracks/fsharp/exercises/bowling/Example.fs +1 -1
- data/tracks/fsharp/exercises/bowling/Program.fs +1 -0
- data/tracks/fsharp/exercises/bracket-push/BracketPush.fs +3 -0
- data/tracks/fsharp/exercises/bracket-push/BracketPush.fsproj +22 -0
- data/tracks/fsharp/exercises/bracket-push/BracketPushTest.fs +27 -37
- data/tracks/fsharp/exercises/bracket-push/Program.fs +1 -0
- data/tracks/fsharp/exercises/change/Change.fs +3 -0
- data/tracks/fsharp/exercises/change/Change.fsproj +22 -0
- data/tracks/fsharp/exercises/change/ChangeTest.fs +19 -25
- data/tracks/fsharp/exercises/change/Program.fs +1 -0
- data/tracks/fsharp/exercises/circular-buffer/CircularBuffer.fs +11 -0
- data/tracks/fsharp/exercises/circular-buffer/CircularBuffer.fsproj +22 -0
- data/tracks/fsharp/exercises/circular-buffer/CircularBufferTest.fs +36 -42
- data/tracks/fsharp/exercises/circular-buffer/Program.fs +1 -0
- data/tracks/fsharp/exercises/clock/Clock.fs +9 -0
- data/tracks/fsharp/exercises/clock/Clock.fsproj +22 -0
- data/tracks/fsharp/exercises/clock/ClockTest.fs +34 -48
- data/tracks/fsharp/exercises/clock/Program.fs +1 -0
- data/tracks/fsharp/exercises/connect/Connect.fs +3 -0
- data/tracks/fsharp/exercises/connect/Connect.fsproj +22 -0
- data/tracks/fsharp/exercises/connect/ConnectTest.fs +19 -25
- data/tracks/fsharp/exercises/connect/Program.fs +1 -0
- data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fs +44 -0
- data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fsproj +22 -0
- data/tracks/fsharp/exercises/crypto-square/CryptoSquareTest.fs +28 -39
- data/tracks/fsharp/exercises/crypto-square/Program.fs +1 -0
- data/tracks/fsharp/exercises/custom-set/CustomSet.fs +29 -0
- data/tracks/fsharp/exercises/custom-set/CustomSet.fsproj +22 -0
- data/tracks/fsharp/exercises/custom-set/CustomSetTest.fs +77 -119
- data/tracks/fsharp/exercises/custom-set/Program.fs +1 -0
- data/tracks/fsharp/exercises/diamond/Diamond.fs +3 -0
- data/tracks/fsharp/exercises/diamond/Diamond.fsproj +22 -0
- data/tracks/fsharp/exercises/diamond/DiamondTest.fs +31 -27
- data/tracks/fsharp/exercises/diamond/Program.fs +1 -0
- data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fs +7 -0
- data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fsproj +22 -0
- data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquaresTest.fs +21 -28
- data/tracks/fsharp/exercises/difference-of-squares/Program.fs +1 -0
- data/tracks/fsharp/exercises/diffie-hellman/DiffieHellman.fs +7 -0
- data/tracks/fsharp/exercises/diffie-hellman/DiffieHellman.fsproj +22 -0
- data/tracks/fsharp/exercises/diffie-hellman/DiffieHellmanTest.fs +16 -19
- data/tracks/fsharp/exercises/diffie-hellman/Program.fs +1 -0
- data/tracks/fsharp/exercises/dominoes/Dominoes.fs +3 -0
- data/tracks/fsharp/exercises/dominoes/Dominoes.fsproj +22 -0
- data/tracks/fsharp/exercises/dominoes/DominoesTest.fs +27 -37
- data/tracks/fsharp/exercises/dominoes/Program.fs +1 -0
- data/tracks/fsharp/exercises/dot-dsl/DotDsl.fs +15 -0
- data/tracks/fsharp/exercises/dot-dsl/DotDsl.fsproj +22 -0
- data/tracks/fsharp/exercises/dot-dsl/DotDslTest.fs +27 -31
- data/tracks/fsharp/exercises/dot-dsl/Program.fs +1 -0
- data/tracks/fsharp/exercises/error-handling/ErrorHandling.fs +11 -0
- data/tracks/fsharp/exercises/error-handling/ErrorHandling.fsproj +22 -0
- data/tracks/fsharp/exercises/error-handling/ErrorHandlingTest.fs +20 -25
- data/tracks/fsharp/exercises/error-handling/Program.fs +1 -0
- data/tracks/fsharp/exercises/etl/Etl.fs +3 -0
- data/tracks/fsharp/exercises/etl/Etl.fsproj +22 -0
- data/tracks/fsharp/exercises/etl/{ETLTest.fs → EtlTest.fs} +11 -13
- data/tracks/fsharp/exercises/etl/Program.fs +1 -0
- data/tracks/fsharp/exercises/food-chain/FoodChain.fs +5 -0
- data/tracks/fsharp/exercises/food-chain/FoodChain.fsproj +22 -0
- data/tracks/fsharp/exercises/food-chain/FoodChainTest.fs +13 -16
- data/tracks/fsharp/exercises/food-chain/Program.fs +1 -0
- data/tracks/fsharp/exercises/forth/Forth.fs +3 -0
- data/tracks/fsharp/exercises/forth/Forth.fsproj +22 -0
- data/tracks/fsharp/exercises/forth/ForthTest.fs +44 -57
- data/tracks/fsharp/exercises/forth/Program.fs +1 -0
- data/tracks/fsharp/exercises/gigasecond/Gigasecond.fs +3 -0
- data/tracks/fsharp/exercises/gigasecond/Gigasecond.fsproj +22 -0
- data/tracks/fsharp/exercises/gigasecond/GigasecondTest.fs +9 -10
- data/tracks/fsharp/exercises/gigasecond/Program.fs +1 -0
- data/tracks/fsharp/exercises/go-counting/GoCounting.fs +3 -0
- data/tracks/fsharp/exercises/go-counting/GoCounting.fsproj +22 -0
- data/tracks/fsharp/exercises/go-counting/GoCountingTest.fs +23 -30
- data/tracks/fsharp/exercises/go-counting/Program.fs +1 -0
- data/tracks/fsharp/exercises/grade-school/Example.fs +1 -1
- data/tracks/fsharp/exercises/grade-school/GradeSchool.fs +9 -0
- data/tracks/fsharp/exercises/grade-school/GradeSchool.fsproj +22 -0
- data/tracks/fsharp/exercises/grade-school/GradeSchoolTest.fs +17 -22
- data/tracks/fsharp/exercises/grade-school/Program.fs +1 -0
- data/tracks/fsharp/exercises/grains/Grains.fs +6 -0
- data/tracks/fsharp/exercises/grains/Grains.fsproj +22 -0
- data/tracks/fsharp/exercises/grains/GrainsTest.fs +19 -25
- data/tracks/fsharp/exercises/grains/Program.fs +1 -0
- data/tracks/fsharp/exercises/grep/Grep.fs +3 -0
- data/tracks/fsharp/exercises/grep/Grep.fsproj +22 -0
- data/tracks/fsharp/exercises/grep/GrepTest.fs +332 -348
- data/tracks/fsharp/exercises/grep/Program.fs +1 -0
- data/tracks/fsharp/exercises/hamming/Hamming.fs +3 -0
- data/tracks/fsharp/exercises/hamming/Hamming.fsproj +22 -0
- data/tracks/fsharp/exercises/hamming/HammingTest.fs +15 -19
- data/tracks/fsharp/exercises/hamming/Program.fs +1 -0
- data/tracks/fsharp/exercises/hangman/Hangman.fs +3 -0
- data/tracks/fsharp/exercises/hangman/Hangman.fsproj +22 -0
- data/tracks/fsharp/exercises/hangman/HangmanTest.fs +30 -34
- data/tracks/fsharp/exercises/hangman/Program.fs +1 -0
- data/tracks/fsharp/exercises/hello-world/HelloWorld.fs +3 -0
- data/tracks/fsharp/exercises/hello-world/HelloWorld.fsproj +22 -0
- data/tracks/fsharp/exercises/hello-world/HelloWorldTest.fs +5 -4
- data/tracks/fsharp/exercises/hello-world/Program.fs +1 -0
- data/tracks/fsharp/exercises/house/House.fs +3 -0
- data/tracks/fsharp/exercises/house/House.fsproj +22 -0
- data/tracks/fsharp/exercises/house/HouseTest.fs +5 -4
- data/tracks/fsharp/exercises/house/Program.fs +1 -0
- data/tracks/fsharp/exercises/isogram/Isogram.fs +3 -0
- data/tracks/fsharp/exercises/isogram/Isogram.fsproj +22 -0
- data/tracks/fsharp/exercises/isogram/IsogramTest.fs +21 -28
- data/tracks/fsharp/exercises/isogram/Program.fs +1 -0
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fs +9 -0
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fsproj +22 -0
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGardenTest.fs +51 -0
- data/tracks/fsharp/exercises/kindergarten-garden/Program.fs +1 -0
- data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProduct.fs +3 -0
- data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProduct.fsproj +22 -0
- data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProductTest.fs +27 -22
- data/tracks/fsharp/exercises/largest-series-product/Program.fs +1 -0
- data/tracks/fsharp/exercises/leap/Leap.fs +3 -0
- data/tracks/fsharp/exercises/leap/Leap.fsproj +22 -0
- data/tracks/fsharp/exercises/leap/LeapTest.fs +11 -13
- data/tracks/fsharp/exercises/leap/Program.fs +1 -0
- data/tracks/fsharp/exercises/ledger/Ledger.fsproj +22 -0
- data/tracks/fsharp/exercises/ledger/LedgerTest.fs +23 -22
- data/tracks/fsharp/exercises/ledger/Program.fs +1 -0
- data/tracks/fsharp/exercises/lens-person/LensPerson.fs +1 -22
- data/tracks/fsharp/exercises/lens-person/LensPerson.fsproj +23 -0
- data/tracks/fsharp/exercises/lens-person/LensPersonTest.fs +11 -13
- data/tracks/fsharp/exercises/lens-person/Program.fs +1 -0
- data/tracks/fsharp/exercises/linked-list/LinkedList.fs +13 -0
- data/tracks/fsharp/exercises/linked-list/LinkedList.fsproj +22 -0
- data/tracks/fsharp/exercises/linked-list/LinkedListTest.fs +28 -33
- data/tracks/fsharp/exercises/linked-list/Program.fs +1 -0
- data/tracks/fsharp/exercises/list-ops/ListOps.fs +17 -0
- data/tracks/fsharp/exercises/list-ops/ListOps.fsproj +22 -0
- data/tracks/fsharp/exercises/list-ops/ListOpsTest.fs +51 -73
- data/tracks/fsharp/exercises/list-ops/Program.fs +1 -0
- data/tracks/fsharp/exercises/luhn/Luhn.fs +3 -0
- data/tracks/fsharp/exercises/luhn/Luhn.fsproj +22 -0
- data/tracks/fsharp/exercises/luhn/LuhnTest.fs +28 -39
- data/tracks/fsharp/exercises/luhn/Program.fs +1 -0
- data/tracks/fsharp/exercises/markdown/Markdown.fsproj +22 -0
- data/tracks/fsharp/exercises/markdown/MarkdownTest.fs +21 -20
- data/tracks/fsharp/exercises/markdown/Program.fs +1 -0
- data/tracks/fsharp/exercises/matrix/Matrix.fs +7 -0
- data/tracks/fsharp/exercises/matrix/Matrix.fsproj +22 -0
- data/tracks/fsharp/exercises/matrix/MatrixTest.fs +76 -48
- data/tracks/fsharp/exercises/matrix/Program.fs +1 -0
- data/tracks/fsharp/exercises/meetup/Meetup.fs +7 -0
- data/tracks/fsharp/exercises/meetup/Meetup.fsproj +22 -0
- data/tracks/fsharp/exercises/meetup/MeetupTest.fs +67 -60
- data/tracks/fsharp/exercises/meetup/Program.fs +1 -0
- data/tracks/fsharp/exercises/minesweeper/Minesweeper.fs +3 -0
- data/tracks/fsharp/exercises/minesweeper/Minesweeper.fsproj +22 -0
- data/tracks/fsharp/exercises/minesweeper/MinesweeperTest.fs +17 -22
- data/tracks/fsharp/exercises/minesweeper/Program.fs +1 -0
- data/tracks/fsharp/exercises/nth-prime/NthPrime.fs +3 -0
- data/tracks/fsharp/exercises/nth-prime/NthPrime.fsproj +22 -0
- data/tracks/fsharp/exercises/nth-prime/NthPrimeTest.fs +25 -34
- data/tracks/fsharp/exercises/nth-prime/Program.fs +1 -0
- data/tracks/fsharp/exercises/nucleotide-count/NucleotideCount.fs +5 -0
- data/tracks/fsharp/exercises/nucleotide-count/NucleotideCount.fsproj +22 -0
- data/tracks/fsharp/exercises/nucleotide-count/NucleotideCountTest.fs +17 -21
- data/tracks/fsharp/exercises/nucleotide-count/Program.fs +1 -0
- data/tracks/fsharp/exercises/ocr-numbers/OcrNumbers.fs +3 -0
- data/tracks/fsharp/exercises/ocr-numbers/OcrNumbers.fsproj +22 -0
- data/tracks/fsharp/exercises/ocr-numbers/OcrNumbersTest.fs +33 -46
- data/tracks/fsharp/exercises/ocr-numbers/Program.fs +1 -0
- data/tracks/fsharp/exercises/palindrome-products/PalindromeProducts.fs +5 -0
- data/tracks/fsharp/exercises/palindrome-products/PalindromeProducts.fsproj +22 -0
- data/tracks/fsharp/exercises/palindrome-products/PalindromeProductsTest.fs +54 -0
- data/tracks/fsharp/exercises/palindrome-products/Program.fs +1 -0
- data/tracks/fsharp/exercises/pangram/Pangram.fs +3 -0
- data/tracks/fsharp/exercises/pangram/Pangram.fsproj +22 -0
- data/tracks/fsharp/exercises/pangram/PangramTest.fs +23 -31
- data/tracks/fsharp/exercises/pangram/Program.fs +1 -0
- data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.fs +3 -0
- data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.fsproj +22 -0
- data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequencyTest.fs +27 -35
- data/tracks/fsharp/exercises/parallel-letter-frequency/Program.fs +1 -0
- data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangle.fs +3 -0
- data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangle.fsproj +22 -0
- data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangleTest.fs +15 -19
- data/tracks/fsharp/exercises/pascals-triangle/Program.fs +1 -0
- data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fs +5 -0
- data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fsproj +22 -0
- data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbersTest.fs +18 -14
- data/tracks/fsharp/exercises/perfect-numbers/Program.fs +1 -0
- data/tracks/fsharp/exercises/phone-number/PhoneNumber.fs +3 -0
- data/tracks/fsharp/exercises/phone-number/PhoneNumber.fsproj +22 -0
- data/tracks/fsharp/exercises/phone-number/PhoneNumberTest.fs +23 -31
- data/tracks/fsharp/exercises/phone-number/Program.fs +1 -0
- data/tracks/fsharp/exercises/pig-latin/PigLatin.fs +3 -0
- data/tracks/fsharp/exercises/pig-latin/PigLatin.fsproj +22 -0
- data/tracks/fsharp/exercises/pig-latin/PigLatinTest.fs +39 -44
- data/tracks/fsharp/exercises/pig-latin/Program.fs +1 -0
- data/tracks/fsharp/exercises/poker/Poker.fs +3 -0
- data/tracks/fsharp/exercises/poker/Poker.fsproj +22 -0
- data/tracks/fsharp/exercises/poker/PokerTest.fs +40 -56
- data/tracks/fsharp/exercises/poker/Program.fs +1 -0
- data/tracks/fsharp/exercises/pov/Pov.fs +3 -0
- data/tracks/fsharp/exercises/pov/Pov.fsproj +22 -0
- data/tracks/fsharp/exercises/pov/PovTest.fs +23 -31
- data/tracks/fsharp/exercises/pov/Program.fs +1 -0
- data/tracks/fsharp/exercises/prime-factors/Example.fs +1 -1
- data/tracks/fsharp/exercises/prime-factors/PrimeFactors.fs +3 -0
- data/tracks/fsharp/exercises/prime-factors/PrimeFactors.fsproj +22 -0
- data/tracks/fsharp/exercises/prime-factors/PrimeFactorsTest.fs +22 -30
- data/tracks/fsharp/exercises/prime-factors/Program.fs +1 -0
- data/tracks/fsharp/exercises/protein-translation/Program.fs +1 -0
- data/tracks/fsharp/exercises/protein-translation/ProteinTranslation.fs +3 -0
- data/tracks/fsharp/exercises/protein-translation/ProteinTranslation.fsproj +22 -0
- data/tracks/fsharp/exercises/protein-translation/ProteinTranslationTest.fs +41 -36
- data/tracks/fsharp/exercises/proverb/Program.fs +1 -0
- data/tracks/fsharp/exercises/proverb/Proverb.fs +5 -0
- data/tracks/fsharp/exercises/proverb/Proverb.fsproj +22 -0
- data/tracks/fsharp/exercises/proverb/ProverbTest.fs +11 -13
- data/tracks/fsharp/exercises/pythagorean-triplet/Program.fs +1 -0
- data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTriplet.fs +7 -0
- data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTriplet.fsproj +22 -0
- data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTripletTest.fs +19 -20
- data/tracks/fsharp/exercises/queen-attack/Program.fs +1 -0
- data/tracks/fsharp/exercises/queen-attack/QueenAttack.fs +3 -0
- data/tracks/fsharp/exercises/queen-attack/QueenAttack.fsproj +22 -0
- data/tracks/fsharp/exercises/queen-attack/QueenAttackTest.fs +19 -25
- data/tracks/fsharp/exercises/rail-fence-cipher/Program.fs +1 -0
- data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipher.fs +5 -0
- data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipher.fsproj +22 -0
- data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipherTest.fs +15 -19
- data/tracks/fsharp/exercises/raindrops/Program.fs +1 -0
- data/tracks/fsharp/exercises/raindrops/Raindrops.fs +3 -0
- data/tracks/fsharp/exercises/raindrops/Raindrops.fsproj +22 -0
- data/tracks/fsharp/exercises/raindrops/RaindropsTest.fs +30 -24
- data/tracks/fsharp/exercises/react/Program.fs +1 -0
- data/tracks/fsharp/exercises/react/React.fs +3 -0
- data/tracks/fsharp/exercises/react/React.fsproj +22 -0
- data/tracks/fsharp/exercises/react/ReactTest.fs +26 -31
- data/tracks/fsharp/exercises/rectangles/Program.fs +1 -0
- data/tracks/fsharp/exercises/rectangles/Rectangles.fs +3 -0
- data/tracks/fsharp/exercises/rectangles/Rectangles.fsproj +22 -0
- data/tracks/fsharp/exercises/rectangles/RectanglesTest.fs +23 -31
- data/tracks/fsharp/exercises/rna-transcription/Program.fs +1 -0
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fs +3 -0
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fsproj +22 -0
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscriptionTest.fs +26 -0
- data/tracks/fsharp/exercises/robot-name/Program.fs +1 -0
- data/tracks/fsharp/exercises/robot-name/RobotName.fs +7 -0
- data/tracks/fsharp/exercises/robot-name/RobotName.fsproj +22 -0
- data/tracks/fsharp/exercises/robot-name/RobotNameTest.fs +12 -13
- data/tracks/fsharp/exercises/robot-simulator/Program.fs +1 -0
- data/tracks/fsharp/exercises/robot-simulator/RobotSimulator.fs +13 -0
- data/tracks/fsharp/exercises/robot-simulator/RobotSimulator.fsproj +22 -0
- data/tracks/fsharp/exercises/robot-simulator/RobotSimulatorTest.fs +16 -20
- data/tracks/fsharp/exercises/roman-numerals/Program.fs +1 -0
- data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fs +3 -0
- data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fsproj +22 -0
- data/tracks/fsharp/exercises/roman-numerals/RomanNumeralsTest.fs +28 -0
- data/tracks/fsharp/exercises/run-length-encoding/Program.fs +1 -0
- data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncoding.fs +5 -0
- data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncoding.fsproj +22 -0
- data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncodingTest.fs +17 -22
- data/tracks/fsharp/exercises/saddle-points/Program.fs +1 -0
- data/tracks/fsharp/exercises/saddle-points/SaddlePoints.fs +3 -0
- data/tracks/fsharp/exercises/saddle-points/SaddlePoints.fsproj +22 -0
- data/tracks/fsharp/exercises/saddle-points/{SaddlePointTest.fs → SaddlePointsTest.fs} +13 -16
- data/tracks/fsharp/exercises/say/Program.fs +1 -0
- data/tracks/fsharp/exercises/say/Say.fs +3 -0
- data/tracks/fsharp/exercises/say/Say.fsproj +22 -0
- data/tracks/fsharp/exercises/say/SayTest.fs +35 -49
- data/tracks/fsharp/exercises/scale-generator/Program.fs +1 -0
- data/tracks/fsharp/exercises/scale-generator/ScaleGenerator.fs +3 -0
- data/tracks/fsharp/exercises/scale-generator/ScaleGenerator.fsproj +22 -0
- data/tracks/fsharp/exercises/scale-generator/ScaleGeneratorTest.fs +31 -43
- data/tracks/fsharp/exercises/scrabble-score/Program.fs +1 -0
- data/tracks/fsharp/exercises/scrabble-score/ScrabbleScore.fs +3 -0
- data/tracks/fsharp/exercises/scrabble-score/ScrabbleScore.fsproj +22 -0
- data/tracks/fsharp/exercises/scrabble-score/ScrabbleScoreTest.fs +18 -24
- data/tracks/fsharp/exercises/secret-handshake/Program.fs +1 -0
- data/tracks/fsharp/exercises/secret-handshake/SecretHandshake.fs +3 -0
- data/tracks/fsharp/exercises/secret-handshake/SecretHandshake.fsproj +22 -0
- data/tracks/fsharp/exercises/secret-handshake/SecretHandshakeTest.fs +17 -22
- data/tracks/fsharp/exercises/series/Program.fs +1 -0
- data/tracks/fsharp/exercises/series/Series.fs +3 -0
- data/tracks/fsharp/exercises/series/Series.fsproj +22 -0
- data/tracks/fsharp/exercises/series/SeriesTest.fs +53 -55
- data/tracks/fsharp/exercises/sgf-parsing/Program.fs +1 -0
- data/tracks/fsharp/exercises/sgf-parsing/SgfParsing.fs +3 -0
- data/tracks/fsharp/exercises/sgf-parsing/SgfParsing.fsproj +22 -0
- data/tracks/fsharp/exercises/sgf-parsing/SgfParsingTest.fs +27 -37
- data/tracks/fsharp/exercises/sieve/Program.fs +1 -0
- data/tracks/fsharp/exercises/sieve/Sieve.fs +3 -0
- data/tracks/fsharp/exercises/sieve/Sieve.fsproj +22 -0
- data/tracks/fsharp/exercises/sieve/SieveTest.fs +19 -21
- data/tracks/fsharp/exercises/simple-cipher/Program.fs +1 -0
- data/tracks/fsharp/exercises/simple-cipher/SimpleCipher.fs +7 -0
- data/tracks/fsharp/exercises/simple-cipher/SimpleCipher.fsproj +22 -0
- data/tracks/fsharp/exercises/simple-cipher/SimpleCipherTest.fs +39 -54
- data/tracks/fsharp/exercises/simple-linked-list/Program.fs +1 -0
- data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedList.fs +36 -0
- data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedList.fsproj +22 -0
- data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedListTest.fs +36 -40
- data/tracks/fsharp/exercises/space-age/Program.fs +1 -0
- data/tracks/fsharp/exercises/space-age/SpaceAge.fs +5 -0
- data/tracks/fsharp/exercises/space-age/SpaceAge.fsproj +22 -0
- data/tracks/fsharp/exercises/space-age/SpaceAgeTest.fs +26 -32
- data/tracks/fsharp/exercises/strain/Program.fs +1 -0
- data/tracks/fsharp/exercises/strain/Strain.fs +5 -0
- data/tracks/fsharp/exercises/strain/Strain.fsproj +22 -0
- data/tracks/fsharp/exercises/strain/StrainTest.fs +28 -47
- data/tracks/fsharp/exercises/sublist/Program.fs +1 -0
- data/tracks/fsharp/exercises/sublist/Sublist.fs +5 -0
- data/tracks/fsharp/exercises/sublist/Sublist.fsproj +22 -0
- data/tracks/fsharp/exercises/sublist/SublistTest.fs +39 -55
- data/tracks/fsharp/exercises/sum-of-multiples/Program.fs +1 -0
- data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiples.fs +3 -0
- data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiples.fsproj +22 -0
- data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiplesTest.fs +15 -19
- data/tracks/fsharp/exercises/tournament/Program.fs +1 -0
- data/tracks/fsharp/exercises/tournament/Tournament.fs +3 -0
- data/tracks/fsharp/exercises/tournament/Tournament.fsproj +22 -0
- data/tracks/fsharp/exercises/tournament/TournamentTest.fs +9 -10
- data/tracks/fsharp/exercises/transpose/Program.fs +1 -0
- data/tracks/fsharp/exercises/transpose/Transpose.fs +3 -0
- data/tracks/fsharp/exercises/transpose/Transpose.fsproj +22 -0
- data/tracks/fsharp/exercises/transpose/TransposeTest.fs +25 -34
- data/tracks/fsharp/exercises/tree-building/Program.fs +1 -0
- data/tracks/fsharp/exercises/tree-building/TreeBuilding.fsproj +22 -0
- data/tracks/fsharp/exercises/tree-building/TreeBuildingTest.fs +84 -82
- data/tracks/fsharp/exercises/triangle/Program.fs +1 -0
- data/tracks/fsharp/exercises/triangle/Triangle.fs +8 -0
- data/tracks/fsharp/exercises/triangle/Triangle.fsproj +22 -0
- data/tracks/fsharp/exercises/triangle/TriangleTest.fs +31 -43
- data/tracks/fsharp/exercises/twelve-days/Program.fs +1 -0
- data/tracks/fsharp/exercises/twelve-days/TwelveDays.fs +7 -0
- data/tracks/fsharp/exercises/twelve-days/TwelveDays.fsproj +22 -0
- data/tracks/fsharp/exercises/twelve-days/TwelveDaysTest.fs +31 -43
- data/tracks/fsharp/exercises/two-bucket/Program.fs +1 -0
- data/tracks/fsharp/exercises/two-bucket/TwoBucket.fs +3 -0
- data/tracks/fsharp/exercises/two-bucket/TwoBucket.fsproj +22 -0
- data/tracks/fsharp/exercises/two-bucket/TwoBucketTest.fs +11 -13
- data/tracks/fsharp/exercises/two-fer/Program.fs +1 -0
- data/tracks/fsharp/exercises/two-fer/TwoFer.fs +3 -0
- data/tracks/fsharp/exercises/two-fer/TwoFer.fsproj +22 -0
- data/tracks/fsharp/exercises/two-fer/TwoFerTest.fs +9 -10
- data/tracks/fsharp/exercises/variable-length-quantity/Program.fs +1 -0
- data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantity.fs +3 -0
- data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantity.fsproj +22 -0
- data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantityTest.fs +42 -50
- data/tracks/fsharp/exercises/word-count/Program.fs +1 -0
- data/tracks/fsharp/exercises/word-count/WordCount.fs +3 -0
- data/tracks/fsharp/exercises/word-count/WordCount.fsproj +22 -0
- data/tracks/fsharp/exercises/word-count/WordCountTest.fs +27 -37
- data/tracks/fsharp/exercises/word-search/Program.fs +1 -0
- data/tracks/fsharp/exercises/word-search/WordSearch.fs +3 -0
- data/tracks/fsharp/exercises/word-search/WordSearch.fsproj +22 -0
- data/tracks/fsharp/exercises/word-search/WordSearchTest.fs +23 -31
- data/tracks/fsharp/exercises/wordy/Program.fs +1 -0
- data/tracks/fsharp/exercises/wordy/Wordy.fs +3 -0
- data/tracks/fsharp/exercises/wordy/Wordy.fsproj +22 -0
- data/tracks/fsharp/exercises/wordy/WordyTest.fs +34 -48
- data/tracks/fsharp/exercises/zebra-puzzle/Example.fs +1 -1
- data/tracks/fsharp/exercises/zebra-puzzle/Program.fs +1 -0
- data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzle.fs +3 -0
- data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzle.fsproj +22 -0
- data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzleTest.fs +9 -9
- data/tracks/fsharp/exercises/zipper/Program.fs +1 -0
- data/tracks/fsharp/exercises/zipper/Zipper.fs +3 -0
- data/tracks/fsharp/exercises/zipper/Zipper.fsproj +22 -0
- data/tracks/fsharp/exercises/zipper/ZipperTest.fs +19 -25
- data/tracks/javascript/exercises/simple-linked-list/example.js +4 -3
- data/tracks/javascript/exercises/simple-linked-list/simple-linked-list.spec.js +3 -0
- data/tracks/nim/docs/SNIPPET.txt +2 -0
- data/tracks/perl5/docs/SNIPPET.txt +9 -0
- data/tracks/php/docs/SNIPPET.txt +6 -0
- data/tracks/pony/docs/SNIPPET.txt +2 -0
- data/tracks/powershell/docs/SNIPPET.txt +4 -0
- data/tracks/prolog/docs/SNIPPET.txt +6 -0
- data/tracks/python/exercises/simple-cipher/README.md +1 -1
- data/tracks/vimscript/docs/SNIPPET.txt +4 -0
- metadata +334 -17
- data/tracks/fsharp/.paket/paket.bootstrapper.exe +0 -0
- data/tracks/fsharp/build.cmd +0 -14
- data/tracks/fsharp/build.fsx +0 -65
- data/tracks/fsharp/exercises/app.config +0 -11
- data/tracks/fsharp/exercises/exercises.fsproj +0 -225
- data/tracks/fsharp/exercises/kindergarten-garden/KinderGartenGardenTest.fs +0 -55
- data/tracks/fsharp/exercises/paket.references +0 -4
- data/tracks/fsharp/exercises/palindrome-products/PalindromeTest.fs +0 -60
- data/tracks/fsharp/exercises/rna-transcription/RNATranscriptionTest.fs +0 -29
- data/tracks/fsharp/exercises/roman-numerals/RomanNumeralTest.fs +0 -26
- data/tracks/fsharp/paket.dependencies +0 -8
- data/tracks/fsharp/paket.lock +0 -11
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
|
|
3
|
+
<PropertyGroup>
|
|
4
|
+
<TargetFramework>netcoreapp2.0</TargetFramework>
|
|
5
|
+
|
|
6
|
+
<IsPackable>false</IsPackable>
|
|
7
|
+
</PropertyGroup>
|
|
8
|
+
|
|
9
|
+
<ItemGroup>
|
|
10
|
+
<Compile Include="Alphametics.fs" />
|
|
11
|
+
<Compile Include="AlphameticsTest.fs" />
|
|
12
|
+
<Compile Include="Program.fs" />
|
|
13
|
+
</ItemGroup>
|
|
14
|
+
|
|
15
|
+
<ItemGroup>
|
|
16
|
+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
17
|
+
<PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
|
|
18
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
|
|
19
|
+
<PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
|
|
20
|
+
</ItemGroup>
|
|
21
|
+
|
|
22
|
+
</Project>
|
|
@@ -1,58 +1,52 @@
|
|
|
1
|
-
|
|
1
|
+
module AlphameticsTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
|
|
5
6
|
open Alphametics
|
|
6
7
|
|
|
7
|
-
[<
|
|
8
|
+
[<Fact>]
|
|
8
9
|
let ``Puzzle with three letters`` () =
|
|
9
10
|
let actual = solve "I + BB == ILL"
|
|
10
11
|
let expected = ['I', 1; 'B', 9; 'L', 0] |> Map.ofList |> Some
|
|
11
|
-
|
|
12
|
+
actual |> should equal expected
|
|
12
13
|
|
|
13
|
-
[<
|
|
14
|
-
[<Ignore("Remove to run test")>]
|
|
14
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
15
15
|
let ``Solution must have unique value for each letter`` () =
|
|
16
16
|
let actual = solve "A == B"
|
|
17
|
-
|
|
17
|
+
actual |> should equal None
|
|
18
18
|
|
|
19
|
-
[<
|
|
20
|
-
[<Ignore("Remove to run test")>]
|
|
19
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
21
20
|
let ``Leading zero solution is invalid`` () =
|
|
22
21
|
let actual = solve "ACA + DD == BD"
|
|
23
|
-
|
|
22
|
+
actual |> should equal None
|
|
24
23
|
|
|
25
|
-
[<
|
|
26
|
-
[<Ignore("Remove to run test")>]
|
|
24
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
27
25
|
let ``Puzzle with four letters`` () =
|
|
28
26
|
let actual = solve "AS + A == MOM"
|
|
29
27
|
let expected = ['A', 9; 'S', 2; 'M', 1; 'O', 0] |> Map.ofList |> Some
|
|
30
|
-
|
|
28
|
+
actual |> should equal expected
|
|
31
29
|
|
|
32
|
-
[<
|
|
33
|
-
[<Ignore("Remove to run test")>]
|
|
30
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
34
31
|
let ``Puzzle with six letters`` () =
|
|
35
32
|
let actual = solve "NO + NO + TOO == LATE"
|
|
36
33
|
let expected = ['N', 7; 'O', 4; 'T', 9; 'L', 1; 'A', 0; 'E', 2] |> Map.ofList |> Some
|
|
37
|
-
|
|
34
|
+
actual |> should equal expected
|
|
38
35
|
|
|
39
|
-
[<
|
|
40
|
-
[<Ignore("Remove to run test")>]
|
|
36
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
41
37
|
let ``Puzzle with seven letters`` () =
|
|
42
38
|
let actual = solve "HE + SEES + THE == LIGHT"
|
|
43
39
|
let expected = ['E', 4; 'G', 2; 'H', 5; 'I', 0; 'L', 1; 'S', 9; 'T', 7] |> Map.ofList |> Some
|
|
44
|
-
|
|
40
|
+
actual |> should equal expected
|
|
45
41
|
|
|
46
|
-
[<
|
|
47
|
-
[<Ignore("Remove to run test")>]
|
|
42
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
48
43
|
let ``Puzzle with eight letters`` () =
|
|
49
44
|
let actual = solve "SEND + MORE == MONEY"
|
|
50
45
|
let expected = ['S', 9; 'E', 5; 'N', 6; 'D', 7; 'M', 1; 'O', 0; 'R', 8; 'Y', 2] |> Map.ofList |> Some
|
|
51
|
-
|
|
46
|
+
actual |> should equal expected
|
|
52
47
|
|
|
53
|
-
[<
|
|
54
|
-
[<Ignore("Remove to run test")>]
|
|
48
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
55
49
|
let ``Puzzle with ten letters`` () =
|
|
56
50
|
let actual = solve "AND + A + STRONG + OFFENSE + AS + A + GOOD == DEFENSE"
|
|
57
51
|
let expected = ['A', 5; 'D', 3; 'E', 4; 'F', 7; 'G', 8; 'N', 0; 'O', 2; 'R', 1; 'S', 6; 'T', 9] |> Map.ofList |> Some
|
|
58
|
-
|
|
52
|
+
actual |> should equal expected
|
|
@@ -5,23 +5,23 @@ open System
|
|
|
5
5
|
open FParsec
|
|
6
6
|
open System.Text.RegularExpressions
|
|
7
7
|
|
|
8
|
-
let plus = pstring " + "
|
|
9
|
-
let equal = pstring " == "
|
|
10
|
-
let operand = many1Satisfy isAsciiUpper
|
|
11
|
-
let expression = sepBy operand plus
|
|
12
|
-
let equation = expression .>> equal .>>. expression
|
|
8
|
+
let private plus = pstring " + "
|
|
9
|
+
let private equal = pstring " == "
|
|
10
|
+
let private operand = many1Satisfy isAsciiUpper
|
|
11
|
+
let private expression = sepBy operand plus
|
|
12
|
+
let private equation = expression .>> equal .>>. expression
|
|
13
13
|
|
|
14
|
-
let parseToOption parser (input: string) =
|
|
14
|
+
let private parseToOption parser (input: string) =
|
|
15
15
|
match run parser input with
|
|
16
16
|
| Success(result, _, _) -> Some result
|
|
17
17
|
| Failure(errorMsg, _, _) -> None
|
|
18
18
|
|
|
19
|
-
let parseEquation = parseToOption equation
|
|
19
|
+
let private parseEquation = parseToOption equation
|
|
20
20
|
|
|
21
|
-
let operandToInt (map: Map<char, int>) (operand: string) =
|
|
21
|
+
let private operandToInt (map: Map<char, int>) (operand: string) =
|
|
22
22
|
Seq.fold (fun acc x -> acc * 10 + Map.find x map) 0 operand
|
|
23
23
|
|
|
24
|
-
let generateCombinations length =
|
|
24
|
+
let private generateCombinations length =
|
|
25
25
|
let rec helper remaining options =
|
|
26
26
|
seq { if remaining = 0 then yield [] else
|
|
27
27
|
for x in options do
|
|
@@ -30,7 +30,7 @@ let generateCombinations length =
|
|
|
30
30
|
|
|
31
31
|
helper length ([0..9] |> Set.ofList)
|
|
32
32
|
|
|
33
|
-
let generateMaps (leftOperands, rightOperands) =
|
|
33
|
+
let private generateMaps (leftOperands, rightOperands) =
|
|
34
34
|
let operands = leftOperands @ rightOperands
|
|
35
35
|
let chars = operands |> String.concat "" |> Set.ofSeq
|
|
36
36
|
let nonZeroChars = operands |> List.map Seq.head |> Set.ofList
|
|
@@ -39,14 +39,14 @@ let generateMaps (leftOperands, rightOperands) =
|
|
|
39
39
|
|> Seq.map (Seq.zip chars >> Map.ofSeq)
|
|
40
40
|
|> Seq.filter (fun m -> Set.forall (fun x -> Map.find x m <> 0) nonZeroChars)
|
|
41
41
|
|
|
42
|
-
let sumOperands lettersToDigits = List.sumBy (operandToInt lettersToDigits)
|
|
42
|
+
let private sumOperands lettersToDigits = List.sumBy (operandToInt lettersToDigits)
|
|
43
43
|
|
|
44
|
-
let trySolve (leftOperands, rightOperands) lettersToDigits =
|
|
44
|
+
let private trySolve (leftOperands, rightOperands) lettersToDigits =
|
|
45
45
|
let left = sumOperands lettersToDigits leftOperands
|
|
46
46
|
let right = sumOperands lettersToDigits rightOperands
|
|
47
47
|
left = right
|
|
48
48
|
|
|
49
|
-
let solve input =
|
|
49
|
+
let solve input: Map<char, int> option =
|
|
50
50
|
match parseEquation input with
|
|
51
51
|
| Some equation -> Seq.tryFind (trySolve equation) (generateMaps equation)
|
|
52
52
|
| None -> None
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module Program = let [<EntryPoint>] main _ = 0
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
|
|
3
|
+
<PropertyGroup>
|
|
4
|
+
<TargetFramework>netcoreapp2.0</TargetFramework>
|
|
5
|
+
|
|
6
|
+
<IsPackable>false</IsPackable>
|
|
7
|
+
</PropertyGroup>
|
|
8
|
+
|
|
9
|
+
<ItemGroup>
|
|
10
|
+
<Compile Include="Anagram.fs" />
|
|
11
|
+
<Compile Include="AnagramTest.fs" />
|
|
12
|
+
<Compile Include="Program.fs" />
|
|
13
|
+
</ItemGroup>
|
|
14
|
+
|
|
15
|
+
<ItemGroup>
|
|
16
|
+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
17
|
+
<PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
|
|
18
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
|
|
19
|
+
<PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
|
|
20
|
+
</ItemGroup>
|
|
21
|
+
|
|
22
|
+
</Project>
|
|
@@ -1,68 +1,57 @@
|
|
|
1
1
|
module AnagramTest
|
|
2
2
|
|
|
3
3
|
open System
|
|
4
|
-
open
|
|
4
|
+
open Xunit
|
|
5
|
+
open FsUnit.Xunit
|
|
5
6
|
open Anagram
|
|
6
7
|
|
|
7
|
-
[<
|
|
8
|
+
[<Fact>]
|
|
8
9
|
let ``No matches`` () =
|
|
9
10
|
let words = ["hello"; "world"; "zombies"; "pants"]
|
|
10
|
-
|
|
11
|
-
Assert.That(anagrams words "diaper", Is.EquivalentTo(expected))
|
|
11
|
+
anagrams words "diaper" |> should be Empty
|
|
12
12
|
|
|
13
|
-
[<
|
|
14
|
-
[<Ignore("Remove to run test")>]
|
|
13
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
15
14
|
let ``Detect simple anagram`` () =
|
|
16
15
|
let words = ["tan"; "stand"; "at"]
|
|
17
16
|
let expected = ["tan"]
|
|
18
|
-
|
|
17
|
+
anagrams words "ant" |> should equal expected
|
|
19
18
|
|
|
20
|
-
[<
|
|
21
|
-
[<Ignore("Remove to run test")>]
|
|
19
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
22
20
|
let ``Detect multiple anagrams`` () =
|
|
23
21
|
let words = ["stream"; "pigeon"; "maters"]
|
|
24
|
-
let expected = ["
|
|
25
|
-
|
|
22
|
+
let expected = ["stream"; "maters"]
|
|
23
|
+
anagrams words "master" |> should equal expected;
|
|
26
24
|
|
|
27
|
-
[<
|
|
28
|
-
[<Ignore("Remove to run test")>]
|
|
25
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
29
26
|
let ``Does not confuse different duplicates`` () =
|
|
30
27
|
let words = ["eagle"]
|
|
31
|
-
|
|
32
|
-
Assert.That(anagrams words "galea", Is.EquivalentTo(expected));
|
|
28
|
+
anagrams words "galea" |> should be Empty
|
|
33
29
|
|
|
34
|
-
[<
|
|
35
|
-
[<Ignore("Remove to run test")>]
|
|
30
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
36
31
|
let ``Identical word is not anagram`` () =
|
|
37
32
|
let words = ["corn"; "dark"; "Corn"; "rank"; "CORN"; "cron"; "park"]
|
|
38
33
|
let expected = ["cron"]
|
|
39
|
-
|
|
34
|
+
anagrams words "corn" |> should equal expected
|
|
40
35
|
|
|
41
|
-
[<
|
|
42
|
-
[<Ignore("Remove to run test")>]
|
|
36
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
43
37
|
let ``Eliminate anagrams with same checksum`` () =
|
|
44
38
|
let words = ["last"]
|
|
45
|
-
|
|
46
|
-
Assert.That(anagrams words "mass", Is.EquivalentTo(expected))
|
|
39
|
+
anagrams words "mass" |> should be Empty
|
|
47
40
|
|
|
48
|
-
[<
|
|
49
|
-
[<Ignore("Remove to run test")>]
|
|
41
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
50
42
|
let ``Eliminate anagram subsets`` () =
|
|
51
43
|
let words = ["dog"; "goody"]
|
|
52
|
-
|
|
53
|
-
Assert.That(anagrams words "good", Is.EquivalentTo(expected))
|
|
44
|
+
anagrams words "good" |> should be Empty
|
|
54
45
|
|
|
55
|
-
[<
|
|
56
|
-
[<Ignore("Remove to run test")>]
|
|
46
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
57
47
|
let ``Detect anagrams`` () =
|
|
58
48
|
let words = ["gallery"; "ballerina"; "regally"; "clergy"; "largely"; "leading"]
|
|
59
|
-
let expected = ["gallery"; "
|
|
49
|
+
let expected = ["gallery"; "regally"; "largely"]
|
|
60
50
|
let actual = anagrams words "allergy"
|
|
61
|
-
|
|
51
|
+
actual |> should equal expected
|
|
62
52
|
|
|
63
|
-
[<
|
|
64
|
-
[<Ignore("Remove to run test")>]
|
|
53
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
65
54
|
let ``Anagrams are case insensitive`` () =
|
|
66
55
|
let words = ["cashregister"; "Carthorse"; "radishes"]
|
|
67
56
|
let expected = ["Carthorse"]
|
|
68
|
-
|
|
57
|
+
anagrams words "Orchestra" |> should equal expected
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module Program = let [<EntryPoint>] main _ = 0
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
|
|
3
|
+
<PropertyGroup>
|
|
4
|
+
<TargetFramework>netcoreapp2.0</TargetFramework>
|
|
5
|
+
|
|
6
|
+
<IsPackable>false</IsPackable>
|
|
7
|
+
</PropertyGroup>
|
|
8
|
+
|
|
9
|
+
<ItemGroup>
|
|
10
|
+
<Compile Include="AtbashCipher.fs" />
|
|
11
|
+
<Compile Include="AtbashCipherTest.fs" />
|
|
12
|
+
<Compile Include="Program.fs" />
|
|
13
|
+
</ItemGroup>
|
|
14
|
+
|
|
15
|
+
<ItemGroup>
|
|
16
|
+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
17
|
+
<PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
|
|
18
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
|
|
19
|
+
<PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
|
|
20
|
+
</ItemGroup>
|
|
21
|
+
|
|
22
|
+
</Project>
|
|
@@ -1,67 +1,61 @@
|
|
|
1
1
|
module AtbashTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
open Atbash
|
|
5
6
|
|
|
6
|
-
[<
|
|
7
|
+
[<Fact>]
|
|
7
8
|
let ``Encode yes`` () =
|
|
8
9
|
let phrase = "yes"
|
|
9
10
|
let expected = "bvh"
|
|
10
11
|
let actual = encode phrase
|
|
11
|
-
|
|
12
|
+
actual |> should equal expected
|
|
12
13
|
|
|
13
|
-
[<
|
|
14
|
-
[<Ignore("Remove to run test")>]
|
|
14
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
15
15
|
let ``Encode no`` () =
|
|
16
16
|
let phrase = "no"
|
|
17
17
|
let expected = "ml"
|
|
18
18
|
let actual = encode phrase
|
|
19
|
-
|
|
19
|
+
actual |> should equal expected
|
|
20
20
|
|
|
21
|
-
[<
|
|
22
|
-
[<Ignore("Remove to run test")>]
|
|
21
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
23
22
|
let ``Encode OMG`` () =
|
|
24
23
|
let phrase = "OMG"
|
|
25
24
|
let expected = "lnt"
|
|
26
25
|
let actual = encode phrase
|
|
27
|
-
|
|
26
|
+
actual |> should equal expected
|
|
28
27
|
|
|
29
|
-
[<
|
|
30
|
-
[<Ignore("Remove to run test")>]
|
|
28
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
31
29
|
let ``Encode spaces`` () =
|
|
32
30
|
let phrase = "O M G"
|
|
33
31
|
let expected = "lnt"
|
|
34
32
|
let actual = encode phrase
|
|
35
|
-
|
|
33
|
+
actual |> should equal expected
|
|
36
34
|
|
|
37
|
-
[<
|
|
38
|
-
[<Ignore("Remove to run test")>]
|
|
35
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
39
36
|
let ``Encode mindblowingly`` () =
|
|
40
37
|
let phrase = "mindblowingly"
|
|
41
38
|
let expected = "nrmwy oldrm tob"
|
|
42
39
|
let actual = encode phrase
|
|
43
|
-
|
|
40
|
+
actual |> should equal expected
|
|
44
41
|
|
|
45
|
-
[<
|
|
46
|
-
[<Ignore("Remove to run test")>]
|
|
42
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
47
43
|
let ``Encode numbers`` () =
|
|
48
44
|
let phrase = "Testing, 1 2 3, testing."
|
|
49
45
|
let expected = "gvhgr mt123 gvhgr mt"
|
|
50
46
|
let actual = encode phrase
|
|
51
|
-
|
|
47
|
+
actual |> should equal expected
|
|
52
48
|
|
|
53
|
-
[<
|
|
54
|
-
[<Ignore("Remove to run test")>]
|
|
49
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
55
50
|
let ``Encode deep thought`` () =
|
|
56
51
|
let phrase = "Truth is fiction."
|
|
57
52
|
let expected = "gifgs rhurx grlm"
|
|
58
53
|
let actual = encode phrase
|
|
59
|
-
|
|
54
|
+
actual |> should equal expected
|
|
60
55
|
|
|
61
|
-
[<
|
|
62
|
-
[<Ignore("Remove to run test")>]
|
|
56
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
63
57
|
let ``Encode all the letters`` () =
|
|
64
58
|
let phrase = "The quick brown fox jumps over the lazy dog."
|
|
65
59
|
let expected = "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt"
|
|
66
60
|
let actual = encode phrase
|
|
67
|
-
|
|
61
|
+
actual |> should equal expected
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module Program = let [<EntryPoint>] main _ = 0
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module BankAccount
|
|
2
|
+
|
|
3
|
+
let mkBankAccount() = failwith "You need to implement this function."
|
|
4
|
+
|
|
5
|
+
let openAccount account = failwith "You need to implement this function."
|
|
6
|
+
|
|
7
|
+
let closeAccount account = failwith "You need to implement this function."
|
|
8
|
+
|
|
9
|
+
let getBalance account = failwith "You need to implement this function."
|
|
10
|
+
|
|
11
|
+
let updateBalance change account = failwith "You need to implement this function."
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
|
|
3
|
+
<PropertyGroup>
|
|
4
|
+
<TargetFramework>netcoreapp2.0</TargetFramework>
|
|
5
|
+
|
|
6
|
+
<IsPackable>false</IsPackable>
|
|
7
|
+
</PropertyGroup>
|
|
8
|
+
|
|
9
|
+
<ItemGroup>
|
|
10
|
+
<Compile Include="BankAccount.fs" />
|
|
11
|
+
<Compile Include="BankAccountTest.fs" />
|
|
12
|
+
<Compile Include="Program.fs" />
|
|
13
|
+
</ItemGroup>
|
|
14
|
+
|
|
15
|
+
<ItemGroup>
|
|
16
|
+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
17
|
+
<PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
|
|
18
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
|
|
19
|
+
<PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
|
|
20
|
+
</ItemGroup>
|
|
21
|
+
|
|
22
|
+
</Project>
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
module BankAccountTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
open BankAccount
|
|
5
6
|
|
|
6
|
-
[<
|
|
7
|
+
[<Fact>]
|
|
7
8
|
let ``Returns empty balance after opening`` () =
|
|
8
9
|
let account = mkBankAccount() |> openAccount
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
getBalance account |> should equal <| Some 0.0
|
|
11
12
|
|
|
12
|
-
[<
|
|
13
|
-
[<Ignore("Remove to run test")>]
|
|
13
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
14
14
|
let ``Check basic balance`` () =
|
|
15
15
|
let account = mkBankAccount() |> openAccount
|
|
16
16
|
let openingBalance = account |> getBalance
|
|
@@ -20,11 +20,10 @@ let ``Check basic balance`` () =
|
|
|
20
20
|
|> updateBalance 10.0
|
|
21
21
|
|> getBalance
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
openingBalance |> should equal <| Some 0.0
|
|
24
|
+
updatedBalance |> should equal <| Some 10.0
|
|
25
25
|
|
|
26
|
-
[<
|
|
27
|
-
[<Ignore("Remove to run test")>]
|
|
26
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
28
27
|
let ``Balance can increment or decrement`` () =
|
|
29
28
|
let account = mkBankAccount() |> openAccount
|
|
30
29
|
let openingBalance = account |> getBalance
|
|
@@ -39,22 +38,20 @@ let ``Balance can increment or decrement`` () =
|
|
|
39
38
|
|> updateBalance -15.0
|
|
40
39
|
|> getBalance
|
|
41
40
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
openingBalance |> should equal <| Some 0.0
|
|
42
|
+
addedBalance |> should equal <| Some 10.0
|
|
43
|
+
subtractedBalance |> should equal <| Some -5.0
|
|
45
44
|
|
|
46
|
-
[<
|
|
47
|
-
[<Ignore("Remove to run test")>]
|
|
45
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
48
46
|
let ``Account can be closed`` () =
|
|
49
47
|
let account =
|
|
50
48
|
mkBankAccount()
|
|
51
49
|
|> openAccount
|
|
52
50
|
|> closeAccount
|
|
53
51
|
|
|
54
|
-
|
|
52
|
+
getBalance account |> should equal None
|
|
55
53
|
|
|
56
|
-
[<
|
|
57
|
-
[<Ignore("Remove to run test")>]
|
|
54
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
58
55
|
let ``Account can be updated from multiple threads`` () =
|
|
59
56
|
let account =
|
|
60
57
|
mkBankAccount()
|
|
@@ -73,4 +70,4 @@ let ``Account can be updated from multiple threads`` () =
|
|
|
73
70
|
|> Async.RunSynchronously
|
|
74
71
|
|> ignore
|
|
75
72
|
|
|
76
|
-
|
|
73
|
+
getBalance account |> should equal <| Some 1000.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module Program = let [<EntryPoint>] main _ = 0
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
|
|
3
|
+
<PropertyGroup>
|
|
4
|
+
<TargetFramework>netcoreapp2.0</TargetFramework>
|
|
5
|
+
|
|
6
|
+
<IsPackable>false</IsPackable>
|
|
7
|
+
</PropertyGroup>
|
|
8
|
+
|
|
9
|
+
<ItemGroup>
|
|
10
|
+
<Compile Include="BeerSong.fs" />
|
|
11
|
+
<Compile Include="BeerSongTest.fs" />
|
|
12
|
+
<Compile Include="Program.fs" />
|
|
13
|
+
</ItemGroup>
|
|
14
|
+
|
|
15
|
+
<ItemGroup>
|
|
16
|
+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
17
|
+
<PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
|
|
18
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
|
|
19
|
+
<PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
|
|
20
|
+
</ItemGroup>
|
|
21
|
+
|
|
22
|
+
</Project>
|
|
@@ -1,50 +1,45 @@
|
|
|
1
|
-
|
|
1
|
+
module BeerSongTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
open BeerSong
|
|
5
6
|
|
|
6
|
-
[<
|
|
7
|
+
[<Fact>]
|
|
7
8
|
let ``Test a typical verse`` () =
|
|
8
9
|
let expected =
|
|
9
10
|
"8 bottles of beer on the wall, 8 bottles of beer.\nTake one down and pass it around, 7 bottles of beer on the wall.\n"
|
|
10
|
-
|
|
11
|
+
verse 8 |> should equal expected
|
|
11
12
|
|
|
12
|
-
[<
|
|
13
|
-
[<Ignore("Remove to run test")>]
|
|
13
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
14
14
|
let ``Test another typical verse`` () =
|
|
15
15
|
let expected =
|
|
16
16
|
"3 bottles of beer on the wall, 3 bottles of beer.\nTake one down and pass it around, 2 bottles of beer on the wall.\n"
|
|
17
|
-
|
|
17
|
+
verse 3 |> should equal expected
|
|
18
18
|
|
|
19
|
-
[<
|
|
20
|
-
[<Ignore("Remove to run test")>]
|
|
19
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
21
20
|
let ``Test verse 1`` () =
|
|
22
21
|
let expected =
|
|
23
22
|
"1 bottle of beer on the wall, 1 bottle of beer.\nTake it down and pass it around, no more bottles of beer on the wall.\n"
|
|
24
|
-
|
|
23
|
+
verse 1 |> should equal expected
|
|
25
24
|
|
|
26
|
-
[<
|
|
27
|
-
[<Ignore("Remove to run test")>]
|
|
25
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
28
26
|
let ``Test verse 2`` () =
|
|
29
27
|
let expected =
|
|
30
28
|
"2 bottles of beer on the wall, 2 bottles of beer.\nTake one down and pass it around, 1 bottle of beer on the wall.\n"
|
|
31
|
-
|
|
29
|
+
verse 2 |> should equal expected
|
|
32
30
|
|
|
33
|
-
[<
|
|
34
|
-
[<Ignore("Remove to run test")>]
|
|
31
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
35
32
|
let ``Test verse 0`` () =
|
|
36
33
|
let expected =
|
|
37
34
|
"No more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall.\n"
|
|
38
|
-
|
|
35
|
+
verse 0 |> should equal expected
|
|
39
36
|
|
|
40
|
-
[<
|
|
41
|
-
[<Ignore("Remove to run test")>]
|
|
37
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
42
38
|
let ``Test several verses`` () =
|
|
43
39
|
let expected =
|
|
44
40
|
"8 bottles of beer on the wall, 8 bottles of beer.\nTake one down and pass it around, 7 bottles of beer on the wall.\n\n7 bottles of beer on the wall, 7 bottles of beer.\nTake one down and pass it around, 6 bottles of beer on the wall.\n\n6 bottles of beer on the wall, 6 bottles of beer.\nTake one down and pass it around, 5 bottles of beer on the wall.\n\n"
|
|
45
|
-
|
|
41
|
+
verses 8 6 |> should equal expected
|
|
46
42
|
|
|
47
|
-
[<
|
|
48
|
-
[<Ignore("Remove to run test")>]
|
|
43
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
49
44
|
let ``Test the whole song`` () =
|
|
50
|
-
|
|
45
|
+
verses 99 0 |> should equal sing
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module Program = let [<EntryPoint>] main _ = 0
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
|
|
3
|
+
<PropertyGroup>
|
|
4
|
+
<TargetFramework>netcoreapp2.0</TargetFramework>
|
|
5
|
+
|
|
6
|
+
<IsPackable>false</IsPackable>
|
|
7
|
+
</PropertyGroup>
|
|
8
|
+
|
|
9
|
+
<ItemGroup>
|
|
10
|
+
<Compile Include="BinarySearch.fs" />
|
|
11
|
+
<Compile Include="BinarySearchTest.fs" />
|
|
12
|
+
<Compile Include="Program.fs" />
|
|
13
|
+
</ItemGroup>
|
|
14
|
+
|
|
15
|
+
<ItemGroup>
|
|
16
|
+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
17
|
+
<PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
|
|
18
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
|
|
19
|
+
<PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
|
|
20
|
+
</ItemGroup>
|
|
21
|
+
|
|
22
|
+
</Project>
|