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