trackler 2.2.1.151 → 2.2.1.152

Sign up to get free protection for your applications and to get access to all the features.
Files changed (340) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/hamming/description.md +4 -3
  4. data/problem-specifications/exercises/isbn-verifier/canonical-data.json +9 -1
  5. data/tracks/clojure/exercises/bob/README.md +2 -0
  6. data/tracks/clojure/exercises/bob/src/example.clj +4 -0
  7. data/tracks/clojure/exercises/bob/test/bob_test.clj +1 -1
  8. data/tracks/clojure/exercises/say/README.md +2 -1
  9. data/tracks/csharp/exercises/acronym/AcronymTest.cs +3 -9
  10. data/tracks/csharp/exercises/all-your-base/AllYourBaseTest.cs +43 -43
  11. data/tracks/csharp/exercises/allergies/AllergiesTest.cs +1 -1
  12. data/tracks/csharp/exercises/alphametics/AlphameticsTest.cs +21 -1
  13. data/tracks/csharp/exercises/anagram/AnagramTest.cs +1 -35
  14. data/tracks/csharp/exercises/atbash-cipher/AtbashCipherTest.cs +1 -1
  15. data/tracks/csharp/exercises/beer-song/BeerSong.cs +1 -6
  16. data/tracks/csharp/exercises/beer-song/BeerSongTest.cs +20 -28
  17. data/tracks/csharp/exercises/beer-song/Example.cs +6 -6
  18. data/tracks/csharp/exercises/binary-search/BinarySearchTest.cs +1 -1
  19. data/tracks/csharp/exercises/bob/BobTest.cs +1 -1
  20. data/tracks/csharp/exercises/book-store/BookStoreTest.cs +1 -1
  21. data/tracks/csharp/exercises/bowling/BowlingTest.cs +47 -29
  22. data/tracks/csharp/exercises/bracket-push/BracketPushTest.cs +36 -29
  23. data/tracks/csharp/exercises/change/Change.cs +1 -1
  24. data/tracks/csharp/exercises/change/ChangeTest.cs +48 -21
  25. data/tracks/csharp/exercises/change/Example.cs +31 -18
  26. data/tracks/csharp/exercises/circular-buffer/CircularBuffer.cs +2 -2
  27. data/tracks/csharp/exercises/circular-buffer/CircularBufferTest.cs +88 -111
  28. data/tracks/csharp/exercises/circular-buffer/Example.cs +7 -7
  29. data/tracks/csharp/exercises/clock/ClockTest.cs +37 -37
  30. data/tracks/csharp/exercises/collatz-conjecture/CollatzConjectureTest.cs +1 -1
  31. data/tracks/csharp/exercises/complex-numbers/ComplexNumbersTest.cs +19 -10
  32. data/tracks/csharp/exercises/connect/ConnectTest.cs +1 -1
  33. data/tracks/csharp/exercises/crypto-square/CryptoSquareTest.cs +1 -1
  34. data/tracks/csharp/exercises/custom-set/.meta/hints.md +3 -3
  35. data/tracks/csharp/exercises/custom-set/CustomSet.cs +10 -49
  36. data/tracks/csharp/exercises/custom-set/CustomSetTest.cs +153 -157
  37. data/tracks/csharp/exercises/custom-set/Example.cs +26 -54
  38. data/tracks/csharp/exercises/difference-of-squares/DifferenceOfSquaresTest.cs +1 -1
  39. data/tracks/csharp/exercises/dominoes/DominoesTest.cs +25 -25
  40. data/tracks/csharp/exercises/etl/Etl.cs +1 -1
  41. data/tracks/csharp/exercises/etl/EtlTest.cs +4 -4
  42. data/tracks/csharp/exercises/etl/Example.cs +1 -1
  43. data/tracks/csharp/exercises/flatten-array/FlattenArrayTest.cs +13 -13
  44. data/tracks/csharp/exercises/food-chain/Example.cs +5 -0
  45. data/tracks/csharp/exercises/food-chain/FoodChain.cs +5 -0
  46. data/tracks/csharp/exercises/food-chain/FoodChainTest.cs +9 -9
  47. data/tracks/csharp/exercises/forth/Example.cs +28 -33
  48. data/tracks/csharp/exercises/forth/Forth.cs +1 -19
  49. data/tracks/csharp/exercises/forth/ForthTest.cs +215 -52
  50. data/tracks/csharp/exercises/gigasecond/GigasecondTest.cs +1 -1
  51. data/tracks/csharp/exercises/grains/GrainsTest.cs +1 -1
  52. data/tracks/csharp/exercises/grep/Example.cs +1 -1
  53. data/tracks/csharp/exercises/grep/Grep.cs +1 -1
  54. data/tracks/csharp/exercises/grep/GrepTest.cs +268 -237
  55. data/tracks/csharp/exercises/hamming/HammingTest.cs +1 -1
  56. data/tracks/csharp/exercises/hello-world/HelloWorldTest.cs +1 -1
  57. data/tracks/csharp/exercises/house/Example.cs +7 -2
  58. data/tracks/csharp/exercises/house/House.cs +5 -0
  59. data/tracks/csharp/exercises/house/HouseTest.cs +40 -223
  60. data/tracks/csharp/exercises/isbn-verifier/IsbnVerifierTest.cs +14 -2
  61. data/tracks/csharp/exercises/isogram/IsogramTest.cs +1 -1
  62. data/tracks/csharp/exercises/kindergarten-garden/KindergartenGardenTest.cs +1 -1
  63. data/tracks/csharp/exercises/largest-series-product/LargestSeriesProductTest.cs +1 -1
  64. data/tracks/csharp/exercises/leap/LeapTest.cs +1 -1
  65. data/tracks/csharp/exercises/luhn/LuhnTest.cs +1 -1
  66. data/tracks/csharp/exercises/markdown/MarkdownTest.cs +34 -27
  67. data/tracks/csharp/exercises/minesweeper/MinesweeperTest.cs +29 -34
  68. data/tracks/csharp/exercises/nth-prime/NthPrimeTest.cs +1 -1
  69. data/tracks/csharp/exercises/nucleotide-count/NucleotideCountTest.cs +1 -1
  70. data/tracks/csharp/exercises/ocr-numbers/OcrNumbersTest.cs +35 -35
  71. data/tracks/csharp/exercises/pangram/PangramTest.cs +1 -1
  72. data/tracks/csharp/exercises/pascals-triangle/PascalsTriangleTest.cs +1 -1
  73. data/tracks/csharp/exercises/perfect-numbers/PerfectNumbersTest.cs +1 -1
  74. data/tracks/csharp/exercises/phone-number/PhoneNumberTest.cs +17 -3
  75. data/tracks/csharp/exercises/pig-latin/PigLatinTest.cs +1 -1
  76. data/tracks/csharp/exercises/poker/PokerTest.cs +1 -1
  77. data/tracks/csharp/exercises/prime-factors/PrimeFactorsTest.cs +1 -1
  78. data/tracks/csharp/exercises/protein-translation/Example.cs +4 -4
  79. data/tracks/csharp/exercises/protein-translation/ProteinTranslation.cs +1 -1
  80. data/tracks/csharp/exercises/protein-translation/ProteinTranslationTest.cs +104 -45
  81. data/tracks/csharp/exercises/proverb/ProverbTest.cs +38 -6
  82. data/tracks/csharp/exercises/queen-attack/QueenAttackTest.cs +1 -1
  83. data/tracks/csharp/exercises/rail-fence-cipher/RailFenceCipherTest.cs +1 -1
  84. data/tracks/csharp/exercises/raindrops/RaindropsTest.cs +1 -1
  85. data/tracks/csharp/exercises/rectangles/RectanglesTest.cs +63 -21
  86. data/tracks/csharp/exercises/reverse-string/ReverseStringTest.cs +1 -1
  87. data/tracks/csharp/exercises/rna-transcription/RnaTranscriptionTest.cs +1 -1
  88. data/tracks/csharp/exercises/roman-numerals/RomanNumeralsTest.cs +7 -1
  89. data/tracks/csharp/exercises/rotational-cipher/RotationalCipherTest.cs +1 -1
  90. data/tracks/csharp/exercises/run-length-encoding/RunLengthEncodingTest.cs +1 -1
  91. data/tracks/csharp/exercises/saddle-points/SaddlePointsTest.cs +11 -11
  92. data/tracks/csharp/exercises/say/SayTest.cs +1 -1
  93. data/tracks/csharp/exercises/scale-generator/Example.cs +5 -0
  94. data/tracks/csharp/exercises/scale-generator/ScaleGenerator.cs +5 -0
  95. data/tracks/csharp/exercises/scale-generator/ScaleGeneratorTest.cs +56 -47
  96. data/tracks/csharp/exercises/scrabble-score/ScrabbleScoreTest.cs +1 -1
  97. data/tracks/csharp/exercises/secret-handshake/SecretHandshakeTest.cs +1 -1
  98. data/tracks/csharp/exercises/sieve/SieveTest.cs +1 -1
  99. data/tracks/csharp/exercises/space-age/SpaceAgeTest.cs +1 -1
  100. data/tracks/csharp/exercises/spiral-matrix/SpiralMatrixTest.cs +28 -34
  101. data/tracks/csharp/exercises/sum-of-multiples/SumOfMultiplesTest.cs +1 -1
  102. data/tracks/csharp/exercises/tournament/Example.cs +15 -7
  103. data/tracks/csharp/exercises/tournament/TournamentTest.cs +97 -99
  104. data/tracks/csharp/exercises/transpose/TransposeTest.cs +50 -96
  105. data/tracks/csharp/exercises/triangle/TriangleTest.cs +1 -1
  106. data/tracks/csharp/exercises/twelve-days/TwelveDays.cs +1 -1
  107. data/tracks/csharp/exercises/two-bucket/TwoBucketTest.cs +1 -1
  108. data/tracks/csharp/exercises/two-fer/TwoFerTest.cs +1 -1
  109. data/tracks/csharp/exercises/variable-length-quantity/Example.cs +3 -3
  110. data/tracks/csharp/exercises/variable-length-quantity/VariableLengthQuantity.cs +2 -2
  111. data/tracks/csharp/exercises/variable-length-quantity/VariableLengthQuantityTest.cs +165 -40
  112. data/tracks/csharp/exercises/word-count/Example.cs +1 -1
  113. data/tracks/csharp/exercises/word-count/WordCount.cs +1 -1
  114. data/tracks/csharp/exercises/word-count/WordCountTest.cs +12 -12
  115. data/tracks/csharp/exercises/wordy/WordyTest.cs +1 -1
  116. data/tracks/csharp/exercises/yacht/Example.cs +2 -5
  117. data/tracks/csharp/exercises/yacht/YachtTest.cs +7 -1
  118. data/tracks/csharp/exercises/zebra-puzzle/Example.cs +4 -4
  119. data/tracks/csharp/exercises/zebra-puzzle/ZebraPuzzle.cs +2 -2
  120. data/tracks/csharp/exercises/zebra-puzzle/ZebraPuzzleTest.cs +7 -5
  121. data/tracks/csharp/generators/Exercises/AllYourBase.cs +1 -0
  122. data/tracks/csharp/generators/Exercises/Alphametics.cs +5 -2
  123. data/tracks/csharp/generators/Exercises/BeerSong.cs +3 -0
  124. data/tracks/csharp/generators/Exercises/BinarySearch.cs +1 -0
  125. data/tracks/csharp/generators/Exercises/BookStore.cs +2 -0
  126. data/tracks/csharp/generators/Exercises/Bowling.cs +20 -15
  127. data/tracks/csharp/generators/Exercises/BracketPush.cs +1 -1
  128. data/tracks/csharp/generators/Exercises/Change.cs +20 -0
  129. data/tracks/csharp/generators/Exercises/CircularBuffer.cs +74 -0
  130. data/tracks/csharp/generators/Exercises/Clock.cs +7 -8
  131. data/tracks/csharp/generators/Exercises/ComplexNumbers.cs +9 -16
  132. data/tracks/csharp/generators/Exercises/Connect.cs +6 -6
  133. data/tracks/csharp/generators/Exercises/CustomSet.cs +56 -0
  134. data/tracks/csharp/generators/Exercises/Dominoes.cs +2 -2
  135. data/tracks/csharp/generators/Exercises/Etl.cs +7 -35
  136. data/tracks/csharp/generators/Exercises/FlattenArray.cs +9 -13
  137. data/tracks/csharp/generators/Exercises/FoodChain.cs +5 -0
  138. data/tracks/csharp/generators/Exercises/Forth.cs +25 -0
  139. data/tracks/csharp/generators/Exercises/Gigasecond.cs +4 -4
  140. data/tracks/csharp/generators/Exercises/Grains.cs +1 -1
  141. data/tracks/csharp/generators/Exercises/Grep.cs +106 -0
  142. data/tracks/csharp/generators/Exercises/Hamming.cs +1 -1
  143. data/tracks/csharp/generators/Exercises/House.cs +5 -0
  144. data/tracks/csharp/generators/Exercises/KindergartenGarden.cs +3 -3
  145. data/tracks/csharp/generators/Exercises/Markdown.cs +25 -0
  146. data/tracks/csharp/generators/Exercises/Meetup.cs +6 -6
  147. data/tracks/csharp/generators/Exercises/Minesweeper.cs +14 -4
  148. data/tracks/csharp/generators/Exercises/OcrNumbers.cs +12 -3
  149. data/tracks/csharp/generators/Exercises/PascalsTriangle.cs +0 -7
  150. data/tracks/csharp/generators/Exercises/ProteinTranslation.cs +8 -0
  151. data/tracks/csharp/generators/Exercises/Proverb.cs +7 -5
  152. data/tracks/csharp/generators/Exercises/QueenAttack.cs +3 -3
  153. data/tracks/csharp/generators/Exercises/Rectangles.cs +17 -0
  154. data/tracks/csharp/generators/Exercises/RobotSimulator.cs +6 -6
  155. data/tracks/csharp/generators/Exercises/SaddlePoints.cs +2 -2
  156. data/tracks/csharp/generators/Exercises/Say.cs +1 -1
  157. data/tracks/csharp/generators/Exercises/ScaleGenerator.cs +15 -0
  158. data/tracks/csharp/generators/Exercises/SpiralMatrix.cs +45 -0
  159. data/tracks/csharp/generators/Exercises/Sublist.cs +4 -5
  160. data/tracks/csharp/generators/Exercises/SumOfMultiples.cs +10 -1
  161. data/tracks/csharp/generators/Exercises/Tournament.cs +11 -19
  162. data/tracks/csharp/generators/Exercises/Transpose.cs +2 -2
  163. data/tracks/csharp/generators/Exercises/Triangle.cs +1 -3
  164. data/tracks/csharp/generators/Exercises/TwelveDays.cs +3 -4
  165. data/tracks/csharp/generators/Exercises/TwoBucket.cs +5 -5
  166. data/tracks/csharp/generators/Exercises/TwoFer.cs +11 -2
  167. data/tracks/csharp/generators/Exercises/VariableLengthQuantity.cs +44 -0
  168. data/tracks/csharp/generators/Exercises/Yacht.cs +11 -10
  169. data/tracks/csharp/generators/Exercises/ZebraPuzzle.cs +19 -0
  170. data/tracks/csharp/generators/GeneratorExercise.cs +6 -6
  171. data/tracks/csharp/generators/Input/CanonicalData.cs +6 -9
  172. data/tracks/csharp/generators/Input/CanonicalDataCase.cs +13 -46
  173. data/tracks/csharp/generators/Input/CanonicalDataCaseParser.cs +170 -0
  174. data/tracks/csharp/generators/Input/CanonicalDataFile.cs +1 -2
  175. data/tracks/csharp/generators/Input/CanonicalDataParser.cs +16 -12
  176. data/tracks/csharp/generators/Input/ConfigFile.cs +0 -5
  177. data/tracks/csharp/generators/Input/ConvertHelper.cs +20 -0
  178. data/tracks/csharp/generators/Output/Templates/_TestClassDisposable.liquid +14 -0
  179. data/tracks/csharp/generators/Output/TestMethodBodyData.cs +11 -14
  180. data/tracks/csharp/generators/Output/ValueFormatter.cs +20 -7
  181. data/tracks/delphi/config.json +22 -0
  182. data/tracks/delphi/exercises/grade-school/GradeSchool.dpr +60 -0
  183. data/tracks/delphi/exercises/grade-school/README.md +62 -0
  184. data/tracks/delphi/exercises/grade-school/uGradeSchoolExample.pas +134 -0
  185. data/tracks/delphi/exercises/grade-school/uGradeSchoolTest.pas +150 -0
  186. data/tracks/delphi/exercises/hamming/README.md +4 -3
  187. data/tracks/delphi/exercises/proverb/Proverb.dpr +60 -0
  188. data/tracks/delphi/exercises/proverb/README.md +44 -0
  189. data/tracks/delphi/exercises/proverb/uProverbExample.pas +60 -0
  190. data/tracks/delphi/exercises/proverb/uProverbTests.pas +124 -0
  191. data/tracks/go/exercises/bracket-push/README.md +3 -2
  192. data/tracks/go/exercises/bracket-push/cases_test.go +7 -2
  193. data/tracks/go/exercises/isbn-verifier/cases_test.go +4 -3
  194. data/tracks/go/exercises/yacht/cases_test.go +8 -2
  195. data/tracks/java/exercises/armstrong-numbers/README.md +1 -1
  196. data/tracks/java/exercises/binary-search-tree/src/test/java/BinarySearchTreeTest.java +22 -22
  197. data/tracks/java/exercises/bracket-push/README.md +3 -2
  198. data/tracks/java/exercises/crypto-square/README.md +23 -19
  199. data/tracks/java/exercises/grade-school/src/test/java/SchoolTest.java +1 -1
  200. data/tracks/java/exercises/poker/.meta/{version.txt → version} +0 -0
  201. data/tracks/java/exercises/queen-attack/src/test/java/QueenAttackCalculatorTest.java +7 -7
  202. data/tracks/java/exercises/rail-fence-cipher/.meta/version +1 -0
  203. data/tracks/java/exercises/robot-simulator/src/test/java/RobotTest.java +45 -45
  204. data/tracks/nim/config.json +24 -0
  205. data/tracks/nim/exercises/armstrong-numbers/README.md +18 -0
  206. data/tracks/nim/exercises/armstrong-numbers/armstrong_number_test.nim +29 -0
  207. data/tracks/nim/exercises/armstrong-numbers/example.nim +11 -0
  208. data/tracks/nim/exercises/leap/leap_test.nim +12 -10
  209. data/tracks/nim/exercises/two-fer/README.md +19 -0
  210. data/tracks/nim/exercises/two-fer/example.nim +3 -0
  211. data/tracks/nim/exercises/two-fer/two_fer_test.nim +16 -0
  212. data/tracks/python/.travis.yml +0 -1
  213. data/tracks/python/README.md +1 -1
  214. data/tracks/python/config/exercise_readme.go.tmpl +1 -1
  215. data/tracks/python/docs/INSTALLATION.md +1 -1
  216. data/tracks/python/exercises/accumulate/README.md +1 -1
  217. data/tracks/python/exercises/acronym/README.md +1 -1
  218. data/tracks/python/exercises/all-your-base/README.md +1 -1
  219. data/tracks/python/exercises/allergies/README.md +1 -1
  220. data/tracks/python/exercises/alphametics/README.md +1 -1
  221. data/tracks/python/exercises/anagram/README.md +1 -1
  222. data/tracks/python/exercises/armstrong-numbers/README.md +2 -2
  223. data/tracks/python/exercises/atbash-cipher/README.md +1 -1
  224. data/tracks/python/exercises/bank-account/README.md +1 -1
  225. data/tracks/python/exercises/beer-song/README.md +1 -1
  226. data/tracks/python/exercises/binary-search-tree/README.md +1 -1
  227. data/tracks/python/exercises/binary-search/README.md +1 -1
  228. data/tracks/python/exercises/binary/README.md +1 -1
  229. data/tracks/python/exercises/bob/README.md +1 -1
  230. data/tracks/python/exercises/book-store/README.md +1 -1
  231. data/tracks/python/exercises/bowling/README.md +1 -1
  232. data/tracks/python/exercises/bracket-push/README.md +4 -3
  233. data/tracks/python/exercises/change/README.md +1 -1
  234. data/tracks/python/exercises/circular-buffer/README.md +1 -1
  235. data/tracks/python/exercises/clock/README.md +1 -1
  236. data/tracks/python/exercises/collatz-conjecture/README.md +1 -1
  237. data/tracks/python/exercises/complex-numbers/README.md +1 -1
  238. data/tracks/python/exercises/connect/README.md +1 -1
  239. data/tracks/python/exercises/crypto-square/README.md +1 -1
  240. data/tracks/python/exercises/custom-set/README.md +1 -1
  241. data/tracks/python/exercises/diamond/README.md +1 -1
  242. data/tracks/python/exercises/difference-of-squares/README.md +1 -1
  243. data/tracks/python/exercises/diffie-hellman/README.md +1 -1
  244. data/tracks/python/exercises/dominoes/README.md +1 -1
  245. data/tracks/python/exercises/dot-dsl/README.md +1 -1
  246. data/tracks/python/exercises/error-handling/README.md +1 -1
  247. data/tracks/python/exercises/etl/README.md +1 -1
  248. data/tracks/python/exercises/flatten-array/README.md +1 -1
  249. data/tracks/python/exercises/food-chain/README.md +1 -1
  250. data/tracks/python/exercises/forth/README.md +1 -1
  251. data/tracks/python/exercises/gigasecond/README.md +1 -1
  252. data/tracks/python/exercises/go-counting/README.md +1 -1
  253. data/tracks/python/exercises/grade-school/README.md +1 -1
  254. data/tracks/python/exercises/grains/README.md +1 -1
  255. data/tracks/python/exercises/grep/README.md +1 -1
  256. data/tracks/python/exercises/hamming/README.md +1 -1
  257. data/tracks/python/exercises/hello-world/README.md +1 -1
  258. data/tracks/python/exercises/hexadecimal/README.md +1 -1
  259. data/tracks/python/exercises/house/README.md +1 -1
  260. data/tracks/python/exercises/isbn-verifier/README.md +1 -1
  261. data/tracks/python/exercises/isogram/README.md +1 -1
  262. data/tracks/python/exercises/kindergarten-garden/README.md +1 -1
  263. data/tracks/python/exercises/largest-series-product/README.md +1 -1
  264. data/tracks/python/exercises/leap/README.md +1 -1
  265. data/tracks/python/exercises/linked-list/README.md +1 -1
  266. data/tracks/python/exercises/list-ops/README.md +1 -1
  267. data/tracks/python/exercises/luhn/README.md +1 -1
  268. data/tracks/python/exercises/markdown/README.md +1 -1
  269. data/tracks/python/exercises/matrix/README.md +1 -1
  270. data/tracks/python/exercises/meetup/README.md +1 -1
  271. data/tracks/python/exercises/minesweeper/README.md +1 -1
  272. data/tracks/python/exercises/nth-prime/README.md +1 -1
  273. data/tracks/python/exercises/nucleotide-count/README.md +1 -1
  274. data/tracks/python/exercises/ocr-numbers/README.md +1 -1
  275. data/tracks/python/exercises/octal/README.md +1 -1
  276. data/tracks/python/exercises/palindrome-products/README.md +1 -1
  277. data/tracks/python/exercises/pangram/README.md +1 -1
  278. data/tracks/python/exercises/parallel-letter-frequency/README.md +1 -1
  279. data/tracks/python/exercises/pascals-triangle/README.md +1 -1
  280. data/tracks/python/exercises/perfect-numbers/README.md +1 -1
  281. data/tracks/python/exercises/phone-number/README.md +1 -1
  282. data/tracks/python/exercises/pig-latin/README.md +1 -1
  283. data/tracks/python/exercises/point-mutations/README.md +1 -1
  284. data/tracks/python/exercises/poker/README.md +1 -1
  285. data/tracks/python/exercises/pov/README.md +1 -1
  286. data/tracks/python/exercises/prime-factors/README.md +1 -1
  287. data/tracks/python/exercises/protein-translation/README.md +1 -1
  288. data/tracks/python/exercises/proverb/README.md +1 -1
  289. data/tracks/python/exercises/pythagorean-triplet/README.md +1 -1
  290. data/tracks/python/exercises/queen-attack/README.md +1 -1
  291. data/tracks/python/exercises/rail-fence-cipher/README.md +1 -1
  292. data/tracks/python/exercises/raindrops/README.md +1 -1
  293. data/tracks/python/exercises/rational-numbers/README.md +1 -1
  294. data/tracks/python/exercises/react/README.md +1 -1
  295. data/tracks/python/exercises/rectangles/README.md +1 -1
  296. data/tracks/python/exercises/reverse-string/README.md +1 -1
  297. data/tracks/python/exercises/rna-transcription/README.md +1 -1
  298. data/tracks/python/exercises/robot-name/README.md +1 -1
  299. data/tracks/python/exercises/robot-simulator/README.md +1 -1
  300. data/tracks/python/exercises/roman-numerals/README.md +1 -1
  301. data/tracks/python/exercises/rotational-cipher/README.md +1 -1
  302. data/tracks/python/exercises/run-length-encoding/README.md +1 -1
  303. data/tracks/python/exercises/saddle-points/README.md +1 -1
  304. data/tracks/python/exercises/say/README.md +1 -1
  305. data/tracks/python/exercises/scale-generator/README.md +1 -1
  306. data/tracks/python/exercises/scrabble-score/README.md +1 -1
  307. data/tracks/python/exercises/secret-handshake/README.md +1 -1
  308. data/tracks/python/exercises/series/README.md +1 -1
  309. data/tracks/python/exercises/sgf-parsing/README.md +1 -1
  310. data/tracks/python/exercises/sieve/README.md +1 -1
  311. data/tracks/python/exercises/simple-cipher/README.md +1 -1
  312. data/tracks/python/exercises/simple-linked-list/README.md +1 -1
  313. data/tracks/python/exercises/space-age/README.md +1 -1
  314. data/tracks/python/exercises/spiral-matrix/README.md +1 -1
  315. data/tracks/python/exercises/strain/README.md +1 -1
  316. data/tracks/python/exercises/sublist/README.md +1 -1
  317. data/tracks/python/exercises/sum-of-multiples/README.md +1 -1
  318. data/tracks/python/exercises/tournament/README.md +1 -1
  319. data/tracks/python/exercises/transpose/README.md +1 -1
  320. data/tracks/python/exercises/tree-building/README.md +1 -1
  321. data/tracks/python/exercises/triangle/README.md +1 -1
  322. data/tracks/python/exercises/trinary/README.md +1 -1
  323. data/tracks/python/exercises/twelve-days/README.md +1 -1
  324. data/tracks/python/exercises/two-bucket/README.md +1 -1
  325. data/tracks/python/exercises/two-fer/README.md +1 -1
  326. data/tracks/python/exercises/variable-length-quantity/README.md +1 -1
  327. data/tracks/python/exercises/word-count/README.md +1 -1
  328. data/tracks/python/exercises/word-search/README.md +1 -1
  329. data/tracks/python/exercises/wordy/README.md +1 -1
  330. data/tracks/python/exercises/yacht/README.md +1 -1
  331. data/tracks/python/exercises/zebra-puzzle/README.md +1 -1
  332. data/tracks/python/exercises/zipper/README.md +1 -1
  333. data/tracks/python/requirements-travis.txt +1 -1
  334. data/tracks/swift/exercises/scale-generator/Tests/ScaleGeneratorTests/ScaleGeneratorTests.swift +1 -1
  335. metadata +32 -8
  336. data/tracks/csharp/generators/Input/CanonicalDataCaseJson.cs +0 -73
  337. data/tracks/csharp/generators/Input/CanonicalDataCaseJsonConverter.cs +0 -49
  338. data/tracks/csharp/generators/Input/CanonicalDataCasesJson.cs +0 -58
  339. data/tracks/csharp/generators/Input/CanonicalDataCasesJsonConverter.cs +0 -17
  340. data/tracks/java/exercises/go-counting/src/main/java/.keep +0 -0
