trackler 2.2.1.44 → 2.2.1.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/isbn-verifier/canonical-data.json +88 -0
  4. data/problem-specifications/exercises/isbn-verifier/description.md +35 -0
  5. data/problem-specifications/exercises/isbn-verifier/metadata.yml +4 -0
  6. data/problem-specifications/exercises/robot-simulator/canonical-data.json +125 -32
  7. data/problem-specifications/exercises/sum-of-multiples/description.md +0 -3
  8. data/problem-specifications/exercises/two-bucket/canonical-data.json +3 -3
  9. data/tracks/c/config.json +235 -237
  10. data/tracks/c/exercises/acronym/README.md +0 -1
  11. data/tracks/c/exercises/all-your-base/README.md +1 -1
  12. data/tracks/c/exercises/allergies/README.md +0 -1
  13. data/tracks/c/exercises/atbash-cipher/README.md +2 -1
  14. data/tracks/c/exercises/beer-song/README.md +1 -1
  15. data/tracks/c/exercises/binary/README.md +2 -0
  16. data/tracks/c/exercises/grains/README.md +0 -1
  17. data/tracks/c/exercises/isogram/README.md +2 -1
  18. data/tracks/c/exercises/leap/README.md +1 -1
  19. data/tracks/c/exercises/meetup/README.md +1 -2
  20. data/tracks/c/exercises/nucleotide-count/README.md +8 -22
  21. data/tracks/c/exercises/palindrome-products/README.md +12 -6
  22. data/tracks/c/exercises/pangram/README.md +1 -1
  23. data/tracks/c/exercises/pascals-triangle/README.md +1 -1
  24. data/tracks/c/exercises/perfect-numbers/README.md +2 -2
  25. data/tracks/c/exercises/phone-number/README.md +3 -2
  26. data/tracks/c/exercises/roman-numerals/README.md +1 -1
  27. data/tracks/c/exercises/scrabble-score/README.md +3 -1
  28. data/tracks/c/exercises/space-age/README.md +2 -1
  29. data/tracks/c/exercises/triangle/README.md +9 -6
  30. data/tracks/c/exercises/word-count/README.md +1 -2
  31. data/tracks/csharp/exercises/accumulate/Accumulate.csproj +2 -2
  32. data/tracks/csharp/exercises/acronym/Acronym.csproj +2 -2
  33. data/tracks/csharp/exercises/all-your-base/AllYourBase.csproj +2 -2
  34. data/tracks/csharp/exercises/allergies/Allergies.csproj +2 -2
  35. data/tracks/csharp/exercises/alphametics/Alphametics.csproj +2 -2
  36. data/tracks/csharp/exercises/anagram/Anagram.csproj +2 -2
  37. data/tracks/csharp/exercises/atbash-cipher/AtbashCipher.csproj +2 -2
  38. data/tracks/csharp/exercises/bank-account/BankAccount.csproj +2 -2
  39. data/tracks/csharp/exercises/beer-song/BeerSong.csproj +2 -2
  40. data/tracks/csharp/exercises/binary-search/BinarySearch.csproj +2 -2
  41. data/tracks/csharp/exercises/binary-search-tree/BinarySearchTree.csproj +2 -2
  42. data/tracks/csharp/exercises/bob/Bob.csproj +2 -2
  43. data/tracks/csharp/exercises/book-store/BookStore.csproj +2 -2
  44. data/tracks/csharp/exercises/bowling/Bowling.csproj +2 -2
  45. data/tracks/csharp/exercises/bracket-push/BracketPush.csproj +2 -2
  46. data/tracks/csharp/exercises/change/Change.csproj +2 -2
  47. data/tracks/csharp/exercises/circular-buffer/CircularBuffer.csproj +2 -2
  48. data/tracks/csharp/exercises/clock/Clock.csproj +2 -2
  49. data/tracks/csharp/exercises/collatz-conjecture/CollatzConjecture.csproj +2 -2
  50. data/tracks/csharp/exercises/complex-numbers/ComplexNumbers.csproj +2 -2
  51. data/tracks/csharp/exercises/connect/Connect.cs +1 -1
  52. data/tracks/csharp/exercises/connect/Connect.csproj +2 -2
  53. data/tracks/csharp/exercises/connect/ConnectTest.cs +120 -85
  54. data/tracks/csharp/exercises/connect/Example.cs +11 -7
  55. data/tracks/csharp/exercises/crypto-square/CryptoSquare.csproj +2 -2
  56. data/tracks/csharp/exercises/custom-set/CustomSet.csproj +2 -2
  57. data/tracks/csharp/exercises/diamond/Diamond.csproj +2 -2
  58. data/tracks/csharp/exercises/difference-of-squares/DifferenceOfSquares.csproj +2 -2
  59. data/tracks/csharp/exercises/diffie-hellman/DiffieHellman.csproj +2 -2
  60. data/tracks/csharp/exercises/dominoes/Dominoes.csproj +2 -2
  61. data/tracks/csharp/exercises/dot-dsl/DotDsl.csproj +2 -2
  62. data/tracks/csharp/exercises/error-handling/ErrorHandling.csproj +2 -2
  63. data/tracks/csharp/exercises/etl/Etl.csproj +2 -2
  64. data/tracks/csharp/exercises/flatten-array/FlattenArray.csproj +2 -2
  65. data/tracks/csharp/exercises/food-chain/FoodChain.csproj +2 -2
  66. data/tracks/csharp/exercises/forth/Forth.csproj +2 -2
  67. data/tracks/csharp/exercises/gigasecond/Gigasecond.csproj +2 -2
  68. data/tracks/csharp/exercises/go-counting/GoCounting.csproj +2 -2
  69. data/tracks/csharp/exercises/grade-school/GradeSchool.csproj +2 -2
  70. data/tracks/csharp/exercises/grains/Grains.csproj +2 -2
  71. data/tracks/csharp/exercises/grep/Grep.csproj +2 -2
  72. data/tracks/csharp/exercises/hamming/Hamming.csproj +2 -2
  73. data/tracks/csharp/exercises/hangman/Hangman.csproj +2 -2
  74. data/tracks/csharp/exercises/hello-world/HelloWorld.csproj +2 -2
  75. data/tracks/csharp/exercises/house/House.csproj +2 -2
  76. data/tracks/csharp/exercises/isogram/Isogram.csproj +2 -2
  77. data/tracks/csharp/exercises/kindergarten-garden/KindergartenGarden.csproj +2 -2
  78. data/tracks/csharp/exercises/largest-series-product/LargestSeriesProduct.csproj +2 -2
  79. data/tracks/csharp/exercises/leap/Leap.csproj +2 -2
  80. data/tracks/csharp/exercises/ledger/Ledger.csproj +2 -2
  81. data/tracks/csharp/exercises/linked-list/LinkedList.csproj +2 -2
  82. data/tracks/csharp/exercises/list-ops/ListOps.csproj +2 -2
  83. data/tracks/csharp/exercises/luhn/Luhn.csproj +2 -2
  84. data/tracks/csharp/exercises/markdown/Markdown.csproj +2 -2
  85. data/tracks/csharp/exercises/matrix/Matrix.csproj +2 -2
  86. data/tracks/csharp/exercises/meetup/Meetup.csproj +2 -2
  87. data/tracks/csharp/exercises/minesweeper/Minesweeper.csproj +2 -2
  88. data/tracks/csharp/exercises/nth-prime/NthPrime.csproj +2 -2
  89. data/tracks/csharp/exercises/nucleotide-count/NucleotideCount.csproj +2 -2
  90. data/tracks/csharp/exercises/ocr-numbers/OcrNumbers.csproj +2 -2
  91. data/tracks/csharp/exercises/palindrome-products/PalindromeProducts.csproj +2 -2
  92. data/tracks/csharp/exercises/pangram/Pangram.csproj +2 -2
  93. data/tracks/csharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.csproj +2 -2
  94. data/tracks/csharp/exercises/pascals-triangle/PascalsTriangle.csproj +2 -2
  95. data/tracks/csharp/exercises/perfect-numbers/PerfectNumbers.csproj +2 -2
  96. data/tracks/csharp/exercises/phone-number/PhoneNumber.csproj +2 -2
  97. data/tracks/csharp/exercises/pig-latin/PigLatin.csproj +2 -2
  98. data/tracks/csharp/exercises/poker/Poker.csproj +2 -2
  99. data/tracks/csharp/exercises/pov/Pov.csproj +2 -2
  100. data/tracks/csharp/exercises/prime-factors/PrimeFactors.csproj +2 -2
  101. data/tracks/csharp/exercises/protein-translation/ProteinTranslation.csproj +2 -2
  102. data/tracks/csharp/exercises/proverb/Proverb.csproj +2 -2
  103. data/tracks/csharp/exercises/pythagorean-triplet/PythagoreanTriplet.csproj +2 -2
  104. data/tracks/csharp/exercises/queen-attack/QueenAttack.csproj +2 -2
  105. data/tracks/csharp/exercises/rail-fence-cipher/RailFenceCipher.csproj +2 -2
  106. data/tracks/csharp/exercises/raindrops/Raindrops.csproj +2 -2
  107. data/tracks/csharp/exercises/react/React.csproj +2 -2
  108. data/tracks/csharp/exercises/rectangles/Rectangles.csproj +2 -2
  109. data/tracks/csharp/exercises/rna-transcription/RnaTranscription.csproj +2 -2
  110. data/tracks/csharp/exercises/robot-name/RobotName.csproj +2 -2
  111. data/tracks/csharp/exercises/robot-simulator/RobotSimulator.csproj +2 -2
  112. data/tracks/csharp/exercises/roman-numerals/RomanNumerals.csproj +2 -2
  113. data/tracks/csharp/exercises/rotational-cipher/RotationalCipher.csproj +2 -2
  114. data/tracks/csharp/exercises/run-length-encoding/RunLengthEncoding.csproj +2 -2
  115. data/tracks/csharp/exercises/saddle-points/SaddlePoints.csproj +2 -2
  116. data/tracks/csharp/exercises/say/Say.csproj +2 -2
  117. data/tracks/csharp/exercises/scale-generator/ScaleGenerator.csproj +2 -2
  118. data/tracks/csharp/exercises/scrabble-score/ScrabbleScore.csproj +2 -2
  119. data/tracks/csharp/exercises/secret-handshake/SecretHandshake.csproj +2 -2
  120. data/tracks/csharp/exercises/series/Series.csproj +2 -2
  121. data/tracks/csharp/exercises/series/SeriesTest.cs +17 -17
  122. data/tracks/csharp/exercises/sgf-parsing/SgfParsing.csproj +2 -2
  123. data/tracks/csharp/exercises/sieve/Sieve.csproj +2 -2
  124. data/tracks/csharp/exercises/simple-cipher/SimpleCipher.csproj +2 -2
  125. data/tracks/csharp/exercises/simple-linked-list/SimpleLinkedList.csproj +2 -2
  126. data/tracks/csharp/exercises/space-age/SpaceAge.csproj +2 -2
  127. data/tracks/csharp/exercises/spiral-matrix/SpiralMatrix.csproj +2 -2
  128. data/tracks/csharp/exercises/strain/Strain.csproj +2 -2
  129. data/tracks/csharp/exercises/sublist/Sublist.csproj +2 -2
  130. data/tracks/csharp/exercises/sum-of-multiples/SumOfMultiples.csproj +2 -2
  131. data/tracks/csharp/exercises/tournament/Tournament.csproj +2 -2
  132. data/tracks/csharp/exercises/transpose/Transpose.csproj +2 -2
  133. data/tracks/csharp/exercises/tree-building/TreeBuilding.csproj +2 -2
  134. data/tracks/csharp/exercises/triangle/Triangle.cs +0 -11
  135. data/tracks/csharp/exercises/triangle/Triangle.csproj +2 -2
  136. data/tracks/csharp/exercises/triangle/TriangleTest.cs +17 -17
  137. data/tracks/csharp/exercises/twelve-days/TwelveDays.csproj +2 -2
  138. data/tracks/csharp/exercises/two-bucket/TwoBucket.csproj +2 -2
  139. data/tracks/csharp/exercises/two-fer/TwoFer.csproj +2 -2
  140. data/tracks/csharp/exercises/variable-length-quantity/VariableLengthQuantity.csproj +2 -2
  141. data/tracks/csharp/exercises/word-count/WordCount.csproj +2 -2
  142. data/tracks/csharp/exercises/word-search/WordSearch.csproj +2 -2
  143. data/tracks/csharp/exercises/wordy/Wordy.csproj +2 -2
  144. data/tracks/csharp/exercises/zebra-puzzle/ZebraPuzzle.csproj +2 -2
  145. data/tracks/csharp/exercises/zipper/Zipper.csproj +2 -2
  146. data/tracks/csharp/generators/Exercises/Connect.cs +47 -0
  147. data/tracks/csharp/generators/Exercises/Triangle.cs +1 -1
  148. data/tracks/dart/config/maintainers.json +27 -1
  149. data/tracks/dart/pubspec.yaml +3 -0
  150. data/tracks/dart/tool/create-exercise +144 -5
  151. data/tracks/elm/.gitattributes +1 -0
  152. data/tracks/elm/bin/install-elm-format +9 -3
  153. data/tracks/elm/config.json +30 -0
  154. data/tracks/elm/exercises/all-your-base/AllYourBase.elm +1 -0
  155. data/tracks/elm/exercises/all-your-base/AllYourBase.example.elm +68 -0
  156. data/tracks/elm/exercises/all-your-base/README.md +65 -0
  157. data/tracks/elm/exercises/all-your-base/elm-package.json +15 -0
  158. data/tracks/elm/exercises/all-your-base/tests/Tests.elm +53 -0
  159. data/tracks/elm/exercises/all-your-base/tests/elm-package.json +16 -0
  160. data/tracks/elm/exercises/collatz-conjecture/CollatzConjecture.elm +2 -0
  161. data/tracks/elm/exercises/collatz-conjecture/CollatzConjecture.example.elm +19 -0
  162. data/tracks/elm/exercises/collatz-conjecture/elm-package.json +15 -0
  163. data/tracks/elm/exercises/collatz-conjecture/package.json +14 -0
  164. data/tracks/elm/exercises/collatz-conjecture/tests/Tests.elm +38 -0
  165. data/tracks/elm/exercises/collatz-conjecture/tests/elm-package.json +16 -0
  166. data/tracks/elm/exercises/isogram/Isogram.elm +1 -0
  167. data/tracks/elm/exercises/isogram/Isogram.example.elm +76 -0
  168. data/tracks/elm/exercises/isogram/README.md +50 -0
  169. data/tracks/elm/exercises/isogram/elm-package.json +14 -0
  170. data/tracks/elm/exercises/isogram/package.json +14 -0
  171. data/tracks/elm/exercises/isogram/tests/Tests.elm +46 -0
  172. data/tracks/elm/exercises/isogram/tests/elm-package.json +16 -0
  173. data/tracks/fsharp/.gitignore +2 -1
  174. data/tracks/fsharp/exercises/accumulate/Accumulate.fsproj +3 -2
  175. data/tracks/fsharp/exercises/acronym/Acronym.fs +1 -1
  176. data/tracks/fsharp/exercises/acronym/Acronym.fsproj +3 -2
  177. data/tracks/fsharp/exercises/acronym/AcronymTest.fs +13 -38
  178. data/tracks/fsharp/exercises/acronym/Example.fs +1 -1
  179. data/tracks/fsharp/exercises/all-your-base/AllYourBase.fsproj +3 -2
  180. data/tracks/fsharp/exercises/all-your-base/AllYourBaseTest.fs +64 -61
  181. data/tracks/fsharp/exercises/all-your-base/Example.fs +4 -1
  182. data/tracks/fsharp/exercises/allergies/Allergies.fs +2 -2
  183. data/tracks/fsharp/exercises/allergies/Allergies.fsproj +3 -2
  184. data/tracks/fsharp/exercises/allergies/AllergiesTest.fs +28 -37
  185. data/tracks/fsharp/exercises/allergies/Example.fs +3 -3
  186. data/tracks/fsharp/exercises/alphametics/Alphametics.fsproj +3 -2
  187. data/tracks/fsharp/exercises/anagram/Anagram.fsproj +3 -2
  188. data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fs +4 -2
  189. data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fsproj +3 -2
  190. data/tracks/fsharp/exercises/atbash-cipher/AtbashCipherTest.fs +38 -42
  191. data/tracks/fsharp/exercises/atbash-cipher/Example.fs +5 -3
  192. data/tracks/fsharp/exercises/bank-account/BankAccount.fsproj +3 -2
  193. data/tracks/fsharp/exercises/beer-song/BeerSong.fsproj +3 -2
  194. data/tracks/fsharp/exercises/beer-song/BeerSongTest.fs +36 -32
  195. data/tracks/fsharp/exercises/beer-song/Example.fs +2 -2
  196. data/tracks/fsharp/exercises/binary-search/BinarySearch.fsproj +3 -2
  197. data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTree.fsproj +3 -2
  198. data/tracks/fsharp/exercises/bob/Bob.fs +1 -1
  199. data/tracks/fsharp/exercises/bob/Bob.fsproj +3 -2
  200. data/tracks/fsharp/exercises/bob/BobTest.fs +64 -20
  201. data/tracks/fsharp/exercises/bob/Example.fs +3 -4
  202. data/tracks/fsharp/exercises/book-store/BookStore.fs +1 -1
  203. data/tracks/fsharp/exercises/book-store/BookStore.fsproj +3 -2
  204. data/tracks/fsharp/exercises/book-store/BookStoreTest.fs +32 -25
  205. data/tracks/fsharp/exercises/book-store/Example.fs +1 -1
  206. data/tracks/fsharp/exercises/bowling/Bowling.fsproj +3 -2
  207. data/tracks/fsharp/exercises/bracket-push/BracketPush.fs +1 -1
  208. data/tracks/fsharp/exercises/bracket-push/BracketPush.fsproj +3 -2
  209. data/tracks/fsharp/exercises/bracket-push/BracketPushTest.fs +24 -25
  210. data/tracks/fsharp/exercises/bracket-push/Example.fs +1 -1
  211. data/tracks/fsharp/exercises/change/Change.fs +1 -1
  212. data/tracks/fsharp/exercises/change/Change.fsproj +3 -2
  213. data/tracks/fsharp/exercises/change/ChangeTest.fs +42 -18
  214. data/tracks/fsharp/exercises/change/Example.fs +7 -4
  215. data/tracks/fsharp/exercises/circular-buffer/CircularBuffer.fsproj +3 -2
  216. data/tracks/fsharp/exercises/clock/Clock.fsproj +3 -2
  217. data/tracks/fsharp/exercises/connect/Connect.fsproj +3 -2
  218. data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fs +1 -40
  219. data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fsproj +3 -2
  220. data/tracks/fsharp/exercises/crypto-square/CryptoSquareTest.fs +16 -40
  221. data/tracks/fsharp/exercises/crypto-square/Example.fs +13 -16
  222. data/tracks/fsharp/exercises/custom-set/CustomSet.fs +12 -12
  223. data/tracks/fsharp/exercises/custom-set/CustomSet.fsproj +3 -2
  224. data/tracks/fsharp/exercises/diamond/Diamond.fsproj +3 -2
  225. data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fs +2 -2
  226. data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fsproj +3 -2
  227. data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquaresTest.fs +24 -20
  228. data/tracks/fsharp/exercises/difference-of-squares/Example.fs +3 -3
  229. data/tracks/fsharp/exercises/diffie-hellman/DiffieHellman.fsproj +3 -2
  230. data/tracks/fsharp/exercises/dominoes/Dominoes.fsproj +3 -2
  231. data/tracks/fsharp/exercises/dot-dsl/DotDsl.fsproj +3 -2
  232. data/tracks/fsharp/exercises/error-handling/ErrorHandling.fsproj +3 -2
  233. data/tracks/fsharp/exercises/etl/Etl.fsproj +3 -2
  234. data/tracks/fsharp/exercises/food-chain/FoodChain.fsproj +3 -2
  235. data/tracks/fsharp/exercises/forth/Forth.fsproj +3 -2
  236. data/tracks/fsharp/exercises/gigasecond/Example.fs +1 -3
  237. data/tracks/fsharp/exercises/gigasecond/Gigasecond.fs +1 -1
  238. data/tracks/fsharp/exercises/gigasecond/Gigasecond.fsproj +3 -2
  239. data/tracks/fsharp/exercises/gigasecond/GigasecondTest.fs +21 -12
  240. data/tracks/fsharp/exercises/go-counting/GoCounting.fsproj +3 -2
  241. data/tracks/fsharp/exercises/grade-school/GradeSchool.fsproj +3 -2
  242. data/tracks/fsharp/exercises/grains/Grains.fsproj +3 -2
  243. data/tracks/fsharp/exercises/grep/Grep.fsproj +3 -2
  244. data/tracks/fsharp/exercises/hamming/Hamming.fsproj +3 -2
  245. data/tracks/fsharp/exercises/hangman/Hangman.fsproj +3 -2
  246. data/tracks/fsharp/exercises/hello-world/HelloWorld.fsproj +3 -2
  247. data/tracks/fsharp/exercises/hello-world/HelloWorldTest.fs +6 -3
  248. data/tracks/fsharp/exercises/house/House.fsproj +3 -2
  249. data/tracks/fsharp/exercises/isogram/Example.fs +1 -1
  250. data/tracks/fsharp/exercises/isogram/Isogram.fs +1 -1
  251. data/tracks/fsharp/exercises/isogram/Isogram.fsproj +3 -2
  252. data/tracks/fsharp/exercises/isogram/IsogramTest.fs +16 -40
  253. data/tracks/fsharp/exercises/kindergarten-garden/Example.fs +6 -4
  254. data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fs +3 -5
  255. data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fsproj +3 -2
  256. data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGardenTest.fs +100 -47
  257. data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProduct.fsproj +3 -2
  258. data/tracks/fsharp/exercises/leap/Example.fs +2 -2
  259. data/tracks/fsharp/exercises/leap/Leap.fs +2 -2
  260. data/tracks/fsharp/exercises/leap/Leap.fsproj +3 -2
  261. data/tracks/fsharp/exercises/leap/LeapTest.fs +19 -15
  262. data/tracks/fsharp/exercises/ledger/Ledger.fsproj +3 -2
  263. data/tracks/fsharp/exercises/lens-person/LensPerson.fsproj +3 -2
  264. data/tracks/fsharp/exercises/linked-list/LinkedList.fsproj +3 -2
  265. data/tracks/fsharp/exercises/list-ops/ListOps.fsproj +3 -2
  266. data/tracks/fsharp/exercises/luhn/Luhn.fsproj +3 -2
  267. data/tracks/fsharp/exercises/luhn/LuhnTest.fs +30 -65
  268. data/tracks/fsharp/exercises/markdown/Markdown.fsproj +3 -2
  269. data/tracks/fsharp/exercises/matrix/Matrix.fsproj +3 -2
  270. data/tracks/fsharp/exercises/meetup/Meetup.fsproj +3 -2
  271. data/tracks/fsharp/exercises/minesweeper/Example.fs +9 -11
  272. data/tracks/fsharp/exercises/minesweeper/Minesweeper.fsproj +3 -2
  273. data/tracks/fsharp/exercises/minesweeper/MinesweeperTest.fs +117 -80
  274. data/tracks/fsharp/exercises/nth-prime/NthPrime.fsproj +3 -2
  275. data/tracks/fsharp/exercises/nucleotide-count/NucleotideCount.fsproj +3 -2
  276. data/tracks/fsharp/exercises/ocr-numbers/OcrNumbers.fsproj +3 -2
  277. data/tracks/fsharp/exercises/palindrome-products/PalindromeProducts.fsproj +3 -2
  278. data/tracks/fsharp/exercises/pangram/Pangram.fsproj +3 -2
  279. data/tracks/fsharp/exercises/pangram/PangramTest.fs +15 -27
  280. data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.fsproj +3 -2
  281. data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangle.fsproj +3 -2
  282. data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fsproj +3 -2
  283. data/tracks/fsharp/exercises/phone-number/PhoneNumber.fsproj +3 -2
  284. data/tracks/fsharp/exercises/pig-latin/Example.fs +1 -1
  285. data/tracks/fsharp/exercises/pig-latin/PigLatin.fsproj +3 -2
  286. data/tracks/fsharp/exercises/pig-latin/PigLatinTest.fs +64 -26
  287. data/tracks/fsharp/exercises/poker/Poker.fsproj +3 -2
  288. data/tracks/fsharp/exercises/pov/Pov.fsproj +3 -2
  289. data/tracks/fsharp/exercises/prime-factors/PrimeFactors.fsproj +3 -2
  290. data/tracks/fsharp/exercises/protein-translation/ProteinTranslation.fsproj +3 -2
  291. data/tracks/fsharp/exercises/proverb/Proverb.fsproj +3 -2
  292. data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTriplet.fsproj +3 -2
  293. data/tracks/fsharp/exercises/queen-attack/Example.fs +3 -1
  294. data/tracks/fsharp/exercises/queen-attack/QueenAttack.fs +2 -0
  295. data/tracks/fsharp/exercises/queen-attack/QueenAttack.fsproj +3 -2
  296. data/tracks/fsharp/exercises/queen-attack/QueenAttackTest.fs +50 -20
  297. data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipher.fsproj +3 -2
  298. data/tracks/fsharp/exercises/raindrops/Raindrops.fsproj +3 -2
  299. data/tracks/fsharp/exercises/raindrops/RaindropsTest.fs +77 -37
  300. data/tracks/fsharp/exercises/react/React.fsproj +3 -2
  301. data/tracks/fsharp/exercises/rectangles/Rectangles.fsproj +3 -2
  302. data/tracks/fsharp/exercises/rna-transcription/Example.fs +15 -7
  303. data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fs +2 -2
  304. data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fsproj +3 -2
  305. data/tracks/fsharp/exercises/rna-transcription/RnaTranscriptionTest.fs +29 -14
  306. data/tracks/fsharp/exercises/robot-name/RobotName.fsproj +3 -2
  307. data/tracks/fsharp/exercises/robot-simulator/RobotSimulator.fsproj +3 -2
  308. data/tracks/fsharp/exercises/roman-numerals/Example.fs +2 -2
  309. data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fs +2 -2
  310. data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fsproj +3 -2
  311. data/tracks/fsharp/exercises/roman-numerals/RomanNumeralsTest.fs +79 -26
  312. data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncoding.fsproj +3 -2
  313. data/tracks/fsharp/exercises/saddle-points/SaddlePoints.fsproj +3 -2
  314. data/tracks/fsharp/exercises/say/Say.fsproj +3 -2
  315. data/tracks/fsharp/exercises/scale-generator/ScaleGenerator.fsproj +3 -2
  316. data/tracks/fsharp/exercises/scrabble-score/ScrabbleScore.fsproj +3 -2
  317. data/tracks/fsharp/exercises/scrabble-score/ScrabbleScoreTest.fs +33 -17
  318. data/tracks/fsharp/exercises/secret-handshake/SecretHandshake.fsproj +3 -2
  319. data/tracks/fsharp/exercises/series/Series.fsproj +3 -2
  320. data/tracks/fsharp/exercises/sgf-parsing/SgfParsing.fsproj +3 -2
  321. data/tracks/fsharp/exercises/sieve/Sieve.fsproj +3 -2
  322. data/tracks/fsharp/exercises/simple-cipher/SimpleCipher.fsproj +3 -2
  323. data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedList.fsproj +3 -2
  324. data/tracks/fsharp/exercises/space-age/SpaceAge.fsproj +3 -2
  325. data/tracks/fsharp/exercises/strain/Strain.fsproj +3 -2
  326. data/tracks/fsharp/exercises/sublist/Sublist.fsproj +3 -2
  327. data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiples.fsproj +3 -2
  328. data/tracks/fsharp/exercises/tournament/Tournament.fsproj +3 -2
  329. data/tracks/fsharp/exercises/transpose/Transpose.fsproj +3 -2
  330. data/tracks/fsharp/exercises/tree-building/TreeBuilding.fsproj +3 -2
  331. data/tracks/fsharp/exercises/triangle/Triangle.fsproj +3 -2
  332. data/tracks/fsharp/exercises/twelve-days/TwelveDays.fsproj +3 -2
  333. data/tracks/fsharp/exercises/two-bucket/TwoBucket.fsproj +3 -2
  334. data/tracks/fsharp/exercises/two-fer/TwoFer.fsproj +3 -2
  335. data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantity.fsproj +3 -2
  336. data/tracks/fsharp/exercises/word-count/WordCount.fsproj +3 -2
  337. data/tracks/fsharp/exercises/word-search/WordSearch.fsproj +3 -2
  338. data/tracks/fsharp/exercises/wordy/Wordy.fsproj +3 -2
  339. data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzle.fsproj +3 -2
  340. data/tracks/fsharp/exercises/zipper/Zipper.fsproj +3 -2
  341. data/tracks/fsharp/generators/Common.fs +96 -0
  342. data/tracks/fsharp/generators/Exercise.fs +250 -0
  343. data/tracks/fsharp/generators/Generators.fs +210 -0
  344. data/tracks/fsharp/generators/Generators.fsproj +32 -0
  345. data/tracks/fsharp/generators/Generators.sln +24 -0
  346. data/tracks/fsharp/generators/Input.fs +99 -0
  347. data/tracks/fsharp/generators/Options.fs +31 -0
  348. data/tracks/fsharp/generators/Output.fs +224 -0
  349. data/tracks/fsharp/generators/Program.fs +35 -0
  350. data/tracks/fsharp/generators/Properties/launchSettings.json +8 -0
  351. data/tracks/fsharp/generators/Templates/_AssertEmpty.liquid +1 -0
  352. data/tracks/fsharp/generators/Templates/_AssertEqual.liquid +1 -0
  353. data/tracks/fsharp/generators/Templates/_TestClass.liquid +13 -0
  354. data/tracks/fsharp/generators/Templates/_TestMethod.liquid +3 -0
  355. data/tracks/fsharp/generators/Templates/_TestMethodBody.liquid +4 -0
  356. data/tracks/go/.travis.yml +3 -3
  357. data/tracks/groovy/CONTRIBUTING.md +2 -2
  358. data/tracks/groovy/config.json +12 -0
  359. data/tracks/groovy/exercises/scrabble-score/Example.groovy +18 -0
  360. data/tracks/groovy/exercises/scrabble-score/README.md +63 -0
  361. data/tracks/groovy/exercises/scrabble-score/ScrabbleScore.groovy +7 -0
  362. data/tracks/groovy/exercises/scrabble-score/ScrabbleScoreSpec.groovy +45 -0
  363. data/tracks/groovy/exercises/two-fer/TwoFer.groovy +2 -2
  364. data/tracks/haskell/exercises/change/README.md +1 -1
  365. data/tracks/haskell/exercises/lens-person/README.md +1 -1
  366. data/tracks/haskell/exercises/palindrome-products/README.md +5 -12
  367. data/tracks/haskell/exercises/sum-of-multiples/README.md +0 -3
  368. data/tracks/idris/config.json +12 -0
  369. data/tracks/idris/exercises/accumulate/Accumulate.ipkg +5 -0
  370. data/tracks/idris/exercises/accumulate/Makefile +23 -0
  371. data/tracks/idris/exercises/accumulate/README.md +32 -0
  372. data/tracks/idris/exercises/accumulate/src/Example.idr +6 -0
  373. data/tracks/idris/exercises/accumulate/src/Test/Accumulate.idr +35 -0
  374. data/tracks/java/config/maintainers.json +4 -7
  375. data/tracks/java/config.json +99 -22
  376. data/tracks/java/exercises/binary-search-tree/.meta/src/reference/java/{BST.java → BinarySearchTree.java} +1 -1
  377. data/tracks/java/exercises/binary-search-tree/src/test/java/{BSTTest.java → BinarySearchTreeTest.java} +34 -36
  378. data/tracks/java/exercises/robot-simulator/src/main/java/GridPosition.java +19 -15
  379. data/tracks/java/exercises/saddle-points/.meta/src/reference/java/MatrixCoordinate.java +7 -1
  380. data/tracks/java/exercises/saddle-points/src/main/java/MatrixCoordinate.java +7 -1
  381. data/tracks/java/exercises/settings.gradle +1 -0
  382. data/tracks/java/exercises/tournament/.meta/src/reference/java/Result.java +5 -0
  383. data/tracks/java/exercises/tournament/.meta/src/reference/java/TeamResult.java +41 -0
  384. data/tracks/java/exercises/tournament/.meta/src/reference/java/Tournament.java +62 -0
  385. data/tracks/java/exercises/tournament/README.md +78 -0
  386. data/tracks/java/exercises/tournament/build.gradle +18 -0
  387. data/tracks/java/{.Rhistory → exercises/tournament/src/main/java/.keep} +0 -0
  388. data/tracks/java/exercises/tournament/src/test/java/TournamentTest.java +160 -0
  389. data/tracks/php/config.json +14 -0
  390. data/tracks/php/exercises/collatz-conjecture/collatz-conjecture_test.php +44 -0
  391. data/tracks/php/exercises/collatz-conjecture/example.php +18 -0
  392. data/tracks/python/exercises/circular-buffer/circular_buffer.py +1 -1
  393. data/tracks/python/exercises/clock/clock.py +1 -1
  394. data/tracks/python/exercises/etl/etl.py +1 -1
  395. data/tracks/python/exercises/grade-school/grade_school.py +1 -1
  396. data/tracks/python/exercises/grains/grains.py +2 -2
  397. data/tracks/python/exercises/kindergarten-garden/kindergarten_garden.py +1 -1
  398. data/tracks/python/exercises/linked-list/linked_list.py +1 -1
  399. data/tracks/python/exercises/rectangles/rectangles.py +1 -1
  400. data/tracks/python/exercises/sum-of-multiples/sum_of_multiples.py +1 -1
  401. data/tracks/rust/exercises/bob/tests/bob.rs +1 -0
  402. data/tracks/rust/exercises/crypto-square/tests/crypto-square.rs +7 -0
  403. data/tracks/rust/exercises/gigasecond/tests/gigasecond.rs +1 -1
  404. data/tracks/rust/exercises/phone-number/Cargo.lock +1 -1
  405. data/tracks/rust/exercises/phone-number/Cargo.toml +1 -1
  406. data/tracks/rust/exercises/phone-number/example.rs +17 -23
  407. data/tracks/rust/exercises/phone-number/tests/phone-number.rs +31 -40
  408. data/tracks/rust/exercises/say/tests/say.rs +2 -0
  409. data/tracks/rust/exercises/sum-of-multiples/README.md +0 -3
  410. data/tracks/scala/config.json +11 -0
  411. data/tracks/scala/exercises/collatz-conjecture/README.md +43 -0
  412. data/tracks/scala/exercises/collatz-conjecture/build.sbt +3 -0
  413. data/tracks/scala/exercises/collatz-conjecture/example.scala +17 -0
  414. data/tracks/scala/exercises/collatz-conjecture/src/main/scala/.keep +0 -0
  415. data/tracks/scala/exercises/collatz-conjecture/src/test/scala/CollatzConjectureTest.scala +34 -0
  416. data/tracks/scala/testgen/src/main/scala/CollatzConjectureTestGenerator.scala +35 -0
  417. data/tracks/scheme/config.json +8 -0
  418. data/tracks/scheme/exercises/word-count/README.md +19 -0
  419. data/tracks/scheme/exercises/word-count/example.scm +27 -0
  420. data/tracks/scheme/exercises/word-count/word-count-test.scm +90 -0
  421. data/tracks/scheme/exercises/word-count/word-count.scm +5 -0
  422. data/tracks/sml/README.md +20 -1
  423. data/tracks/sml/bin/generate +74 -20
  424. data/tracks/sml/exercises/binary/README.md +23 -5
  425. data/tracks/sml/exercises/binary/binary.sml +2 -0
  426. data/tracks/sml/exercises/binary/example.sml +10 -21
  427. data/tracks/sml/exercises/binary/test.sml +55 -30
  428. data/tracks/sml/exercises/binary/testlib.sml +159 -0
  429. data/tracks/sml/exercises/flatten-array/HINTS.md +8 -0
  430. data/tracks/sml/exercises/flatten-array/README.md +31 -6
  431. data/tracks/sml/exercises/flatten-array/example.sml +3 -4
  432. data/tracks/sml/exercises/flatten-array/flatten-array.sml +4 -5
  433. data/tracks/sml/exercises/flatten-array/test.sml +76 -52
  434. data/tracks/sml/exercises/flatten-array/testlib.sml +159 -0
  435. data/tracks/sml/exercises/nth-prime/HINTS.md +9 -0
  436. data/tracks/sml/exercises/nth-prime/README.md +32 -5
  437. data/tracks/sml/exercises/nth-prime/example.sml +28 -46
  438. data/tracks/sml/exercises/nth-prime/nth-prime.sml +1 -1
  439. data/tracks/sml/exercises/nth-prime/test.sml +19 -63
  440. data/tracks/sml/exercises/nth-prime/testlib.sml +159 -0
  441. data/tracks/sml/exercises/raindrops/README.md +21 -5
  442. data/tracks/typescript/config.json +14 -0
  443. data/tracks/typescript/exercises/triangle/README.md +55 -0
  444. data/tracks/typescript/exercises/triangle/package.json +36 -0
  445. data/tracks/typescript/exercises/triangle/triangle.example.ts +56 -0
  446. data/tracks/typescript/exercises/triangle/triangle.test.ts +79 -0
  447. data/tracks/typescript/exercises/triangle/triangle.ts +12 -0
  448. data/tracks/typescript/exercises/triangle/tsconfig.json +22 -0
  449. data/tracks/typescript/exercises/triangle/tslint.json +127 -0
  450. data/tracks/typescript/exercises/triangle/yarn.lock +2305 -0
  451. metadata +85 -6
  452. data/tracks/d/exercises/crypto-square/.dub/dub.json +0 -6
