trackler 2.2.1.44 → 2.2.1.45

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -5,7 +5,7 @@ Use lenses to update nested records (specific to languages with immutable data).
5
5
  Updating fields of nested records is kind of annoying in Haskell. One solution
6
6
  is to use [lenses](https://wiki.haskell.org/Lens). Implement several record
7
7
  accessing functions using lenses, you may use any library you want. The test
8
- suite also allows you to avoid lenses alltogether so you can experiment with
8
+ suite also allows you to avoid lenses altogether so you can experiment with
9
9
  different approaches.
10
10
 
11
11
 
@@ -5,19 +5,12 @@ Detect palindrome products in a given range.
5
5
  A palindromic number is a number that remains the same when its digits are
6
6
  reversed. For example, `121` is a palindromic number but `112` is not.
7
7
 
8
- Given the definition of a palindromic number, we define a palindrome _product_
9
- to be the product `c`, such that `a * b = c`, where `c` is a palindromic number and
10
- `a` and `b` are integers (possibly, but _not_ necessarily palindromic numbers).
8
+ Given a range of numbers, find the largest and smallest palindromes which
9
+ are products of numbers within that range.
11
10
 
12
- For example, the palindromic number 9009 can be written as the palindrome
13
- product: `91 * 99 = 9009`.
14
-
15
- It's possible (and indeed common) for a palindrome product to be the product
16
- of multiple combinations of numbers. For example, the palindrome product `9` has
17
- the factors `(1, 9)` and `(3, 3)`.
18
-
19
- Write a program that given a range of integers, returns the smallest and largest
20
- palindromic product of factors within that range, along with all the factors in the range for that product.
11
+ Your solution should return the largest and smallest palindromes, along with the
12
+ factors of each within the range. If the largest or smallest palindrome has more
13
+ than one pair of factors within the range, then return all the pairs.
21
14
 
22
15
  ## Example 1
23
16
 
@@ -8,9 +8,6 @@ multiples of either 3 or 5, we get 3, 5, 6 and 9, 10, 12, 15, and 18.
8
8
 
9
9
  The sum of these multiples is 78.
10
10
 
11
- Given a number, find the sum of the multiples of a given set of numbers,
12
- up to but not including that number.
13
-
14
11
 
15
12
  ## Getting Started
16
13
 
@@ -43,6 +43,18 @@
43
43
  "Export Modifiers",
44
44
  "Vectors"
45
45
  ]
46
+ },
47
+ {
48
+ "uuid": "612f5f98-09a6-9d80-5820-edeec5ce1e1544073ed",
49
+ "slug": "accumulate",
50
+ "core": false,
51
+ "unlocked_by": null,
52
+ "difficulty": 1,
53
+ "topics": [
54
+ "Functions",
55
+ "Lists",
56
+ "Map"
57
+ ]
46
58
  }
47
59
  ]
48
60
  }
