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.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/problem-specifications/exercises/hamming/description.md +4 -3
- data/problem-specifications/exercises/isbn-verifier/canonical-data.json +9 -1
- data/tracks/clojure/exercises/bob/README.md +2 -0
- data/tracks/clojure/exercises/bob/src/example.clj +4 -0
- data/tracks/clojure/exercises/bob/test/bob_test.clj +1 -1
- data/tracks/clojure/exercises/say/README.md +2 -1
- data/tracks/csharp/exercises/acronym/AcronymTest.cs +3 -9
- data/tracks/csharp/exercises/all-your-base/AllYourBaseTest.cs +43 -43
- data/tracks/csharp/exercises/allergies/AllergiesTest.cs +1 -1
- data/tracks/csharp/exercises/alphametics/AlphameticsTest.cs +21 -1
- data/tracks/csharp/exercises/anagram/AnagramTest.cs +1 -35
- data/tracks/csharp/exercises/atbash-cipher/AtbashCipherTest.cs +1 -1
- data/tracks/csharp/exercises/beer-song/BeerSong.cs +1 -6
- data/tracks/csharp/exercises/beer-song/BeerSongTest.cs +20 -28
- data/tracks/csharp/exercises/beer-song/Example.cs +6 -6
- data/tracks/csharp/exercises/binary-search/BinarySearchTest.cs +1 -1
- data/tracks/csharp/exercises/bob/BobTest.cs +1 -1
- data/tracks/csharp/exercises/book-store/BookStoreTest.cs +1 -1
- data/tracks/csharp/exercises/bowling/BowlingTest.cs +47 -29
- data/tracks/csharp/exercises/bracket-push/BracketPushTest.cs +36 -29
- data/tracks/csharp/exercises/change/Change.cs +1 -1
- data/tracks/csharp/exercises/change/ChangeTest.cs +48 -21
- data/tracks/csharp/exercises/change/Example.cs +31 -18
- data/tracks/csharp/exercises/circular-buffer/CircularBuffer.cs +2 -2
- data/tracks/csharp/exercises/circular-buffer/CircularBufferTest.cs +88 -111
- data/tracks/csharp/exercises/circular-buffer/Example.cs +7 -7
- data/tracks/csharp/exercises/clock/ClockTest.cs +37 -37
- data/tracks/csharp/exercises/collatz-conjecture/CollatzConjectureTest.cs +1 -1
- data/tracks/csharp/exercises/complex-numbers/ComplexNumbersTest.cs +19 -10
- data/tracks/csharp/exercises/connect/ConnectTest.cs +1 -1
- data/tracks/csharp/exercises/crypto-square/CryptoSquareTest.cs +1 -1
- data/tracks/csharp/exercises/custom-set/.meta/hints.md +3 -3
- data/tracks/csharp/exercises/custom-set/CustomSet.cs +10 -49
- data/tracks/csharp/exercises/custom-set/CustomSetTest.cs +153 -157
- data/tracks/csharp/exercises/custom-set/Example.cs +26 -54
- data/tracks/csharp/exercises/difference-of-squares/DifferenceOfSquaresTest.cs +1 -1
- data/tracks/csharp/exercises/dominoes/DominoesTest.cs +25 -25
- data/tracks/csharp/exercises/etl/Etl.cs +1 -1
- data/tracks/csharp/exercises/etl/EtlTest.cs +4 -4
- data/tracks/csharp/exercises/etl/Example.cs +1 -1
- data/tracks/csharp/exercises/flatten-array/FlattenArrayTest.cs +13 -13
- data/tracks/csharp/exercises/food-chain/Example.cs +5 -0
- data/tracks/csharp/exercises/food-chain/FoodChain.cs +5 -0
- data/tracks/csharp/exercises/food-chain/FoodChainTest.cs +9 -9
- data/tracks/csharp/exercises/forth/Example.cs +28 -33
- data/tracks/csharp/exercises/forth/Forth.cs +1 -19
- data/tracks/csharp/exercises/forth/ForthTest.cs +215 -52
- data/tracks/csharp/exercises/gigasecond/GigasecondTest.cs +1 -1
- data/tracks/csharp/exercises/grains/GrainsTest.cs +1 -1
- data/tracks/csharp/exercises/grep/Example.cs +1 -1
- data/tracks/csharp/exercises/grep/Grep.cs +1 -1
- data/tracks/csharp/exercises/grep/GrepTest.cs +268 -237
- data/tracks/csharp/exercises/hamming/HammingTest.cs +1 -1
- data/tracks/csharp/exercises/hello-world/HelloWorldTest.cs +1 -1
- data/tracks/csharp/exercises/house/Example.cs +7 -2
- data/tracks/csharp/exercises/house/House.cs +5 -0
- data/tracks/csharp/exercises/house/HouseTest.cs +40 -223
- data/tracks/csharp/exercises/isbn-verifier/IsbnVerifierTest.cs +14 -2
- data/tracks/csharp/exercises/isogram/IsogramTest.cs +1 -1
- data/tracks/csharp/exercises/kindergarten-garden/KindergartenGardenTest.cs +1 -1
- data/tracks/csharp/exercises/largest-series-product/LargestSeriesProductTest.cs +1 -1
- data/tracks/csharp/exercises/leap/LeapTest.cs +1 -1
- data/tracks/csharp/exercises/luhn/LuhnTest.cs +1 -1
- data/tracks/csharp/exercises/markdown/MarkdownTest.cs +34 -27
- data/tracks/csharp/exercises/minesweeper/MinesweeperTest.cs +29 -34
- data/tracks/csharp/exercises/nth-prime/NthPrimeTest.cs +1 -1
- data/tracks/csharp/exercises/nucleotide-count/NucleotideCountTest.cs +1 -1
- data/tracks/csharp/exercises/ocr-numbers/OcrNumbersTest.cs +35 -35
- data/tracks/csharp/exercises/pangram/PangramTest.cs +1 -1
- data/tracks/csharp/exercises/pascals-triangle/PascalsTriangleTest.cs +1 -1
- data/tracks/csharp/exercises/perfect-numbers/PerfectNumbersTest.cs +1 -1
- data/tracks/csharp/exercises/phone-number/PhoneNumberTest.cs +17 -3
- data/tracks/csharp/exercises/pig-latin/PigLatinTest.cs +1 -1
- data/tracks/csharp/exercises/poker/PokerTest.cs +1 -1
- data/tracks/csharp/exercises/prime-factors/PrimeFactorsTest.cs +1 -1
- data/tracks/csharp/exercises/protein-translation/Example.cs +4 -4
- data/tracks/csharp/exercises/protein-translation/ProteinTranslation.cs +1 -1
- data/tracks/csharp/exercises/protein-translation/ProteinTranslationTest.cs +104 -45
- data/tracks/csharp/exercises/proverb/ProverbTest.cs +38 -6
- data/tracks/csharp/exercises/queen-attack/QueenAttackTest.cs +1 -1
- data/tracks/csharp/exercises/rail-fence-cipher/RailFenceCipherTest.cs +1 -1
- data/tracks/csharp/exercises/raindrops/RaindropsTest.cs +1 -1
- data/tracks/csharp/exercises/rectangles/RectanglesTest.cs +63 -21
- data/tracks/csharp/exercises/reverse-string/ReverseStringTest.cs +1 -1
- data/tracks/csharp/exercises/rna-transcription/RnaTranscriptionTest.cs +1 -1
- data/tracks/csharp/exercises/roman-numerals/RomanNumeralsTest.cs +7 -1
- data/tracks/csharp/exercises/rotational-cipher/RotationalCipherTest.cs +1 -1
- data/tracks/csharp/exercises/run-length-encoding/RunLengthEncodingTest.cs +1 -1
- data/tracks/csharp/exercises/saddle-points/SaddlePointsTest.cs +11 -11
- data/tracks/csharp/exercises/say/SayTest.cs +1 -1
- data/tracks/csharp/exercises/scale-generator/Example.cs +5 -0
- data/tracks/csharp/exercises/scale-generator/ScaleGenerator.cs +5 -0
- data/tracks/csharp/exercises/scale-generator/ScaleGeneratorTest.cs +56 -47
- data/tracks/csharp/exercises/scrabble-score/ScrabbleScoreTest.cs +1 -1
- data/tracks/csharp/exercises/secret-handshake/SecretHandshakeTest.cs +1 -1
- data/tracks/csharp/exercises/sieve/SieveTest.cs +1 -1
- data/tracks/csharp/exercises/space-age/SpaceAgeTest.cs +1 -1
- data/tracks/csharp/exercises/spiral-matrix/SpiralMatrixTest.cs +28 -34
- data/tracks/csharp/exercises/sum-of-multiples/SumOfMultiplesTest.cs +1 -1
- data/tracks/csharp/exercises/tournament/Example.cs +15 -7
- data/tracks/csharp/exercises/tournament/TournamentTest.cs +97 -99
- data/tracks/csharp/exercises/transpose/TransposeTest.cs +50 -96
- data/tracks/csharp/exercises/triangle/TriangleTest.cs +1 -1
- data/tracks/csharp/exercises/twelve-days/TwelveDays.cs +1 -1
- data/tracks/csharp/exercises/two-bucket/TwoBucketTest.cs +1 -1
- data/tracks/csharp/exercises/two-fer/TwoFerTest.cs +1 -1
- data/tracks/csharp/exercises/variable-length-quantity/Example.cs +3 -3
- data/tracks/csharp/exercises/variable-length-quantity/VariableLengthQuantity.cs +2 -2
- data/tracks/csharp/exercises/variable-length-quantity/VariableLengthQuantityTest.cs +165 -40
- data/tracks/csharp/exercises/word-count/Example.cs +1 -1
- data/tracks/csharp/exercises/word-count/WordCount.cs +1 -1
- data/tracks/csharp/exercises/word-count/WordCountTest.cs +12 -12
- data/tracks/csharp/exercises/wordy/WordyTest.cs +1 -1
- data/tracks/csharp/exercises/yacht/Example.cs +2 -5
- data/tracks/csharp/exercises/yacht/YachtTest.cs +7 -1
- data/tracks/csharp/exercises/zebra-puzzle/Example.cs +4 -4
- data/tracks/csharp/exercises/zebra-puzzle/ZebraPuzzle.cs +2 -2
- data/tracks/csharp/exercises/zebra-puzzle/ZebraPuzzleTest.cs +7 -5
- data/tracks/csharp/generators/Exercises/AllYourBase.cs +1 -0
- data/tracks/csharp/generators/Exercises/Alphametics.cs +5 -2
- data/tracks/csharp/generators/Exercises/BeerSong.cs +3 -0
- data/tracks/csharp/generators/Exercises/BinarySearch.cs +1 -0
- data/tracks/csharp/generators/Exercises/BookStore.cs +2 -0
- data/tracks/csharp/generators/Exercises/Bowling.cs +20 -15
- data/tracks/csharp/generators/Exercises/BracketPush.cs +1 -1
- data/tracks/csharp/generators/Exercises/Change.cs +20 -0
- data/tracks/csharp/generators/Exercises/CircularBuffer.cs +74 -0
- data/tracks/csharp/generators/Exercises/Clock.cs +7 -8
- data/tracks/csharp/generators/Exercises/ComplexNumbers.cs +9 -16
- data/tracks/csharp/generators/Exercises/Connect.cs +6 -6
- data/tracks/csharp/generators/Exercises/CustomSet.cs +56 -0
- data/tracks/csharp/generators/Exercises/Dominoes.cs +2 -2
- data/tracks/csharp/generators/Exercises/Etl.cs +7 -35
- data/tracks/csharp/generators/Exercises/FlattenArray.cs +9 -13
- data/tracks/csharp/generators/Exercises/FoodChain.cs +5 -0
- data/tracks/csharp/generators/Exercises/Forth.cs +25 -0
- data/tracks/csharp/generators/Exercises/Gigasecond.cs +4 -4
- data/tracks/csharp/generators/Exercises/Grains.cs +1 -1
- data/tracks/csharp/generators/Exercises/Grep.cs +106 -0
- data/tracks/csharp/generators/Exercises/Hamming.cs +1 -1
- data/tracks/csharp/generators/Exercises/House.cs +5 -0
- data/tracks/csharp/generators/Exercises/KindergartenGarden.cs +3 -3
- data/tracks/csharp/generators/Exercises/Markdown.cs +25 -0
- data/tracks/csharp/generators/Exercises/Meetup.cs +6 -6
- data/tracks/csharp/generators/Exercises/Minesweeper.cs +14 -4
- data/tracks/csharp/generators/Exercises/OcrNumbers.cs +12 -3
- data/tracks/csharp/generators/Exercises/PascalsTriangle.cs +0 -7
- data/tracks/csharp/generators/Exercises/ProteinTranslation.cs +8 -0
- data/tracks/csharp/generators/Exercises/Proverb.cs +7 -5
- data/tracks/csharp/generators/Exercises/QueenAttack.cs +3 -3
- data/tracks/csharp/generators/Exercises/Rectangles.cs +17 -0
- data/tracks/csharp/generators/Exercises/RobotSimulator.cs +6 -6
- data/tracks/csharp/generators/Exercises/SaddlePoints.cs +2 -2
- data/tracks/csharp/generators/Exercises/Say.cs +1 -1
- data/tracks/csharp/generators/Exercises/ScaleGenerator.cs +15 -0
- data/tracks/csharp/generators/Exercises/SpiralMatrix.cs +45 -0
- data/tracks/csharp/generators/Exercises/Sublist.cs +4 -5
- data/tracks/csharp/generators/Exercises/SumOfMultiples.cs +10 -1
- data/tracks/csharp/generators/Exercises/Tournament.cs +11 -19
- data/tracks/csharp/generators/Exercises/Transpose.cs +2 -2
- data/tracks/csharp/generators/Exercises/Triangle.cs +1 -3
- data/tracks/csharp/generators/Exercises/TwelveDays.cs +3 -4
- data/tracks/csharp/generators/Exercises/TwoBucket.cs +5 -5
- data/tracks/csharp/generators/Exercises/TwoFer.cs +11 -2
- data/tracks/csharp/generators/Exercises/VariableLengthQuantity.cs +44 -0
- data/tracks/csharp/generators/Exercises/Yacht.cs +11 -10
- data/tracks/csharp/generators/Exercises/ZebraPuzzle.cs +19 -0
- data/tracks/csharp/generators/GeneratorExercise.cs +6 -6
- data/tracks/csharp/generators/Input/CanonicalData.cs +6 -9
- data/tracks/csharp/generators/Input/CanonicalDataCase.cs +13 -46
- data/tracks/csharp/generators/Input/CanonicalDataCaseParser.cs +170 -0
- data/tracks/csharp/generators/Input/CanonicalDataFile.cs +1 -2
- data/tracks/csharp/generators/Input/CanonicalDataParser.cs +16 -12
- data/tracks/csharp/generators/Input/ConfigFile.cs +0 -5
- data/tracks/csharp/generators/Input/ConvertHelper.cs +20 -0
- data/tracks/csharp/generators/Output/Templates/_TestClassDisposable.liquid +14 -0
- data/tracks/csharp/generators/Output/TestMethodBodyData.cs +11 -14
- data/tracks/csharp/generators/Output/ValueFormatter.cs +20 -7
- data/tracks/delphi/config.json +22 -0
- data/tracks/delphi/exercises/grade-school/GradeSchool.dpr +60 -0
- data/tracks/delphi/exercises/grade-school/README.md +62 -0
- data/tracks/delphi/exercises/grade-school/uGradeSchoolExample.pas +134 -0
- data/tracks/delphi/exercises/grade-school/uGradeSchoolTest.pas +150 -0
- data/tracks/delphi/exercises/hamming/README.md +4 -3
- data/tracks/delphi/exercises/proverb/Proverb.dpr +60 -0
- data/tracks/delphi/exercises/proverb/README.md +44 -0
- data/tracks/delphi/exercises/proverb/uProverbExample.pas +60 -0
- data/tracks/delphi/exercises/proverb/uProverbTests.pas +124 -0
- data/tracks/go/exercises/bracket-push/README.md +3 -2
- data/tracks/go/exercises/bracket-push/cases_test.go +7 -2
- data/tracks/go/exercises/isbn-verifier/cases_test.go +4 -3
- data/tracks/go/exercises/yacht/cases_test.go +8 -2
- data/tracks/java/exercises/armstrong-numbers/README.md +1 -1
- data/tracks/java/exercises/binary-search-tree/src/test/java/BinarySearchTreeTest.java +22 -22
- data/tracks/java/exercises/bracket-push/README.md +3 -2
- data/tracks/java/exercises/crypto-square/README.md +23 -19
- data/tracks/java/exercises/grade-school/src/test/java/SchoolTest.java +1 -1
- data/tracks/java/exercises/poker/.meta/{version.txt → version} +0 -0
- data/tracks/java/exercises/queen-attack/src/test/java/QueenAttackCalculatorTest.java +7 -7
- data/tracks/java/exercises/rail-fence-cipher/.meta/version +1 -0
- data/tracks/java/exercises/robot-simulator/src/test/java/RobotTest.java +45 -45
- data/tracks/nim/config.json +24 -0
- data/tracks/nim/exercises/armstrong-numbers/README.md +18 -0
- data/tracks/nim/exercises/armstrong-numbers/armstrong_number_test.nim +29 -0
- data/tracks/nim/exercises/armstrong-numbers/example.nim +11 -0
- data/tracks/nim/exercises/leap/leap_test.nim +12 -10
- data/tracks/nim/exercises/two-fer/README.md +19 -0
- data/tracks/nim/exercises/two-fer/example.nim +3 -0
- data/tracks/nim/exercises/two-fer/two_fer_test.nim +16 -0
- data/tracks/python/.travis.yml +0 -1
- data/tracks/python/README.md +1 -1
- data/tracks/python/config/exercise_readme.go.tmpl +1 -1
- data/tracks/python/docs/INSTALLATION.md +1 -1
- data/tracks/python/exercises/accumulate/README.md +1 -1
- data/tracks/python/exercises/acronym/README.md +1 -1
- data/tracks/python/exercises/all-your-base/README.md +1 -1
- data/tracks/python/exercises/allergies/README.md +1 -1
- data/tracks/python/exercises/alphametics/README.md +1 -1
- data/tracks/python/exercises/anagram/README.md +1 -1
- data/tracks/python/exercises/armstrong-numbers/README.md +2 -2
- data/tracks/python/exercises/atbash-cipher/README.md +1 -1
- data/tracks/python/exercises/bank-account/README.md +1 -1
- data/tracks/python/exercises/beer-song/README.md +1 -1
- data/tracks/python/exercises/binary-search-tree/README.md +1 -1
- data/tracks/python/exercises/binary-search/README.md +1 -1
- data/tracks/python/exercises/binary/README.md +1 -1
- data/tracks/python/exercises/bob/README.md +1 -1
- data/tracks/python/exercises/book-store/README.md +1 -1
- data/tracks/python/exercises/bowling/README.md +1 -1
- data/tracks/python/exercises/bracket-push/README.md +4 -3
- data/tracks/python/exercises/change/README.md +1 -1
- data/tracks/python/exercises/circular-buffer/README.md +1 -1
- data/tracks/python/exercises/clock/README.md +1 -1
- data/tracks/python/exercises/collatz-conjecture/README.md +1 -1
- data/tracks/python/exercises/complex-numbers/README.md +1 -1
- data/tracks/python/exercises/connect/README.md +1 -1
- data/tracks/python/exercises/crypto-square/README.md +1 -1
- data/tracks/python/exercises/custom-set/README.md +1 -1
- data/tracks/python/exercises/diamond/README.md +1 -1
- data/tracks/python/exercises/difference-of-squares/README.md +1 -1
- data/tracks/python/exercises/diffie-hellman/README.md +1 -1
- data/tracks/python/exercises/dominoes/README.md +1 -1
- data/tracks/python/exercises/dot-dsl/README.md +1 -1
- data/tracks/python/exercises/error-handling/README.md +1 -1
- data/tracks/python/exercises/etl/README.md +1 -1
- data/tracks/python/exercises/flatten-array/README.md +1 -1
- data/tracks/python/exercises/food-chain/README.md +1 -1
- data/tracks/python/exercises/forth/README.md +1 -1
- data/tracks/python/exercises/gigasecond/README.md +1 -1
- data/tracks/python/exercises/go-counting/README.md +1 -1
- data/tracks/python/exercises/grade-school/README.md +1 -1
- data/tracks/python/exercises/grains/README.md +1 -1
- data/tracks/python/exercises/grep/README.md +1 -1
- data/tracks/python/exercises/hamming/README.md +1 -1
- data/tracks/python/exercises/hello-world/README.md +1 -1
- data/tracks/python/exercises/hexadecimal/README.md +1 -1
- data/tracks/python/exercises/house/README.md +1 -1
- data/tracks/python/exercises/isbn-verifier/README.md +1 -1
- data/tracks/python/exercises/isogram/README.md +1 -1
- data/tracks/python/exercises/kindergarten-garden/README.md +1 -1
- data/tracks/python/exercises/largest-series-product/README.md +1 -1
- data/tracks/python/exercises/leap/README.md +1 -1
- data/tracks/python/exercises/linked-list/README.md +1 -1
- data/tracks/python/exercises/list-ops/README.md +1 -1
- data/tracks/python/exercises/luhn/README.md +1 -1
- data/tracks/python/exercises/markdown/README.md +1 -1
- data/tracks/python/exercises/matrix/README.md +1 -1
- data/tracks/python/exercises/meetup/README.md +1 -1
- data/tracks/python/exercises/minesweeper/README.md +1 -1
- data/tracks/python/exercises/nth-prime/README.md +1 -1
- data/tracks/python/exercises/nucleotide-count/README.md +1 -1
- data/tracks/python/exercises/ocr-numbers/README.md +1 -1
- data/tracks/python/exercises/octal/README.md +1 -1
- data/tracks/python/exercises/palindrome-products/README.md +1 -1
- data/tracks/python/exercises/pangram/README.md +1 -1
- data/tracks/python/exercises/parallel-letter-frequency/README.md +1 -1
- data/tracks/python/exercises/pascals-triangle/README.md +1 -1
- data/tracks/python/exercises/perfect-numbers/README.md +1 -1
- data/tracks/python/exercises/phone-number/README.md +1 -1
- data/tracks/python/exercises/pig-latin/README.md +1 -1
- data/tracks/python/exercises/point-mutations/README.md +1 -1
- data/tracks/python/exercises/poker/README.md +1 -1
- data/tracks/python/exercises/pov/README.md +1 -1
- data/tracks/python/exercises/prime-factors/README.md +1 -1
- data/tracks/python/exercises/protein-translation/README.md +1 -1
- data/tracks/python/exercises/proverb/README.md +1 -1
- data/tracks/python/exercises/pythagorean-triplet/README.md +1 -1
- data/tracks/python/exercises/queen-attack/README.md +1 -1
- data/tracks/python/exercises/rail-fence-cipher/README.md +1 -1
- data/tracks/python/exercises/raindrops/README.md +1 -1
- data/tracks/python/exercises/rational-numbers/README.md +1 -1
- data/tracks/python/exercises/react/README.md +1 -1
- data/tracks/python/exercises/rectangles/README.md +1 -1
- data/tracks/python/exercises/reverse-string/README.md +1 -1
- data/tracks/python/exercises/rna-transcription/README.md +1 -1
- data/tracks/python/exercises/robot-name/README.md +1 -1
- data/tracks/python/exercises/robot-simulator/README.md +1 -1
- data/tracks/python/exercises/roman-numerals/README.md +1 -1
- data/tracks/python/exercises/rotational-cipher/README.md +1 -1
- data/tracks/python/exercises/run-length-encoding/README.md +1 -1
- data/tracks/python/exercises/saddle-points/README.md +1 -1
- data/tracks/python/exercises/say/README.md +1 -1
- data/tracks/python/exercises/scale-generator/README.md +1 -1
- data/tracks/python/exercises/scrabble-score/README.md +1 -1
- data/tracks/python/exercises/secret-handshake/README.md +1 -1
- data/tracks/python/exercises/series/README.md +1 -1
- data/tracks/python/exercises/sgf-parsing/README.md +1 -1
- data/tracks/python/exercises/sieve/README.md +1 -1
- data/tracks/python/exercises/simple-cipher/README.md +1 -1
- data/tracks/python/exercises/simple-linked-list/README.md +1 -1
- data/tracks/python/exercises/space-age/README.md +1 -1
- data/tracks/python/exercises/spiral-matrix/README.md +1 -1
- data/tracks/python/exercises/strain/README.md +1 -1
- data/tracks/python/exercises/sublist/README.md +1 -1
- data/tracks/python/exercises/sum-of-multiples/README.md +1 -1
- data/tracks/python/exercises/tournament/README.md +1 -1
- data/tracks/python/exercises/transpose/README.md +1 -1
- data/tracks/python/exercises/tree-building/README.md +1 -1
- data/tracks/python/exercises/triangle/README.md +1 -1
- data/tracks/python/exercises/trinary/README.md +1 -1
- data/tracks/python/exercises/twelve-days/README.md +1 -1
- data/tracks/python/exercises/two-bucket/README.md +1 -1
- data/tracks/python/exercises/two-fer/README.md +1 -1
- data/tracks/python/exercises/variable-length-quantity/README.md +1 -1
- data/tracks/python/exercises/word-count/README.md +1 -1
- data/tracks/python/exercises/word-search/README.md +1 -1
- data/tracks/python/exercises/wordy/README.md +1 -1
- data/tracks/python/exercises/yacht/README.md +1 -1
- data/tracks/python/exercises/zebra-puzzle/README.md +1 -1
- data/tracks/python/exercises/zipper/README.md +1 -1
- data/tracks/python/requirements-travis.txt +1 -1
- data/tracks/swift/exercises/scale-generator/Tests/ScaleGeneratorTests/ScaleGeneratorTests.swift +1 -1
- metadata +32 -8
- data/tracks/csharp/generators/Input/CanonicalDataCaseJson.cs +0 -73
- data/tracks/csharp/generators/Input/CanonicalDataCaseJsonConverter.cs +0 -49
- data/tracks/csharp/generators/Input/CanonicalDataCasesJson.cs +0 -58
- data/tracks/csharp/generators/Input/CanonicalDataCasesJsonConverter.cs +0 -17
- 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
|
22
|
-
public
|
23
|
-
public
|
24
|
-
public
|
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 =>
|
33
|
-
private object
|
34
|
-
private object
|
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(
|
37
|
-
private IEnumerable<string> ExpectedVariableDeclaration => ValueFormatter.FormatVariable(
|
38
|
-
private IEnumerable<string> ConstructorVariablesDeclaration => ValueFormatter.FormatVariables(
|
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
|
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(
|
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
|
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) >
|
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) =>
|
data/tracks/delphi/config.json
CHANGED
@@ -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.
|