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
data/tracks/bash/config.json
CHANGED
|
@@ -161,8 +161,20 @@
|
|
|
161
161
|
"input_validation"
|
|
162
162
|
],
|
|
163
163
|
"uuid": "b2b4ee35-108f-45ce-b294-c10d332e5579"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"core": false,
|
|
167
|
+
"difficulty": 5,
|
|
168
|
+
"slug": "atbash-cipher",
|
|
169
|
+
"topics": [
|
|
170
|
+
"cryptography",
|
|
171
|
+
"pattern_matching",
|
|
172
|
+
"strings"
|
|
173
|
+
],
|
|
174
|
+
"unlocked_by": "hamming",
|
|
175
|
+
"uuid": "03808072-0228-6580-7a9b-cc709a8a5b8c0e600b9"
|
|
164
176
|
}
|
|
165
177
|
],
|
|
166
178
|
"foregone": [],
|
|
167
179
|
"language": "Bash"
|
|
168
|
-
}
|
|
180
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Atbash Cipher
|
|
2
|
+
|
|
3
|
+
Create an implementation of the atbash cipher, an ancient encryption system created in the Middle East.
|
|
4
|
+
|
|
5
|
+
The Atbash cipher is a simple substitution cipher that relies on
|
|
6
|
+
transposing all the letters in the alphabet such that the resulting
|
|
7
|
+
alphabet is backwards. The first letter is replaced with the last
|
|
8
|
+
letter, the second with the second-last, and so on.
|
|
9
|
+
|
|
10
|
+
An Atbash cipher for the Latin alphabet would be as follows:
|
|
11
|
+
|
|
12
|
+
```plain
|
|
13
|
+
Plain: abcdefghijklmnopqrstuvwxyz
|
|
14
|
+
Cipher: zyxwvutsrqponmlkjihgfedcba
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
It is a very weak cipher because it only has one possible key, and it is
|
|
18
|
+
a simple monoalphabetic substitution cipher. However, this may not have
|
|
19
|
+
been an issue in the cipher's time.
|
|
20
|
+
|
|
21
|
+
Ciphertext is written out in groups of fixed length, the traditional group size
|
|
22
|
+
being 5 letters, and punctuation is excluded. This is to make it harder to guess
|
|
23
|
+
things based on word boundaries.
|
|
24
|
+
|
|
25
|
+
## Examples
|
|
26
|
+
- Encoding `test` gives `gvhg`
|
|
27
|
+
- Decoding `gvhg` gives `test`
|
|
28
|
+
- Decoding `gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt` gives `thequickbrownfoxjumpsoverthelazydog`
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
To run the tests:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
$ bats atbash_cipher_tests.sh
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
For more detailed info about the Bash track see the [help page](http://exercism.io/languages/bash).
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
## Source
|
|
41
|
+
|
|
42
|
+
Wikipedia [http://en.wikipedia.org/wiki/Atbash](http://en.wikipedia.org/wiki/Atbash)
|
|
43
|
+
|
|
44
|
+
## Submitting Incomplete Solutions
|
|
45
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env bats
|
|
2
|
+
|
|
3
|
+
@test "encode yes" {
|
|
4
|
+
run bash example.sh encode "yes"
|
|
5
|
+
[ "$status" -eq 0 ]
|
|
6
|
+
[ "$output" = "bvh" ]
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
@test "encode no" {
|
|
10
|
+
run bash example.sh encode "no"
|
|
11
|
+
[ "$status" -eq 0 ]
|
|
12
|
+
[ "$output" = "ml" ]
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@test "encode OMG" {
|
|
16
|
+
run bash example.sh encode "OMG"
|
|
17
|
+
[ "$status" -eq 0 ]
|
|
18
|
+
[ "$output" = "lnt" ]
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@test "encode spaces" {
|
|
22
|
+
run bash example.sh encode "O M G"
|
|
23
|
+
[ "$status" -eq 0 ]
|
|
24
|
+
[ "$output" = "lnt" ]
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@test "encode mindblowingly" {
|
|
28
|
+
run bash example.sh encode "mindblowingly"
|
|
29
|
+
[ "$status" -eq 0 ]
|
|
30
|
+
[ "$output" = "nrmwy oldrm tob" ]
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@test "encode numbers" {
|
|
34
|
+
run bash example.sh encode "Testing,1 2 3, testing."
|
|
35
|
+
[ "$status" -eq 0 ]
|
|
36
|
+
[ "$output" = "gvhgr mt123 gvhgr mt" ]
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@test "encode deep thought" {
|
|
40
|
+
run bash example.sh encode "Truth is fiction."
|
|
41
|
+
[ "$status" -eq 0 ]
|
|
42
|
+
[ "$output" = "gifgs rhurx grlm" ]
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@test "encode all the letters" {
|
|
46
|
+
run bash example.sh encode "The quick brown fox jumps over the lazy dog."
|
|
47
|
+
[ "$status" -eq 0 ]
|
|
48
|
+
[ "$output" = "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt" ]
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@test "decode exercism" {
|
|
52
|
+
run bash example.sh decode "vcvix rhn"
|
|
53
|
+
[ "$status" -eq 0 ]
|
|
54
|
+
[ "$output" = "exercism" ]
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@test "decode a sentence" {
|
|
58
|
+
run bash example.sh decode "zmlyh gzxov rhlug vmzhg vkkrm thglm v"
|
|
59
|
+
[ "$status" -eq 0 ]
|
|
60
|
+
[ "$output" = "anobstacleisoftenasteppingstone" ]
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@test "decode numbers" {
|
|
64
|
+
run bash example.sh decode "gvhgr mt123 gvhgr mt"
|
|
65
|
+
[ "$status" -eq 0 ]
|
|
66
|
+
[ "$output" = "testing123testing" ]
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@test "decode all the letters" {
|
|
70
|
+
run bash example.sh decode "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt"
|
|
71
|
+
[ "$status" -eq 0 ]
|
|
72
|
+
[ "$output" = "thequickbrownfoxjumpsoverthelazydog" ]
|
|
73
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
encode () {
|
|
4
|
+
clean_string=$(echo "$1" | tr -dc '[:alnum:]\n\r' | tr '[:upper:]' '[:lower:]')
|
|
5
|
+
converted_string=$(echo "$clean_string" | tr abcdefghijklmnopqrstuvwxyz zyxwvutsrqponmlkjihgfedcba)
|
|
6
|
+
echo "$converted_string" | sed 's/.\{5\}/& /g' | awk '{$1=$1};1'
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
decode () {
|
|
10
|
+
clean_string=$(echo "$1" | tr -d '[:space:]')
|
|
11
|
+
echo $clean_string | tr zyxwvutsrqponmlkjihgfedcba abcdefghijklmnopqrstuvwxyz
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
"$@"
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
## Test-Driven Development
|
|
2
|
+
|
|
3
|
+
As programmers mature, they eventually want to test their code.
|
|
4
|
+
|
|
5
|
+
Here at Exercism we simulate [Test-Driven
|
|
6
|
+
Development](http://en.wikipedia.org/wiki/Test-driven_development) (TDD), where
|
|
7
|
+
you write your tests before writing any functionality. The simulation comes in
|
|
8
|
+
the form of a pre-written test suite, which will signal that you have solved
|
|
9
|
+
the problem.
|
|
10
|
+
|
|
11
|
+
It will also provide you with a safety net to explore other solutions without
|
|
12
|
+
breaking the functionality.
|
|
13
|
+
|
|
14
|
+
### A typical TDD workflow on Exercism:
|
|
15
|
+
|
|
16
|
+
1. Run the test file and pick one test that's failing.
|
|
17
|
+
2. Write some code to fix the test you picked.
|
|
18
|
+
3. Re-run the tests to confirm the test is now passing.
|
|
19
|
+
4. Repeat from step 1.
|
|
20
|
+
5. Submit your solution (`exercism submit /path/to/file`)
|
|
21
|
+
|
|
22
|
+
## Instructions
|
|
23
|
+
|
|
24
|
+
Submissions are encouraged to be general, within reason. Having said that, it's
|
|
25
|
+
also important not to over-engineer a solution.
|
|
26
|
+
|
|
27
|
+
It's important to remember that the goal is to make code as expressive and
|
|
28
|
+
readable as we can.
|
|
29
|
+
|
|
30
|
+
Run the tests with:
|
|
31
|
+
|
|
32
|
+
bats whatever_test.sh
|
|
33
|
+
|
|
@@ -11,28 +11,6 @@ When X is a name or "you".
|
|
|
11
11
|
If the given name is "Alice", the result should be "One for Alice, one for me."
|
|
12
12
|
If no name is given, the result should be "One for you, one for me."
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
## Test-Driven Development
|
|
16
|
-
|
|
17
|
-
As programmers mature, they eventually want to test their code.
|
|
18
|
-
|
|
19
|
-
Here at Exercism we simulate [Test-Driven
|
|
20
|
-
Development](http://en.wikipedia.org/wiki/Test-driven_development) (TDD), where
|
|
21
|
-
you write your tests before writing any functionality. The simulation comes in
|
|
22
|
-
the form of a pre-written test suite, which will signal that you have solved
|
|
23
|
-
the problem.
|
|
24
|
-
|
|
25
|
-
It will also provide you with a safety net to explore other solutions without
|
|
26
|
-
breaking the functionality.
|
|
27
|
-
|
|
28
|
-
### A typical TDD workflow on Exercism:
|
|
29
|
-
|
|
30
|
-
1. Run the test file and pick one test that's failing.
|
|
31
|
-
2. Write some code to fix the test you picked.
|
|
32
|
-
3. Re-run the tests to confirm the test is now passing.
|
|
33
|
-
4. Repeat from step 1.
|
|
34
|
-
5. Submit your solution (`exercism submit /path/to/file`)
|
|
35
|
-
|
|
36
14
|
## Instructions
|
|
37
15
|
|
|
38
16
|
Submissions are encouraged to be general, within reason. Having said that, it's
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
#define ALLERGIES_H
|
|
3
3
|
|
|
4
4
|
typedef enum {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
5
|
+
ALLERGEN_EGGS = 0,
|
|
6
|
+
ALLERGEN_PEANUTS,
|
|
7
|
+
ALLERGEN_SHELLFISH,
|
|
8
|
+
ALLERGEN_STRAWBERRIES,
|
|
9
|
+
ALLERGEN_TOMATOES,
|
|
10
|
+
ALLERGEN_CHOCOLATE,
|
|
11
|
+
ALLERGEN_POLLEN,
|
|
12
|
+
ALLERGEN_CATS,
|
|
13
|
+
ALLERGEN_COUNT
|
|
14
14
|
} allergen_t;
|
|
15
15
|
|
|
16
16
|
typedef struct {
|
|
@@ -19,10 +19,10 @@ bool is_allergic_to(allergen_t allergen, unsigned int score)
|
|
|
19
19
|
|
|
20
20
|
void get_allergens(unsigned int score, allergen_list_t * list)
|
|
21
21
|
{
|
|
22
|
-
list->allergens = calloc(
|
|
22
|
+
list->allergens = calloc(ALLERGEN_COUNT, sizeof(allergen_t));
|
|
23
23
|
list->count = 0;
|
|
24
24
|
|
|
25
|
-
for (allergen_t allergen = 0; allergen <
|
|
25
|
+
for (allergen_t allergen = 0; allergen < ALLERGEN_COUNT; allergen++) {
|
|
26
26
|
if (is_allergic_to(allergen, score)) {
|
|
27
27
|
score -= scores[allergen];
|
|
28
28
|
list->allergens[list->count] = allergen;
|
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
#include <stdbool.h>
|
|
5
5
|
|
|
6
6
|
typedef enum {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
ALLERGEN_EGGS = 0,
|
|
8
|
+
ALLERGEN_PEANUTS,
|
|
9
|
+
ALLERGEN_SHELLFISH,
|
|
10
|
+
ALLERGEN_STRAWBERRIES,
|
|
11
|
+
ALLERGEN_TOMATOES,
|
|
12
|
+
ALLERGEN_CHOCOLATE,
|
|
13
|
+
ALLERGEN_POLLEN,
|
|
14
|
+
ALLERGEN_CATS,
|
|
15
|
+
ALLERGEN_COUNT
|
|
16
16
|
} allergen_t;
|
|
17
17
|
|
|
18
18
|
typedef struct {
|
|
@@ -27,9 +27,9 @@ void test_no_allergies_means_not_allergic(void)
|
|
|
27
27
|
TEST_IGNORE();
|
|
28
28
|
int score = 0;
|
|
29
29
|
|
|
30
|
-
TEST_ASSERT_FALSE(is_allergic_to(
|
|
31
|
-
TEST_ASSERT_FALSE(is_allergic_to(
|
|
32
|
-
TEST_ASSERT_FALSE(is_allergic_to(
|
|
30
|
+
TEST_ASSERT_FALSE(is_allergic_to(ALLERGEN_PEANUTS, score));
|
|
31
|
+
TEST_ASSERT_FALSE(is_allergic_to(ALLERGEN_CATS, score));
|
|
32
|
+
TEST_ASSERT_FALSE(is_allergic_to(ALLERGEN_STRAWBERRIES, score));
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
void test_is_allergic_to_eggs(void)
|
|
@@ -37,7 +37,7 @@ void test_is_allergic_to_eggs(void)
|
|
|
37
37
|
TEST_IGNORE();
|
|
38
38
|
int score = 1;
|
|
39
39
|
|
|
40
|
-
TEST_ASSERT_TRUE(is_allergic_to(
|
|
40
|
+
TEST_ASSERT_TRUE(is_allergic_to(ALLERGEN_EGGS, score));
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
void test_is_allergic_to_eggs_in_addition_to_other_stuff(void)
|
|
@@ -45,9 +45,9 @@ void test_is_allergic_to_eggs_in_addition_to_other_stuff(void)
|
|
|
45
45
|
TEST_IGNORE();
|
|
46
46
|
int score = 5;
|
|
47
47
|
|
|
48
|
-
TEST_ASSERT_TRUE(is_allergic_to(
|
|
49
|
-
TEST_ASSERT_TRUE(is_allergic_to(
|
|
50
|
-
TEST_ASSERT_FALSE(is_allergic_to(
|
|
48
|
+
TEST_ASSERT_TRUE(is_allergic_to(ALLERGEN_EGGS, score));
|
|
49
|
+
TEST_ASSERT_TRUE(is_allergic_to(ALLERGEN_SHELLFISH, score));
|
|
50
|
+
TEST_ASSERT_FALSE(is_allergic_to(ALLERGEN_STRAWBERRIES, score));
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
void test_no_allergies_at_all(void)
|
|
@@ -72,7 +72,7 @@ void test_allergic_to_just_eggs(void)
|
|
|
72
72
|
get_allergens(score, &list);
|
|
73
73
|
|
|
74
74
|
test_list_count_is(1, &list);
|
|
75
|
-
test_list_contains(
|
|
75
|
+
test_list_contains(ALLERGEN_EGGS, &list);
|
|
76
76
|
|
|
77
77
|
free(list.allergens);
|
|
78
78
|
}
|
|
@@ -86,7 +86,7 @@ void test_allergic_to_just_peanuts(void)
|
|
|
86
86
|
get_allergens(score, &list);
|
|
87
87
|
|
|
88
88
|
test_list_count_is(1, &list);
|
|
89
|
-
test_list_contains(
|
|
89
|
+
test_list_contains(ALLERGEN_PEANUTS, &list);
|
|
90
90
|
|
|
91
91
|
free(list.allergens);
|
|
92
92
|
}
|
|
@@ -100,7 +100,7 @@ void test_allergic_to_just_strawberries(void)
|
|
|
100
100
|
get_allergens(score, &list);
|
|
101
101
|
|
|
102
102
|
test_list_count_is(1, &list);
|
|
103
|
-
test_list_contains(
|
|
103
|
+
test_list_contains(ALLERGEN_STRAWBERRIES, &list);
|
|
104
104
|
|
|
105
105
|
free(list.allergens);
|
|
106
106
|
}
|
|
@@ -114,8 +114,8 @@ void test_allergic_to_eggs_and_peanuts(void)
|
|
|
114
114
|
get_allergens(score, &list);
|
|
115
115
|
|
|
116
116
|
test_list_count_is(2, &list);
|
|
117
|
-
test_list_contains(
|
|
118
|
-
test_list_contains(
|
|
117
|
+
test_list_contains(ALLERGEN_EGGS, &list);
|
|
118
|
+
test_list_contains(ALLERGEN_PEANUTS, &list);
|
|
119
119
|
|
|
120
120
|
free(list.allergens);
|
|
121
121
|
}
|
|
@@ -129,8 +129,8 @@ void test_allergic_to_more_than_eggs_but_not_peanuts(void)
|
|
|
129
129
|
get_allergens(score, &list);
|
|
130
130
|
|
|
131
131
|
test_list_count_is(2, &list);
|
|
132
|
-
test_list_contains(
|
|
133
|
-
test_list_contains(
|
|
132
|
+
test_list_contains(ALLERGEN_EGGS, &list);
|
|
133
|
+
test_list_contains(ALLERGEN_SHELLFISH, &list);
|
|
134
134
|
|
|
135
135
|
free(list.allergens);
|
|
136
136
|
}
|
|
@@ -144,11 +144,11 @@ void test_allergic_to_lots_of_stuff(void)
|
|
|
144
144
|
get_allergens(score, &list);
|
|
145
145
|
|
|
146
146
|
test_list_count_is(5, &list);
|
|
147
|
-
test_list_contains(
|
|
148
|
-
test_list_contains(
|
|
149
|
-
test_list_contains(
|
|
150
|
-
test_list_contains(
|
|
151
|
-
test_list_contains(
|
|
147
|
+
test_list_contains(ALLERGEN_STRAWBERRIES, &list);
|
|
148
|
+
test_list_contains(ALLERGEN_TOMATOES, &list);
|
|
149
|
+
test_list_contains(ALLERGEN_CHOCOLATE, &list);
|
|
150
|
+
test_list_contains(ALLERGEN_POLLEN, &list);
|
|
151
|
+
test_list_contains(ALLERGEN_CATS, &list);
|
|
152
152
|
|
|
153
153
|
free(list.allergens);
|
|
154
154
|
}
|
|
@@ -162,14 +162,14 @@ void test_allergic_to_everything(void)
|
|
|
162
162
|
get_allergens(score, &list);
|
|
163
163
|
|
|
164
164
|
test_list_count_is(8, &list);
|
|
165
|
-
test_list_contains(
|
|
166
|
-
test_list_contains(
|
|
167
|
-
test_list_contains(
|
|
168
|
-
test_list_contains(
|
|
169
|
-
test_list_contains(
|
|
170
|
-
test_list_contains(
|
|
171
|
-
test_list_contains(
|
|
172
|
-
test_list_contains(
|
|
165
|
+
test_list_contains(ALLERGEN_EGGS, &list);
|
|
166
|
+
test_list_contains(ALLERGEN_PEANUTS, &list);
|
|
167
|
+
test_list_contains(ALLERGEN_SHELLFISH, &list);
|
|
168
|
+
test_list_contains(ALLERGEN_STRAWBERRIES, &list);
|
|
169
|
+
test_list_contains(ALLERGEN_TOMATOES, &list);
|
|
170
|
+
test_list_contains(ALLERGEN_CHOCOLATE, &list);
|
|
171
|
+
test_list_contains(ALLERGEN_POLLEN, &list);
|
|
172
|
+
test_list_contains(ALLERGEN_CATS, &list);
|
|
173
173
|
|
|
174
174
|
free(list.allergens);
|
|
175
175
|
}
|
|
@@ -183,13 +183,13 @@ void test_ignore_non_allergen_score_parts(void)
|
|
|
183
183
|
get_allergens(score, &list);
|
|
184
184
|
|
|
185
185
|
test_list_count_is(7, &list);
|
|
186
|
-
test_list_contains(
|
|
187
|
-
test_list_contains(
|
|
188
|
-
test_list_contains(
|
|
189
|
-
test_list_contains(
|
|
190
|
-
test_list_contains(
|
|
191
|
-
test_list_contains(
|
|
192
|
-
test_list_contains(
|
|
186
|
+
test_list_contains(ALLERGEN_EGGS, &list);
|
|
187
|
+
test_list_contains(ALLERGEN_SHELLFISH, &list);
|
|
188
|
+
test_list_contains(ALLERGEN_STRAWBERRIES, &list);
|
|
189
|
+
test_list_contains(ALLERGEN_TOMATOES, &list);
|
|
190
|
+
test_list_contains(ALLERGEN_CHOCOLATE, &list);
|
|
191
|
+
test_list_contains(ALLERGEN_POLLEN, &list);
|
|
192
|
+
test_list_contains(ALLERGEN_CATS, &list);
|
|
193
193
|
|
|
194
194
|
free(list.allergens);
|
|
195
195
|
}
|
|
@@ -426,42 +426,6 @@ void test_subtract_more_than_two_days(void)
|
|
|
426
426
|
minute_offset);
|
|
427
427
|
}
|
|
428
428
|
|
|
429
|
-
// these tests check equality.
|
|
430
|
-
// Part of standard test collection
|
|
431
|
-
// Included even though they don't make much sense in C
|
|
432
|
-
|
|
433
|
-
// // trying it with XMACROS !
|
|
434
|
-
#define EXPAND_EQUALITY_TEST_AS_TEST(test_name, hour1, minute1, hour2, minute2, expected_equality)\
|
|
435
|
-
void test_name(void)\
|
|
436
|
-
{\
|
|
437
|
-
test_time_expected_equality(hour1, minute1, hour2, minute2, expected_equality);\
|
|
438
|
-
}\
|
|
439
|
-
|
|
440
|
-
// below expands to multiple routines...that are all designed to test the equality of 2 different
|
|
441
|
-
// clock representations to see if they are the same or not
|
|
442
|
-
// that 2 clocks are equal...
|
|
443
|
-
// the fields are:
|
|
444
|
-
// test name, time1_hour, time1_minute, time2_hour, time2_minute, (time1 == time2)
|
|
445
|
-
|
|
446
|
-
#define EQUALITY_TESTS(ENTRY) \
|
|
447
|
-
ENTRY(test_clocks_with_same_time, 15, 37, 15, 37, true)\
|
|
448
|
-
ENTRY(test_clocks_a_minute_apart, 15, 36, 15, 37, false)\
|
|
449
|
-
ENTRY(test_clocks_an_hour_apart, 15, 37, 14, 37, false)\
|
|
450
|
-
ENTRY(test_clocks_with_hour_overflow, 10, 37, 34, 37, true)\
|
|
451
|
-
ENTRY(test_clocks_with_hour_overflow_by_several_days, 3, 11, 99, 11, true)\
|
|
452
|
-
ENTRY(test_clocks_with_negative_hour, 22, 40, -2, 40, true)\
|
|
453
|
-
ENTRY(test_clocks_with_negative_hour_that_wraps, 17, 3, -31, 3, true)\
|
|
454
|
-
ENTRY(test_clocks_with_negative_hour_that_wraps_multiple_times, 13, 49, -83, 49, true)\
|
|
455
|
-
ENTRY(test_clocks_with_minute_overflow, 0, 1, 0, 1441, true)\
|
|
456
|
-
ENTRY(test_clocks_with_minute_overflow_by_several_days, 2, 2, 2, 4322, true)\
|
|
457
|
-
ENTRY(test_clocks_with_negative_minute, 2, 40, 3, -20, true)\
|
|
458
|
-
ENTRY(test_clocks_with_negative_minute_that_wraps, 4, 10, 5, -1490, true)\
|
|
459
|
-
ENTRY(test_clocks_with_negative_minute_that_wraps_multiple_times, 6, 15, 6, -4305, true)\
|
|
460
|
-
ENTRY(test_clocks_with_negative_hours_and_minutes, 7, 32, -12, -268, true)\
|
|
461
|
-
ENTRY(test_clocks_with_negative_hours_and_minutes_that_wrap, 18, 7, -54, -11513, true)\
|
|
462
|
-
|
|
463
|
-
EQUALITY_TESTS(EXPAND_EQUALITY_TEST_AS_TEST)
|
|
464
|
-
|
|
465
429
|
int main(void)
|
|
466
430
|
{
|
|
467
431
|
UnityBegin("clock.c");
|
|
@@ -502,22 +466,6 @@ int main(void)
|
|
|
502
466
|
RUN_TEST(test_subtract_more_than_one_day);
|
|
503
467
|
RUN_TEST(test_subtract_more_than_two_days);
|
|
504
468
|
|
|
505
|
-
RUN_TEST(test_clocks_with_same_time);
|
|
506
|
-
RUN_TEST(test_clocks_a_minute_apart);
|
|
507
|
-
RUN_TEST(test_clocks_an_hour_apart);
|
|
508
|
-
RUN_TEST(test_clocks_with_hour_overflow);
|
|
509
|
-
RUN_TEST(test_clocks_with_hour_overflow_by_several_days);
|
|
510
|
-
RUN_TEST(test_clocks_with_negative_hour);
|
|
511
|
-
RUN_TEST(test_clocks_with_negative_hour_that_wraps);
|
|
512
|
-
RUN_TEST(test_clocks_with_negative_hour_that_wraps_multiple_times);
|
|
513
|
-
RUN_TEST(test_clocks_with_minute_overflow);
|
|
514
|
-
RUN_TEST(test_clocks_with_minute_overflow_by_several_days);
|
|
515
|
-
RUN_TEST(test_clocks_with_negative_minute);
|
|
516
|
-
RUN_TEST(test_clocks_with_negative_minute_that_wraps);
|
|
517
|
-
RUN_TEST(test_clocks_with_negative_minute_that_wraps_multiple_times);
|
|
518
|
-
RUN_TEST(test_clocks_with_negative_hours_and_minutes);
|
|
519
|
-
RUN_TEST(test_clocks_with_negative_hours_and_minutes_that_wrap);
|
|
520
|
-
|
|
521
469
|
UnityEnd();
|
|
522
470
|
return 0;
|
|
523
471
|
}
|