@@ -26,11 +26,6 @@ public class ConfigExercise
26
26
  {
27
27
  public string Name => Slug.ToExerciseName();
28
28
  public string Slug { get; set; }
29
- public bool Core { get; set; }
30
- public int Difficulty { get; set; }
31
- public string[] Topics { get; set; }
32
- public string Unlocked_By { get; set; }
33
- public string UUID { get; set; }
34
29
  public bool Deprecated { get; set; }
35
30
  }
36
31
  }
@@ -3,5 +3,25 @@
3
3
  public static class ConvertHelper
4
4
  {
5
5
  public static string ToMultiLineString(this object obj) => string.Join("\n", obj as object[]);
6
+
7
+ public static string ToMultiLineString(this object obj, string empty)
8
+ {
9
+ var arr = obj as object[];
10
+
11
+ if (arr == null || arr.Length == 0)
12
+ return empty;
13
+
14
+ return string.Join("\n", obj as object[]);
15
+ }
16
+
17
+ public static T[] ToArray<T>(this object obj)
18
+ {
19
+ var arr = obj as T[];
20
+
21
+ if (arr == null || arr.Length == 0)
22
+ return new T[0];
23
+
24
+ return arr;
25
+ }
6
26
  }
7
27
  }
@@ -0,0 +1,14 @@
1
+ // This file was auto-generated based on version {{CanonicalDataVersion}} of the canonical data.
2
+
3
+ {%- for namespace in UsingNamespaces -%}
4
+ using {{ namespace }};
5
+ {%- endfor -%}
6
+
7
+ public class {{ClassName}} : IDisposable
8
+ {
9
+ {%- for method in Methods -%}
10
+ {{ method | indent }}
11
+ {%- if forloop.last == false %}
12
+ {% endif -%}
13
+ {%- endfor -%}
14
+ }
@@ -13,15 +13,12 @@ public class TestMethodBodyData
13
13
 