@@ -1,58 +1,33 @@
1
+ // This file was auto-generated based on version 1.1.0 of the canonical data.
2
+
1
3
  module AcronymTest
2
4
 
3
- open Xunit
4
5
  open FsUnit.Xunit
6
+ open Xunit
7
+
5
8
  open Acronym
6
9
 
7
10
  [<Fact>]
8
- let ``Empty string abbreviated to empty string`` () =
9
- acronym "" |> should be EmptyString
10
-
11
- [<Fact(Skip = "Remove to run test")>]
12
11
  let ``Basic`` () =
13
- let phrase = "Portable Network Graphics"
14
- let expected = "PNG"
15
- let actual = acronym phrase
16
- expected |> should equal actual
12
+ abbreviate "Portable Network Graphics" |> should equal "PNG"
17
13
 
18
14
  [<Fact(Skip = "Remove to run test")>]
19
15
  let ``Lowercase words`` () =
20
- let phrase = "Ruby on Rails"
21
- let expected = "ROR"
22
- let actual = acronym phrase
23
- expected |> should equal actual
24
-
25
- [<Fact(Skip = "Remove to run test")>]
26
- let ``Camel case`` () =
27
- let phrase = "HyperText Markup Language"
28
- let expected = "HTML"
29
- let actual = acronym phrase
30
- expected |> should equal actual
16
+ abbreviate "Ruby on Rails" |> should equal "ROR"
31
17
 