@@ -0,0 +1,5 @@
1
+ package accumulate
2
+
3
+ sourcedir = src
4
+ modules = Accumulate, Test.Accumulate
5
+ tests = Test.Accumulate.runTests
@@ -0,0 +1,23 @@
1
+ idris ?= idris
2
+ pkg := Accumulate
3
+
4
+ .PHONY: build clean clobber install rebuild test
5
+
6
+ all: test
7
+
8
+ build:
9
+ @ ${idris} --build ${pkg}.ipkg
10
+
11
+ clean:
12
+ @ ${idris} --clean ${pkg}.ipkg
13
+
14
+ clobber: clean
15
+ @ find . -name '*.ibc' -delete
16
+
17
+ install:
18
+ @ ${idris} --install ${pkg}.ipkg
19
+
20
+ rebuild: clean build
21
+
22
+ test:
23
+ @ ${idris} --testpkg ${pkg}.ipkg
@@ -0,0 +1,32 @@
1
+ # Accumulate
2
+
3
+ Implement the `accumulate` operation, which, given a collection and an
4
+ operation to perform on each element of the collection, returns a new
5
+ collection containing the result of applying that operation to each element of
6
+ the input collection.
7
+
8
+ Given the collection of numbers:
9
+
10
+ - 1, 2, 3, 4, 5
11
+
12
+ And the operation:
13
+
14
+ - square a number (`x => x * x`)
15
+
16
+ Your code should be able to produce the collection of squares:
17
+
18
+ - 1, 4, 9, 16, 25
19
+
20
+ Check out the test suite to see the expected function signature.
21
+
22
+ ## Restrictions
23
+
24
+ Keep your hands off that collect/map/fmap/whatchamacallit functionality
25
+ provided by your standard library!
26
+ Solve this one yourself using other basic tools instead.
27
+ ## Source
28
+
29
+ Conversation with James Edward Gray II [https://twitter.com/jeg2](https://twitter.com/jeg2)
30
+
31
+ ## Submitting Incomplete Solutions
32
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,6 @@
1
+ module Accumulate
2
+
3
+ export
4
+ accumulate : (Int -> Int) -> List Int -> List Int
5
+ accumulate f [] = []
6
+ accumulate f (x::xs) = f x :: accumulate f xs
@@ -0,0 +1,35 @@
1
+ module Test.Accumulate
2
+
3
+ import Accumulate
4
+
5
+ %access export
6
+
7
+ assertEq : Eq a => String -> (given : a) -> (expected : a) -> IO ()
8
+ assertEq label g e = putStrLn $ if g == e then label ++ ": Test Passed" else label ++ ": Test Failed"
9
+
10
+ testEmptyListDoesNothing : IO ()
11
+ testEmptyListDoesNothing = assertEq "empty list does nothing" (accumulate (\x => x) []) []
12
+
13
+ testIdentityFunctionDoesNothing : IO ()
14
+ testIdentityFunctionDoesNothing = assertEq "identity function does nothing" (accumulate (\x => x) [1,2,3]) [1,2,3]
15
+
16
+ testSquareFunctionDoublesInput : IO ()
17
+ testSquareFunctionDoublesInput = assertEq "square function doubles input" (accumulate (\x => x * x) [1,2,3]) [1,4,9]
18
+
19
+ testCubeFunctionTriplesInput : IO ()
20
+ testCubeFunctionTriplesInput = assertEq "cube function triples input" (accumulate (\x => x * x * x) [1,2,3]) [1,8,27]
21
+
22
+ testIncrementFunctionAddsOneToAllInput : IO ()
23
+ testIncrementFunctionAddsOneToAllInput = assertEq "increment function adds 1 to input" (accumulate (\x => x + 1) [1,2,3]) [2,3,4]
24
+
25
+ testDecrementFunctionAddsOneToAllInput : IO ()
26
+ testDecrementFunctionAddsOneToAllInput = assertEq "decrement function subtracts 1 from input" (accumulate (\x => x - 1) [1,2,3]) [0,1,2]
27
+
28
+ runTests : IO ()
29
+ runTests = do
30
+ testEmptyListDoesNothing
31
+ testIdentityFunctionDoesNothing
32
+ testSquareFunctionDoublesInput
33
+ testCubeFunctionTriplesInput
34
+ testIncrementFunctionAddsOneToAllInput
35
+ testDecrementFunctionAddsOneToAllInput
@@ -49,13 +49,10 @@
49
49
  },
50
50
  {
51
51
  "alumnus": false,
52
- "avatar_url": null,
53
- "bio": null,
52
+ "bio": "I'm a software developer working for Softwire, a UK based software company. I love programming in pretty much any language (possibly with the exception of C++) but Java is probably the language I have the most experience with.",
54
53
  "github_username": "FridaTveit",
55
- "link_text": null,
56
- "link_url": null,
57
- "name": null,
58
- "show_on_website": false
54
+ "name": "Frida Johanne Tveit",
55
+ "show_on_website": true
59
56
  }
60
57
  ]
61
- }
58
+ }
@@ -263,7 +263,11 @@
263
263
  "core": true,
264
264
  "difficulty": 4,
265
265
  "slug": "rotational-cipher",
266
- "topics": null,
266
+ "topics": [
267
+ "integers",
268
+ "strings",
269
+ "cryptography"
270
+ ],
267
271
  "unlocked_by": null,
268
272
  "uuid": "9eb41883-55ef-4681-b5ac-5c2259302772"
269
273
  },
@@ -307,7 +311,7 @@
307
311
  "lists",
308
312
  "loops",
309
313
  "integers"
310
- ],
314
+ ],
311
315
  "unlocked_by": "triangle",
312
316
  "uuid": "2c69db99-648d-4bd7-8012-1fbdeff6ca0a"
313
317
  },
@@ -315,7 +319,16 @@
315
319
  "core": true,
316
320
  "difficulty": 4,
317
321
  "slug": "saddle-points",