14
14
  private readonly TestMethodBody _testMethodBody;
15
15
 
16
- public TestMethodBodyData(TestMethodBody testMethodBody)
17
- {
18
- _testMethodBody = testMethodBody;
19
- }
16
+ public TestMethodBodyData(TestMethodBody testMethodBody) => _testMethodBody = testMethodBody;
20
17
 
21
- public object TestedValue => _testMethodBody.UseVariableForTested ? TestedVariableName : TestedMethodInvocation;
22
- public object InputParameters => _testMethodBody.UseVariablesForInput ? string.Join(", ", CanonicalDataCase.Input.Keys.Select(key => key.ToVariableName())) : Input;
23
- public object ExpectedParameter => _testMethodBody.UseVariableForExpected ? ExpectedVariableName : Expected;
24
- public object ConstructorParameters => _testMethodBody.UseVariablesForConstructorParameters ? string.Join(", ", CanonicalDataCase.ConstructorInput.Keys.Select(key => key.ToVariableName())) : ConstructorInput;
18
+ public string TestedValue => _testMethodBody.UseVariableForTested ? TestedVariableName : TestedMethodInvocation;
19
+ public string InputParameters => _testMethodBody.UseVariablesForInput ? string.Join(", ", CanonicalDataCase.InputParameters.Select(key => key.ToVariableName())) : ValueFormatter.Format(Input);
20
+ public string ExpectedParameter => _testMethodBody.UseVariableForExpected ? ExpectedVariableName : ValueFormatter.Format(CanonicalDataCase.Expected);
21
+ public string ConstructorParameters => _testMethodBody.UseVariablesForConstructorParameters ? string.Join(", ", CanonicalDataCase.ConstructorInputParameters.Select(key => key.ToVariableName())) : ValueFormatter.Format(ConstructorInput);
25
22
 