32
18
  [<Fact(Skip = "Remove to run test")>]
33
19
  let ``Punctuation`` () =
34
- let phrase = "First In, First Out"
35
- let expected = "FIFO"
36
- let actual = acronym phrase
37
- expected |> should equal actual
20
+ abbreviate "First In, First Out" |> should equal "FIFO"
38
21
 
39
22
  [<Fact(Skip = "Remove to run test")>]
40
- let ``All-Caps words`` () =
41
- let phrase = "PHP: Hypertext Preprocessor"
42
- let expected = "PHP"
43
- let actual = acronym phrase
44
- expected |> should equal actual
23
+ let ``All caps words`` () =
24
+ abbreviate "PHP: Hypertext Preprocessor" |> should equal "PHP"
45
25
 
46
26
  [<Fact(Skip = "Remove to run test")>]
47
- let ``Non-acronym all-caps word`` () =
48
- let phrase = "GNU Image Manipulation Program"
49
- let expected = "GIMP"
50
- let actual = acronym phrase
51
- expected |> should equal actual
27
+ let ``Non-acronym all caps word`` () =
28
+ abbreviate "GNU Image Manipulation Program" |> should equal "GIMP"
52
29
 
53
30
  [<Fact(Skip = "Remove to run test")>]
54
31
  let ``Hyphenated`` () =
