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
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
(ql:quickload "lisp-unit")
|
|
2
|
+
#-xlisp-test (load "hello-world")
|
|
3
|
+
|
|
4
|
+
(defpackage #:hello-world-test
|
|
5
|
+
(:use #:common-lisp #:lisp-unit))
|
|
6
|
+
|
|
7
|
+
(in-package #:hello-world-test)
|
|
8
|
+
|
|
9
|
+
(define-test hello-world-test
|
|
10
|
+
(assert-equal "Hello World!" (hw:hello-world)))
|
|
11
|
+
|
|
12
|
+
(define-test hello-alice-test
|
|
13
|
+
(assert-equal "Hello Alice!" (hw:hello-world "Alice")))
|
|
14
|
+
|
|
15
|
+
(define-test hello-bob-test
|
|
16
|
+
(assert-equal "Hello Bob!" (hw:hello-world "Bob")))
|
|
17
|
+
|
|
18
|
+
#-xlisp-test
|
|
19
|
+
(let ((*print-errors* t)
|
|
20
|
+
(*print-failures* t))
|
|
21
|
+
(run-tests :all))
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Perfect numbers
|
|
2
|
+
|
|
3
|
+
Determine if a number is perfect, abundant, or deficient based on
|
|
4
|
+
Nicomachus' (60 - 120 CE) classification scheme for natural numbers.
|
|
5
|
+
|
|
6
|
+
The Greek mathematician [Nicomachus](https://en.wikipedia.org/wiki/Nicomachus) devised a classification scheme for natural numbers, identifying each as belonging uniquely to the categories of **perfect**, **abundant**, or **deficient** based on their [aliquot sum](https://en.wikipedia.org/wiki/Aliquot_sum). The aliquot sum is defined as the sum of the factors of a number not including the number itself. For example, the aliquot sum of 15 is (1 + 3 + 5) = 9
|
|
7
|
+
|
|
8
|
+
- **Perfect**: aliquot sum = number
|
|
9
|
+
- 6 is a perfect number because (1 + 2 + 3) = 6
|
|
10
|
+
- 28 is a perfect number because (1 + 2 + 4 + 7 + 14) = 28
|
|
11
|
+
- **Abundant**: aliquot sum > number
|
|
12
|
+
- 12 is an abundant number because (1 + 2 + 3 + 4 + 6) = 16
|
|
13
|
+
- 24 is an abundant number because (1 + 2 + 3 + 4 + 6 + 8 + 12) = 36
|
|
14
|
+
- **Deficient**: aliquot sum < number
|
|
15
|
+
- 8 is a deficient number because (1 + 2 + 4) = 7
|
|
16
|
+
- Prime numbers are deficient
|
|
17
|
+
|
|
18
|
+
Implement a way to determine whether a given number is **perfect**. Depending on your language track, you may also need to implement a way to determine whether a given number is **abundant** or **deficient**.
|
|
19
|
+
|
|
20
|
+
## Setup
|
|
21
|
+
|
|
22
|
+
Check out [Exercism Help](http://exercism.io/languages/lisp) for instructions to
|
|
23
|
+
get started writing Common Lisp. That page will explain how to install and setup
|
|
24
|
+
a Lisp implementation and how to run the tests.
|
|
25
|
+
|
|
26
|
+
## Formatting
|
|
27
|
+
|
|
28
|
+
While Common Lisp doesn't care about indentation and layout of code,
|
|
29
|
+
nor whether you use spaces or tabs, this is an important consideration
|
|
30
|
+
for submissions to exercism.io. Excercism.io's code widget cannot
|
|
31
|
+
handle mixing of tab and space characters well so using only spaces is recommended to make
|
|
32
|
+
the code more readable to the human reviewers. Please review your
|
|
33
|
+
editors settings on how to accomplish this. Below are instructions for
|
|
34
|
+
popular editors for Common Lisp.
|
|
35
|
+
|
|
36
|
+
### VIM
|
|
37
|
+
|
|
38
|
+
Use the following commands to ensure VIM uses only spaces for
|
|
39
|
+
indentation:
|
|
40
|
+
|
|
41
|
+
```vimscript
|
|
42
|
+
:set tabstop=2
|
|
43
|
+
:set shiftwidth=2
|
|
44
|
+
:set expandtab
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
(or as a oneliner `:set tabstop=2 shiftwidth=2 expandtab`). This can
|
|
48
|
+
be added to your `~/.vimrc` file to use it all the time.
|
|
49
|
+
|
|
50
|
+
### Emacs
|
|
51
|
+
|
|
52
|
+
Emacs is very well suited for editing Common Lisp and has many
|
|
53
|
+
powerful add-on packages available. The only thing that one needs to
|
|
54
|
+
do with a stock emacs to make it work well with exercism.io is to
|
|
55
|
+
evaluate the following code:
|
|
56
|
+
|
|
57
|
+
`(setq indent-tab-mode nil)`
|
|
58
|
+
|
|
59
|
+
This can be placed in your `~/.emacs` (or `~/.emacs.d/init.el`) in
|
|
60
|
+
order to have it set whenever Emacs is launched.
|
|
61
|
+
|
|
62
|
+
One suggested add-on for Emacs and Common Lisp is
|
|
63
|
+
[SLIME](https://github.com/slime/slime) which offers tight integration
|
|
64
|
+
with the REPL; making iterative coding and testing very easy.
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
## Source
|
|
68
|
+
Taken from Chapter 2 of Functional Thinking by Neal Ford.
|
|
69
|
+
[http://shop.oreilly.com/product/0636920029687.do](http://shop.oreilly.com/product/0636920029687.do)
|
|
70
|
+
|
|
71
|
+
## Submitting Incomplete Solutions
|
|
72
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
(defpackage #:perfect-numbers
|
|
2
|
+
(:use #:common-lisp)
|
|
3
|
+
(:export #:classify))
|
|
4
|
+
|
|
5
|
+
(in-package #:perfect-numbers)
|
|
6
|
+
|
|
7
|
+
(defun divisors (n)
|
|
8
|
+
(remove-if-not (lambda (x) (= 0 (rem n x)))
|
|
9
|
+
(loop for x from 1 to (floor n 2) collect x)))
|
|
10
|
+
|
|
11
|
+
(defun classify (n)
|
|
12
|
+
(if (> n 0)
|
|
13
|
+
(let ((div-sum (reduce #'+ (divisors n))))
|
|
14
|
+
(cond ((= n div-sum) "perfect")
|
|
15
|
+
((< n div-sum) "abundant")
|
|
16
|
+
(T "deficient")))
|
|
17
|
+
(warn "Just defined for natural numbers")))
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
(ql:quickload "lisp-unit")
|
|
2
|
+
#-xlisp-test (load "perfect-numbers")
|
|
3
|
+
|
|
4
|
+
(defpackage #:perfect-numbers-test
|
|
5
|
+
(:use #:common-lisp #:lisp-unit))
|
|
6
|
+
|
|
7
|
+
(in-package #:perfect-numbers-test)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
;; Perfect numbers tests:
|
|
11
|
+
(define-test smallest-perfect-number
|
|
12
|
+
(assert-equal "perfect" (perfect-numbers:classify 6)))
|
|
13
|
+
|
|
14
|
+
(define-test medium-perfect-number
|
|
15
|
+
(assert-equal "perfect" (perfect-numbers:classify 28)))
|
|
16
|
+
|
|
17
|
+
(define-test large-perfect-number
|
|
18
|
+
(assert-equal "perfect" (perfect-numbers:classify 33550336)))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
;; Abundant numbers tests:
|
|
22
|
+
(define-test smallest-abundant-number
|
|
23
|
+
(assert-equal "abundant" (perfect-numbers:classify 12)))
|
|
24
|
+
|
|
25
|
+
(define-test medium-abundant-number
|
|
26
|
+
(assert-equal "abundant" (perfect-numbers:classify 30)))
|
|
27
|
+
|
|
28
|
+
(define-test large-abundant-number
|
|
29
|
+
(assert-equal "abundant" (perfect-numbers:classify 33550335)))
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
;; Deficient numbers tests:
|
|
33
|
+
(define-test smallest-prime-deficient-number
|
|
34
|
+
(assert-equal "deficient" (perfect-numbers:classify 2)))
|
|
35
|
+
|
|
36
|
+
(define-test smallest-non-prime-deficient-number
|
|
37
|
+
(assert-equal "deficient" (perfect-numbers:classify 1)))
|
|
38
|
+
|
|
39
|
+
(define-test medium-deficient-number
|
|
40
|
+
(assert-equal "deficient" (perfect-numbers:classify 32)))
|
|
41
|
+
|
|
42
|
+
(define-test large-deficient-number
|
|
43
|
+
(assert-equal "deficient" (perfect-numbers:classify 33550337)))
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
;; Undefined values of classify tests:
|
|
47
|
+
(define-test undefinded-0
|
|
48
|
+
(assert-equal NIL (perfect-numbers:classify 0)))
|
|
49
|
+
|
|
50
|
+
(define-test undefined-negative
|
|
51
|
+
(assert-equal NIL (perfect-numbers:classify -3)))
|
|
52
|
+
|
|
53
|
+
#-xlisp-test
|
|
54
|
+
(let ((*print-errors* t)
|
|
55
|
+
(*print-failures* t))
|
|
56
|
+
(run-tests :all))
|
data/tracks/cpp/.travis.yml
CHANGED
|
@@ -1,19 +1,39 @@
|
|
|
1
|
-
---
|
|
2
1
|
dist: trusty
|
|
3
|
-
sudo:
|
|
2
|
+
sudo: false
|
|
4
3
|
language: cpp
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
|
|
5
|
+
matrix:
|
|
6
|
+
include:
|
|
7
|
+
# GCC 4.9
|
|
8
|
+
- os: linux
|
|
9
|
+
addons:
|
|
10
|
+
apt:
|
|
11
|
+
sources:
|
|
12
|
+
- ubuntu-toolchain-r-test
|
|
13
|
+
packages:
|
|
14
|
+
- g++-4.9
|
|
15
|
+
env: MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
|
|
16
|
+
|
|
17
|
+
# Clang 3.8
|
|
18
|
+
- os: linux
|
|
19
|
+
addons:
|
|
20
|
+
apt:
|
|
21
|
+
sources:
|
|
22
|
+
- ubuntu-toolchain-r-test
|
|
23
|
+
- llvm-toolchain-precise-3.8
|
|
24
|
+
packages:
|
|
25
|
+
- clang-3.8
|
|
26
|
+
env: MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8"
|
|
27
|
+
|
|
8
28
|
before_install:
|
|
9
|
-
- sudo add-apt-repository -y ppa:samuel-bachmann/boost
|
|
10
|
-
- sudo
|
|
11
|
-
-
|
|
29
|
+
- sudo add-apt-repository -y ppa:samuel-bachmann/boost
|
|
30
|
+
- sudo apt-get -y -d update
|
|
31
|
+
- eval "${MATRIX_EVAL}"
|
|
12
32
|
install:
|
|
13
|
-
- sudo apt-get -
|
|
14
|
-
- sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 90
|
|
33
|
+
- sudo apt-get -y install libboost-regex1.60-dev libboost-test1.60-dev libboost-date-time1.60-dev
|
|
15
34
|
script:
|
|
16
|
-
- bin/fetch-configlet
|
|
17
|
-
- bin/configlet lint .
|
|
18
|
-
- cmake -G "Unix Makefiles"
|
|
19
|
-
- make
|
|
35
|
+
- bin/fetch-configlet
|
|
36
|
+
- bin/configlet lint .
|
|
37
|
+
- cmake -G "Unix Makefiles"
|
|
38
|
+
- make
|
|
39
|
+
|
|
@@ -14,42 +14,33 @@ as separate command-line tools.
|
|
|
14
14
|
|
|
15
15
|
### Prerequisite: A Modern C++11 Compiler
|
|
16
16
|
|
|
17
|
-
This language track
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
as the most recent version of the ISO standard. The language track will
|
|
23
|
-
be updated to C++14 once support is sufficiently mature in the development
|
|
24
|
-
environments across all major platforms.
|
|
25
|
-
|
|
26
|
-
Free compilers exist for C++11 on all major platforms, although the version
|
|
27
|
-
of the C++ compiler installed on your system may be an older version that
|
|
28
|
-
doesn't fully support C++11. A comparison chart of
|
|
29
|
-
[C++ compiler support](http://en.cppreference.com/w/cpp/compiler_support)
|
|
30
|
-
and related [discussion](http://en.cppreference.com/w/Talk:cpp/compiler_support)
|
|
31
|
-
shows that most of the major features of C++11 are available on all major
|
|
32
|
-
platforms.
|
|
17
|
+
This language track requires a compiler with [C++11](http://en.wikipedia.org/wiki/C%2B%2B11)
|
|
18
|
+
support, which was release in 2011. All major compilers released in the last few years should
|
|
19
|
+
be compatible, so as long as you are on a fairly recent version you should be fine.
|
|
20
|
+
Specifically, GCC version 5.1 or later, Clang version 3.8 or later, or Visual
|
|
21
|
+
Studio 2015 or later.
|
|
33
22
|
|
|
34
23
|
#### Linux
|
|
35
24
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
set as the default compiler with the following recipe:
|
|
25
|
+
Ubuntu 16.04 and later have compatible compilers in the package manager, so
|
|
26
|
+
installing the necessary compiler can be done with `sudo apt-get install gcc`.
|
|
27
|
+
If you're on an older version of Ubuntu, you should be able to install a newer
|
|
28
|
+
GCC version using the following:
|
|
41
29
|
|
|
42
30
|
```bash
|
|
43
31
|
$ sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
|
|
44
32
|
$ sudo apt-get -qq -d update
|
|
45
|
-
$ sudo apt-get -qq install g++-
|
|
46
|
-
$ # make g++
|
|
47
|
-
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-
|
|
33
|
+
$ sudo apt-get -qq install g++-5
|
|
34
|
+
$ # make g++ 5 the default g++ executable
|
|
35
|
+
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 90
|
|
48
36
|
```
|
|
49
37
|
|
|
38
|
+
For other distributions, you should be able to acquire the compiler through your
|
|
39
|
+
package manager.
|
|
40
|
+
|
|
50
41
|
#### MacOS
|
|
51
42
|
|
|
52
|
-
MacOS users can install
|
|
43
|
+
MacOS users can install GCC with [Homebrew](http://brew.sh/) via
|
|
53
44
|
`brew install gcc`.
|
|
54
45
|
|
|
55
46
|
#### Windows
|
|
@@ -87,9 +78,7 @@ improve the CMake support.
|
|
|
87
78
|
|
|
88
79
|
The unit tests use Boost.Test, the unit testing framework included with
|
|
89
80
|
[Boost](http://www.boost.org/index.html). You may find other libraries
|
|
90
|
-
in Boost useful to you as you work through the exercises.
|
|
91
|
-
gcc 4.8 does not have a proper implementation of the standard regular
|
|
92
|
-
expression library, but you can find a compatible library in Boost.
|
|
81
|
+
in Boost useful to you as you work through the exercises.
|
|
93
82
|
You will need to download and install Boost. As of this writing Boost
|
|
94
83
|
1.59+ is the required version. You will need a compiled version of the
|
|
95
84
|
boost libraries Boost.Test, Boost.DateTime and Boost.Regex, or you will
|
data/tracks/cpp/docs/TESTS.md
CHANGED
|
@@ -52,7 +52,7 @@ Once the build environment has been created by CMake, you can build your
|
|
|
52
52
|
code using the appropriate command for your environment:
|
|
53
53
|
|
|
54
54
|
* Linux with make: `make`
|
|
55
|
-
* Windows with Visual Studio
|
|
55
|
+
* Windows with Visual Studio: Select Build / Build Solution from the menu.
|
|
56
56
|
* MacOS with Xcode: Select Build from the toolbar
|
|
57
57
|
|
|
58
58
|
Examples of running CMake for different environments are shown below.
|
|
@@ -77,36 +77,32 @@ Simply type make in the build directory to compile the tests. This should
|
|
|
77
77
|
generate compile time errors. Once the errors are fixed make will build and
|
|
78
78
|
run the tests.
|
|
79
79
|
|
|
80
|
-
#### Windows with Visual Studio
|
|
80
|
+
#### Windows with Visual Studio 2017
|
|
81
81
|
|
|
82
|
-
The generator name for CMake is `Visual Studio
|
|
83
|
-
supports all editions of Visual Studio
|
|
84
|
-
|
|
85
|
-
|
|
82
|
+
The generator name for CMake is `Visual Studio 15`. The same generator
|
|
83
|
+
supports all IDE editions of Visual Studio 2017: Community, Professional,
|
|
84
|
+
and Enterprise. Assuming the current exercise is `bob` and we're in the
|
|
85
|
+
exercise folder:
|
|
86
86
|
|
|
87
87
|
```
|
|
88
88
|
> copy nul: bob.h
|
|
89
89
|
> copy nul: bob.cpp
|
|
90
90
|
> mkdir build
|
|
91
91
|
> cd build
|
|
92
|
-
> cmake -G "Visual Studio
|
|
92
|
+
> cmake -G "Visual Studio 15" ..
|
|
93
93
|
```
|
|
94
94
|
|
|
95
95
|
This example shows creating empty files for the implementation before
|
|
96
96
|
running CMake.
|
|
97
97
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
binaries wherever you like or build from source wherever you like and
|
|
101
|
-
there is no standard install location on the system.
|
|
102
|
-
|
|
103
|
-
If you get complaints from CMake about not being able to find Boost, you
|
|
98
|
+
If you installed boost to the default location, Cmake may be able to
|
|
99
|
+
find it for you automatically. If it can't find it, you will need to
|
|
104
100
|
need to supply additional arguments to tell CMake where to find it by
|
|
105
101
|
setting the `BOOST_INCLUDEDIR` variable on the command-line. Here is an
|
|
106
|
-
example using the Visual Studio
|
|
102
|
+
example using the Visual Studio 2017 generator:
|
|
107
103
|
|
|
108
104
|
```
|
|
109
|
-
> cmake -G "Visual Studio
|
|
105
|
+
> cmake -G "Visual Studio 15" -DBOOST_INCLUDEDIR:PATH=D:/Code/boost/boost_1_59_0 ..
|
|
110
106
|
```
|
|
111
107
|
|
|
112
108
|
**Note:** Path locations passed to CMake always use slash (`/`) as the
|
|
@@ -129,10 +125,6 @@ running CMake.
|
|
|
129
125
|
|
|
130
126
|
## Boost.Test Documentation
|
|
131
127
|
|
|
132
|
-
|
|
133
|
-
and is nearly complete.
|
|
134
|
-
Prefer the documentation rewrite to look up something if you're unfamiliar
|
|
135
|
-
with Boost.Test and want to know more.
|
|
128
|
+
If you need to consult the Boost.Test documentation you can find it here:
|
|
136
129
|
|
|
137
|
-
* [Boost.Test documentation
|
|
138
|
-
* [Boost.Test 1.55 official documentation](http://www.boost.org/doc/libs/1_55_0/libs/test/doc/html/index.html)
|
|
130
|
+
* [Boost.Test 1.59 official documentation](http://www.boost.org/doc/libs/1_59_0/libs/test/doc/html/index.html)
|
data/tracks/crystal/config.json
CHANGED
|
@@ -73,6 +73,16 @@
|
|
|
73
73
|
|
|
74
74
|
]
|
|
75
75
|
},
|
|
76
|
+
{
|
|
77
|
+
"uuid": "64f8e403-9a3d-4094-9114-f1bee88c072b",
|
|
78
|
+
"slug": "triangle",
|
|
79
|
+
"core": false,
|
|
80
|
+
"unlocked_by": null,
|
|
81
|
+
"difficulty": 1,
|
|
82
|
+
"topics": [
|
|
83
|
+
|
|
84
|
+
]
|
|
85
|
+
},
|
|
76
86
|
{
|
|
77
87
|
"uuid": "19298c02-b34f-4f11-aad6-5da4838967a0",
|
|
78
88
|
"slug": "difference-of-squares",
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require "spec"
|
|
2
|
+
require "../src/*"
|
|
3
|
+
|
|
4
|
+
describe "Triangle" do
|
|
5
|
+
it "true if all sides are equal" do
|
|
6
|
+
Triangle.new([2, 2, 2]).equilateral?.should eq(true)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
pending "false if any side is unequal" do
|
|
10
|
+
Triangle.new([2, 3, 2]).equilateral?.should eq(false)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
pending "false if no sides are equal" do
|
|
14
|
+
Triangle.new([5, 4, 6]).equilateral?.should eq(false)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
pending "All zero sides are illegal, so the triangle is not equilateral" do
|
|
18
|
+
Triangle.new([0, 0, 0]).equilateral?.should eq(false)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
pending "true if last two sides are equal" do
|
|
22
|
+
Triangle.new([3, 4, 4]).isosceles?.should eq(true)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
pending "true if first two sides are equal" do
|
|
26
|
+
Triangle.new([4, 4, 3]).isosceles?.should eq(true)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
pending "true if first and last sides are equal" do
|
|
30
|
+
Triangle.new([4, 3, 4]).isosceles?.should eq(true)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
pending "equilateral triangles are also isosceles" do
|
|
34
|
+
Triangle.new([4, 4, 4]).isosceles?.should eq(true)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
pending "false if no sides are equal" do
|
|
38
|
+
Triangle.new([2, 3, 4]).isosceles?.should eq(false)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
pending "Sides that violate triangle inequality are not isosceles, even if two are equal" do
|
|
42
|
+
Triangle.new([1, 1, 3]).isosceles?.should eq(false)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
pending "true if no sides are equal" do
|
|
46
|
+
Triangle.new([5, 4, 6]).scalene?.should eq(true)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
pending "false if all sides are equal" do
|
|
50
|
+
Triangle.new([4, 4, 4]).scalene?.should eq(false)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
pending "false if two sides are equal" do
|
|
54
|
+
Triangle.new([4, 4, 3]).scalene?.should eq(false)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
pending "Sides that violate triangle inequality are not scalene, even if they are all different" do
|
|
58
|
+
Triangle.new([7, 3, 2]).scalene?.should eq(false)
|
|
59
|
+
end
|
|
60
|
+
end
|