26
23
  private CanonicalDataCase CanonicalDataCase => _testMethodBody.CanonicalDataCase;
27
24
  private CanonicalData CanonicalData => _testMethodBody.CanonicalData;
@@ -29,13 +26,13 @@ public TestMethodBodyData(TestMethodBody testMethodBody)
29
26
  private string TestedClassName => CanonicalData.Exercise.ToTestedClassName();
30
27
  private string TestedMethodName => CanonicalDataCase.Property.ToTestedMethodName();
31
28
 
32
- private object Input => ValueFormatter.Format(CanonicalDataCase.Input);
33
- private object Expected => ValueFormatter.Format(CanonicalDataCase.Expected);
34
- private object ConstructorInput => ValueFormatter.Format(CanonicalDataCase.ConstructorInput);
29
+ private IDictionary<string, object> Input => CanonicalDataCase.InputParameters.ToDictionary(key => key, key => CanonicalDataCase.Input[key]);
30
+ private IDictionary<string, object> ConstructorInput => CanonicalDataCase.ConstructorInputParameters.ToDictionary(key => key, key => CanonicalDataCase.Input[key]);
31
+ private object Expected => CanonicalDataCase.Expected;
35
32
 
36
- private IEnumerable<string> InputVariablesDeclaration => ValueFormatter.FormatVariables(CanonicalDataCase.Input);
37
- private IEnumerable<string> ExpectedVariableDeclaration => ValueFormatter.FormatVariable(CanonicalDataCase.Expected, ExpectedVariableName);
38
- private IEnumerable<string> ConstructorVariablesDeclaration => ValueFormatter.FormatVariables(CanonicalDataCase.ConstructorInput);
33
+ private IEnumerable<string> InputVariablesDeclaration => ValueFormatter.FormatVariables(Input);
34
+ private IEnumerable<string> ExpectedVariableDeclaration => ValueFormatter.FormatVariable(Expected, ExpectedVariableName);
35
+ private IEnumerable<string> ConstructorVariablesDeclaration => ValueFormatter.FormatVariables(ConstructorInput);
39
36
  private IEnumerable<string> SutVariableDeclaration => new[] { $"var {SutVariableName} = new {TestedClassName}({ConstructorParameters});" };