55
- let phrase = "Complementary metal-oxide semiconductor"
56
- let expected = "CMOS"
57
- let actual = acronym phrase
58
- expected |> should equal actual
32
+ abbreviate "Complementary metal-oxide semiconductor" |> should equal "CMOS"
33
+
@@ -3,7 +3,7 @@
3
3
  open System
4
4
  open System.Text.RegularExpressions
5
5
 
6
- let acronym (phrase:string) =
6
+ let abbreviate (phrase:string) =
7
7
  let acronymChar = Char.ToUpperInvariant << Seq.head
8
8
  let words = Regex.Matches(phrase, "[A-Z]+[a-z]*|[a-z]+")
9
9
  let chars = [|for word in words do yield word.Value |> acronymChar|]
@@ -14,9 +14,10 @@
14
14
 
15
15
  <ItemGroup>
16
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" />
17
+ <PackageReference Include="xunit" Version="2.3.0" />
18
+ <PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
19
19
  <PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
20
+ <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.0" />
20
21
  </ItemGroup>
21
22
 
22
23
  </Project>
@@ -1,174 +1,177 @@
1
+ // This file was auto-generated based on version 1.1.0 of the canonical data.
2
+
1
3
  module AllYourBaseTest
2
4
 
3
- open Xunit
4
5
  open FsUnit.Xunit