318
- "topics": null,
322
+ "topics": [
323
+ "arrays",
324
+ "conditionals",
325
+ "integers",
326
+ "lists",
327
+ "loops",
328
+ "mathematics",
329
+ "matrices",
330
+ "sets"
331
+ ],
319
332
  "unlocked_by": null,
320
333
  "uuid": "8dfc2f0d-1141-46e9-95e2-6f35ccf6f160"
321
334
  },
@@ -324,12 +337,12 @@
324
337
  "difficulty": 4,
325
338
  "slug": "diamond",
326
339
  "topics": [
327
- "strings",
328
- "loops",
329
- "arrays",
330
- "lists",
331
- "text_formatting"
332
- ],
340
+ "strings",
341
+ "loops",
342
+ "arrays",
343
+ "lists",
344
+ "text_formatting"
345
+ ],
333
346
  "unlocked_by": "two-fer",
334
347
  "uuid": "ecbd997b-86f4-4e11-9ff0-706ac2899415"
335
348
  },
@@ -350,7 +363,12 @@
350
363
  "core": true,
351
364
  "difficulty": 5,
352
365
  "slug": "flatten-array",
353
- "topics": null,
366
+ "topics": [
367
+ "arrays",
368
+ "lists",
369
+ "loops",
370
+ "recursion"
371
+ ],
354
372
  "unlocked_by": null,
355
373
  "uuid": "a732a838-8170-458a-a85e-d6b4c46f97a1"
356
374
  },
@@ -481,7 +499,10 @@
481
499
  "core": false,
482
500
  "difficulty": 5,
483
501
  "slug": "bracket-push",
484
- "topics": null,
502
+ "topics": [
503
+ "stacks",
504
+ "strings"
505
+ ],
485
506
  "unlocked_by": "flatten-array",
486
507
  "uuid": "85aa50ac-0141-49eb-bc6f-62f3f7a97647"
487
508
  },
@@ -503,7 +524,11 @@
503
524
  "core": false,
504
525
  "difficulty": 5,
505
526
  "slug": "atbash-cipher",
506
- "topics": null,
527
+ "topics": [
528
+ "strings",
529
+ "cryptography",
530
+ "security"
531
+ ],
507
532
  "unlocked_by": "rotational-cipher",
508
533
  "uuid": "d36ce010-210f-4e9a-9d6c-cb933e0a59af"
509
534
  },
@@ -558,10 +583,10 @@
558
583
  "difficulty": 6,
559
584
  "slug": "food-chain",
560
585
  "topics": [
561
- "arrays",
562
- "lists",
563
- "strings"
564
- ],
586
+ "arrays",
587
+ "lists",
588
+ "strings"
589
+ ],
565
590
  "unlocked_by": "two-fer",
566
591
  "uuid": "dd3e6fd6-5359-4978-acd7-c39374cead4d"
567
592
  },
@@ -622,7 +647,12 @@
622
647
  "core": false,
623
648
  "difficulty": 6,
624
649
  "slug": "robot-simulator",
625
- "topics": null,
650
+ "topics": [
651
+ "classes",
652
+ "logic",
653
+ "loops",
654
+ "enumerations"
655
+ ],
626
656
  "unlocked_by": "secret-handshake",
627
657
  "uuid": "993bde9d-7774-4e7a-a381-9eee75f28ecb"
628
658
  },
@@ -690,6 +720,20 @@
690
720
  "unlocked_by": "scrabble-score",
691
721
  "uuid": "4b3f7771-c642-4278-a3d9-2fb958f26361"
692
722
  },
723
+ {
724
+ "core": false,
725
+ "difficulty": 6,
726
+ "slug": "tournament",
727
+ "topics": [
728
+ "loops",
729
+ "maps",
730
+ "sorting",
731
+ "parsing",
732
+ "text_formatting"
733
+ ],
734
+ "unlocked_by": "matrix",
735
+ "uuid": "99191d53-0fed-f680-de7a-55cfb872de17bc58629"
736
+ },
693
737
  {
694
738
  "core": false,
695
739
  "difficulty": 7,
@@ -748,7 +792,12 @@
748
792
  "core": false,
749
793
  "difficulty": 7,
750
794
  "slug": "meetup",
751
- "topics": null,
795
+ "topics": [
796
+ "conditionals",
797
+ "dates",
798
+ "loops",
799
+ "enumerations"
800
+ ],
752
801
  "unlocked_by": "gigasecond",
753
802
  "uuid": "602511d5-7e89-4def-b072-4dd311816810"
754
803
  },