40
37
  private IEnumerable<string> ActualVariableDeclaration => new[] { $"var {TestedVariableName} = {TestedMethodInvocation};" };
41
38
 
@@ -8,7 +8,7 @@ namespace Generators.Output
8
8
  {
9
9
  public static class ValueFormatter
10
10
  {
11
- public static object Format(object val)
11
+ public static string Format(object val)
12
12
  {
13
13
  switch (val)
14
14
  {
@@ -25,14 +25,15 @@ public static object Format(object val)
25
25
  case IDictionary<string, object> dict: return dict.Format();
26
26
  case IDictionary<char, int> dict: return dict.Format();
27
27
  case IDictionary<string, int> dict: return dict.Format();
28
+ case IDictionary<int, string[]> dict: return dict.Format();
28
29
  case JArray jArray: return jArray.Format();
29
30
  case int[,] multidimensionalArray: return multidimensionalArray.Format();
30
31
  case IEnumerable<Tuple<string, object>> tuples: return tuples.Format();
31
- default: return val;
32
+ default: return val?.ToString();
32
33
  }
33
34
  }
34
35
 
35
- public static string[] FormatVariables(IReadOnlyDictionary<string, object> dict)
36
+ public static string[] FormatVariables(IDictionary<string, object> dict)
36
37
  => dict.Keys.SelectMany(key => FormatVariable(dict[key], key.ToVariableName())).ToArray();
37
38
 
38
39
  public static string[] FormatVariable(object val, string name)
@@ -41,10 +42,19 @@ public static string[] FormatVariable(object val, string name)
41
42
  {
42
43
  case string str when str.Contains("\n"):
43
44
  return FormatMultiLineString(name, str);
45
+ case IEnumerable<string> strings:
46
+ if (!strings.Any())
47
+ {
48
+ return new[] { $"var {name} = new string[0];" };
49
+ }
50
+
51
+ return FormatMultiLineEnumerable(strings.Select((str, i) => str.Format() + (i < strings.Count() - 1 ? "," : "")), name, "new[]");
44
52
  case IDictionary<char, int> dict:
45
53
  return FormatMultiLineEnumerable(dict.Keys.Select((key, i) => $"[{Format(key)}] = {Format(dict[key])}" + (i < dict.Keys.Count - 1 ? "," : "")), name, "new Dictionary<char, int>");
46
54
  case IDictionary<string, int> dict:
47
55
  return FormatMultiLineEnumerable(dict.Keys.Select((key, i) => $"[{Format(key)}] = {Format(dict[key])}" + (i < dict.Keys.Count - 1 ? "," : "")), name, "new Dictionary<string, int>");
56
+ case IDictionary<int, string[]> dict:
57
+ return FormatMultiLineEnumerable(dict.Keys.Select((key, i) => $"[{Format(key)}] = {Format(dict[key])}" + (i < dict.Keys.Count - 1 ? "," : "")), name, "new Dictionary<int, string[]>");
48
58
  default:
49
59
  return new[] { $"var {name} = {Format(val)};" };
50
60
  }
@@ -75,7 +85,7 @@ public static string[] FormatVariable(object val, string name)
75
85
  private static string Format(this IEnumerable<UnescapedValue> unescapedValues) =>
76
86
  $"new[] {{ {string.Join(", ", unescapedValues.Select(Format))} }}";
77
87
 
78
- private static string Format(this IDictionary<string, object> dict) =>
88
+ private static string Format(this IDictionary<string, object> dict) =>
79
89
  string.Join(", ", dict.Values.Select(Format));
80
90
 
81
91
  private static string Format(this IDictionary<char, int> dict) =>
@@ -84,17 +94,20 @@ public static string[] FormatVariable(object val, string name)
84
94
  private static string Format(this IDictionary<string, int> dict) =>
85
95
  $"new Dictionary<string, int> {{ {string.Join(", ", dict.Keys.Select(key => $"[{Format(key)}] = {Format(dict[key])}"))} }}";
86
96
 
87
- private static string Format(this JArray jArray) =>
97
+ private static string Format(this IDictionary<int, string[]> dict) =>
98
+ $"new Dictionary<int, string[]> {{ {string.Join(", ", dict.Keys.Select(key => $"[{Format(key)}] = {Format(dict[key])}"))} }}";
99
+
100
+ private static string Format(this JArray jArray) =>
88
101
  $"new[] {{ {string.Join(", ", jArray.Select(Format))} }}";
89
102
 
90
103
  private static string Format(this int[,] multidimensionalArray)
91
104
  {
92
- return multidimensionalArray.GetLength(0) > 1
105
+ return multidimensionalArray.GetLength(0) > 0
93
106
  ? $"new[,]\r\n{{\r\n {string.Join(",\r\n ", Enumerable.Range(0, multidimensionalArray.GetUpperBound(0) + 1).Select(x => multidimensionalArray.SliceRow(x).ToNestedArray()))}\r\n}}"
94
107
  : "new int[,] { }";
95
108
  }
96
109
 
97
- private static string Format(this IEnumerable<Tuple<string, object>> tuples) =>
110
+ private static string Format(this IEnumerable<Tuple<string, object>> tuples) =>
98
111
  $"new[] {{ {string.Join(", ", tuples.Select(Format))} }}";
99
112
 
100
113
  private static string ToNestedArray<T>(this IEnumerable<T> enumerable) =>
@@ -153,6 +153,17 @@
153
153
  "recursion"
154
154
  ]
155
155
  },