6
+ open Xunit
5
7
 
6
8
  open AllYourBase
7
9
 
8
10
  [<Fact>]
9
11
  let ``Single bit one to decimal`` () =
12
+ let expected = Some [1]
10
13
  let inputBase = 2
11
14
  let inputDigits = [1]
12
15
  let outputBase = 10
13
- let outputDigits = Some [1]
14
- rebase inputBase inputDigits outputBase |> should equal outputDigits
16
+ rebase inputBase inputDigits outputBase |> should equal expected
15
17
 
16
18
  [<Fact(Skip = "Remove to run test")>]
17
19
  let ``Binary to single decimal`` () =
20
+ let expected = Some [5]
18
21
  let inputBase = 2
19
22
  let inputDigits = [1; 0; 1]
20
23
  let outputBase = 10
21
- let outputDigits = Some [5]
22
- rebase inputBase inputDigits outputBase |> should equal outputDigits
24
+ rebase inputBase inputDigits outputBase |> should equal expected
23
25
 
24
26
  [<Fact(Skip = "Remove to run test")>]
25
27
  let ``Single decimal to binary`` () =
28
+ let expected = Some [1; 0; 1]
26
29
  let inputBase = 10
27
30
  let inputDigits = [5]
28
31
  let outputBase = 2
29
- let outputDigits = Some [1; 0; 1]
30
- rebase inputBase inputDigits outputBase |> should equal outputDigits
32
+ rebase inputBase inputDigits outputBase |> should equal expected
31
33
 