@@ -756,7 +805,14 @@
756
805
  "core": false,
757
806
  "difficulty": 7,
758
807
  "slug": "crypto-square",
759
- "topics": null,
808
+ "topics": [
809
+ "strings",
810
+ "text_formatting",
811
+ "mathematics",
812
+ "cryptography",
813
+ "security",
814
+ "lists"
815
+ ],
760
816
  "unlocked_by": "rotational-cipher",
761
817
  "uuid": "162bebdc-9bf2-43c0-8460-a91f5fc16147"
762
818
  },
@@ -776,7 +832,14 @@
776
832
  "core": false,
777
833
  "difficulty": 7,
778
834
  "slug": "clock",
779
- "topics": null,
835
+ "topics": [
836
+ "equality",
837
+ "integers",
838
+ "logic",
839
+ "object_oriented_programming",
840
+ "strings",
841
+ "time"
842
+ ],
780
843
  "unlocked_by": "saddle-points",
781
844
  "uuid": "97c8fcd4-85b6-41cb-9de2-b4e1b4951222"
782
845
  },
@@ -820,7 +883,14 @@
820
883
  "core": false,
821
884
  "difficulty": 8,
822
885
  "slug": "simple-cipher",
823
- "topics": null,
886
+ "topics": [
887
+ "strings",
888
+ "cryptography",
889
+ "security",
890
+ "mathematics",
891
+ "randomness",
892
+ "exception_handling"
893
+ ],
824
894
  "unlocked_by": "rotational-cipher",
825
895
  "uuid": "f654831f-c34b-44f5-9dd5-054efbb486f2"
826
896
  },
@@ -856,7 +926,14 @@
856
926
  "core": false,
857
927
  "difficulty": 8,
858
928
  "slug": "palindrome-products",
859
- "topics": null,
929
+ "topics": [
930
+ "conditionals",
931
+ "integers",
932
+ "lists",
933
+ "loops",
934
+ "maps",
935
+ "mathematics"
936
+ ],
860
937
  "unlocked_by": "saddle-points",
861
938
  "uuid": "873c05de-b5f5-4c5b-97f0-d1ede8a82832"
862
939
  },
@@ -5,7 +5,7 @@ import java.util.LinkedList;
5
5
  import java.util.List;
6
6
  import java.util.Queue;
7
7
 
