trackler 2.2.1.45 → 2.2.1.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/problem-specifications/exercises/complex-numbers/description.md +27 -0
- data/problem-specifications/exercises/crypto-square/canonical-data.json +39 -43
- data/problem-specifications/exercises/crypto-square/description.md +6 -4
- data/problem-specifications/exercises/hamming/canonical-data.json +5 -5
- data/problem-specifications/exercises/kindergarten-garden/description.md +10 -10
- data/problem-specifications/exercises/leap/canonical-data.json +2 -2
- data/problem-specifications/exercises/markdown/canonical-data.json +2 -2
- data/problem-specifications/exercises/nucleotide-count/canonical-data.json +12 -1
- data/problem-specifications/exercises/pangram/canonical-data.json +7 -1
- data/problem-specifications/exercises/queen-attack/canonical-data.json +83 -26
- data/problem-specifications/exercises/space-age/description.md +1 -2
- data/problem-specifications/exercises/zipper/canonical-data.json +671 -0
- data/tracks/bash/config.json +13 -1
- data/tracks/bash/exercises/atbash-cipher/README.md +45 -0
- data/tracks/bash/exercises/atbash-cipher/atbash_cipher_tests.sh +73 -0
- data/tracks/bash/exercises/atbash-cipher/example.sh +14 -0
- data/tracks/bash/exercises/gigasecond/.meta/hints.md +33 -0
- data/tracks/bash/exercises/two-fer/README.md +0 -22
- data/tracks/c/exercises/allergies/src/allergies.h +9 -9
- data/tracks/c/exercises/allergies/src/example.c +2 -2
- data/tracks/c/exercises/allergies/src/example.h +9 -9
- data/tracks/c/exercises/allergies/test/test_allergies.c +34 -34
- data/tracks/c/exercises/clock/test/test_clock.c +0 -52
- data/tracks/c/exercises/meetup/test/test_meetup.c +604 -114
- data/tracks/c/exercises/nucleotide-count/src/example.c +10 -10
- data/tracks/c/exercises/palindrome-products/src/example.c +8 -8
- data/tracks/c/exercises/palindrome-products/src/example.h +5 -5
- data/tracks/c/exercises/palindrome-products/test/test_palindrome_products.c +8 -6
- data/tracks/c/exercises/robot-simulator/src/example.c +19 -19
- data/tracks/c/exercises/robot-simulator/src/robot_simulator.h +24 -24
- data/tracks/c/exercises/robot-simulator/test/test_robot_simulator.c +35 -34
- data/tracks/c/exercises/series/src/example.c +10 -10
- data/tracks/c/exercises/series/src/series.h +5 -5
- data/tracks/c/exercises/series/test/test_series.c +77 -30
- data/tracks/c/exercises/sieve/src/example.c +17 -17
- data/tracks/c/exercises/sieve/src/sieve.h +2 -2
- data/tracks/c/exercises/sieve/test/test_sieve.c +6 -6
- data/tracks/c/exercises/space-age/src/example.c +1 -1
- data/tracks/c/exercises/space-age/src/example.h +3 -3
- data/tracks/c/exercises/space-age/test/test_space_age.c +2 -0
- data/tracks/c/exercises/sum-of-multiples/src/example.c +3 -1
- data/tracks/c/exercises/sum-of-multiples/test/test_sum_of_multiples.c +17 -0
- data/tracks/c/exercises/triangle/src/example.c +4 -4
- data/tracks/c/exercises/triangle/src/example.h +4 -4
- data/tracks/c/exercises/triangle/src/triangle.h +1 -1
- data/tracks/c/exercises/triangle/test/test_triangle.c +18 -16
- data/tracks/c/exercises/word-count/src/example.c +24 -24
- data/tracks/c/exercises/word-count/src/word_count.h +3 -3
- data/tracks/c/exercises/word-count/test/test_word_count.c +139 -139
- data/tracks/cfml/exercises/acronym/README.md +31 -0
- data/tracks/cfml/exercises/atbash-cipher/README.md +50 -0
- data/tracks/cfml/exercises/bob/README.md +34 -0
- data/tracks/cfml/exercises/diamond/README.md +75 -0
- data/tracks/cfml/exercises/difference-of-squares/README.md +35 -0
- data/tracks/cfml/exercises/flatten-array/README.md +34 -0
- data/tracks/cfml/exercises/gigasecond/README.md +27 -0
- data/tracks/cfml/exercises/grains/README.md +50 -0
- data/tracks/cfml/exercises/hamming/README.md +58 -0
- data/tracks/cfml/exercises/hello-world/README.md +37 -0
- data/tracks/cfml/exercises/isogram/README.md +35 -0
- data/tracks/cfml/exercises/largest-series-product/README.md +36 -0
- data/tracks/cfml/exercises/leap/README.md +16 -0
- data/tracks/cfml/exercises/luhn/README.md +87 -0
- data/tracks/cfml/exercises/markdown/README.md +34 -0
- data/tracks/cfml/exercises/nth-prime/README.md +31 -0
- data/tracks/cfml/exercises/pangram/README.md +31 -0
- data/tracks/cfml/exercises/pig-latin/README.md +40 -0
- data/tracks/cfml/exercises/raindrops/README.md +40 -0
- data/tracks/cfml/exercises/rna-transcription/README.md +41 -0
- data/tracks/cfml/exercises/saddle-points/README.md +49 -0
- data/tracks/cfml/exercises/scrabble-score/README.md +60 -0
- data/tracks/cfml/exercises/secret-handshake/README.md +51 -0
- data/tracks/cfml/exercises/space-age/README.md +41 -0
- data/tracks/cfml/exercises/sum-of-multiples/README.md +34 -0
- data/tracks/cfml/exercises/triangle/README.md +42 -0
- data/tracks/cfml/exercises/word-count/README.md +35 -0
- data/tracks/clojure/config.json +10 -0
- data/tracks/clojure/exercises/spiral-matrix/README.md +32 -0
- data/tracks/clojure/exercises/spiral-matrix/project.clj +4 -0
- data/tracks/clojure/exercises/spiral-matrix/src/example.clj +11 -0
- data/tracks/clojure/exercises/spiral-matrix/src/spiral_matrix.clj +3 -0
- data/tracks/clojure/exercises/spiral-matrix/test/spiral_matrix_test.clj +58 -0
- data/tracks/common-lisp/config.json +20 -0
- data/tracks/common-lisp/exercises/hello-world/README.md +68 -0
- data/tracks/common-lisp/exercises/hello-world/example.lisp +9 -0
- data/tracks/common-lisp/exercises/hello-world/hello-world-test.lisp +21 -0
- data/tracks/common-lisp/exercises/hello-world/hello-world.lisp +6 -0
- data/tracks/common-lisp/exercises/perfect-numbers/README.md +72 -0
- data/tracks/common-lisp/exercises/perfect-numbers/example.lisp +17 -0
- data/tracks/common-lisp/exercises/perfect-numbers/perfect-numbers-test.lisp +56 -0
- data/tracks/common-lisp/exercises/perfect-numbers/perfect-numbers.lisp +7 -0
- data/tracks/cpp/.travis.yml +34 -14
- data/tracks/cpp/docs/INSTALLATION.md +17 -28
- data/tracks/cpp/docs/TESTS.md +13 -21
- data/tracks/crystal/config.json +10 -0
- data/tracks/crystal/exercises/triangle/spec/triangle_spec.cr +60 -0
- data/tracks/crystal/exercises/triangle/src/example.cr +31 -0
- data/tracks/crystal/exercises/triangle/src/triangle.cr +1 -0
- data/tracks/crystal/generator/spec/remote_data_file_spec.cr +0 -1
- data/tracks/crystal/generator/src/generators/triangle.cr +38 -0
- data/tracks/crystal/generator/src/remote_data_file.cr +1 -1
- data/tracks/csharp/exercises/difference-of-squares/DifferenceOfSquares.cs +4 -4
- data/tracks/csharp/exercises/difference-of-squares/DifferenceOfSquaresTest.cs +22 -27
- data/tracks/csharp/exercises/difference-of-squares/Example.cs +5 -5
- data/tracks/csharp/exercises/error-handling/ErrorHandlingTest.cs +4 -4
- data/tracks/csharp/exercises/flatten-array/Example.cs +1 -1
- data/tracks/csharp/exercises/flatten-array/FlattenArray.cs +1 -1
- data/tracks/csharp/exercises/flatten-array/FlattenArrayTest.cs +106 -72
- data/tracks/csharp/exercises/largest-series-product/LargestSeriesProductTest.cs +24 -98
- data/tracks/csharp/exercises/minesweeper/Example.cs +3 -3
- data/tracks/csharp/exercises/minesweeper/Minesweeper.cs +1 -1
- data/tracks/csharp/exercises/minesweeper/MinesweeperTest.cs +155 -57
- data/tracks/csharp/generators/Exercises/DifferenceOfSquares.cs +25 -0
- data/tracks/csharp/generators/Exercises/FlattenArray.cs +36 -0
- data/tracks/csharp/generators/Exercises/LargestSeriesProduct.cs +18 -0
- data/tracks/csharp/generators/Exercises/Minesweeper.cs +32 -0
- data/tracks/d/docs/EXERCISE_README_INSERT.md +1 -1
- data/tracks/d/exercises/bob/README.md +1 -1
- data/tracks/d/exercises/circular-buffer/README.md +1 -1
- data/tracks/d/exercises/crypto-square/README.md +1 -1
- data/tracks/d/exercises/difference-of-squares/README.md +1 -1
- data/tracks/d/exercises/etl/README.md +1 -1
- data/tracks/d/exercises/gigasecond/README.md +1 -1
- data/tracks/d/exercises/hamming/README.md +1 -1
- data/tracks/d/exercises/hello-world/README.md +1 -1
- data/tracks/d/exercises/leap/README.md +1 -1
- data/tracks/d/exercises/nucleotide-count/README.md +1 -1
- data/tracks/d/exercises/pangram/README.md +1 -1
- data/tracks/d/exercises/raindrops/README.md +1 -1
- data/tracks/d/exercises/react/README.md +1 -1
- data/tracks/d/exercises/rna-transcription/README.md +1 -1
- data/tracks/d/exercises/robot-name/README.md +1 -1
- data/tracks/d/exercises/roman-numerals/README.md +1 -1
- data/tracks/d/exercises/series/README.md +1 -1
- data/tracks/d/exercises/triangle/README.md +1 -1
- data/tracks/dart/CONTRIBUTING.md +61 -0
- data/tracks/dart/README.md +10 -47
- data/tracks/dart/config.json +13 -1
- data/tracks/dart/exercises/anagram/README.md +10 -0
- data/tracks/dart/exercises/bob/README.md +11 -0
- data/tracks/dart/exercises/difference-of-squares/README.md +11 -0
- data/tracks/dart/exercises/gigasecond/README.md +11 -0
- data/tracks/dart/exercises/gigasecond/test/gigasecond_test.dart +56 -33
- data/tracks/dart/exercises/hamming/README.md +11 -0
- data/tracks/dart/exercises/hamming/lib/example.dart +2 -2
- data/tracks/dart/exercises/hamming/test/hamming_test.dart +41 -24
- data/tracks/dart/exercises/hello-world/README.md +11 -0
- data/tracks/dart/exercises/leap/README.md +12 -1
- data/tracks/dart/exercises/phone-number/README.md +56 -0
- data/tracks/dart/exercises/phone-number/lib/example.dart +45 -0
- data/tracks/dart/exercises/phone-number/lib/phone_number.dart +3 -0
- data/tracks/dart/exercises/phone-number/pubspec.lock +293 -0
- data/tracks/dart/exercises/phone-number/pubspec.yaml +3 -0
- data/tracks/dart/exercises/phone-number/test/phone_number_test.dart +66 -0
- data/tracks/dart/exercises/raindrops/README.md +35 -0
- data/tracks/dart/exercises/rna-transcription/README.md +11 -0
- data/tracks/dart/exercises/word-count/README.md +14 -3
- data/tracks/delphi/docs/RESOURCES.md +10 -11
- data/tracks/elixir/exercises/hello-world/hello_world.exs +1 -1
- data/tracks/elixir/exercises/secret-handshake/README.md +3 -5
- data/tracks/elm/exercises/isogram/Isogram.example.elm +4 -4
- data/tracks/erlang/config.json +10 -0
- data/tracks/erlang/exercises/sieve/README.md +88 -0
- data/tracks/erlang/exercises/sieve/include/exercism.hrl +11 -0
- data/tracks/erlang/exercises/sieve/rebar.config +30 -0
- data/tracks/erlang/exercises/sieve/src/example.erl +16 -0
- data/tracks/erlang/exercises/sieve/src/sieve.app.src +9 -0
- data/tracks/erlang/exercises/sieve/src/sieve.erl +8 -0
- data/tracks/erlang/exercises/sieve/test/sieve_tests.erl +38 -0
- data/tracks/fsharp/.gitignore +2 -1
- data/tracks/fsharp/exercises/crypto-square/CryptoSquareTest.fs +10 -6
- data/tracks/fsharp/exercises/leap/LeapTest.fs +2 -2
- data/tracks/fsharp/exercises/pangram/PangramTest.fs +5 -1
- data/tracks/fsharp/exercises/queen-attack/QueenAttackTest.fs +7 -7
- data/tracks/fsharp/exercises/run-length-encoding/Example.fs +2 -2
- data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncodingTest.fs +42 -30
- data/tracks/fsharp/generators/Generators.fs +21 -8
- data/tracks/gnu-apl/test.apl +4 -4
- data/tracks/go/README.md +1 -2
- data/tracks/go/config/maintainers.json +5 -6
- data/tracks/groovy/config.json +23 -0
- data/tracks/groovy/exercises/binary-search/BinarySearch.groovy +14 -0
- data/tracks/groovy/exercises/binary-search/BinarySearchSpec.groovy +56 -0
- data/tracks/groovy/exercises/binary-search/Example.groovy +43 -0
- data/tracks/groovy/exercises/binary-search/README.md +59 -0
- data/tracks/groovy/exercises/triangle/Example.groovy +23 -0
- data/tracks/groovy/exercises/triangle/README.md +42 -0
- data/tracks/groovy/exercises/triangle/Triangle.groovy +15 -0
- data/tracks/groovy/exercises/triangle/TriangleSpec.groovy +66 -0
- data/tracks/haskell/config.json +9 -0
- data/tracks/haskell/exercises/all-your-base/package.yaml +1 -1
- data/tracks/haskell/exercises/all-your-base/test/Tests.hs +18 -18
- data/tracks/haskell/exercises/bowling/package.yaml +1 -1
- data/tracks/haskell/exercises/bowling/test/Tests.hs +9 -9
- data/tracks/haskell/exercises/change/package.yaml +1 -1
- data/tracks/haskell/exercises/change/test/Tests.hs +5 -0
- data/tracks/haskell/exercises/complex-numbers/README.md +92 -0
- data/tracks/haskell/exercises/complex-numbers/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/complex-numbers/examples/success-standard/src/ComplexNumbers.hs +50 -0
- data/tracks/haskell/exercises/complex-numbers/package.yaml +20 -0
- data/tracks/haskell/exercises/complex-numbers/src/ComplexNumbers.hs +45 -0
- data/tracks/haskell/exercises/complex-numbers/stack.yaml +1 -0
- data/tracks/haskell/exercises/complex-numbers/test/Tests.hs +194 -0
- data/tracks/haskell/exercises/crypto-square/package.yaml +1 -1
- data/tracks/haskell/exercises/crypto-square/test/Tests.hs +20 -12
- data/tracks/haskell/exercises/dominoes/package.yaml +1 -1
- data/tracks/haskell/exercises/forth/package.yaml +1 -1
- data/tracks/haskell/exercises/forth/test/Tests.hs +4 -3
- data/tracks/haskell/exercises/hamming/package.yaml +1 -1
- data/tracks/haskell/exercises/hamming/test/Tests.hs +6 -6
- data/tracks/haskell/exercises/isogram/package.yaml +1 -1
- data/tracks/haskell/exercises/isogram/test/Tests.hs +2 -2
- data/tracks/haskell/exercises/leap/package.yaml +1 -1
- data/tracks/haskell/exercises/leap/test/Tests.hs +1 -1
- data/tracks/haskell/exercises/pascals-triangle/package.yaml +1 -1
- data/tracks/haskell/exercises/pig-latin/examples/success-standard/src/PigLatin.hs +2 -0
- data/tracks/haskell/exercises/pig-latin/package.yaml +1 -1
- data/tracks/haskell/exercises/pig-latin/test/Tests.hs +8 -0
- data/tracks/haskell/exercises/queen-attack/package.yaml +1 -1
- data/tracks/haskell/exercises/rna-transcription/package.yaml +1 -1
- data/tracks/haskell/exercises/rna-transcription/test/Tests.hs +8 -8
- data/tracks/haskell/exercises/robot-simulator/package.yaml +1 -1
- data/tracks/haskell/exercises/secret-handshake/package.yaml +1 -1
- data/tracks/haskell/exercises/secret-handshake/test/Tests.hs +0 -3
- data/tracks/haskell/exercises/sum-of-multiples/package.yaml +1 -1
- data/tracks/haskell/exercises/sum-of-multiples/test/Tests.hs +4 -0
- data/tracks/haskell/exercises/zipper/package.yaml +1 -1
- data/tracks/haskell/exercises/zipper/test/Tests.hs +23 -0
- data/tracks/java/config.json +85 -13
- data/tracks/java/config/maintainers.json +1 -1
- data/tracks/java/exercises/accumulate/README.md +0 -3
- data/tracks/java/exercises/acronym/.meta/.version +1 -0
- data/tracks/java/exercises/acronym/README.md +0 -1
- data/tracks/java/exercises/acronym/src/test/java/AcronymTest.java +0 -3
- data/tracks/java/exercises/all-your-base/.meta/.version +1 -0
- data/tracks/java/exercises/all-your-base/README.md +1 -1
- data/tracks/java/exercises/all-your-base/src/test/java/BaseConverterTest.java +0 -3
- data/tracks/java/exercises/allergies/README.md +0 -1
- data/tracks/java/exercises/atbash-cipher/README.md +2 -1
- data/tracks/java/exercises/beer-song/README.md +1 -1
- data/tracks/java/exercises/binary/README.md +2 -0
- data/tracks/java/exercises/book-store/README.md +5 -5
- data/tracks/java/exercises/bowling/README.md +20 -6
- data/tracks/java/exercises/change/.meta/.version +1 -0
- data/tracks/java/exercises/change/README.md +1 -1
- data/tracks/java/exercises/change/src/test/java/ChangeCalculatorTest.java +0 -3
- data/tracks/java/exercises/circular-buffer/README.md +13 -6
- data/tracks/java/exercises/clock/.meta/.version +1 -0
- data/tracks/java/exercises/clock/src/test/java/ClockAddTest.java +0 -3
- data/tracks/java/exercises/clock/src/test/java/ClockCreationTest.java +0 -3
- data/tracks/java/exercises/clock/src/test/java/ClockEqualTest.java +0 -3
- data/tracks/java/exercises/collatz-conjecture/.meta/.version +1 -0
- data/tracks/java/exercises/collatz-conjecture/README.md +1 -1
- data/tracks/java/exercises/collatz-conjecture/src/test/java/CollatzCalculatorTest.java +0 -3
- data/tracks/java/exercises/complex-numbers/README.md +27 -0
- data/tracks/java/exercises/crypto-square/README.md +10 -8
- data/tracks/java/exercises/diamond/.meta/.version +1 -0
- data/tracks/java/exercises/diamond/README.md +6 -6
- data/tracks/java/exercises/diamond/src/test/java/DiamondPrinterTest.java +0 -3
- data/tracks/java/exercises/difference-of-squares/.meta/.version +1 -0
- data/tracks/java/exercises/difference-of-squares/src/test/java/DifferenceOfSquaresCalculatorTest.java +0 -3
- data/tracks/java/exercises/etl/README.md +2 -0
- data/tracks/java/exercises/flatten-array/.meta/.version +1 -0
- data/tracks/java/exercises/flatten-array/README.md +1 -2
- data/tracks/java/exercises/flatten-array/src/test/java/FlattenerTest.java +0 -3
- data/tracks/java/exercises/food-chain/README.md +1 -1
- data/tracks/java/exercises/forth/.meta/.version +1 -0
- data/tracks/java/exercises/forth/src/test/java/ForthEvaluatorTest.java +0 -3
- data/tracks/java/exercises/grade-school/README.md +0 -1
- data/tracks/java/exercises/hamming/.meta/.version +1 -0
- data/tracks/java/exercises/hamming/src/test/java/HammingTest.java +0 -3
- data/tracks/java/exercises/house/README.md +1 -2
- data/tracks/java/exercises/isogram/README.md +2 -1
- data/tracks/java/exercises/kindergarten-garden/README.md +13 -13
- data/tracks/java/exercises/linked-list/README.md +10 -10
- data/tracks/java/exercises/list-ops/.meta/.version +1 -0
- data/tracks/java/exercises/list-ops/README.md +4 -0
- data/tracks/java/exercises/list-ops/src/test/java/ListOpsTest.java +0 -3
- data/tracks/java/exercises/luhn/README.md +7 -7
- data/tracks/java/exercises/matrix/README.md +6 -4
- data/tracks/java/exercises/meetup/README.md +1 -2
- data/tracks/java/exercises/minesweeper/.meta/.version +1 -0
- data/tracks/java/exercises/minesweeper/src/test/java/MinesweeperBoardTest.java +0 -3
- data/tracks/java/exercises/nucleotide-count/README.md +8 -22
- data/tracks/java/exercises/ocr-numbers/README.md +5 -5
- data/tracks/java/exercises/octal/README.md +6 -2
- data/tracks/java/exercises/palindrome-products/README.md +15 -16
- data/tracks/java/exercises/pangram/.meta/.version +1 -0
- data/tracks/java/exercises/pangram/README.md +1 -1
- data/tracks/java/exercises/pangram/src/test/java/PangramCheckerTest.java +0 -3
- data/tracks/java/exercises/pascals-triangle/.meta/.version +1 -0
- data/tracks/java/exercises/pascals-triangle/README.md +1 -1
- data/tracks/java/exercises/pascals-triangle/src/test/java/PascalsTriangleGeneratorTest.java +0 -3
- data/tracks/java/exercises/perfect-numbers/.meta/.version +1 -0
- data/tracks/java/exercises/perfect-numbers/README.md +2 -2
- data/tracks/java/exercises/perfect-numbers/src/test/java/NaturalNumberTest.java +0 -3
- data/tracks/java/exercises/phone-number/README.md +3 -2
- data/tracks/java/exercises/pythagorean-triplet/README.md +3 -3
- data/tracks/java/exercises/queen-attack/README.md +1 -1
- data/tracks/java/exercises/rectangles/README.md +7 -7
- data/tracks/java/exercises/rna-transcription/.meta/.version +1 -0
- data/tracks/java/exercises/rna-transcription/src/test/java/RnaTranscriptionTest.java +0 -3
- data/tracks/java/exercises/roman-numerals/README.md +1 -1
- data/tracks/java/exercises/rotational-cipher/README.md +2 -1
- data/tracks/java/exercises/run-length-encoding/README.md +4 -4
- data/tracks/java/exercises/saddle-points/.meta/.version +1 -0
- data/tracks/java/exercises/saddle-points/README.md +1 -1
- data/tracks/java/exercises/saddle-points/src/test/java/MatrixTest.java +0 -3
- data/tracks/java/exercises/scrabble-score/.meta/.version +1 -0
- data/tracks/java/exercises/scrabble-score/README.md +3 -1
- data/tracks/java/exercises/scrabble-score/src/test/java/ScrabbleScoreTest.java +0 -3
- data/tracks/java/exercises/secret-handshake/README.md +1 -1
- data/tracks/java/exercises/simple-cipher/README.md +1 -1
- data/tracks/java/exercises/simple-linked-list/src/test/java/SimpleLinkedListTest.java +25 -25
- data/tracks/java/exercises/space-age/README.md +1 -1
- data/tracks/java/exercises/spiral-matrix/.meta/.version +1 -0
- data/tracks/java/exercises/spiral-matrix/README.md +2 -2
- data/tracks/java/exercises/spiral-matrix/src/test/java/SpiralMatrixBuilderTest.java +0 -3
- data/tracks/java/exercises/sum-of-multiples/README.md +0 -3
- data/tracks/java/exercises/tournament/README.md +6 -5
- data/tracks/java/exercises/transpose/README.md +7 -7
- data/tracks/java/exercises/triangle/README.md +9 -6
- data/tracks/java/exercises/trinary/README.md +1 -1
- data/tracks/java/exercises/twelve-days/README.md +1 -1
- data/tracks/java/exercises/two-fer/README.md +1 -2
- data/tracks/java/exercises/word-count/README.md +1 -2
- data/tracks/java/exercises/word-search/.meta/.version +1 -0
- data/tracks/java/exercises/word-search/README.md +1 -1
- data/tracks/java/exercises/word-search/src/test/java/WordSearcherTest.java +0 -3
- data/tracks/java/exercises/wordy/README.md +0 -5
- data/tracks/javascript/config.json +13 -0
- data/tracks/javascript/docs/TESTS.md +1 -1
- data/tracks/javascript/exercises/diffie-hellman/example.js +1 -1
- data/tracks/javascript/exercises/hello-world/example.js +2 -3
- data/tracks/javascript/exercises/meetup/example.js +24 -27
- data/tracks/javascript/exercises/meetup/meetup.spec.js +0 -6
- data/tracks/javascript/exercises/nucleotide-count/nucleotide-count.spec.js +1 -1
- data/tracks/javascript/exercises/protein-translation/README.md +73 -0
- data/tracks/javascript/exercises/protein-translation/example.js +68 -0
- data/tracks/javascript/exercises/protein-translation/protein-translation.spec.js +63 -0
- data/tracks/julia/README.md +1 -1
- data/tracks/kotlin/config.json +11 -0
- data/tracks/kotlin/exercises/acronym/README.md +0 -1
- data/tracks/kotlin/exercises/all-your-base/README.md +1 -1
- data/tracks/kotlin/exercises/allergies/README.md +0 -1
- data/tracks/kotlin/exercises/atbash-cipher/README.md +2 -1
- data/tracks/kotlin/exercises/beer-song/README.md +1 -1
- data/tracks/kotlin/exercises/binary/README.md +2 -0
- data/tracks/kotlin/exercises/change/README.md +1 -1
- data/tracks/kotlin/exercises/collatz-conjecture/README.md +1 -1
- data/tracks/kotlin/exercises/complex-numbers/README.md +27 -0
- data/tracks/kotlin/exercises/diamond/README.md +6 -6
- data/tracks/kotlin/exercises/etl/README.md +2 -0
- data/tracks/kotlin/exercises/flatten-array/README.md +1 -2
- data/tracks/kotlin/exercises/grade-school/README.md +0 -1
- data/tracks/kotlin/exercises/grains/README.md +0 -1
- data/tracks/kotlin/exercises/hello-world/.meta/hints.md +4 -0
- data/tracks/kotlin/exercises/hello-world/.meta/src/reference/kotlin/HelloWorld.kt +2 -2
- data/tracks/kotlin/exercises/hello-world/README.md +6 -0
- data/tracks/kotlin/exercises/hello-world/TUTORIAL.md +32 -434
- data/tracks/kotlin/exercises/hello-world/src/main/kotlin/HelloWorld.kt +1 -1
- data/tracks/kotlin/exercises/hello-world/src/test/kotlin/HelloWorldTest.kt +2 -21
- data/tracks/kotlin/exercises/isogram/README.md +2 -1
- data/tracks/kotlin/exercises/leap/README.md +1 -1
- data/tracks/kotlin/exercises/linked-list/README.md +10 -10
- data/tracks/kotlin/exercises/luhn/README.md +7 -7
- data/tracks/kotlin/exercises/meetup/README.md +1 -2
- data/tracks/kotlin/exercises/nucleotide-count/README.md +8 -22
- data/tracks/kotlin/exercises/pangram/README.md +1 -1
- data/tracks/kotlin/exercises/pascals-triangle/README.md +1 -1
- data/tracks/kotlin/exercises/perfect-numbers/README.md +2 -2
- data/tracks/kotlin/exercises/phone-number/README.md +3 -2
- data/tracks/kotlin/exercises/roman-numerals/README.md +1 -1
- data/tracks/kotlin/exercises/rotational-cipher/README.md +2 -1
- data/tracks/kotlin/exercises/saddle-points/README.md +1 -1
- data/tracks/kotlin/exercises/scrabble-score/README.md +3 -1
- data/tracks/kotlin/exercises/secret-handshake/README.md +1 -1
- data/tracks/kotlin/exercises/settings.gradle +1 -0
- data/tracks/kotlin/exercises/space-age/README.md +1 -2
- data/tracks/kotlin/exercises/spiral-matrix/README.md +2 -2
- data/tracks/kotlin/exercises/sum-of-multiples/README.md +0 -3
- data/tracks/kotlin/exercises/triangle/README.md +9 -6
- data/tracks/kotlin/exercises/two-fer/.meta/src/reference/kotlin/Twofer.kt +3 -0
- data/tracks/kotlin/exercises/two-fer/README.md +50 -0
- data/tracks/kotlin/exercises/two-fer/build.gradle +28 -0
- data/tracks/kotlin/exercises/two-fer/src/main/kotlin/.keep +0 -0
- data/tracks/kotlin/exercises/two-fer/src/test/kotlin/TwoferTest.kt +31 -0
- data/tracks/kotlin/exercises/word-count/README.md +1 -2
- data/tracks/ocaml/exercises/pangram/test.ml +3 -1
- data/tracks/perl5/.travis.yml +3 -1
- data/tracks/php/Makefile +2 -2
- data/tracks/php/README.md +4 -4
- data/tracks/php/config.json +15 -0
- data/tracks/php/exercises/transpose/example.php +30 -0
- data/tracks/php/exercises/transpose/transpose_test.php +116 -0
- data/tracks/php/{phpcs-xphp.xml → phpcs-php.xml} +0 -0
- data/tracks/python/.travis.yml +1 -1
- data/tracks/python/config.json +199 -39
- data/tracks/python/exercises/acronym/acronym_test.py +1 -1
- data/tracks/python/exercises/allergies/allergies_test.py +1 -1
- data/tracks/python/exercises/alphametics/alphametics_test.py +1 -1
- data/tracks/python/exercises/anagram/anagram_test.py +1 -1
- data/tracks/python/exercises/atbash-cipher/atbash_cipher_test.py +1 -1
- data/tracks/python/exercises/bob/bob.py +1 -1
- data/tracks/python/exercises/bob/bob_test.py +1 -1
- data/tracks/python/exercises/book-store/book_store_test.py +1 -1
- data/tracks/python/exercises/bracket-push/bracket_push.py +1 -1
- data/tracks/python/exercises/bracket-push/bracket_push_test.py +1 -1
- data/tracks/python/exercises/collatz-conjecture/collatz_conjecture_test.py +1 -1
- data/tracks/python/exercises/diamond/diamond_test.py +1 -1
- data/tracks/python/exercises/difference-of-squares/difference_of_squares_test.py +1 -1
- data/tracks/python/exercises/diffie-hellman/README.md +58 -0
- data/tracks/python/exercises/diffie-hellman/diffie_hellman.py +10 -0
- data/tracks/python/exercises/diffie-hellman/diffie_hellman_test.py +87 -0
- data/tracks/python/exercises/diffie-hellman/example.py +13 -0
- data/tracks/python/exercises/etl/etl_test.py +1 -1
- data/tracks/python/exercises/food-chain/README.md +81 -0
- data/tracks/python/exercises/food-chain/example.py +45 -0
- data/tracks/python/exercises/food-chain/food_chain.py +2 -0
- data/tracks/python/exercises/food-chain/food_chain_test.py +109 -0
- data/tracks/python/exercises/forth/README.md +43 -0
- data/tracks/python/exercises/forth/example.py +58 -0
- data/tracks/python/exercises/forth/forth.py +2 -0
- data/tracks/python/exercises/forth/forth_test.py +254 -0
- data/tracks/python/exercises/gigasecond/gigasecond_test.py +1 -1
- data/tracks/python/exercises/grep/grep_test.py +1 -1
- data/tracks/python/exercises/hello-world/hello_world_test.py +1 -1
- data/tracks/python/exercises/isogram/isogram_test.py +10 -10
- data/tracks/python/exercises/largest-series-product/largest_series_product_test.py +1 -1
- data/tracks/python/exercises/leap/leap_test.py +5 -5
- data/tracks/python/exercises/luhn/luhn_test.py +16 -16
- data/tracks/python/exercises/markdown/README.md +30 -0
- data/tracks/python/exercises/markdown/example.py +80 -0
- data/tracks/python/exercises/markdown/markdown.py +71 -0
- data/tracks/python/exercises/markdown/markdown_test.py +51 -0
- data/tracks/python/exercises/meetup/meetup_test.py +1 -1
- data/tracks/python/exercises/nth-prime/nth_prime_test.py +1 -1
- data/tracks/python/exercises/pascals-triangle/pascals_triangle_test.py +2 -2
- data/tracks/python/exercises/perfect-numbers/perfect_numbers_test.py +11 -11
- data/tracks/python/exercises/phone-number/phone_number_test.py +1 -1
- data/tracks/python/exercises/prime-factors/prime_factors_test.py +1 -1
- data/tracks/python/exercises/pythagorean-triplet/pythagorean_triplet_test.py +3 -3
- data/tracks/python/exercises/queen-attack/queen_attack_test.py +8 -8
- data/tracks/python/exercises/rail-fence-cipher/rail_fence_cipher_test.py +1 -1
- data/tracks/python/exercises/rectangles/rectangles_test.py +1 -1
- data/tracks/python/exercises/robot-simulator/robot_simulator.py +9 -1
- data/tracks/python/exercises/roman-numerals/roman_numerals_test.py +1 -1
- data/tracks/python/exercises/run-length-encoding/run_length_encoding_test.py +1 -1
- data/tracks/python/exercises/say/say_test.py +1 -1
- data/tracks/python/exercises/scrabble-score/scrabble_score_test.py +1 -1
- data/tracks/python/exercises/series/series.py +1 -1
- data/tracks/python/exercises/sieve/sieve_test.py +1 -1
- data/tracks/python/exercises/sublist/sublist_test.py +1 -1
- data/tracks/python/exercises/tournament/tournament_test.py +1 -1
- data/tracks/python/exercises/transpose/transpose_test.py +1 -1
- data/tracks/python/exercises/two-bucket/example.py +49 -54
- data/tracks/python/exercises/two-bucket/two_bucket_test.py +1 -1
- data/tracks/python/exercises/variable-length-quantity/variable_length_quantity_test.py +1 -1
- data/tracks/rust/config.json +24 -0
- data/tracks/rust/exercises/collatz-conjecture/Cargo.lock +4 -0
- data/tracks/rust/exercises/collatz-conjecture/Cargo.toml +3 -0
- data/tracks/rust/exercises/collatz-conjecture/README.md +65 -0
- data/tracks/rust/exercises/collatz-conjecture/example.rs +19 -0
- data/tracks/rust/exercises/collatz-conjecture/src/lib.rs +4 -0
- data/tracks/rust/exercises/collatz-conjecture/tests/collatz-conjecture.rs +32 -0
- data/tracks/rust/exercises/decimal/.gitignore +7 -0
- data/tracks/rust/exercises/decimal/.meta/description.md +19 -0
- data/tracks/rust/exercises/decimal/.meta/metadata.yml +3 -0
- data/tracks/rust/exercises/decimal/Cargo-example.toml +9 -0
- data/tracks/rust/exercises/decimal/Cargo.toml +6 -0
- data/tracks/rust/exercises/decimal/README.md +59 -0
- data/tracks/rust/exercises/decimal/example.rs +187 -0
- data/tracks/rust/exercises/decimal/src/lib.rs +10 -0
- data/tracks/rust/exercises/decimal/tests/decimal.rs +332 -0
- data/tracks/sml/exercises/accumulate/README.md +9 -1
- data/tracks/swift/exercises/luhn/Sources/LuhnExample.swift +17 -26
- data/tracks/swift/exercises/luhn/Tests/LinuxMain.swift +1 -1
- data/tracks/swift/exercises/luhn/Tests/LuhnTests/LuhnTests.swift +59 -35
- data/tracks/typescript/config.json +34 -0
- data/tracks/typescript/exercises/binary-search/README.md +67 -0
- data/tracks/typescript/exercises/binary-search/binary-search.example.ts +42 -0
- data/tracks/typescript/exercises/binary-search/binary-search.test.ts +27 -0
- data/tracks/typescript/exercises/binary-search/binary-search.ts +3 -0
- data/tracks/typescript/exercises/binary-search/package.json +36 -0
- data/tracks/typescript/exercises/binary-search/tsconfig.json +22 -0
- data/tracks/typescript/exercises/binary-search/tslint.json +127 -0
- data/tracks/typescript/exercises/binary-search/yarn.lock +2305 -0
- data/tracks/typescript/exercises/pascals-triangle/README.md +47 -0
- data/tracks/typescript/exercises/pascals-triangle/package.json +36 -0
- data/tracks/typescript/exercises/pascals-triangle/pascals-triangle.example.ts +32 -0
- data/tracks/typescript/exercises/pascals-triangle/pascals-triangle.test.ts +28 -0
- data/tracks/typescript/exercises/pascals-triangle/pascals-triangle.ts +2 -0
- data/tracks/typescript/exercises/pascals-triangle/tsconfig.json +22 -0
- data/tracks/typescript/exercises/pascals-triangle/tslint.json +127 -0
- data/tracks/typescript/exercises/pascals-triangle/yarn.lock +2305 -0
- data/tracks/typescript/exercises/rotational-cipher/README.md +63 -0
- data/tracks/typescript/exercises/rotational-cipher/package.json +36 -0
- data/tracks/typescript/exercises/rotational-cipher/rotational-cipher.example.ts +19 -0
- data/tracks/typescript/exercises/rotational-cipher/rotational-cipher.test.ts +56 -0
- data/tracks/typescript/exercises/rotational-cipher/rotational-cipher.ts +1 -0
- data/tracks/typescript/exercises/rotational-cipher/tsconfig.json +22 -0
- data/tracks/typescript/exercises/rotational-cipher/tslint.json +127 -0
- data/tracks/typescript/exercises/rotational-cipher/yarn.lock +2305 -0
- metadata +171 -5
- data/tracks/javascript/exercises/twelve-days/package.json +0 -69
- data/tracks/kotlin/exercises/hello-world/GETTING_STARTED.md +0 -50
|
@@ -1,49 +1,61 @@
|
|
|
1
|
+
// This file was auto-generated based on version 1.0.0 of the canonical data.
|
|
2
|
+
|
|
1
3
|
module RunLengthEncodingTest
|
|
2
4
|
|
|
3
|
-
open Xunit
|
|
4
5
|
open FsUnit.Xunit
|
|
5
|
-
open
|
|
6
|
+
open Xunit
|
|
6
7
|
|
|
7
8
|
open RunLengthEncoding
|
|
8
9
|
|
|
9
10
|
[<Fact>]
|
|
10
|
-
let ``Encode
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
let ``Encode empty string`` () =
|
|
12
|
+
encode "" |> should equal ""
|
|
13
|
+
|
|
14
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
15
|
+
let ``Encode single characters only are encoded without count`` () =
|
|
16
|
+
encode "XYZ" |> should equal "XYZ"
|
|
17
|
+
|
|
18
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
19
|
+
let ``Encode string with no single characters`` () =
|
|
20
|
+
encode "AABBBCCCC" |> should equal "2A3B4C"
|
|
21
|
+
|
|
22
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
23
|
+
let ``Encode single characters mixed with repeated characters`` () =
|
|
24
|
+
encode "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB" |> should equal "12WB12W3B24WB"
|
|
25
|
+
|
|
26
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
27
|
+
let ``Encode multiple whitespace mixed in string`` () =
|
|
28
|
+
encode " hsqq qww " |> should equal "2 hs2q q2w2 "
|
|
29
|
+
|
|
30
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
31
|
+
let ``Encode lowercase characters`` () =
|
|
32
|
+
encode "aabbbcccc" |> should equal "2a3b4c"
|
|
33
|
+
|
|
34
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
35
|
+
let ``Decode empty string`` () =
|
|
36
|
+
decode "" |> should equal ""
|
|
14
37
|
|
|
15
38
|
[<Fact(Skip = "Remove to run test")>]
|
|
16
|
-
let ``Decode
|
|
17
|
-
|
|
18
|
-
let expected = "AABBBCCCC"
|
|
19
|
-
decode input |> should equal expected
|
|
39
|
+
let ``Decode single characters only`` () =
|
|
40
|
+
decode "XYZ" |> should equal "XYZ"
|
|
20
41
|
|
|
21
42
|
[<Fact(Skip = "Remove to run test")>]
|
|
22
|
-
let ``
|
|
23
|
-
|
|
24
|
-
let expected = "12WB12W3B24WB"
|
|
25
|
-
encode input |> should equal expected
|
|
43
|
+
let ``Decode string with no single characters`` () =
|
|
44
|
+
decode "2A3B4C" |> should equal "AABBBCCCC"
|
|
26
45
|
|
|
27
46
|
[<Fact(Skip = "Remove to run test")>]
|
|
28
|
-
let ``Decode with
|
|
29
|
-
|
|
30
|
-
let expected = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB"
|
|
31
|
-
decode input |> should equal expected
|
|
47
|
+
let ``Decode single characters with repeated characters`` () =
|
|
48
|
+
decode "12WB12W3B24WB" |> should equal "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWB"
|
|
32
49
|
|
|
33
50
|
[<Fact(Skip = "Remove to run test")>]
|
|
34
|
-
let ``
|
|
35
|
-
|
|
36
|
-
let expected = "zzz ZZ zZ"
|
|
37
|
-
encode input |> decode |> should equal expected
|
|
51
|
+
let ``Decode multiple whitespace mixed in string`` () =
|
|
52
|
+
decode "2 hs2q q2w2 " |> should equal " hsqq qww "
|
|
38
53
|
|
|
39
54
|
[<Fact(Skip = "Remove to run test")>]
|
|
40
|
-
let ``
|
|
41
|
-
|
|
42
|
-
let expected = Encoding.Unicode.GetString([|240uy; 35uy; 51uy; 0uy; 189uy; 38uy; 50uy; 0uy; 80uy; 43uy; 240uy; 35uy|])
|
|
43
|
-
encode input |> should equal expected
|
|
55
|
+
let ``Decode lower case string`` () =
|
|
56
|
+
decode "2a3b4c" |> should equal "aabbbcccc"
|
|
44
57
|
|
|
45
58
|
[<Fact(Skip = "Remove to run test")>]
|
|
46
|
-
let ``
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
decode input |> should equal expected
|
|
59
|
+
let ``Encode followed by decode gives original string`` () =
|
|
60
|
+
"zzz ZZ zZ" |> encode |> decode |> should equal "zzz ZZ zZ"
|
|
61
|
+
|
|
@@ -2,6 +2,7 @@ module Generators.Generators
|
|
|
2
2
|
|
|
3
3
|
open System
|
|
4
4
|
open System.Globalization
|
|
5
|
+
open Humanizer
|
|
5
6
|
open Newtonsoft.Json.Linq
|
|
6
7
|
open Output
|
|
7
8
|
open Exercise
|
|
@@ -179,14 +180,8 @@ type QueenAttack() =
|
|
|
179
180
|
|
|
180
181
|
override this.RenderInput (canonicalDataCase, key, value) =
|
|
181
182
|
let parsePositionTuple (tupleValue: obj) =
|
|
182
|
-
let
|
|
183
|
-
|
|
184
|
-
.SelectToken("position")
|
|
185
|
-
.ToObject<string>()
|
|
186
|
-
.TrimStart('(')
|
|
187
|
-
.TrimEnd(')')
|
|
188
|
-
.Split(',')
|
|
189
|
-
formatValue (int parts.[0], int parts.[1])
|
|
183
|
+
let position = (tupleValue :?> JToken).SelectToken("position")
|
|
184
|
+
formatValue (position.["row"].ToObject<int>(), position.["column"].ToObject<int>())
|
|
190
185
|
|
|
191
186
|
match key with
|
|
192
187
|
| "queen" | "white_queen" | "black_queen" -> parsePositionTuple value
|
|
@@ -203,6 +198,24 @@ type RnaTranscription() =
|
|
|
203
198
|
override this.RenderExpected (canonicalDataCase, key, value) =
|
|
204
199
|
value |> Option.ofObj |> formatValue |> backwardPipe
|
|
205
200
|
|
|
201
|
+
type RunLengthEncoding() =
|
|
202
|
+
inherit Exercise()
|
|
203
|
+
|
|
204
|
+
override this.RenderSut canonicalDataCase =
|
|
205
|
+
match canonicalDataCase.Property with
|
|
206
|
+
| "consistency" ->
|
|
207
|
+
let parameters = this.RenderSutParameters canonicalDataCase |> String.concat " "
|
|
208
|
+
sprintf "%s |> encode |> decode" parameters
|
|
209
|
+
| _ ->
|
|
210
|
+
base.RenderSut canonicalDataCase
|
|
211
|
+
|
|
212
|
+
override this.RenderTestMethodName canonicalDataCase =
|
|
213
|
+
match canonicalDataCase.Property with
|
|
214
|
+
| "consistency" ->
|
|
215
|
+
base.RenderTestMethodName canonicalDataCase
|
|
216
|
+
| _ ->
|
|
217
|
+
sprintf "%s %s" canonicalDataCase.Property canonicalDataCase.Description |> String.upperCaseFirst
|
|
218
|
+
|
|
206
219
|
type RomanNumerals() =
|
|
207
220
|
inherit Exercise()
|
|
208
221
|
|
data/tracks/gnu-apl/test.apl
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env apl --script
|
|
2
2
|
|
|
3
3
|
⍝ Clear logfile with given filename.
|
|
4
|
-
∇test∆clear_log filename
|
|
4
|
+
∇test∆clear_log filename;handle;_
|
|
5
5
|
handle←'w' ⎕FIO[3] filename
|
|
6
6
|
_←⎕FIO[4] handle
|
|
7
7
|
∇
|
|
8
8
|
|
|
9
9
|
⍝ )COPY file relative to current directory.
|
|
10
|
-
∇test∆copy_relative path
|
|
10
|
+
∇test∆copy_relative path;_
|
|
11
11
|
_←⍎ ')COPY ',test¯pwd,'/',path
|
|
12
12
|
∇
|
|
13
13
|
|
|
14
14
|
⍝ Write logfile with given filename to stderr as UTF-8.
|
|
15
|
-
∇test∆show_log filename
|
|
15
|
+
∇test∆show_log filename;cr
|
|
16
16
|
cr←⎕ucs 10
|
|
17
17
|
test¯warn cr,'***** TEST LOG *****',cr,cr
|
|
18
18
|
test¯warn test¯read_unicode filename
|
|
@@ -31,6 +31,6 @@
|
|
|
31
31
|
∇
|
|
32
32
|
|
|
33
33
|
⍝ Write string to stderr.
|
|
34
|
-
∇test¯warn string
|
|
34
|
+
∇test¯warn string;_
|
|
35
35
|
_←'%s' string ⎕FIO[22] 2
|
|
36
36
|
∇
|
data/tracks/go/README.md
CHANGED
|
@@ -112,8 +112,7 @@ So let's quickly run through each file and briefly describe it:
|
|
|
112
112
|
|
|
113
113
|
* **.meta/metadata.yml** - Like the `meta/*.md` files, this will
|
|
114
114
|
override the exercise metadata from the problem-specifications
|
|
115
|
-
repository.
|
|
116
|
-
`description.md` file to be used: see exercism/configlet#65.
|
|
115
|
+
repository.
|
|
117
116
|
|
|
118
117
|
In some exercises there can be extra files, for instance the
|
|
119
118
|
[series](exercises/series/) exercise contains extra test files.
|
|
@@ -26,13 +26,12 @@
|
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
28
|
"alumnus": false,
|
|
29
|
-
"
|
|
30
|
-
"bio": null,
|
|
29
|
+
"bio": "Passionate Developer",
|
|
31
30
|
"github_username": "ferhatelmas",
|
|
32
|
-
"link_text":
|
|
33
|
-
"link_url":
|
|
34
|
-
"name":
|
|
35
|
-
"show_on_website":
|
|
31
|
+
"link_text": "ferhatelmas.com",
|
|
32
|
+
"link_url": "https://ferhatelmas.com",
|
|
33
|
+
"name": "ferhat elmas",
|
|
34
|
+
"show_on_website": true
|
|
36
35
|
},
|
|
37
36
|
{
|
|
38
37
|
"github_username": "tleen",
|
data/tracks/groovy/config.json
CHANGED
|
@@ -154,6 +154,16 @@
|
|
|
154
154
|
"regular expressions"
|
|
155
155
|
]
|
|
156
156
|
},
|
|
157
|
+
{
|
|
158
|
+
"uuid": "1cbf382-0aa4-4e80-ea21-70bf38c1cb91546a3ea",
|
|
159
|
+
"slug": "triangle",
|
|
160
|
+
"core": false,
|
|
161
|
+
"unlocked_by": null,
|
|
162
|
+
"difficulty": 3,
|
|
163
|
+
"topics": [
|
|
164
|
+
"mathematics"
|
|
165
|
+
]
|
|
166
|
+
},
|
|
157
167
|
{
|
|
158
168
|
"uuid": "1d098fb3-0a27-5380-3849-73f2ca77ff2f84ca698",
|
|
159
169
|
"slug": "scrabble-score",
|
|
@@ -164,6 +174,19 @@
|
|
|
164
174
|
"strings",
|
|
165
175
|
"mathematics"
|
|
166
176
|
]
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"uuid": "a42fe79f-039a-be80-880c-1d691f7b84e85f59148",
|
|
180
|
+
"slug": "binary-search",
|
|
181
|
+
"core": false,
|
|
182
|
+
"unlocked_by": null,
|
|
183
|
+
"difficulty": 4,
|
|
184
|
+
"topics": [
|
|
185
|
+
"collections",
|
|
186
|
+
"lists",
|
|
187
|
+
"algorithms",
|
|
188
|
+
"searching"
|
|
189
|
+
]
|
|
167
190
|
}
|
|
168
191
|
]
|
|
169
192
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class BinarySearch {
|
|
2
|
+
|
|
3
|
+
List data
|
|
4
|
+
|
|
5
|
+
// You may assume for this exercise that the input data is sorted in ascending order.
|
|
6
|
+
BinarySearch(List data) {
|
|
7
|
+
this.data = data
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
int indexOf(item) {
|
|
11
|
+
throw new UnsupportedOperationException('indexOf method not implemented')
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
@Grab("org.spockframework:spock-core:1.0-groovy-2.4")
|
|
2
|
+
import spock.lang.*
|
|
3
|
+
|
|
4
|
+
class BinarySearchSpec extends Specification {
|
|
5
|
+
|
|
6
|
+
def "finds a value in an array with one element"() {
|
|
7
|
+
expect:
|
|
8
|
+
new BinarySearch([6]).indexOf(6) == 0
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
def "finds a value in the middle of an array"() {
|
|
12
|
+
expect:
|
|
13
|
+
new BinarySearch([1, 3, 4, 6, 8, 9, 11]).indexOf(6) == 3
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
def "finds a value at the beginning of an array"() {
|
|
17
|
+
expect:
|
|
18
|
+
new BinarySearch([1, 3, 4, 6, 8, 9, 11]).indexOf(1) == 0
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
def "finds a value at the end of an array"() {
|
|
22
|
+
expect:
|
|
23
|
+
new BinarySearch([1, 3, 4, 6, 8, 9, 11]).indexOf(11) == 6
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
def "finds a value in an array of odd length"() {
|
|
27
|
+
expect:
|
|
28
|
+
new BinarySearch([1, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 634]).indexOf(144) == 9
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
def "finds a value in an array of even length"() {
|
|
32
|
+
expect:
|
|
33
|
+
new BinarySearch([1, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]).indexOf(21) == 5
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
def "identifies that a value is not included in the array"() {
|
|
37
|
+
expect:
|
|
38
|
+
new BinarySearch([1, 3, 4, 6, 8, 9, 11]).indexOf(7) == -1
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
def "a value smaller than the array's smallest value is not included"() {
|
|
42
|
+
expect:
|
|
43
|
+
new BinarySearch([1, 3, 4, 6, 8, 9, 11]).indexOf(0) == -1
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
def "a value larger than the array's largest value is not included"() {
|
|
47
|
+
expect:
|
|
48
|
+
new BinarySearch([1, 3, 4, 6, 8, 9, 11]).indexOf(13) == -1
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
def "nothing is included in an empty array"() {
|
|
52
|
+
expect:
|
|
53
|
+
new BinarySearch([]).indexOf(1) == -1
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
class BinarySearch {
|
|
2
|
+
|
|
3
|
+
List data
|
|
4
|
+
|
|
5
|
+
// You may assume for this exercise that the input data is sorted in ascending order.
|
|
6
|
+
BinarySearch(List data) {
|
|
7
|
+
this.data = data
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
int indexOf(item) {
|
|
11
|
+
if (data.empty) { return -1 }
|
|
12
|
+
if (item < data.first()) { return -1 }
|
|
13
|
+
if (item > data.last()) { return -1 }
|
|
14
|
+
|
|
15
|
+
int left = 0
|
|
16
|
+
int right = data.size() - 1
|
|
17
|
+
|
|
18
|
+
while (true) {
|
|
19
|
+
int middle = (left + right) / 2
|
|
20
|
+
def value = data[middle]
|
|
21
|
+
|
|
22
|
+
if (item == value) {
|
|
23
|
+
// Found it, return index.
|
|
24
|
+
return middle
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (left >= right) {
|
|
28
|
+
// Nothing left to search!
|
|
29
|
+
return -1
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (item < value) {
|
|
33
|
+
// Search left half.
|
|
34
|
+
right = middle - 1
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
// Search right half.
|
|
38
|
+
left = middle + 1
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
## Binary Search
|
|
2
|
+
|
|
3
|
+
Implement a binary search algorithm.
|
|
4
|
+
|
|
5
|
+
Searching a sorted collection is a common task. A dictionary is a sorted
|
|
6
|
+
list of word definitions. Given a word, one can find its definition. A
|
|
7
|
+
telephone book is a sorted list of people's names, addresses, and
|
|
8
|
+
telephone numbers. Knowing someone's name allows one to quickly find
|
|
9
|
+
their telephone number and address.
|
|
10
|
+
|
|
11
|
+
If the list to be searched contains more than a few items (a dozen, say)
|
|
12
|
+
a binary search will require far fewer comparisons than a linear search,
|
|
13
|
+
but it imposes the requirement that the list be sorted.
|
|
14
|
+
|
|
15
|
+
In computer science, a binary search or half-interval search algorithm
|
|
16
|
+
finds the position of a specified input value (the search "key") within
|
|
17
|
+
an array sorted by key value.
|
|
18
|
+
|
|
19
|
+
In each step, the algorithm compares the search key value with the key
|
|
20
|
+
value of the middle element of the array.
|
|
21
|
+
|
|
22
|
+
If the keys match, then a matching element has been found and its index,
|
|
23
|
+
or position, is returned.
|
|
24
|
+
|
|
25
|
+
Otherwise, if the search key is less than the middle element's key, then
|
|
26
|
+
the algorithm repeats its action on the sub-array to the left of the
|
|
27
|
+
middle element or, if the search key is greater, on the sub-array to the
|
|
28
|
+
right.
|
|
29
|
+
|
|
30
|
+
If the remaining array to be searched is empty, then the key cannot be
|
|
31
|
+
found in the array and a special "not found" indication is returned.
|
|
32
|
+
|
|
33
|
+
A binary search halves the number of items to check with each iteration,
|
|
34
|
+
so locating an item (or determining its absence) takes logarithmic time.
|
|
35
|
+
A binary search is a dichotomic divide and conquer search algorithm.
|
|
36
|
+
|
|
37
|
+
## Source
|
|
38
|
+
|
|
39
|
+
Additional information at: [http://en.wikipedia.org/wiki/Binary_search_algorithm](http://en.wikipedia.org/wiki/Binary_search_algorithm)
|
|
40
|
+
|
|
41
|
+
## Need help?
|
|
42
|
+
|
|
43
|
+
For installation and learning resources, refer to the
|
|
44
|
+
[exercism help page](http://exercism.io/languages/groovy).
|
|
45
|
+
|
|
46
|
+
## Running the Tests
|
|
47
|
+
Run the tests by executing the test script.
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
$ groovy ./BinarySearchSpec.groovy
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
After the first test(s) pass, continue by commenting out or removing the `@Ignore` annotations on other tests.
|
|
54
|
+
|
|
55
|
+
When all tests pass, congratulations!
|
|
56
|
+
|
|
57
|
+
## Submitting Incomplete Solutions
|
|
58
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
59
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class Triangle {
|
|
2
|
+
|
|
3
|
+
// To be valid, the triangle must have positive sides and satisfy the triangle inequality.
|
|
4
|
+
static boolean isLegal(Number a, Number b, Number c) {
|
|
5
|
+
(a > 0) && (b > 0) && (c > 0) && (a <= b + c) && (b <= c + a) && (c <= a + b)
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// Equilateral triangles have all sides equal.
|
|
9
|
+
static boolean isEquilateral(Number a, Number b, Number c) {
|
|
10
|
+
isLegal(a, b, c) && (a == b) && (b == c)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// To be isosceles, at least two of the three sides must be equal.
|
|
14
|
+
static boolean isIsosceles(Number a, Number b, Number c) {
|
|
15
|
+
isLegal(a, b, c) && ( (a == b) || (b == c) || (c == a) )
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Scalene triangles have all three sides different.
|
|
19
|
+
static boolean isScalene(Number a, Number b, Number c) {
|
|
20
|
+
isLegal(a, b, c) && (a != b) && (b != c) && (c != a)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
## Triangle
|
|
2
|
+
|
|
3
|
+
Determine if a triangle is equilateral, isosceles, or scalene.
|
|
4
|
+
|
|
5
|
+
An _equilateral_ triangle has all three sides the same length.
|
|
6
|
+
|
|
7
|
+
An _isosceles_ triangle has at least two sides the same length. (It is sometimes
|
|
8
|
+
specified as having exactly two sides the same length, but for the purposes of
|
|
9
|
+
this exercise we'll say at least two.)
|
|
10
|
+
|
|
11
|
+
A _scalene_ triangle has all sides of different lengths.
|
|
12
|
+
|
|
13
|
+
## Note
|
|
14
|
+
|
|
15
|
+
For a shape to be a triangle at all, all sides have to be of length > 0, and
|
|
16
|
+
the sum of the lengths of any two sides must be greater than or equal to the
|
|
17
|
+
length of the third side. See [Triangle Inequality](https://en.wikipedia.org/wiki/Triangle_inequality).
|
|
18
|
+
|
|
19
|
+
## Dig Deeper
|
|
20
|
+
|
|
21
|
+
The case where the sum of the lengths of two sides _equals_ that of the
|
|
22
|
+
third is known as a _degenerate_ triangle - it has zero area and looks like
|
|
23
|
+
a single line. Feel free to add your own code/tests to check for degenerate triangles.
|
|
24
|
+
|
|
25
|
+
## Need help?
|
|
26
|
+
|
|
27
|
+
For installation and learning resources, refer to the
|
|
28
|
+
[exercism help page](http://exercism.io/languages/groovy).
|
|
29
|
+
|
|
30
|
+
## Running the Tests
|
|
31
|
+
Run the tests by executing the test script.
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
$ groovy ./TriangleSpec.groovy
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
After the first test(s) pass, continue by commenting out or removing the `@Ignore` annotations prepending other tests.
|
|
38
|
+
|
|
39
|
+
When all tests pass, congratulations!
|
|
40
|
+
|
|
41
|
+
## Submitting Incomplete Solutions
|
|
42
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|