32
34
  [<Fact(Skip = "Remove to run test")>]
33
35
  let ``Binary to multiple decimal`` () =
36
+ let expected = Some [4; 2]
34
37
  let inputBase = 2
35
38
  let inputDigits = [1; 0; 1; 0; 1; 0]
36
39
  let outputBase = 10
37
- let outputDigits = Some [4; 2]
38
- rebase inputBase inputDigits outputBase |> should equal outputDigits
40
+ rebase inputBase inputDigits outputBase |> should equal expected
39
41
 
40
42
  [<Fact(Skip = "Remove to run test")>]
41
43
  let ``Decimal to binary`` () =
44
+ let expected = Some [1; 0; 1; 0; 1; 0]
42
45
  let inputBase = 10
43
46
  let inputDigits = [4; 2]
44
47
  let outputBase = 2
45
- let outputDigits = Some [1; 0; 1; 0; 1; 0]
46
- rebase inputBase inputDigits outputBase |> should equal outputDigits
48
+ rebase inputBase inputDigits outputBase |> should equal expected
47
49
 
48
50
  [<Fact(Skip = "Remove to run test")>]
49
51
  let ``Trinary to hexadecimal`` () =
52
+ let expected = Some [2; 10]
50
53
  let inputBase = 3
51
54
  let inputDigits = [1; 1; 2; 0]
52
55
  let outputBase = 16
53
- let outputDigits = Some [2; 10]
54
- rebase inputBase inputDigits outputBase |> should equal outputDigits
56
+ rebase inputBase inputDigits outputBase |> should equal expected
55
57
 
56
58
  [<Fact(Skip = "Remove to run test")>]
57
59
  let ``Hexadecimal to trinary`` () =
60
+ let expected = Some [1; 1; 2; 0]
58
61
  let inputBase = 16
59
62
  let inputDigits = [2; 10]
60
63
  let outputBase = 3
61
- let outputDigits = Some [1; 1; 2; 0]
62
- rebase inputBase inputDigits outputBase |> should equal outputDigits
64
+ rebase inputBase inputDigits outputBase |> should equal expected
63
65
 
64
66
  [<Fact(Skip = "Remove to run test")>]
65
67
  let ``15-bit integer`` () =
68
+ let expected = Some [6; 10; 45]
66
69
  let inputBase = 97
67
70
  let inputDigits = [3; 46; 60]
68
71
  let outputBase = 73
69
- let outputDigits = Some [6; 10; 45]
70
- rebase inputBase inputDigits outputBase |> should equal outputDigits
72
+ rebase inputBase inputDigits outputBase |> should equal expected
71
73
 
72
74
  [<Fact(Skip = "Remove to run test")>]
73
75
  let ``Empty list`` () =
76
+ let expected = None
74
77
  let inputBase = 2
75
78
  let inputDigits = []
76
79
  let outputBase = 10
77
- let outputDigits = None
78
- rebase inputBase inputDigits outputBase |> should equal outputDigits
80
+ rebase inputBase inputDigits outputBase |> should equal expected
79
81
 
80
82
  [<Fact(Skip = "Remove to run test")>]
81
83
  let ``Single zero`` () =
84
+ let expected = None
82
85
  let inputBase = 10
83
86
  let inputDigits = [0]
84
87
  let outputBase = 2
85
- let outputDigits = Some [0]
86
- rebase inputBase inputDigits outputBase |> should equal outputDigits
88
+ rebase inputBase inputDigits outputBase |> should equal expected
87
89
 
88
90
  [<Fact(Skip = "Remove to run test")>]
89
91
  let ``Multiple zeros`` () =
92
+ let expected = None
90
93
  let inputBase = 10
91
94
  let inputDigits = [0; 0; 0]
92
95
  let outputBase = 2
93
- let outputDigits = Some [0]
94
- rebase inputBase inputDigits outputBase |> should equal outputDigits
96
+ rebase inputBase inputDigits outputBase |> should equal expected
95
97
 
96
98
  [<Fact(Skip = "Remove to run test")>]
97
99
  let ``Leading zeros`` () =
100
+ let expected = None
98
101
  let inputBase = 7
99
102
  let inputDigits = [0; 6; 0]
100
103
  let outputBase = 10
101
- let outputDigits = Some [4; 2]
102
- rebase inputBase inputDigits outputBase |> should equal outputDigits
104
+ rebase inputBase inputDigits outputBase |> should equal expected
105
+
106
+ [<Fact(Skip = "Remove to run test")>]
107
+ let ``First base is one`` () =
108
+ let expected = None
109
+ let inputBase = 1
110
+ let inputDigits = []
111
+ let outputBase = 10
112
+ rebase inputBase inputDigits outputBase |> should equal expected
113
+
114
+ [<Fact(Skip = "Remove to run test")>]
115
+ let ``First base is zero`` () =
116
+ let expected = None
117
+ let inputBase = 0
118
+ let inputDigits = []
119
+ let outputBase = 10
120
+ rebase inputBase inputDigits outputBase |> should equal expected
121
+
122
+ [<Fact(Skip = "Remove to run test")>]
123
+ let ``First base is negative`` () =
124
+ let expected = None
125
+ let inputBase = -2
126
+ let inputDigits = [1]
127
+ let outputBase = 10
128
+ rebase inputBase inputDigits outputBase |> should equal expected
103
129
 
104
130
  [<Fact(Skip = "Remove to run test")>]
105
131
  let ``Negative digit`` () =
132
+ let expected = None
106
133
  let inputBase = 2
107
134
  let inputDigits = [1; -1; 1; 0; 1; 0]
108
135
  let outputBase = 10
109
- let outputDigits = None
110
- rebase inputBase inputDigits outputBase |> should equal outputDigits
136
+ rebase inputBase inputDigits outputBase |> should equal expected
111
137
 
112
138
  [<Fact(Skip = "Remove to run test")>]
113
139
  let ``Invalid positive digit`` () =
140
+ let expected = None
114
141
  let inputBase = 2
115
142
  let inputDigits = [1; 2; 1; 0; 1; 0]
116
143
  let outputBase = 10