156
+ {
157
+ "slug": "grade-school",
158
+ "uuid": "37d13c81-2347-4620-931b-11ae46ea95f8",
159
+ "core": true,
160
+ "unlocked_by": null,
161
+ "difficulty": 2,
162
+ "topics": [
163
+ "lists",
164
+ "sorting"
165
+ ]
166
+ },
156
167
  {
157
168
  "slug": "collatz-conjecture",
158
169
  "uuid": "edfc2903-1165-4029-9901-0be72b32865f",
@@ -197,6 +208,17 @@
197
208
  "transforming"
198
209
  ]
199
210
  },
211
+ {
212
+ "slug": "proverb",
213
+ "uuid": "aa42eae2-9a5c-4d01-8900-fad674434cd5",
214
+ "core": false,
215
+ "unlocked_by": "raindrops",
216
+ "difficulty": 3,
217
+ "topics": [
218
+ "algorithms",
219
+ "strings"
220
+ ]
221
+ },
200
222
  {
201
223
  "slug": "secret-handshake",
202
224
  "uuid": "2032ba03-845a-460b-ad93-0958e97eb7cc",
@@ -0,0 +1,60 @@
1
+ program BracketPush;
2
+
3
+ {$IFNDEF TESTINSIGHT}
4
+ {$APPTYPE CONSOLE}
5
+ {$ENDIF}{$STRONGLINKTYPES ON}
6
+ uses
7
+ System.SysUtils,
8
+ {$IFDEF TESTINSIGHT}
9
+ TestInsight.DUnitX,
10
+ {$ENDIF }
11
+ DUnitX.Loggers.Console,
12
+ DUnitX.Loggers.Xml.NUnit,
13
+ DUnitX.TestFramework,
14
+ uGradeSchoolTest in 'uGradeSchoolTest.pas',
15
+ uGradeSchool in 'uGradeSchool.pas';
16
+
17
+ var
18
+ runner : ITestRunner;
19
+ results : IRunResults;
20
+ logger : ITestLogger;
21
+ nunitLogger : ITestLogger;
22
+ begin
23
+ {$IFDEF TESTINSIGHT}
24
+ TestInsight.DUnitX.RunRegisteredTests;
25
+ exit;
26
+ {$ENDIF}
27
+ try
28
+ //Check command line options, will exit if invalid
29
+ TDUnitX.CheckCommandLine;
30
+ //Create the test runner
31
+ runner := TDUnitX.CreateRunner;
32
+ //Tell the runner to use RTTI to find Fixtures
33
+ runner.UseRTTI := True;
34
+ //tell the runner how we will log things
35
+ //Log to the console window
36
+ logger := TDUnitXConsoleLogger.Create(true);
37
+ runner.AddLogger(logger);
38
+ //Generate an NUnit compatible XML File
39
+ nunitLogger := TDUnitXXMLNUnitFileLogger.Create(TDUnitX.Options.XMLOutputFile);
40
+ runner.AddLogger(nunitLogger);
41
+ runner.FailsOnNoAsserts := False; //When true, Assertions must be made during tests;
42
+
43
+ //Run tests
44
+ results := runner.Execute;
45
+ if not results.AllPassed then
46
+ System.ExitCode := EXIT_ERRORS;
47
+
48
+ {$IFNDEF CI}
49
+ //We don't want this happening when running under CI.
50
+ if TDUnitX.Options.ExitBehavior = TDUnitXExitBehavior.Pause then
51
+ begin
52
+ System.Write('Done.. press <Enter> key to quit.');
53
+ System.Readln;
54
+ end;
55
+ {$ENDIF}
56
+ except
57
+ on E: Exception do
58
+ System.Writeln(E.ClassName, ': ', E.Message);
59
+ end;
60
+ end.
@@ -0,0 +1,62 @@
1
+ # Grade School
2
+
3
+ Given students' names along with the grade that they are in, create a roster
4
+ for the school.
5
+
6
+ In the end, you should be able to:
7
+
8
+ - Add a student's name to the roster for a grade
9
+ - "Add Jim to grade 2."
10
+ - "OK."
11
+ - Get a list of all students enrolled in a grade
12
+ - "Which students are in grade 2?"
13
+ - "We've only got Jim just now."
14
+ - Get a sorted list of all students in all grades. Grades should sort
15
+ as 1, 2, 3, etc., and students within a grade should be sorted
16
+ alphabetically by name.
17
+ - "Who all is enrolled in school right now?"
18
+ - "Grade 1: Anna, Barb, and Charlie. Grade 2: Alex, Peter, and Zoe.
19
+ Grade 3…"
20
+
21
+ Note that all our students only have one name. (It's a small town, what
22
+ do you want?)
23
+
24
+ ## For bonus points
25
+
26
+ Did you get the tests passing and the code clean? If you want to, these
27
+ are some additional things you could try:
28
+
29
+ - If you're working in a language with mutable data structures and your
30
+ implementation allows outside code to mutate the school's internal DB
31
+ directly, see if you can prevent this. Feel free to introduce additional
32
+ tests.
33
+
34
+ Then please share your thoughts in a comment on the submission. Did this
35
+ experiment make the code better? Worse? Did you learn anything from it?
36
+
37
+ ## Testing
38
+
39
+ In order to run the tests for this track, you will need to install
40
+ DUnitX. Please see the [installation](http://www.exercism.io/languages/delphi/installation) instructions for more information.
41
+
42
+ ### Loading Exercises into Delphi
43
+
44
+ If Delphi is properly installed, and `*.dpr` file types have been associated with Delphi, then double clicking the supplied `*.dpr` file will start Delphi and load the exercise/project. `control + F9` is the keyboard shortcut to compile the project or pressing `F9` will compile and run the project.
45
+
46
+ Alternatively you may opt to start Delphi and load your project via. the `File` drop down menu.
47
+
48
+ ### When Questions Come Up
49
+ We monitor the [Pascal-Delphi](https://gitter.im/exercism/Pascal-Delphi) support room on [gitter.im](https://gitter.im) to help you with any questions that might arise.
50
+
51
+ ### Submitting Exercises
52
+
53
+ Note that, when trying to submit an exercise, make sure the exercise file you're submitting is in the `exercism/delphi/<exerciseName>` directory.
54
+
55
+ For example, if you're submitting `ubob.pas` for the Bob exercise, the submit command would be something like `exercism submit <path_to_exercism_dir>/delphi/bob/ubob.pas`.
56
+
57
+ ## Source
58
+
59
+ A pairing session with Phil Battos at gSchool [http://gschool.it](http://gschool.it)
60
+
61
+ ## Submitting Incomplete Solutions
62
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,134 @@
1
+ unit uGradeSchool;
2
+
3
+ interface
4
+ uses System.Generics.Collections;
5
+
6
+ type
7
+ TRoster = TList<string>;
8
+
9
+ ISchool = interface(IInterface)
10
+ ['{8C6DC96D-E56E-4726-B045-F4AFE95DBEB5}']
11
+ procedure Add(aStudent: string; aGrade: integer);
12
+ function Roster: TRoster;
13
+ function Grade(aGrade: integer): TRoster;
14
+ end;
15
+
16
+ function NewSchool: ISchool;
17
+
18
+ implementation
19
+ uses
20
+ SysUtils;
21
+
22
+ { TSchool }
23
+ type
24
+ TSchool = class(TInterfacedObject, ISchool)
25
+ private
26
+ fRoster: TDictionary<integer, TRoster>;
27
+ fLowGrade: integer;
28
+ fHighGrade: integer;
29
+ public
30
+ constructor create;
31
+ destructor destroy; override;
32
+ procedure Add(aStudent: string; aGrade: integer);
33
+ function Roster: TRoster;
34
+ function Grade(aGrade: integer): TRoster;
35
+ end;
36
+
37
+ function NewSchool: ISchool;
38
+ begin
39
+ result := TSchool.create;
40
+ end;
41
+
42
+ procedure TSchool.Add(aStudent: string; aGrade: integer);
43
+
44
+ function highGrade: integer;
45
+ var
46
+ lItem: TPair<integer, TRoster>;
47
+ begin
48
+ result := 0;
49
+ if fRoster.Count > 0 then
50
+ begin
51
+ result := integer.MinValue;
52
+ for lItem in fRoster do
53
+ if lItem.Key > result then
54
+ result := lItem.Key;
55
+ end;
56
+ end;
57
+
58
+ function lowGrade: integer;
59
+ var
60
+ lItem: TPair<integer, TRoster>;
61
+ begin
62
+ result := 0;
63
+ if fRoster.Count > 0 then
64
+ begin
65
+ result := integer.MaxValue;
66
+ for lItem in fRoster do
67
+ if lItem.Key < result then
68
+ result := lItem.Key;
69
+ end;
70
+ end;
71
+
72
+ procedure UpdateHighAndLowGrades;
73
+ begin
74
+ fLowGrade := lowGrade;
75
+ fHighGrade := highGrade;
76
+ end;
77
+
78
+ begin
79
+ if not fRoster.ContainsKey(aGrade) then
80
+ fRoster.Add(aGrade, TRoster.Create);
81
+ fRoster[aGrade].Add(aStudent);
82
+ fRoster[aGrade].Sort;
83
+ UpdateHighAndLowGrades;
84
+ end;
85
+
86
+ constructor TSchool.create;
87
+ begin
88
+ inherited create;
89
+ fRoster := TDictionary<integer, TRoster>.Create;
90
+ fLowGrade := 0;
91
+ fHighGrade := 0;
92
+ end;
93
+
94
+ destructor TSchool.destroy;
95
+ var
96
+ lGrade: TPair<integer, TRoster>;
97
+ begin
98
+ if assigned(fRoster) then
99
+ begin
100
+ if fRoster.Count > 0 then
101
+ begin
102
+ for lGrade in fRoster do
103
+ begin
104
+ lGrade.Value.Clear;
105
+ lGrade.Value.DisposeOf;
106
+ end;
107
+ end;
108
+ fRoster.DisposeOf;
109
+ end;
110
+ inherited;
111
+ end;
112
+
113
+ function TSchool.Grade(aGrade: integer): TRoster;
114
+ var
115
+ lStudents: TRoster;
116
+ begin
117
+ result := TRoster.Create;
118
+ if fRoster.TryGetValue(aGrade, lStudents) then
119
+ result.AddRange(lStudents.ToArray);
120
+ end;
121
+
122
+ function TSchool.Roster: TRoster;
123
+ var
124
+ lGrade: TPair<integer, TRoster>;
125
+ lRoster: TRoster;
126
+ idxGrade: integer;
127
+ begin
128
+ result := TRoster.Create;
129
+ for idxGrade := fLowGrade to fHighGrade do
130
+ if fRoster.TryGetValue(idxGrade, lRoster) then
131
+ result.AddRange(lRoster.ToArray);
132
+ end;
133
+
134
+ end.