8
- public class BST<T extends Comparable<T>> {
8
+ public class BinarySearchTree<T extends Comparable<T>> {
9
9
 
10
10
  public static class Node<T> {
11
11
 
@@ -6,15 +6,21 @@ import static org.junit.Assert.assertEquals;
6
6
  import static org.junit.Assert.assertNotNull;
7
7
  import org.junit.Ignore;
8
8
  import org.junit.Test;
9
+ import org.junit.Before;
9
10
 
10
- public class BSTTest {
11
+ public class BinarySearchTreeTest {
12
+ private BinarySearchTree<Integer> binarySearchTree;
13
+
14
+ @Before
15
+ public void setUp() {
16
+ binarySearchTree = new BinarySearchTree<>();
17
+ }
11
18
 
12
19
  @Test
13
20
  public void dataIsRetained() {
14
- BST<Integer> bst = new BST<>();
15
21
  final int actual = 4;
16
- bst.insert(actual);
17
- final BST.Node<Integer> root = bst.getRoot();
22
+ binarySearchTree.insert(actual);
23
+ final BinarySearchTree.Node<Integer> root = binarySearchTree.getRoot();
18
24
  assertNotNull(root);
19
25
  final int expected = root.getData();
20
26
  assertEquals(expected, actual);
@@ -23,16 +29,15 @@ public class BSTTest {
23
29
  @Ignore("Remove to run test")
24
30
  @Test
25
31
  public void insertsLess() {
26
- BST<Integer> bst = new BST<>();
27
32
  final int expectedRoot = 4;
28
33
  final int expectedLeft = 2;
29
34
 
30
- bst.insert(expectedRoot);
31
- bst.insert(expectedLeft);
35
+ binarySearchTree.insert(expectedRoot);
36
+ binarySearchTree.insert(expectedLeft);
32
37
 
33
- final BST.Node<Integer> root = bst.getRoot();
38
+ final BinarySearchTree.Node<Integer> root = binarySearchTree.getRoot();
34
39
  assertNotNull(root);
35
- final BST.Node<Integer> left = root.getLeft();
40
+ final BinarySearchTree.Node<Integer> left = root.getLeft();
36
41
  assertNotNull(left);
37
42
 
38
43
  final int actualRoot = root.getData();
@@ -44,16 +49,15 @@ public class BSTTest {
44
49
  @Ignore("Remove to run test")
45
50
  @Test
46
51
  public void insertsSame() {
47
- BST<Integer> bst = new BST<>();
48
52
  final int expectedRoot = 4;
49
53
  final int expectedLeft = 4;
50
54
 
51
- bst.insert(expectedRoot);
52
- bst.insert(expectedLeft);
55
+ binarySearchTree.insert(expectedRoot);
56
+ binarySearchTree.insert(expectedLeft);
53
57
 
54
- final BST.Node<Integer> root = bst.getRoot();
58
+ final BinarySearchTree.Node<Integer> root = binarySearchTree.getRoot();
55
59
  assertNotNull(root);
56
- final BST.Node<Integer> left = root.getLeft();
60
+ final BinarySearchTree.Node<Integer> left = root.getLeft();
57
61
  assertNotNull(left);
58
62
 
59
63
  final int actualRoot = root.getData();
@@ -65,16 +69,15 @@ public class BSTTest {
65
69
  @Ignore("Remove to run test")
66
70
  @Test
67
71
  public void insertsRight() {
68
- BST<Integer> bst = new BST<>();
69
72
  final int expectedRoot = 4;
70
73
  final int expectedRight = 5;
71
74
 
72
- bst.insert(expectedRoot);
73
- bst.insert(expectedRight);
75
+ binarySearchTree.insert(expectedRoot);
76
+ binarySearchTree.insert(expectedRight);
74
77
 
75
- final BST.Node<Integer> root = bst.getRoot();
78
+ final BinarySearchTree.Node<Integer> root = binarySearchTree.getRoot();
76
79
  assertNotNull(root);
77
- final BST.Node<Integer> right = root.getRight();
80
+ final BinarySearchTree.Node<Integer> right = root.getRight();
78
81
  assertNotNull(right);
79
82
 
80
83
  final int actualRoot = root.getData();
@@ -86,7 +89,6 @@ public class BSTTest {
86
89
  @Ignore("Remove to run test")
87
90
  @Test
88
91
  public void createsComplexTree() {
89
- BST<Integer> bst = new BST<>();
90
92
  List<Integer> expected = Collections.unmodifiableList(
91
93
  Arrays.asList(4, 2, 6, 1, 3, 5, 7)
92
94
  );
@@ -94,60 +96,56 @@ public class BSTTest {
94
96
  List<Integer> treeData = Collections.unmodifiableList(
95
97
  Arrays.asList(4, 2, 6, 1, 3, 7, 5)
96
98
  );
97
- treeData.forEach(bst::insert);
99
+ treeData.forEach(binarySearchTree::insert);
98
100
 
99
- List<Integer> actual = bst.getAsLevelOrderList();
101
+ List<Integer> actual = binarySearchTree.getAsLevelOrderList();
100
102
  assertEquals(expected, actual);
101
103
  }
102
104
 
103
105
  @Ignore("Remove to run test")
104
106
  @Test
105
107
  public void sortsSingleElement() {
106
- BST<Integer> bst = new BST<>();
107
108
  List<Integer> expected = Collections.unmodifiableList(
108
109
  Collections.singletonList(4)
109
110
  );
110
111
 
111
- bst.insert(4);
112
+ binarySearchTree.insert(4);
112
113
 
113
- List<Integer> actual = bst.getAsSortedList();
114
+ List<Integer> actual = binarySearchTree.getAsSortedList();
114
115
  assertEquals(expected, actual);
115
116
  }
116
117
 
117
118
  @Ignore("Remove to run test")
118
119
  @Test
119
120
  public void sortsCollectionOfTwoIfSecondInsertedIsSmallerThanFirst() {
120
- BST<Integer> bst = new BST<>();
121
121
  List<Integer> expected = Collections.unmodifiableList(
122
122
  Arrays.asList(2, 4)
123
123
  );
124
124
 
125
- bst.insert(4);
126
- bst.insert(2);
125
+ binarySearchTree.insert(4);
126
+ binarySearchTree.insert(2);
127
127
 
128
- List<Integer> actual = bst.getAsSortedList();
128
+ List<Integer> actual = binarySearchTree.getAsSortedList();
129
129
  assertEquals(expected, actual);
130
130
  }
131
131
 
132
132
  @Ignore("Remove to run test")
133
133
  @Test
134
134
  public void sortsCollectionOfTwoIfSecondInsertedIsBiggerThanFirst() {
135
- BST<Integer> bst = new BST<>();
136
135
  List<Integer> expected = Collections.unmodifiableList(
137
136
  Arrays.asList(4, 5)
138
137
  );
139
138
 
140
- bst.insert(4);
141
- bst.insert(5);
139
+ binarySearchTree.insert(4);
140
+ binarySearchTree.insert(5);
142
141
 
143
- List<Integer> actual = bst.getAsSortedList();
142
+ List<Integer> actual = binarySearchTree.getAsSortedList();
144
143
  assertEquals(expected, actual);
145
144
  }
146
145
 
147
146
  @Ignore("Remove to run test")
148
147
  @Test
149
148
  public void iteratesOverComplexTree() {
150
- BST<Integer> bst = new BST<>();
151
149
  List<Integer> expected = Collections.unmodifiableList(
152
150
  Arrays.asList(1, 2, 3, 4, 5, 6, 7)
153
151
  );
@@ -155,9 +153,9 @@ public class BSTTest {
155
153
  List<Integer> treeData = Collections.unmodifiableList(
156
154
  Arrays.asList(4, 2, 1, 3, 6, 7, 5)
157
155
  );
158
- treeData.forEach(bst::insert);
156
+ treeData.forEach(binarySearchTree::insert);
159
157
 
160
- List<Integer> actual = bst.getAsSortedList();
158
+ List<Integer> actual = binarySearchTree.getAsSortedList();
161
159
  assertEquals(expected, actual);
162
160
  }
163
161
  }
@@ -9,21 +9,25 @@ class GridPosition {
9
9
  this.y = y;
10
10
  }
11
11
 
12
- /*
13
- * This equals method is of deliberately narrow scope (only allows comparison with another GridPosition) to increase
14
- * readability. In general, one should provide a full implementation of Object.equals(Object obj) and a
15
- * corresponding implementation of Object.hashCode(). See
16
- *
17
- * https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)
18
- *
19
- * and
20
- *
21
- * https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()
22
- *
23
- * for more information.
24
- */
25
- boolean equals(final GridPosition gridPosition) {
26
- return this.x == gridPosition.x && this.y == gridPosition.y;
12
+ @Override
13
+ public int hashCode() {
14
+ final int prime = 31;
15
+ int result = 1;
16
+ result = prime * result + x;
17
+ result = prime * result + y;
18
+ return result;
27
19
  }
28
20
 
21
+ @Override
22
+ public boolean equals(Object obj) {
23
+ if (this == obj) {
24
+ return true;
25
+ } else if (obj == null || getClass() != obj.getClass()) {
26
+ return false;
27
+ } else if (x != ((GridPosition) obj).x || y != ((GridPosition)obj).y) {
28
+ return false;
29
+ } else {
30
+ return true;
31
+ }
32
+ }
29
33
  }
@@ -1,4 +1,4 @@
1
- class MatrixCoordinate {
1
+ class MatrixCoordinate implements Comparable<MatrixCoordinate> {
2
2
  private final int row;
3
3
  private final int col;
4
4
 
@@ -30,4 +30,10 @@ class MatrixCoordinate {
30
30
  result = 31 * result + col;
31
31
  return result;
32
32
  }
33
+
34
+ @Override
35
+ public int compareTo(MatrixCoordinate o) {
36
+ int rowComparison = Integer.compare(row, o.row);
37
+ return (rowComparison == 0) ? Integer.compare(col, o.col) : rowComparison;
38
+ }
33
39
  }
@@ -1,4 +1,4 @@
1
- class MatrixCoordinate {
1
+ class MatrixCoordinate implements Comparable<MatrixCoordinate> {
2
2
  private final int row;
3
3
  private final int col;
4
4
 
@@ -30,4 +30,10 @@ class MatrixCoordinate {
30
30
  result = 31 * result + col;
31
31
  return result;
32
32
  }
33
+
34
+ @Override
35
+ public int compareTo(MatrixCoordinate o) {
36
+ int rowComparison = Integer.compare(row, o.row);
37
+ return (rowComparison == 0) ? Integer.compare(col, o.col) : rowComparison;
38
+ }
33
39
  }