117
- let outputDigits = None
118
- rebase inputBase inputDigits outputBase |> should equal outputDigits
119
-
120
- [<Fact(Skip = "Remove to run test")>]
121
- let ``First base is one`` () =
122
- let inputBase = 1
123
- let inputDigits = []
124
- let outputBase = 10
125
- let outputDigits = None
126
- rebase inputBase inputDigits outputBase |> should equal outputDigits
144
+ rebase inputBase inputDigits outputBase |> should equal expected
127
145
 
128
146
  [<Fact(Skip = "Remove to run test")>]
129
147
  let ``Second base is one`` () =
148
+ let expected = None
130
149
  let inputBase = 2
131
150
  let inputDigits = [1; 0; 1; 0; 1; 0]
132
151
  let outputBase = 1
133
- let outputDigits = None
134
- rebase inputBase inputDigits outputBase |> should equal outputDigits
135
-
136
- [<Fact(Skip = "Remove to run test")>]
137
- let ``First base is zero`` () =
138
- let inputBase = 0
139
- let inputDigits = []
140
- let outputBase = 10
141
- let outputDigits = None
142
- rebase inputBase inputDigits outputBase |> should equal outputDigits
152
+ rebase inputBase inputDigits outputBase |> should equal expected
143
153
 
144
154
  [<Fact(Skip = "Remove to run test")>]
145
155
  let ``Second base is zero`` () =
156
+ let expected = None
146
157
  let inputBase = 10
147
158
  let inputDigits = [7]
148
159
  let outputBase = 0
149
- let outputDigits = None
150
- rebase inputBase inputDigits outputBase |> should equal outputDigits
151
-
152
- [<Fact(Skip = "Remove to run test")>]
153
- let ``First base is negative`` () =
154
- let inputBase = -2
155
- let inputDigits = [1]
156
- let outputBase = 10
157
- let outputDigits = None
158
- rebase inputBase inputDigits outputBase |> should equal outputDigits
160
+ rebase inputBase inputDigits outputBase |> should equal expected
159
161
 
160
162
  [<Fact(Skip = "Remove to run test")>]
161
163
  let ``Second base is negative`` () =
164
+ let expected = None
162
165
  let inputBase = 2
163
166
  let inputDigits = [1]
164
167
  let outputBase = -7
165
- let outputDigits = None
166
- rebase inputBase inputDigits outputBase |> should equal outputDigits
168
+ rebase inputBase inputDigits outputBase |> should equal expected
167
169
 
168
170
  [<Fact(Skip = "Remove to run test")>]
169
171
  let ``Both bases are negative`` () =
172
+ let expected = None
170
173
  let inputBase = -2
171
174
  let inputDigits = [1]
172
175
  let outputBase = -7
173
- let outputDigits = None
174
- rebase inputBase inputDigits outputBase |> should equal outputDigits
176
+ rebase inputBase inputDigits outputBase |> should equal expected
177
+
@@ -16,7 +16,10 @@ let fromBase b nums =
16
16
  if digit < 0 then None else
17
17
  if digit >= b then None else
18
18
  loop (acc * b + digit) rest
19
- if nums = [] then None else loop 0 nums
19
+
20
+ match nums with
21
+ | [] | 0::_ -> None
22
+ | _ -> loop 0 nums
20
23
 
21
24
  let rebase inB inDigits outB =
22
25
  if inB < 2 || outB < 2 then None else
@@ -4,6 +4,6 @@ open System
4
4
 
5
5
  // TODO: define the Allergen type
6
6
 
7
- let allergicTo allergen codedAllergies = failwith "You need to implement this function."
7
+ let allergicTo codedAllergies allergen = failwith "You need to implement this function."
8
8
 
9
- let allergies codedAllergies = failwith "You need to implement this function."
9
+ let list codedAllergies = failwith "You need to implement this function."
@@ -14,9 +14,10 @@
14
14
 
15
15
  <ItemGroup>
16
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" />
17
+ <PackageReference Include="xunit" Version="2.3.0" />
18
+ <PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
19
19
  <PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
20
+ <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.0" />
20
21
  </ItemGroup>
21
22
 
22
23
  </Project>
@@ -1,70 +1,61 @@
1
+ // This file was auto-generated based on version 1.0.0 of the canonical data.
2
+
1
3
  module AllergiesTest
2
4
 
3
- open System
4
- open Xunit
5
5
  open FsUnit.Xunit
6
+ open Xunit
7
+
6
8
  open Allergies
7
9
 
8
10
  [<Fact>]
9
11
  let ``No allergies means not allergic`` () =
10
- allergicTo Allergen.Peanuts 0 |> should equal false
11
- allergicTo Allergen.Cats 0 |> should equal false
12
- allergicTo Allergen.Strawberries 0 |> should equal false
12
+ allergicTo 0 Allergen.Peanuts |> should equal false
13
+ allergicTo 0 Allergen.Cats |> should equal false
14
+ allergicTo 0 Allergen.Strawberries |> should equal false
13
15
 
14
16
  [<Fact(Skip = "Remove to run test")>]
15
- let ``Allergic to eggs`` () =
16
- allergicTo Allergen.Eggs 1 |> should equal true
17
+ let ``Is allergic to eggs`` () =
18
+ allergicTo 1 Allergen.Eggs |> should equal true
17
19
 
18
20
  [<Fact(Skip = "Remove to run test")>]
19
21
  let ``Allergic to eggs in addition to other stuff`` () =
20
- allergicTo Allergen.Eggs 5 |> should equal true
21
- allergicTo Allergen.Shellfish 5 |> should equal true
22
- allergicTo Allergen.Strawberries 5 |> should equal false
22
+ allergicTo 5 Allergen.Eggs |> should equal true
23
+ allergicTo 5 Allergen.Shellfish |> should equal true
24
+ allergicTo 5 Allergen.Strawberries |> should equal false
23
25
 
24
26
  [<Fact(Skip = "Remove to run test")>]
25
27
  let ``No allergies at all`` () =
26
- allergies 0 |> should be Empty
28
+ list 0 |> should be Empty
27
29
 
28
30
  [<Fact(Skip = "Remove to run test")>]
29
31
  let ``Allergic to just eggs`` () =
30
- allergies 1 |> should equal [Allergen.Eggs]
32
+ list 1 |> should equal [Allergen.Eggs]
31
33
 
32
34
  [<Fact(Skip = "Remove to run test")>]
33
35
  let ``Allergic to just peanuts`` () =
34
- allergies 2 |> should equal [Allergen.Peanuts]
36
+ list 2 |> should equal [Allergen.Peanuts]
37
+
38
+ [<Fact(Skip = "Remove to run test")>]
39
+ let ``Allergic to just strawberries`` () =
40
+ list 8 |> should equal [Allergen.Strawberries]
35
41
 
36
42
  [<Fact(Skip = "Remove to run test")>]
37
43
  let ``Allergic to eggs and peanuts`` () =
38
- allergies 3 |> should equal [Allergen.Eggs; Allergen.Peanuts]
44
+ list 3 |> should equal [Allergen.Eggs; Allergen.Peanuts]
45
+
46
+ [<Fact(Skip = "Remove to run test")>]
47
+ let ``Allergic to more than eggs but not peanuts`` () =
48
+ list 5 |> should equal [Allergen.Eggs; Allergen.Shellfish]
39
49
 
40
50
  [<Fact(Skip = "Remove to run test")>]
41
51
  let ``Allergic to lots of stuff`` () =
42
- allergies 248 |> should equal
43
- [ Allergen.Strawberries;
44
- Allergen.Tomatoes;
45
- Allergen.Chocolate;
46
- Allergen.Pollen;
47
- Allergen.Cats ]
52
+ list 248 |> should equal [Allergen.Strawberries; Allergen.Tomatoes; Allergen.Chocolate; Allergen.Pollen; Allergen.Cats]
48
53
 
49
54
  [<Fact(Skip = "Remove to run test")>]
50
55
  let ``Allergic to everything`` () =
51
- allergies 255 |> should equal
52
- [ Allergen.Eggs;
53
- Allergen.Peanuts;
54
- Allergen.Shellfish;
55
- Allergen.Strawberries;
56
- Allergen.Tomatoes;
57
- Allergen.Chocolate;
58
- Allergen.Pollen;
59
- Allergen.Cats ]
56
+ list 255 |> should equal [Allergen.Eggs; Allergen.Peanuts; Allergen.Shellfish; Allergen.Strawberries; Allergen.Tomatoes; Allergen.Chocolate; Allergen.Pollen; Allergen.Cats]
60
57
 
