trackler 2.2.1.107 → 2.2.1.108
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/pig-latin/description.md +4 -4
- data/tracks/c/config.json +42 -0
- data/tracks/c/exercises/bracket-push/README.md +3 -0
- data/tracks/c/exercises/bracket-push/makefile +25 -0
- data/tracks/c/exercises/bracket-push/src/example.c +52 -0
- data/tracks/c/exercises/bracket-push/src/example.h +7 -0
- data/tracks/c/exercises/bracket-push/test/test_bracket_push.c +132 -0
- data/tracks/c/exercises/bracket-push/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/bracket-push/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/bracket-push/test/vendor/unity_internals.h +701 -0
- data/tracks/c/exercises/etl/README.md +46 -0
- data/tracks/c/exercises/etl/makefile +25 -0
- data/tracks/c/exercises/etl/src/example.c +44 -0
- data/tracks/c/exercises/etl/src/example.h +18 -0
- data/tracks/c/exercises/etl/test/test_etl.c +120 -0
- data/tracks/c/exercises/etl/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/etl/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/etl/test/vendor/unity_internals.h +701 -0
- data/tracks/c/exercises/luhn/README.md +64 -0
- data/tracks/c/exercises/luhn/makefile +25 -0
- data/tracks/c/exercises/luhn/src/example.c +38 -0
- data/tracks/c/exercises/luhn/src/example.h +7 -0
- data/tracks/c/exercises/luhn/test/test_luhn.c +109 -0
- data/tracks/c/exercises/luhn/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/luhn/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/luhn/test/vendor/unity_internals.h +701 -0
- data/tracks/c/exercises/prime-factors/README.md +29 -0
- data/tracks/c/exercises/prime-factors/makefile +25 -0
- data/tracks/c/exercises/prime-factors/src/example.c +28 -0
- data/tracks/c/exercises/prime-factors/src/example.h +11 -0
- data/tracks/c/exercises/prime-factors/test/test_prime_factors.c +96 -0
- data/tracks/c/exercises/prime-factors/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/prime-factors/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/prime-factors/test/vendor/unity_internals.h +701 -0
- data/tracks/clojure/exercises/hello-world/src/example.clj +2 -3
- data/tracks/clojure/exercises/hello-world/test/hello_world_test.clj +0 -6
- data/tracks/common-lisp/README.md +3 -8
- data/tracks/common-lisp/config/exercise_readme.go.tmpl +1 -1
- data/tracks/common-lisp/exercises/acronym/README.md +1 -1
- data/tracks/common-lisp/exercises/acronym/acronym-test.lisp +0 -5
- data/tracks/common-lisp/exercises/allergies/README.md +1 -1
- data/tracks/common-lisp/exercises/anagram/README.md +1 -1
- data/tracks/common-lisp/exercises/atbash-cipher/README.md +1 -1
- data/tracks/common-lisp/exercises/beer-song/README.md +1 -1
- data/tracks/common-lisp/exercises/binary/README.md +1 -1
- data/tracks/common-lisp/exercises/bob/README.md +1 -1
- data/tracks/common-lisp/exercises/collatz-conjecture/README.md +1 -1
- data/tracks/common-lisp/exercises/crypto-square/README.md +1 -1
- data/tracks/common-lisp/exercises/difference-of-squares/README.md +1 -1
- data/tracks/common-lisp/exercises/etl/README.md +1 -1
- data/tracks/common-lisp/exercises/gigasecond/README.md +1 -1
- data/tracks/common-lisp/exercises/grade-school/README.md +1 -1
- data/tracks/common-lisp/exercises/grains/README.md +1 -1
- data/tracks/common-lisp/exercises/hamming/README.md +1 -1
- data/tracks/common-lisp/exercises/hello-world/README.md +1 -1
- data/tracks/common-lisp/exercises/isogram/README.md +1 -1
- data/tracks/common-lisp/exercises/leap/README.md +1 -1
- data/tracks/common-lisp/exercises/meetup/README.md +1 -1
- data/tracks/common-lisp/exercises/nucleotide-count/README.md +1 -1
- data/tracks/common-lisp/exercises/pascals-triangle/README.md +1 -1
- data/tracks/common-lisp/exercises/perfect-numbers/README.md +1 -1
- data/tracks/common-lisp/exercises/phone-number/README.md +1 -1
- data/tracks/common-lisp/exercises/prime-factors/README.md +1 -1
- data/tracks/common-lisp/exercises/raindrops/README.md +1 -1
- data/tracks/common-lisp/exercises/rna-transcription/README.md +1 -1
- data/tracks/common-lisp/exercises/robot-name/README.md +1 -1
- data/tracks/common-lisp/exercises/roman-numerals/README.md +1 -1
- data/tracks/common-lisp/exercises/scrabble-score/README.md +1 -1
- data/tracks/common-lisp/exercises/sieve/README.md +1 -1
- data/tracks/common-lisp/exercises/space-age/README.md +1 -1
- data/tracks/common-lisp/exercises/strain/README.md +1 -1
- data/tracks/common-lisp/exercises/sublist/README.md +1 -1
- data/tracks/common-lisp/exercises/triangle/README.md +1 -1
- data/tracks/common-lisp/exercises/trinary/README.md +1 -1
- data/tracks/common-lisp/exercises/word-count/README.md +1 -1
- data/tracks/csharp/exercises/meetup/MeetupTest.cs +177 -177
- data/tracks/csharp/exercises/robot-simulator/Example.cs +27 -27
- data/tracks/csharp/exercises/robot-simulator/RobotSimulator.cs +3 -3
- data/tracks/csharp/exercises/robot-simulator/RobotSimulatorTest.cs +152 -31
- data/tracks/csharp/generators/Exercises/Meetup.cs +8 -9
- data/tracks/csharp/generators/Exercises/RobotSimulator.cs +116 -0
- data/tracks/delphi/exercises/allergies/uAllergyTests.pas +28 -0
- data/tracks/delphi/exercises/binary-search/uBinarySearchExample.pas +6 -0
- data/tracks/delphi/exercises/binary-search/uBinarySearchTest.pas +53 -37
- data/tracks/delphi/exercises/collatz-conjecture/uCollatzconjectureTest.pas +3 -0
- data/tracks/delphi/exercises/etl/uETLtests.pas +13 -10
- data/tracks/delphi/exercises/grains/uGrainsTests.pas +5 -2
- data/tracks/delphi/exercises/hamming/uHammingTests.pas +3 -0
- data/tracks/delphi/exercises/hello-world/uTestHelloWorld.pas +3 -0
- data/tracks/delphi/exercises/leap/uLeapTests.pas +3 -0
- data/tracks/delphi/exercises/minesweeper/uMineSweeperTest.pas +3 -0
- data/tracks/delphi/exercises/nucleotide-count/uNucleotideCountTest.pas +5 -17
- data/tracks/delphi/exercises/perfect-numbers/uPerfectNumbersExample.pas +6 -0
- data/tracks/delphi/exercises/perfect-numbers/uPerfectNumbersTest.pas +77 -26
- data/tracks/delphi/exercises/pig-latin/README.md +4 -4
- data/tracks/delphi/exercises/pig-latin/uTestPigLatin.pas +12 -9
- data/tracks/delphi/exercises/poker/uPokerExample.pas +81 -26
- data/tracks/delphi/exercises/poker/uPokerTest.pas +343 -121
- data/tracks/delphi/exercises/raindrops/uRaindropsTest.pas +3 -0
- data/tracks/delphi/exercises/saddle-points/uSaddlePointsExample.pas +4 -3
- data/tracks/delphi/exercises/saddle-points/uSaddlePointsTests.pas +25 -47
- data/tracks/delphi/exercises/triangle/uTestTriangle.pas +4 -2
- data/tracks/delphi/exercises/two-fer/utwoferTest.pas +3 -0
- data/tracks/delphi/exercises/wordy/uWordyTests.pas +3 -0
- data/tracks/ecmascript/.travis.yml +2 -1
- data/tracks/ecmascript/config.json +14 -0
- data/tracks/ecmascript/exercises/accumulate/package.json +1 -2
- data/tracks/ecmascript/exercises/acronym/package.json +1 -2
- data/tracks/ecmascript/exercises/all-your-base/package.json +1 -2
- data/tracks/ecmascript/exercises/allergies/package.json +1 -2
- data/tracks/ecmascript/exercises/alphametics/package.json +1 -2
- data/tracks/ecmascript/exercises/anagram/package.json +1 -2
- data/tracks/ecmascript/exercises/atbash-cipher/package.json +1 -2
- data/tracks/ecmascript/exercises/beer-song/package.json +1 -2
- data/tracks/ecmascript/exercises/binary-search-tree/package.json +1 -2
- data/tracks/ecmascript/exercises/binary-search/package.json +1 -2
- data/tracks/ecmascript/exercises/binary/package.json +1 -2
- data/tracks/ecmascript/exercises/bob/README.md +2 -0
- data/tracks/ecmascript/exercises/bob/bob.spec.js +5 -5
- data/tracks/ecmascript/exercises/bob/example.js +7 -2
- data/tracks/ecmascript/exercises/bob/package.json +1 -2
- data/tracks/ecmascript/exercises/bowling/package.json +1 -2
- data/tracks/ecmascript/exercises/bracket-push/package.json +1 -2
- data/tracks/ecmascript/exercises/change/package.json +1 -2
- data/tracks/ecmascript/exercises/circular-buffer/package.json +1 -2
- data/tracks/ecmascript/exercises/clock/package.json +1 -2
- data/tracks/ecmascript/exercises/collatz-conjecture/package.json +1 -2
- data/tracks/ecmascript/exercises/complex-numbers/package.json +1 -2
- data/tracks/ecmascript/exercises/connect/package.json +1 -2
- data/tracks/ecmascript/exercises/crypto-square/package.json +1 -2
- data/tracks/ecmascript/exercises/custom-set/package.json +1 -2
- data/tracks/ecmascript/exercises/diamond/package.json +1 -2
- data/tracks/ecmascript/exercises/difference-of-squares/package.json +1 -2
- data/tracks/ecmascript/exercises/diffie-hellman/package.json +1 -2
- data/tracks/ecmascript/exercises/etl/package.json +1 -2
- data/tracks/ecmascript/exercises/flatten-array/package.json +1 -2
- data/tracks/ecmascript/exercises/food-chain/package.json +1 -2
- data/tracks/ecmascript/exercises/gigasecond/package.json +1 -2
- data/tracks/ecmascript/exercises/grade-school/package.json +1 -2
- data/tracks/ecmascript/exercises/grains/package.json +1 -2
- data/tracks/ecmascript/exercises/hamming/package.json +1 -2
- data/tracks/ecmascript/exercises/hello-world/package.json +1 -2
- data/tracks/ecmascript/exercises/hexadecimal/package.json +1 -2
- data/tracks/ecmascript/exercises/house/package.json +1 -2
- data/tracks/ecmascript/exercises/isbn-verifier/package.json +1 -2
- data/tracks/ecmascript/exercises/isogram/package.json +1 -2
- data/tracks/ecmascript/exercises/kindergarten-garden/package.json +1 -2
- data/tracks/ecmascript/exercises/largest-series-product/package.json +1 -2
- data/tracks/ecmascript/exercises/leap/package.json +1 -2
- data/tracks/ecmascript/exercises/linked-list/package.json +1 -2
- data/tracks/ecmascript/exercises/list-ops/package.json +1 -2
- data/tracks/ecmascript/exercises/luhn/package.json +1 -2
- data/tracks/ecmascript/exercises/matrix/package.json +1 -2
- data/tracks/ecmascript/exercises/meetup/package.json +1 -2
- data/tracks/ecmascript/exercises/minesweeper/package.json +1 -2
- data/tracks/ecmascript/exercises/nth-prime/package.json +1 -2
- data/tracks/ecmascript/exercises/nucleotide-count/README.md +60 -0
- data/tracks/ecmascript/exercises/nucleotide-count/example.js +13 -0
- data/tracks/ecmascript/exercises/nucleotide-count/nucleotide-count.spec.js +23 -0
- data/tracks/ecmascript/exercises/nucleotide-count/package.json +70 -0
- data/tracks/ecmascript/exercises/ocr-numbers/package.json +1 -2
- data/tracks/ecmascript/exercises/octal/package.json +1 -2
- data/tracks/ecmascript/exercises/palindrome-products/package.json +1 -2
- data/tracks/ecmascript/exercises/pangram/package.json +1 -2
- data/tracks/ecmascript/exercises/pascals-triangle/package.json +1 -2
- data/tracks/ecmascript/exercises/perfect-numbers/package.json +1 -2
- data/tracks/ecmascript/exercises/phone-number/package.json +1 -2
- data/tracks/ecmascript/exercises/pig-latin/package.json +1 -2
- data/tracks/ecmascript/exercises/prime-factors/package.json +1 -2
- data/tracks/ecmascript/exercises/protein-translation/package.json +1 -2
- data/tracks/ecmascript/exercises/proverb/package.json +1 -2
- data/tracks/ecmascript/exercises/pythagorean-triplet/package.json +1 -2
- data/tracks/ecmascript/exercises/queen-attack/package.json +1 -2
- data/tracks/ecmascript/exercises/raindrops/package.json +1 -2
- data/tracks/ecmascript/exercises/react/package.json +1 -2
- data/tracks/ecmascript/exercises/rectangles/package.json +1 -2
- data/tracks/ecmascript/exercises/rna-transcription/package.json +1 -2
- data/tracks/ecmascript/exercises/robot-name/package.json +1 -2
- data/tracks/ecmascript/exercises/robot-simulator/package.json +1 -2
- data/tracks/ecmascript/exercises/roman-numerals/package.json +1 -2
- data/tracks/ecmascript/exercises/rotational-cipher/package.json +1 -2
- data/tracks/ecmascript/exercises/run-length-encoding/package.json +1 -2
- data/tracks/ecmascript/exercises/saddle-points/package.json +1 -2
- data/tracks/ecmascript/exercises/say/package.json +1 -2
- data/tracks/ecmascript/exercises/scrabble-score/package.json +1 -2
- data/tracks/ecmascript/exercises/secret-handshake/package.json +1 -2
- data/tracks/ecmascript/exercises/series/package.json +1 -2
- data/tracks/ecmascript/exercises/sieve/package.json +1 -2
- data/tracks/ecmascript/exercises/simple-cipher/package.json +1 -2
- data/tracks/ecmascript/exercises/simple-linked-list/package.json +1 -2
- data/tracks/ecmascript/exercises/space-age/package.json +1 -2
- data/tracks/ecmascript/exercises/spiral-matrix/package.json +1 -2
- data/tracks/ecmascript/exercises/strain/package.json +1 -2
- data/tracks/ecmascript/exercises/sublist/package.json +1 -2
- data/tracks/ecmascript/exercises/sum-of-multiples/package.json +1 -2
- data/tracks/ecmascript/exercises/transpose/package.json +1 -2
- data/tracks/ecmascript/exercises/triangle/package.json +1 -2
- data/tracks/ecmascript/exercises/trinary/package.json +1 -2
- data/tracks/ecmascript/exercises/twelve-days/package.json +1 -2
- data/tracks/ecmascript/exercises/two-bucket/package.json +1 -2
- data/tracks/ecmascript/exercises/two-fer/package.json +1 -2
- data/tracks/ecmascript/exercises/word-count/package.json +1 -2
- data/tracks/ecmascript/exercises/word-search/package.json +1 -2
- data/tracks/ecmascript/exercises/wordy/package.json +1 -2
- data/tracks/ecmascript/package.json +1 -2
- data/tracks/elm/config.json +13 -1
- data/tracks/elm/exercises/binary-search/BinarySearch.elm +9 -0
- data/tracks/elm/exercises/binary-search/BinarySearch.example.elm +36 -0
- data/tracks/elm/exercises/binary-search/README.md +71 -0
- data/tracks/elm/exercises/binary-search/elm-package.json +15 -0
- data/tracks/elm/exercises/binary-search/tests/Tests.elm +66 -0
- data/tracks/elm/exercises/binary-search/tests/elm-package.json +17 -0
- data/tracks/elm/exercises/hamming/Hamming.example.elm +3 -3
- data/tracks/elm/exercises/hamming/tests/Tests.elm +14 -14
- data/tracks/go/exercises/word-search/.meta/gen.go +9 -7
- data/tracks/go/exercises/word-search/cases_test.go +2 -2
- data/tracks/groovy/config.json +12 -0
- data/tracks/groovy/exercises/bank-account/BankAccount.groovy +30 -0
- data/tracks/groovy/exercises/bank-account/BankAccountSpec.groovy +200 -0
- data/tracks/groovy/exercises/bank-account/Example.groovy +47 -0
- data/tracks/groovy/exercises/bank-account/README.md +75 -0
- data/tracks/groovy/exercises/phone-number/Example.groovy +10 -14
- data/tracks/groovy/exercises/phone-number/PhoneNumber.groovy +2 -14
- data/tracks/groovy/exercises/phone-number/PhoneNumberSpec.groovy +39 -26
- data/tracks/groovy/exercises/phone-number/README.md +1 -1
- data/tracks/java/config.json +13 -0
- data/tracks/java/exercises/forth/README.md +10 -0
- data/tracks/java/exercises/rna-transcription/.meta/version +1 -1
- data/tracks/java/exercises/settings.gradle +1 -0
- data/tracks/java/exercises/sieve/.meta/version +1 -1
- data/tracks/java/exercises/spiral-matrix/.meta/version +1 -1
- data/tracks/java/exercises/triangle/.meta/version +1 -1
- data/tracks/java/exercises/two-bucket/README.md +1 -1
- data/tracks/java/exercises/zipper/.meta/src/reference/java/Zipper.java +199 -0
- data/tracks/java/exercises/zipper/.meta/version +1 -0
- data/tracks/java/exercises/zipper/README.md +42 -0
- data/tracks/java/exercises/zipper/build.gradle +18 -0
- data/tracks/java/exercises/zipper/src/main/java/.keep +0 -0
- data/tracks/java/exercises/zipper/src/test/java/ZipperTest.java +204 -0
- data/tracks/javascript/package.json +10 -0
- data/tracks/ocaml/.travis-ci.sh +1 -1
- data/tracks/ocaml/.travis.yml +1 -1
- data/tracks/ocaml/README.md +1 -1
- data/tracks/ocaml/config/exercise_readme.go.tmpl +2 -0
- data/tracks/python/config.json +13 -0
- data/tracks/python/exercises/all-your-base/all_your_base.py +1 -1
- data/tracks/python/exercises/all-your-base/all_your_base_test.py +8 -8
- data/tracks/python/exercises/alphametics/alphametics_test.py +49 -9
- data/tracks/python/exercises/binary-search-tree/binary_search_tree.py +11 -5
- data/tracks/python/exercises/binary-search-tree/binary_search_tree_test.py +89 -48
- data/tracks/python/exercises/binary-search-tree/example.py +42 -52
- data/tracks/python/exercises/binary-search/binary_search_test.py +1 -1
- data/tracks/python/exercises/book-store/book_store_test.py +18 -39
- data/tracks/python/exercises/book-store/example.py +1 -1
- data/tracks/python/exercises/bowling/bowling.py +0 -2
- data/tracks/python/exercises/bowling/bowling_test.py +49 -13
- data/tracks/python/exercises/bowling/example.py +85 -135
- data/tracks/python/exercises/bracket-push/bracket_push.py +1 -1
- data/tracks/python/exercises/bracket-push/bracket_push_test.py +16 -16
- data/tracks/python/exercises/bracket-push/example.py +2 -2
- data/tracks/python/exercises/change/change_test.py +17 -4
- data/tracks/python/exercises/change/example.py +2 -2
- data/tracks/python/exercises/circular-buffer/circular_buffer.py +12 -0
- data/tracks/python/exercises/circular-buffer/circular_buffer_test.py +4 -11
- data/tracks/python/exercises/clock/clock.py +10 -1
- data/tracks/python/exercises/clock/clock_test.py +9 -9
- data/tracks/python/exercises/clock/example.py +4 -1
- data/tracks/python/exercises/collatz-conjecture/collatz_conjecture_test.py +15 -5
- data/tracks/python/exercises/collatz-conjecture/example.py +1 -1
- data/tracks/python/exercises/complex-numbers/complex_numbers_test.py +37 -26
- data/tracks/python/exercises/custom-set/custom_set_test.py +1 -1
- data/tracks/python/exercises/diamond/diamond_test.py +1 -1
- data/tracks/python/exercises/dominoes/dominoes_test.py +1 -1
- data/tracks/python/exercises/forth/forth_test.py +1 -1
- data/tracks/python/exercises/house/example.py +11 -3
- data/tracks/python/exercises/house/house.py +1 -5
- data/tracks/python/exercises/house/house_test.py +269 -116
- data/tracks/python/exercises/list-ops/list_ops_test.py +1 -1
- data/tracks/python/exercises/luhn/luhn.py +3 -0
- data/tracks/python/exercises/luhn/luhn_test.py +1 -1
- data/tracks/python/exercises/markdown/markdown_test.py +2 -3
- data/tracks/python/exercises/minesweeper/minesweeper_test.py +1 -1
- data/tracks/python/exercises/nth-prime/nth_prime_test.py +1 -1
- data/tracks/python/exercises/ocr-numbers/ocr_numbers_test.py +1 -1
- data/tracks/python/exercises/palindrome-products/palindrome_products_test.py +14 -6
- data/tracks/python/exercises/perfect-numbers/perfect_numbers_test.py +1 -24
- data/tracks/python/exercises/phone-number/phone_number_test.py +11 -3
- data/tracks/python/exercises/poker/example.py +4 -3
- data/tracks/python/exercises/poker/poker.py +1 -1
- data/tracks/python/exercises/poker/poker_test.py +196 -119
- data/tracks/python/exercises/pov/example.py +3 -3
- data/tracks/python/exercises/pov/pov.py +2 -2
- data/tracks/python/exercises/pov/pov_test.py +19 -18
- data/tracks/python/exercises/protein-translation/protein_translation_test.py +14 -24
- data/tracks/python/exercises/rail-fence-cipher/rail_fence_cipher_test.py +1 -1
- data/tracks/python/exercises/rational-numbers/README.md +59 -0
- data/tracks/python/exercises/rational-numbers/example.py +58 -0
- data/tracks/python/exercises/rational-numbers/rational_numbers.py +34 -0
- data/tracks/python/exercises/rational-numbers/rational_numbers_test.py +132 -0
- data/tracks/python/exercises/rectangles/rectangles_test.py +1 -1
- data/tracks/python/exercises/roman-numerals/roman_numerals_test.py +2 -1
- data/tracks/python/exercises/run-length-encoding/run_length_encoding_test.py +2 -2
- data/tracks/python/exercises/saddle-points/saddle_points_test.py +18 -18
- data/tracks/python/exercises/scale-generator/example.py +4 -5
- data/tracks/python/exercises/scale-generator/scale_generator.py +2 -2
- data/tracks/python/exercises/scale-generator/scale_generator_test.py +38 -73
- data/tracks/python/exercises/secret-handshake/secret_handshake_test.py +1 -1
- data/tracks/python/exercises/tournament/tournament_test.py +1 -1
- data/tracks/python/exercises/twelve-days/example.py +3 -8
- data/tracks/python/exercises/twelve-days/twelve_days.py +1 -9
- data/tracks/python/exercises/twelve-days/twelve_days_test.py +51 -50
- data/tracks/python/exercises/two-bucket/example.py +3 -4
- data/tracks/python/exercises/two-bucket/two_bucket.py +1 -1
- data/tracks/python/exercises/two-bucket/two_bucket_test.py +8 -13
- data/tracks/python/exercises/two-fer/two_fer_test.py +8 -9
- data/tracks/python/exercises/variable-length-quantity/variable_length_quantity_test.py +1 -1
- data/tracks/python/exercises/word-count/word_count_test.py +8 -14
- data/tracks/python/exercises/word-search/word_search.py +3 -15
- data/tracks/python/exercises/word-search/word_search_test.py +1 -1
- data/tracks/python/exercises/wordy/wordy_test.py +1 -1
- data/tracks/python/exercises/zebra-puzzle/example.py +11 -2
- data/tracks/python/exercises/zebra-puzzle/zebra_puzzle.py +5 -1
- data/tracks/python/exercises/zebra-puzzle/zebra_puzzle_test.py +8 -5
- data/tracks/python/exercises/zipper/zipper_test.py +24 -30
- data/tracks/scala/exercises/dominoes/src/test/scala/DominoesTest.scala +2 -2
- data/tracks/scala/exercises/flatten-array/src/test/scala/FlattenArrayTest.scala +1 -1
- data/tracks/scala/exercises/food-chain/example.scala +3 -3
- data/tracks/scala/exercises/food-chain/src/test/scala/FoodChainTest.scala +12 -12
- data/tracks/scala/exercises/forth/src/test/scala/ForthTest.scala +35 -10
- data/tracks/scala/exercises/gigasecond/src/test/scala/GigasecondTest.scala +2 -2
- data/tracks/scala/exercises/hamming/src/test/scala/HammingTest.scala +4 -4
- data/tracks/scala/exercises/hello-world/src/test/scala/HelloWorldTest.scala +2 -3
- data/tracks/scala/exercises/house/example.scala +4 -5
- data/tracks/scala/exercises/house/src/test/scala/HouseTest.scala +16 -17
- data/tracks/scala/exercises/isogram/src/test/scala/IsogramTest.scala +3 -3
- data/tracks/scala/exercises/kindergarten-garden/src/test/scala/GardenTest.scala +1 -29
- data/tracks/scala/exercises/largest-series-product/src/test/scala/SeriesTest.scala +20 -17
- data/tracks/scala/exercises/leap/src/test/scala/LeapTest.scala +3 -3
- data/tracks/scala/exercises/luhn/src/test/scala/LuhnTest.scala +3 -3
- data/tracks/scala/exercises/matrix/example.scala +5 -1
- data/tracks/scala/exercises/matrix/src/test/scala/MatrixTest.scala +48 -12
- data/tracks/scala/exercises/meetup/src/test/scala/MeetupTest.scala +2 -1
- data/tracks/scala/exercises/minesweeper/src/test/scala/MinesweeperTest.scala +9 -9
- data/tracks/scala/testgen/src/main/scala/DominoesTestGenerator.scala +6 -6
- data/tracks/scala/testgen/src/main/scala/FlattenArrayTestGenerator.scala +6 -6
- data/tracks/scala/testgen/src/main/scala/FoodChainTestGenerator.scala +10 -12
- data/tracks/scala/testgen/src/main/scala/ForthTestGenerator.scala +6 -6
- data/tracks/scala/testgen/src/main/scala/GigasecondTestGenerator.scala +6 -4
- data/tracks/scala/testgen/src/main/scala/HammingTestGenerator.scala +3 -3
- data/tracks/scala/testgen/src/main/scala/HouseTestGenerator.scala +10 -16
- data/tracks/scala/testgen/src/main/scala/IsogramTestGenerator.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/KindergartenGardenTestGenerator.scala +6 -5
- data/tracks/scala/testgen/src/main/scala/LeapTestGenerator.scala +3 -3
- data/tracks/scala/testgen/src/main/scala/LuhnTestGenerator.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/MatrixTestGenerator.scala +35 -0
- data/tracks/scala/testgen/src/main/scala/MeetupTestGenerator.scala +14 -11
- data/tracks/scala/testgen/src/main/scala/MinesweeperTestGenerator.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/SeriesTestGenerator.scala +3 -3
- data/tracks/typescript/config/exercise_readme.go.tmpl +25 -4
- data/tracks/typescript/exercises/acronym/README.md +7 -2
- data/tracks/typescript/exercises/atbash-cipher/README.md +2 -1
- data/tracks/typescript/exercises/beer-song/README.md +2 -2
- data/tracks/typescript/exercises/binary-search-tree/README.md +2 -0
- data/tracks/typescript/exercises/circular-buffer/README.md +16 -7
- data/tracks/typescript/exercises/clock/README.md +6 -0
- data/tracks/typescript/exercises/diamond/README.md +8 -7
- data/tracks/typescript/exercises/etl/README.md +3 -1
- data/tracks/typescript/exercises/food-chain/README.md +1 -1
- data/tracks/typescript/exercises/grade-school/README.md +0 -1
- data/tracks/typescript/exercises/hello-world/.meta/hints.md +378 -0
- data/tracks/typescript/exercises/hello-world/README.md +37 -11
- data/tracks/typescript/exercises/largest-series-product/README.md +1 -6
- data/tracks/typescript/exercises/leap/README.md +1 -1
- data/tracks/typescript/exercises/linked-list/README.md +20 -15
- data/tracks/typescript/exercises/nth-prime/README.md +7 -2
- data/tracks/typescript/exercises/ocr-numbers/README.md +7 -6
- data/tracks/typescript/exercises/pangram/README.md +1 -1
- data/tracks/typescript/exercises/pascals-triangle/README.md +1 -1
- data/tracks/typescript/exercises/phone-number/README.md +4 -3
- data/tracks/typescript/exercises/prime-factors/README.md +1 -12
- data/tracks/typescript/exercises/pythagorean-triplet/README.md +3 -7
- data/tracks/typescript/exercises/rna-transcription/README.md +2 -2
- data/tracks/typescript/exercises/robot-simulator/README.md +3 -1
- data/tracks/typescript/exercises/scrabble-score/README.md +3 -1
- data/tracks/typescript/exercises/series/README.md +0 -4
- data/tracks/typescript/exercises/space-age/README.md +1 -1
- data/tracks/typescript/exercises/strain/README.md +6 -0
- data/tracks/typescript/exercises/sum-of-multiples/README.md +4 -7
- data/tracks/typescript/exercises/two-bucket/README.md +15 -19
- data/tracks/typescript/exercises/word-count/README.md +1 -2
- data/tracks/typescript/exercises/wordy/README.md +0 -5
- metadata +61 -5
- data/tracks/common-lisp/exercises/bob/.meta/description.md +0 -10
- data/tracks/javascript/.eslintrc.json +0 -10
- data/tracks/typescript/docs/EXERCISE_README_INSERT.md +0 -24
@@ -1,8 +1,11 @@
|
|
1
1
|
unit uPerfectNumbers;
|
2
2
|
|
3
3
|
interface
|
4
|
+
uses System.SysUtils;
|
4
5
|
|
5
6
|
type
|
7
|
+
ENotNaturalNumber = class(Exception);
|
8
|
+
|
6
9
|
NumberType = (Perfect, Abundant, Deficient);
|
7
10
|
|
8
11
|
PerfectNumber = class
|
@@ -16,6 +19,9 @@ class function PerfectNumber.Classify(aNumber: Integer): NumberType;
|
|
16
19
|
var sumOfFactors: integer;
|
17
20
|
i: integer;
|
18
21
|
begin
|
22
|
+
if aNumber < 1 then
|
23
|
+
raise ENotNaturalNumber.Create('Classification is only possible for natural numbers.');
|
24
|
+
|
19
25
|
sumOfFactors := 0;
|
20
26
|
|
21
27
|
for i := 1 to aNumber - 1 do
|
@@ -4,94 +4,145 @@ interface
|
|
4
4
|
uses
|
5
5
|
DUnitX.TestFramework;
|
6
6
|
|
7
|
+
const
|
8
|
+
CanonicalVersion = '1.1.0';
|
9
|
+
|
7
10
|
type
|
8
11
|
|
9
12
|
[TestFixture]
|
10
|
-
PerfectNumbersTest = class(TObject)
|
13
|
+
PerfectNumbersTest = class(TObject)
|
11
14
|
public
|
12
15
|
[Test]
|
13
|
-
//
|
14
|
-
procedure
|
16
|
+
// [Ignore('Comment the "[Ignore]" statement to run the test')]
|
17
|
+
procedure Smallest_perfect_number_is_classified_correctly;
|
18
|
+
|
19
|
+
[Test]
|
20
|
+
[Ignore]
|
21
|
+
procedure Medium_perfect_number_is_classified_correctly;
|
22
|
+
|
23
|
+
[Test]
|
24
|
+
[Ignore]
|
25
|
+
procedure Large_perfect_number_is_classified_correctly;
|
26
|
+
|
27
|
+
[Test]
|
28
|
+
[Ignore]
|
29
|
+
procedure Smallest_abundant_number_is_classified_correctly;
|
15
30
|
|
16
31
|
[Test]
|
17
32
|
[Ignore]
|
18
|
-
procedure
|
33
|
+
procedure Medium_abundant_number_is_classified_correctly;
|
19
34
|
|
20
35
|
[Test]
|
21
36
|
[Ignore]
|
22
|
-
procedure
|
37
|
+
procedure Large_abundant_number_is_classified_correctly;
|
23
38
|
|
24
39
|
[Test]
|
25
40
|
[Ignore]
|
26
|
-
procedure
|
41
|
+
procedure Smallest_prime_deficient_number_is_classified_correctly;
|
27
42
|
|
28
43
|
[Test]
|
29
44
|
[Ignore]
|
30
|
-
procedure
|
45
|
+
procedure Smallest_non_prime_deficient_number_is_classified_correctly;
|
31
46
|
|
32
47
|
[Test]
|
33
48
|
[Ignore]
|
34
|
-
procedure
|
49
|
+
procedure Medium_deficient_number_is_classified_correctly;
|
35
50
|
|
36
51
|
[Test]
|
37
52
|
[Ignore]
|
38
|
-
procedure
|
53
|
+
procedure Large_deficient_number_is_classified_correctly;
|
39
54
|
|
40
55
|
[Test]
|
41
56
|
[Ignore]
|
42
|
-
procedure
|
57
|
+
procedure Edge_case_no_factors_other_than_itself_is_classified_correctly;
|
43
58
|
|
44
59
|
[Test]
|
45
60
|
[Ignore]
|
46
|
-
procedure
|
61
|
+
procedure Zero_is_rejected_not_a_natural_number;
|
62
|
+
|
63
|
+
[Test]
|
64
|
+
[Ignore]
|
65
|
+
procedure Negative_integer_is_rejected_not_a_natural_number;
|
47
66
|
end;
|
48
67
|
|
49
68
|
implementation
|
50
69
|
uses uPerfectNumbers;
|
51
70
|
|
52
|
-
procedure PerfectNumbersTest.
|
71
|
+
procedure PerfectNumbersTest.Smallest_prime_deficient_number_is_classified_correctly;
|
53
72
|
begin
|
54
|
-
Assert.AreEqual(Deficient, PerfectNumber.Classify(
|
73
|
+
Assert.AreEqual(Deficient, PerfectNumber.Classify(2));
|
55
74
|
end;
|
56
75
|
|
57
|
-
procedure PerfectNumbersTest.
|
76
|
+
procedure PerfectNumbersTest.Smallest_non_prime_deficient_number_is_classified_correctly;
|
58
77
|
begin
|
59
|
-
Assert.AreEqual(Deficient, PerfectNumber.Classify(
|
78
|
+
Assert.AreEqual(Deficient, PerfectNumber.Classify(4));
|
60
79
|
end;
|
61
80
|
|
62
|
-
procedure PerfectNumbersTest.
|
81
|
+
procedure PerfectNumbersTest.Medium_deficient_number_is_classified_correctly;
|
63
82
|
begin
|
64
|
-
Assert.AreEqual(Deficient, PerfectNumber.Classify(
|
83
|
+
Assert.AreEqual(Deficient, PerfectNumber.Classify(32));
|
65
84
|
end;
|
66
85
|
|
67
|
-
procedure PerfectNumbersTest.
|
86
|
+
procedure PerfectNumbersTest.Large_deficient_number_is_classified_correctly;
|
87
|
+
begin
|
88
|
+
Assert.AreEqual(Deficient, PerfectNumber.Classify(33550337));
|
89
|
+
end;
|
90
|
+
|
91
|
+
procedure PerfectNumbersTest.Edge_case_no_factors_other_than_itself_is_classified_correctly;
|
92
|
+
begin
|
93
|
+
Assert.AreEqual(Deficient, PerfectNumber.Classify(1));
|
94
|
+
end;
|
95
|
+
|
96
|
+
procedure PerfectNumbersTest.Smallest_perfect_number_is_classified_correctly;
|
68
97
|
begin
|
69
98
|
Assert.AreEqual(Perfect, PerfectNumber.Classify(6));
|
70
99
|
end;
|
71
100
|
|
72
|
-
procedure PerfectNumbersTest.
|
101
|
+
procedure PerfectNumbersTest.Medium_perfect_number_is_classified_correctly;
|
73
102
|
begin
|
74
103
|
Assert.AreEqual(Perfect, PerfectNumber.Classify(28));
|
75
104
|
end;
|
76
105
|
|
77
|
-
procedure PerfectNumbersTest.
|
106
|
+
procedure PerfectNumbersTest.Large_perfect_number_is_classified_correctly;
|
78
107
|
begin
|
79
|
-
Assert.AreEqual(Perfect, PerfectNumber.Classify(
|
108
|
+
Assert.AreEqual(Perfect, PerfectNumber.Classify(33550336));
|
80
109
|
end;
|
81
110
|
|
82
|
-
procedure PerfectNumbersTest.
|
111
|
+
procedure PerfectNumbersTest.Smallest_abundant_number_is_classified_correctly;
|
83
112
|
begin
|
84
113
|
Assert.AreEqual(Abundant, PerfectNumber.Classify(12));
|
85
114
|
end;
|
86
115
|
|
87
|
-
procedure PerfectNumbersTest.
|
116
|
+
procedure PerfectNumbersTest.Medium_abundant_number_is_classified_correctly;
|
88
117
|
begin
|
89
|
-
Assert.AreEqual(Abundant, PerfectNumber.Classify(
|
118
|
+
Assert.AreEqual(Abundant, PerfectNumber.Classify(30));
|
90
119
|
end;
|
91
120
|
|
92
|
-
procedure PerfectNumbersTest.
|
121
|
+
procedure PerfectNumbersTest.Large_abundant_number_is_classified_correctly;
|
93
122
|
begin
|
94
|
-
Assert.AreEqual(Abundant, PerfectNumber.Classify(
|
123
|
+
Assert.AreEqual(Abundant, PerfectNumber.Classify(33550335));
|
124
|
+
end;
|
125
|
+
|
126
|
+
procedure PerfectNumbersTest.Zero_is_rejected_not_a_natural_number;
|
127
|
+
var MyProc: TTestLocalMethod;
|
128
|
+
begin
|
129
|
+
MyProc := procedure
|
130
|
+
begin
|
131
|
+
PerfectNumber.Classify(0);
|
132
|
+
end;
|
133
|
+
|
134
|
+
assert.WillRaiseWithMessage(MyProc, ENotNaturalNumber, 'Classification is only possible for natural numbers.');
|
135
|
+
end;
|
136
|
+
|
137
|
+
procedure PerfectNumbersTest.Negative_integer_is_rejected_not_a_natural_number;
|
138
|
+
var MyProc: TTestLocalMethod;
|
139
|
+
begin
|
140
|
+
MyProc := procedure
|
141
|
+
begin
|
142
|
+
PerfectNumber.Classify(-1);
|
143
|
+
end;
|
144
|
+
|
145
|
+
assert.WillRaiseWithMessage(MyProc, ENotNaturalNumber, 'Classification is only possible for natural numbers.');
|
95
146
|
end;
|
96
147
|
|
97
148
|
initialization
|
@@ -7,10 +7,10 @@ confusing. It obeys a few simple rules (below), but when it's spoken
|
|
7
7
|
quickly it's really difficult for non-children (and non-native speakers)
|
8
8
|
to understand.
|
9
9
|
|
10
|
-
- **Rule 1**: If a word begins with a vowel sound, add an "ay" sound to
|
11
|
-
|
12
|
-
- **Rule
|
13
|
-
|
10
|
+
- **Rule 1**: If a word begins with a vowel sound, add an "ay" sound to the end of the word. Please note that "xr" and "yt" at the beginning of a word make vowel sounds (e.g. "xray" -> "xrayay", "yttria" -> "yttriaay").
|
11
|
+
- **Rule 2**: If a word begins with a consonant sound, move it to the end of the word and then add an "ay" sound to the end of the word. Consonant sounds can be made up of multiple consonants, a.k.a. a consonant cluster (e.g. "chair" -> "airchay").
|
12
|
+
- **Rule 3**: If a word starts with a consonant sound followed by "qu", move it to the end of the word, and then add an "ay" sound to the end of the word (e.g. "square" -> "aresquay").
|
13
|
+
- **Rule 4**: If a word contains a "y" after a consonant cluster or as the second letter in a two letter word it makes a vowel sound (e.g. "rhythm" -> "ythmrhay", "my" -> "ymay").
|
14
14
|
|
15
15
|
There are a few more rules for edge cases, and there are regional
|
16
16
|
variants too.
|
@@ -4,6 +4,9 @@ interface
|
|
4
4
|
uses
|
5
5
|
DUnitX.TestFramework;
|
6
6
|
|
7
|
+
const
|
8
|
+
CanonicalVersion = '1.2.0';
|
9
|
+
|
7
10
|
type
|
8
11
|
[TestFixture]
|
9
12
|
PigLatinTest = class(TObject)
|
@@ -32,15 +35,6 @@ type
|
|
32
35
|
[Ignore]
|
33
36
|
procedure Word_beginning_with_k;
|
34
37
|
|
35
|
-
[Ignore]
|
36
|
-
procedure y_is_treated_like_a_consonant_at_the_beginning_of_a_word;
|
37
|
-
|
38
|
-
[Ignore]
|
39
|
-
procedure y_is_treated_like_a_vowel_at_the_end_of_a_consonant_cluster;
|
40
|
-
|
41
|
-
[Ignore]
|
42
|
-
procedure y_as_second_letter_in_two_letter_word;
|
43
|
-
|
44
38
|
[Ignore]
|
45
39
|
procedure Word_beginning_with_x;
|
46
40
|
|
@@ -71,6 +65,15 @@ type
|
|
71
65
|
[Ignore]
|
72
66
|
procedure Word_beginning_with_xr;
|
73
67
|
|
68
|
+
[Ignore]
|
69
|
+
procedure y_is_treated_like_a_consonant_at_the_beginning_of_a_word;
|
70
|
+
|
71
|
+
[Ignore]
|
72
|
+
procedure y_is_treated_like_a_vowel_at_the_end_of_a_consonant_cluster;
|
73
|
+
|
74
|
+
[Ignore]
|
75
|
+
procedure y_as_second_letter_in_two_letter_word;
|
76
|
+
|
74
77
|
[Ignore]
|
75
78
|
procedure A_whole_phrase;
|
76
79
|
end;
|
@@ -12,18 +12,22 @@ type
|
|
12
12
|
Rank,
|
13
13
|
Suit: integer;
|
14
14
|
end;
|
15
|
+
Scores = record
|
16
|
+
Score: integer;
|
17
|
+
TieBreakerScore: integer;
|
18
|
+
end;
|
15
19
|
Hand = record
|
16
20
|
Input: string;
|
17
|
-
|
21
|
+
handResult: Scores;
|
18
22
|
end;
|
19
|
-
class function ParseHand(aHand: string): Hand;
|
20
|
-
class function ParseCards(aHand: string): TArray<Card>;
|
21
|
-
class function ParseCard(aCard: string): Card;
|
22
|
-
class function ParseRank(aCard: string): integer;
|
23
|
-
class function ParseSuit(aCard: string): integer;
|
24
|
-
class function ScoreHand(aCards: TArray<Card>):
|
23
|
+
class function ParseHand(aHand: string): Hand;
|
24
|
+
class function ParseCards(aHand: string): TArray<Card>;
|
25
|
+
class function ParseCard(aCard: string): Card;
|
26
|
+
class function ParseRank(aCard: string): integer;
|
27
|
+
class function ParseSuit(aCard: string): integer;
|
28
|
+
class function ScoreHand(aCards: TArray<Card>): Scores;
|
25
29
|
public
|
26
|
-
class function BestHands(aHands: TList<String>): TList<string>;
|
30
|
+
class function BestHands(aHands: TList<String>): TList<string>;
|
27
31
|
end;
|
28
32
|
|
29
33
|
implementation
|
@@ -38,8 +42,8 @@ class function Poker.BestHands(aHands: TList<String>): TList<string>;
|
|
38
42
|
begin
|
39
43
|
lResult := 0;
|
40
44
|
for aItem in aList do
|
41
|
-
if aItem.Score > lResult then
|
42
|
-
lResult := aItem.
|
45
|
+
if aItem.handResult.Score > lResult then
|
46
|
+
lResult := aItem.handResult.Score;
|
43
47
|
result := lResult;
|
44
48
|
end;
|
45
49
|
|
@@ -52,33 +56,61 @@ class function Poker.BestHands(aHands: TList<String>): TList<string>;
|
|
52
56
|
end;
|
53
57
|
|
54
58
|
function ListOfWinningHands(const aTarget: integer; aList: IList<Hand>): IList<string>;
|
59
|
+
|
60
|
+
function MaxTieBreakerScore: integer;
|
61
|
+
var
|
62
|
+
aItem: Hand;
|
63
|
+
lResult: integer;
|
64
|
+
begin
|
65
|
+
lResult := 0;
|
66
|
+
for aItem in aList do
|
67
|
+
if aItem.handResult.TieBreakerScore > lResult then
|
68
|
+
lResult := aItem.handResult.TieBreakerScore;
|
69
|
+
result := lResult;
|
70
|
+
end;
|
71
|
+
|
55
72
|
var aItem: Hand;
|
73
|
+
lmaxTieBreakerScore: integer;
|
56
74
|
begin
|
57
75
|
result := TCollections.CreateList<string>;
|
76
|
+
lmaxTieBreakerScore := MaxTieBreakerScore;
|
58
77
|
for aItem in aList do
|
59
|
-
if aItem.
|
78
|
+
if aItem.handResult.TieBreakerScore = lmaxTieBreakerScore then
|
60
79
|
result.Add(aItem.Input);
|
61
80
|
end;
|
81
|
+
|
82
|
+
function MaxHands(aScoredHands: IList<Hand>; aMaxScore: integer): IList<Hand>;
|
83
|
+
var
|
84
|
+
lHand: Hand;
|
85
|
+
begin
|
86
|
+
result := TCollections.CreateList<Hand>;
|
87
|
+
for lHand in aScoredHands do
|
88
|
+
if lHand.handResult.Score = aMaxScore then
|
89
|
+
result.Add(lHand);
|
90
|
+
end;
|
62
91
|
{$endregion}
|
63
92
|
|
64
93
|
var scoredHands: IList<Hand>;
|
65
94
|
lmaxScore: integer;
|
95
|
+
lmaxHands: IList<Hand>;
|
66
96
|
begin
|
67
97
|
scoredHands := ScoreHands(aHands);
|
68
98
|
lMaxScore := MaxScore(scoredHands);
|
99
|
+
lmaxHands := MaxHands(scoredHands, lMaxScore);
|
69
100
|
|
70
101
|
result := TList<string>.Create;
|
71
|
-
result.AddRange(ListOfWinningHands(lMaxScore,
|
102
|
+
result.AddRange(ListOfWinningHands(lMaxScore, lmaxHands).ToArray);
|
72
103
|
end;
|
73
104
|
|
74
105
|
class function Poker.ParseHand(aHand: string): Hand;
|
75
106
|
begin
|
76
107
|
result.Input := aHand;
|
77
|
-
result.
|
108
|
+
result.handResult := ScoreHand(ParseCards(aHand));
|
78
109
|
end;
|
79
110
|
|
80
111
|
class function Poker.ParseCards(aHand: string): TArray<Card>;
|
81
112
|
var lhand: TArray<string>;
|
113
|
+
lhandReplace10: string;
|
82
114
|
lCardStr: string;
|
83
115
|
lParsedHand: IList<Card>;
|
84
116
|
begin
|
@@ -88,7 +120,8 @@ begin
|
|
88
120
|
result := TComparer<integer>.Default.Compare(left.Rank, right.Rank);
|
89
121
|
end);
|
90
122
|
|
91
|
-
|
123
|
+
lhandReplace10 := aHand.Replace('10', 'T');
|
124
|
+
lhand := lhandReplace10.Split([' ']);
|
92
125
|
for lCardStr in lhand do
|
93
126
|
lParsedHand.Add(ParseCard(lCardStr));
|
94
127
|
lParsedHand.Sort;
|
@@ -122,7 +155,7 @@ begin
|
|
122
155
|
result := lSuits.IndexOf(lCard[high(lCard)]);
|
123
156
|
end;
|
124
157
|
|
125
|
-
class function Poker.ScoreHand(aCards: TArray<Card>):
|
158
|
+
class function Poker.ScoreHand(aCards: TArray<Card>): Scores;
|
126
159
|
|
127
160
|
{$region 'ScoreHand Workers'}
|
128
161
|
function CardsByRankOccurance: IList<integer>;
|
@@ -139,11 +172,14 @@ class function Poker.ScoreHand(aCards: TArray<Card>): integer;
|
|
139
172
|
result.Add(0);
|
140
173
|
for rank := High(lRankOccurence) downto Low(lRankOccurence) + 2 do
|
141
174
|
begin
|
142
|
-
if lRankOccurence[rank] >= currentOccurenceCount
|
175
|
+
if (lRankOccurence[rank] >= currentOccurenceCount) then
|
143
176
|
begin
|
144
177
|
result.Insert(0,rank);
|
145
178
|
currentOccurenceCount := lRankOccurence[rank];
|
146
|
-
end
|
179
|
+
end
|
180
|
+
else
|
181
|
+
if lRankOccurence[rank] > 0 then
|
182
|
+
result.Insert(1,rank);
|
147
183
|
end;
|
148
184
|
end;
|
149
185
|
|
@@ -222,31 +258,50 @@ begin
|
|
222
258
|
flush := Distinct(Suits) = 1;
|
223
259
|
straight := (Distinct(Ranks) = 5) and ((Ranks[0] - Ranks[4]) = 4);
|
224
260
|
|
261
|
+
fillchar(result, SizeOf(Scores), #0);
|
225
262
|
if straight and flush then
|
226
|
-
result := 800 + Ranks.First
|
263
|
+
result.Score := 800 + Ranks.First
|
227
264
|
else
|
228
265
|
if listOfRankCounts.EqualsTo([4,1]) then // 4 of a kind
|
229
|
-
|
266
|
+
begin
|
267
|
+
result.Score := 700 + listOfCardsByRank[0];
|
268
|
+
result.TieBreakerScore := listOfCardsByRank[1];
|
269
|
+
end
|
230
270
|
else
|
231
271
|
if listOfRankCounts.EqualsTo([3,2]) then // full house
|
232
|
-
|
272
|
+
begin
|
273
|
+
result.Score := 600 + listOfCardsByRank[0];
|
274
|
+
result.TieBreakerScore := listofCardsByRank[1];
|
275
|
+
end
|
233
276
|
else
|
234
277
|
if flush then
|
235
|
-
result := 500 + Ranks.First
|
278
|
+
result.Score := 500 + Ranks.First
|
236
279
|
else
|
237
280
|
if straight then
|
238
|
-
result := 400 + Ranks.First
|
281
|
+
result.Score := 400 + Ranks.First
|
239
282
|
else
|
240
283
|
if listOfRankCounts.EqualsTo([3,1,1]) then //3 of a kind
|
241
|
-
|
284
|
+
begin
|
285
|
+
result.Score := 300 + listOfCardsByRank[0];
|
286
|
+
result.TieBreakerScore := listOfCardsByRank[2];
|
287
|
+
end
|
242
288
|
else
|
243
289
|
if listOfRankCounts.EqualsTo([2,2,1]) then // 2 pair
|
244
|
-
|
290
|
+
begin
|
291
|
+
result.Score := 200 + listOfCardsByRank[0] + listOfCardsByRank[1];
|
292
|
+
result.TieBreakerScore := Ranks.Min;
|
293
|
+
end
|
245
294
|
else
|
246
295
|
if listOfRankCounts.EqualsTo([2,1,1,1]) then // 1 pair
|
247
|
-
|
296
|
+
begin
|
297
|
+
result.Score := 100 + listOfCardsByRank[0];
|
298
|
+
result.TieBreakerScore := 0;
|
299
|
+
end
|
248
300
|
else
|
249
|
-
|
301
|
+
begin
|
302
|
+
result.Score := Ranks.Max; // high card
|
303
|
+
result.TieBreakerScore := Ranks.Min;
|
304
|
+
end;
|
250
305
|
|
251
306
|
end;
|
252
307
|
|