61
58
  [<Fact(Skip = "Remove to run test")>]
62
59
  let ``Ignore non allergen score parts`` () =
63
- allergies 509 |> should equal
64
- [ Allergen.Eggs;
65
- Allergen.Shellfish;
66
- Allergen.Strawberries;
67
- Allergen.Tomatoes;
68
- Allergen.Chocolate;
69
- Allergen.Pollen;
70
- Allergen.Cats ]
60
+ list 509 |> should equal [Allergen.Eggs; Allergen.Shellfish; Allergen.Strawberries; Allergen.Tomatoes; Allergen.Chocolate; Allergen.Pollen; Allergen.Cats]
61
+
@@ -12,10 +12,10 @@ type Allergen =
12
12
  | Pollen = 64
13
13
  | Cats = 128
14
14
 
15
- let allergicTo (allergen: Allergen) (codedAllergies: int) = codedAllergies &&& int allergen <> 0
15
+ let allergicTo (codedAllergies: int) (allergen: Allergen) = codedAllergies &&& int allergen <> 0
16
16
 
17
- let allergies (codedAllergies: int) =
17
+ let list (codedAllergies: int) =
18
18
  Enum.GetValues(typeof<Allergen>)
19
19
  |> Seq.cast<Allergen>
20
20
  |> List.ofSeq
21
- |> List.filter (fun allergen -> allergicTo allergen codedAllergies)
21
+ |> List.filter (allergicTo codedAllergies)
@@ -14,9 +14,10 @@
14
14
 
15
15
  <ItemGroup>
16
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" />
17
+ <PackageReference Include="xunit" Version="2.3.0" />
18
+ <PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
19
19
  <PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
20
+ <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.0" />
20
21
  </ItemGroup>
21
22
 
22
23
  </Project>
@@ -14,9 +14,10 @@
14
14
 
15
15
  <ItemGroup>
16
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" />
17
+ <PackageReference Include="xunit" Version="2.3.0" />
18
+ <PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
19
19
  <PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
20
+ <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.0" />
20
21
  </ItemGroup>
21
22
 
22
23
  </Project>
@@ -1,3 +1,5 @@
1
- module Atbash
1
+ module AtbashCipher
2
2
 
3
- let encode str = failwith "You need to implement this function."
3
+ let encode str = failwith "You need to implement this function."
4
+
5
+ let decode str = failwith "You need to implement this function."
@@ -14,9 +14,10 @@
14
14
 
15
15
  <ItemGroup>
16
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" />
17
+ <PackageReference Include="xunit" Version="2.3.0" />
18
+ <PackageReference Include="xunit.runner.visualstudio" Version="2.3.0" />
19
19
  <PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
20
+ <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.0" />
20
21
  </ItemGroup>
21
22
 
22
23
  </Project>
@@ -1,61 +1,57 @@
1
- module AtbashTest
1
+ // This file was auto-generated based on version 1.0.0 of the canonical data.
2
+
3
+ module AtbashCipherTest
2
4
 
3
- open Xunit
4
5
  open FsUnit.Xunit
5
- open Atbash
6
+ open Xunit
7
+
8
+ open AtbashCipher
6
9
 
7
10
  [<Fact>]
8
11
  let ``Encode yes`` () =
9
- let phrase = "yes"
10
- let expected = "bvh"
11
- let actual = encode phrase
12
- actual |> should equal expected
12
+ encode "yes" |> should equal "bvh"
13
13
 
14
- [<Fact(Skip = "Remove to run test")>]
14
+ [<Fact(Skip = "Remove to run test")>]
15
15
  let ``Encode no`` () =
16
- let phrase = "no"
17
- let expected = "ml"
18
- let actual = encode phrase
19
- actual |> should equal expected
16
+ encode "no" |> should equal "ml"
20
17
 
21
- [<Fact(Skip = "Remove to run test")>]
18
+ [<Fact(Skip = "Remove to run test")>]
22
19
  let ``Encode OMG`` () =
23
- let phrase = "OMG"
24
- let expected = "lnt"
25
- let actual = encode phrase
26
- actual |> should equal expected
20
+ encode "OMG" |> should equal "lnt"
27
21
 
28
- [<Fact(Skip = "Remove to run test")>]
22
+ [<Fact(Skip = "Remove to run test")>]
29
23
  let ``Encode spaces`` () =
30
- let phrase = "O M G"
31
- let expected = "lnt"
32
- let actual = encode phrase
33
- actual |> should equal expected
24
+ encode "O M G" |> should equal "lnt"
34
25
 
35
- [<Fact(Skip = "Remove to run test")>]
26
+ [<Fact(Skip = "Remove to run test")>]
36
27
  let ``Encode mindblowingly`` () =
37
- let phrase = "mindblowingly"
38
- let expected = "nrmwy oldrm tob"
39
- let actual = encode phrase
40
- actual |> should equal expected
28
+ encode "mindblowingly" |> should equal "nrmwy oldrm tob"
41
29
 
42
- [<Fact(Skip = "Remove to run test")>]
30
+ [<Fact(Skip = "Remove to run test")>]
43
31
  let ``Encode numbers`` () =
44
- let phrase = "Testing, 1 2 3, testing."
45
- let expected = "gvhgr mt123 gvhgr mt"
46
- let actual = encode phrase
47
- actual |> should equal expected
32
+ encode "Testing,1 2 3, testing." |> should equal "gvhgr mt123 gvhgr mt"
48
33
 
49
- [<Fact(Skip = "Remove to run test")>]
34
+ [<Fact(Skip = "Remove to run test")>]
50
35
  let ``Encode deep thought`` () =
51
- let phrase = "Truth is fiction."
52
- let expected = "gifgs rhurx grlm"
53
- let actual = encode phrase
54
- actual |> should equal expected
36
+ encode "Truth is fiction." |> should equal "gifgs rhurx grlm"
55
37
 
56
- [<Fact(Skip = "Remove to run test")>]
38
+ [<Fact(Skip = "Remove to run test")>]
57
39
  let ``Encode all the letters`` () =
58
- let phrase = "The quick brown fox jumps over the lazy dog."
59
- let expected = "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt"
60
- let actual = encode phrase
61
- actual |> should equal expected
40
+ encode "The quick brown fox jumps over the lazy dog." |> should equal "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt"
41
+
42
+ [<Fact(Skip = "Remove to run test")>]
43
+ let ``Decode exercism`` () =
44
+ decode "vcvix rhn" |> should equal "exercism"
45
+
46
+ [<Fact(Skip = "Remove to run test")>]
47
+ let ``Decode a sentence`` () =
48
+ decode "zmlyh gzxov rhlug vmzhg vkkrm thglm v" |> should equal "anobstacleisoftenasteppingstone"
49
+
50
+ [<Fact(Skip = "Remove to run test")>]
51
+ let ``Decode numbers`` () =
52
+ decode "gvhgr mt123 gvhgr mt" |> should equal "testing123testing"
53
+
54
+ [<Fact(Skip = "Remove to run test")>]
55
+ let ``Decode all the letters`` () =
56
+ decode "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt" |> should equal "thequickbrownfoxjumpsoverthelazydog"
57
+
@@ -1,4 +1,4 @@
1
- module Atbash
1
+ module AtbashCipher
2
2
 
3
3
  open System
4
4
 
@@ -10,7 +10,7 @@ let rec mapMaybe f list =
10
10
  | Some(a) -> a :: mapMaybe f xs
11
11
  | None -> mapMaybe f xs
12
12
 
13
- let stringFromChars (chars:char seq) = new String(chars |> Array.ofSeq)
13
+ let stringFromChars (chars:char seq) = String(Array.ofSeq chars)
14
14
  let chunksOfSize n xs =
15
15
  xs
16
16
  |> Seq.mapi(fun i x -> i / n, x)
@@ -24,4 +24,6 @@ let encodeLetter letter = Map.tryFind (Char.ToLower letter) lettersMap
24
24
  let encodeInChunks = String.concat " " << Seq.map stringFromChars << chunksOfSize 5
25
25
  let encodeStr = encodeInChunks << mapMaybe encodeLetter
26
26
 
27
- let encode (str:string) = str |> List.ofSeq |> encodeStr
27
+ let encode (str:string) = str |> List.ofSeq |> encodeStr
28
+
29
+ let decode (str:string) = (encode str).Replace(" ", "")