trackler 2.2.0.1 → 2.2.0.2
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/fixtures/tracks/fake/config.json +4 -3
- data/fixtures/tracks/fruit/config.json +4 -3
- data/lib/trackler/track.rb +2 -2
- data/lib/trackler/version.rb +1 -1
- data/tracks/{java/exercises/allergies/.meta/readme.go.tmpl → c/config/exercise_readme.go.tmpl} +0 -1
- data/tracks/c/exercises/acronym/README.md +47 -0
- data/tracks/c/exercises/all-your-base/README.md +67 -0
- data/tracks/c/exercises/allergies/README.md +69 -0
- data/tracks/c/exercises/anagram/README.md +45 -0
- data/tracks/c/exercises/atbash-cipher/README.md +66 -0
- data/tracks/c/exercises/beer-song/README.md +359 -0
- data/tracks/c/exercises/binary/README.md +67 -0
- data/tracks/c/exercises/binary-search/README.md +73 -0
- data/tracks/c/exercises/bob/README.md +50 -0
- data/tracks/c/exercises/clock/README.md +45 -0
- data/tracks/c/exercises/difference-of-squares/README.md +51 -0
- data/tracks/c/exercises/gigasecond/README.md +43 -0
- data/tracks/c/exercises/grains/README.md +66 -0
- data/tracks/c/exercises/hamming/README.md +74 -0
- data/tracks/c/exercises/hello-world/README.md +53 -0
- data/tracks/c/exercises/isogram/README.md +51 -0
- data/tracks/c/exercises/largest-series-product/README.md +52 -0
- data/tracks/c/exercises/leap/README.md +65 -0
- data/tracks/c/exercises/meetup/README.md +62 -0
- data/tracks/c/exercises/nth-prime/README.md +47 -0
- data/tracks/c/exercises/nucleotide-count/README.md +65 -0
- data/tracks/c/exercises/palindrome-products/README.md +72 -0
- data/tracks/c/exercises/pangram/README.md +47 -0
- data/tracks/c/exercises/pascals-triangle/README.md +53 -0
- data/tracks/c/exercises/perfect-numbers/README.md +56 -0
- data/tracks/c/exercises/phone-number/README.md +66 -0
- data/tracks/c/exercises/raindrops/README.md +56 -0
- data/tracks/c/exercises/react/README.md +51 -0
- data/tracks/c/exercises/rna-transcription/README.md +57 -0
- data/tracks/c/exercises/robot-simulator/README.md +66 -0
- data/tracks/c/exercises/roman-numerals/README.md +81 -0
- data/tracks/c/exercises/scrabble-score/README.md +76 -0
- data/tracks/c/exercises/series/README.md +59 -0
- data/tracks/c/exercises/sieve/README.md +66 -0
- data/tracks/c/exercises/space-age/README.md +56 -0
- data/tracks/c/exercises/sum-of-multiples/README.md +50 -0
- data/tracks/c/exercises/triangle/README.md +58 -0
- data/tracks/c/exercises/word-count/README.md +51 -0
- data/tracks/ceylon/README.md +3 -3
- data/tracks/ceylon/config/exercise-readme-insert.md +1 -0
- data/tracks/{java/exercises/accumulate/.meta/readme.go.tmpl → ceylon/config/exercise_readme.go.tmpl} +0 -1
- data/tracks/ceylon/exercises/anagram/README.md +29 -0
- data/tracks/ceylon/{docs/EXERCISE_README_INSERT.md → exercises/bracket-push/README.md} +12 -0
- data/tracks/ceylon/exercises/hamming/README.md +58 -0
- data/tracks/ceylon/exercises/largest-series-product/README.md +36 -0
- data/tracks/ceylon/exercises/leap/README.md +49 -0
- data/tracks/ceylon/exercises/react/README.md +35 -0
- data/tracks/ceylon/exercises/sieve/README.md +50 -0
- data/tracks/{java/exercises/acronym/.meta/readme.go.tmpl → delphi/config/exercise_readme.go.tmpl} +0 -1
- data/tracks/delphi/exercises/allergies/README.md +58 -0
- data/tracks/delphi/exercises/bank-account/README.md +51 -0
- data/tracks/delphi/exercises/beer-song/README.md +348 -0
- data/tracks/delphi/exercises/binary-search/README.md +62 -0
- data/tracks/delphi/exercises/bob/README.md +39 -0
- data/tracks/delphi/exercises/book-store/README.md +95 -0
- data/tracks/delphi/exercises/bowling/README.md +74 -0
- data/tracks/delphi/exercises/circular-buffer/README.md +71 -0
- data/tracks/delphi/exercises/clock/README.md +34 -0
- data/tracks/delphi/exercises/collatz-conjecture/README.md +54 -0
- data/tracks/delphi/exercises/etl/README.md +72 -0
- data/tracks/delphi/exercises/grains/README.md +55 -0
- data/tracks/delphi/exercises/hamming/README.md +63 -0
- data/tracks/delphi/exercises/hello-world/README.md +42 -0
- data/tracks/delphi/exercises/leap/README.md +54 -0
- data/tracks/delphi/exercises/minesweeper/README.md +51 -0
- data/tracks/delphi/exercises/nucleotide-count/README.md +54 -0
- data/tracks/delphi/exercises/perfect-numbers/README.md +45 -0
- data/tracks/delphi/exercises/phone-number/README.md +55 -0
- data/tracks/delphi/exercises/poker/README.md +33 -0
- data/tracks/delphi/exercises/raindrops/README.md +45 -0
- data/tracks/delphi/exercises/rna-transcription/README.md +46 -0
- data/tracks/delphi/exercises/roman-numerals/README.md +70 -0
- data/tracks/delphi/exercises/saddle-points/README.md +54 -0
- data/tracks/delphi/exercises/triangle/README.md +47 -0
- data/tracks/delphi/exercises/two-fer/README.md +69 -0
- data/tracks/delphi/exercises/wordy/README.md +84 -0
- data/tracks/{java/exercises/all-your-base/.meta/readme.go.tmpl → factor/config/exercise_readme.go.tmpl} +0 -1
- data/tracks/factor/exercises/hello-world/README.md +34 -0
- data/tracks/factor/exercises/isogram/README.md +32 -0
- data/tracks/factor/exercises/leap/README.md +46 -0
- data/tracks/factor/exercises/two-fer/README.md +61 -0
- data/tracks/haskell/config/exercise_readme.go.tmpl +16 -0
- data/tracks/haskell/exercises/accumulate/README.md +89 -0
- data/tracks/haskell/exercises/acronym/README.md +69 -0
- data/tracks/haskell/exercises/all-your-base/README.md +89 -0
- data/tracks/haskell/exercises/allergies/README.md +104 -0
- data/tracks/haskell/exercises/alphametics/README.md +96 -0
- data/tracks/haskell/exercises/anagram/README.md +91 -0
- data/tracks/haskell/exercises/atbash-cipher/README.md +88 -0
- data/tracks/haskell/exercises/bank-account/README.md +102 -0
- data/tracks/haskell/exercises/beer-song/README.md +401 -0
- data/tracks/haskell/exercises/binary/README.md +89 -0
- data/tracks/haskell/exercises/binary-search-tree/README.md +133 -0
- data/tracks/haskell/exercises/bob/README.md +72 -0
- data/tracks/haskell/exercises/bowling/README.md +128 -0
- data/tracks/haskell/exercises/bracket-push/README.md +64 -0
- data/tracks/haskell/exercises/change/README.md +77 -0
- data/tracks/haskell/exercises/clock/README.md +86 -0
- data/tracks/haskell/exercises/connect/README.md +88 -0
- data/tracks/haskell/exercises/crypto-square/README.md +128 -0
- data/tracks/haskell/exercises/custom-set/README.md +94 -0
- data/tracks/haskell/exercises/difference-of-squares/README.md +73 -0
- data/tracks/haskell/exercises/dominoes/README.md +72 -0
- data/tracks/haskell/exercises/etl/README.md +105 -0
- data/tracks/haskell/exercises/food-chain/README.md +145 -0
- data/tracks/haskell/exercises/forth/README.md +98 -0
- data/tracks/haskell/exercises/gigasecond/README.md +65 -0
- data/tracks/haskell/exercises/go-counting/README.md +109 -0
- data/tracks/haskell/exercises/grade-school/README.md +111 -0
- data/tracks/haskell/exercises/grains/README.md +88 -0
- data/tracks/haskell/exercises/hamming/README.md +96 -0
- data/tracks/haskell/exercises/hello-world/README.md +83 -0
- data/tracks/haskell/exercises/hexadecimal/README.md +68 -0
- data/tracks/haskell/exercises/house/README.md +187 -0
- data/tracks/haskell/exercises/kindergarten-garden/README.md +120 -0
- data/tracks/haskell/exercises/largest-series-product/README.md +74 -0
- data/tracks/haskell/exercises/leap/README.md +100 -0
- data/tracks/haskell/exercises/lens-person/README.md +66 -0
- data/tracks/haskell/exercises/linked-list/README.md +104 -0
- data/tracks/haskell/exercises/list-ops/README.md +64 -0
- data/tracks/haskell/exercises/luhn/README.md +125 -0
- data/tracks/haskell/exercises/matrix/README.md +125 -0
- data/tracks/haskell/exercises/meetup/README.md +92 -0
- data/tracks/haskell/exercises/minesweeper/README.md +84 -0
- data/tracks/haskell/exercises/nth-prime/README.md +69 -0
- data/tracks/haskell/exercises/nucleotide-count/README.md +87 -0
- data/tracks/haskell/exercises/ocr-numbers/README.md +139 -0
- data/tracks/haskell/exercises/octal/README.md +115 -0
- data/tracks/haskell/exercises/palindrome-products/README.md +115 -0
- data/tracks/haskell/exercises/pangram/README.md +69 -0
- data/tracks/haskell/exercises/parallel-letter-frequency/README.md +76 -0
- data/tracks/haskell/exercises/pascals-triangle/README.md +75 -0
- data/tracks/haskell/exercises/phone-number/README.md +88 -0
- data/tracks/haskell/exercises/pig-latin/README.md +78 -0
- data/tracks/haskell/exercises/pov/README.md +100 -0
- data/tracks/haskell/exercises/prime-factors/README.md +90 -0
- data/tracks/haskell/exercises/pythagorean-triplet/README.md +78 -0
- data/tracks/haskell/exercises/queen-attack/README.md +105 -0
- data/tracks/haskell/exercises/raindrops/README.md +78 -0
- data/tracks/haskell/exercises/rna-transcription/README.md +79 -0
- data/tracks/haskell/exercises/robot-name/README.md +90 -0
- data/tracks/haskell/exercises/robot-simulator/README.md +105 -0
- data/tracks/haskell/exercises/roman-numerals/README.md +112 -0
- data/tracks/haskell/exercises/run-length-encoding/README.md +84 -0
- data/tracks/haskell/exercises/saddle-points/README.md +87 -0
- data/tracks/haskell/exercises/say/README.md +123 -0
- data/tracks/haskell/exercises/scrabble-score/README.md +98 -0
- data/tracks/haskell/exercises/secret-handshake/README.md +89 -0
- data/tracks/haskell/exercises/series/README.md +106 -0
- data/tracks/haskell/exercises/sgf-parsing/README.md +146 -0
- data/tracks/haskell/exercises/sieve/README.md +88 -0
- data/tracks/haskell/exercises/simple-cipher/README.md +144 -0
- data/tracks/haskell/exercises/simple-linked-list/README.md +101 -0
- data/tracks/haskell/exercises/space-age/README.md +94 -0
- data/tracks/haskell/exercises/spiral-matrix/README.md +84 -0
- data/tracks/haskell/exercises/strain/README.md +94 -0
- data/tracks/haskell/exercises/sublist/README.md +80 -0
- data/tracks/haskell/exercises/sum-of-multiples/README.md +72 -0
- data/tracks/haskell/exercises/triangle/README.md +80 -0
- data/tracks/haskell/exercises/trinary/README.md +96 -0
- data/tracks/haskell/exercises/word-count/README.md +96 -0
- data/tracks/haskell/exercises/wordy/README.md +122 -0
- data/tracks/haskell/exercises/zebra-puzzle/README.md +86 -0
- data/tracks/haskell/exercises/zipper/README.md +85 -0
- data/tracks/java/config/exercise_readme.go.tmpl +16 -0
- data/tracks/java/exercises/accumulate/README.md +0 -1
- data/tracks/java/exercises/acronym/README.md +0 -1
- data/tracks/java/exercises/all-your-base/README.md +0 -1
- data/tracks/java/exercises/allergies/README.md +0 -1
- data/tracks/java/exercises/anagram/README.md +0 -1
- data/tracks/java/exercises/atbash-cipher/README.md +0 -1
- data/tracks/java/exercises/bank-account/README.md +0 -1
- data/tracks/java/exercises/beer-song/README.md +0 -1
- data/tracks/java/exercises/binary/README.md +0 -1
- data/tracks/java/exercises/binary-search/README.md +0 -1
- data/tracks/java/exercises/binary-search-tree/README.md +0 -1
- data/tracks/java/exercises/bob/README.md +0 -1
- data/tracks/java/exercises/book-store/README.md +0 -1
- data/tracks/java/exercises/bowling/README.md +0 -1
- data/tracks/java/exercises/bracket-push/README.md +0 -1
- data/tracks/java/exercises/change/README.md +0 -1
- data/tracks/java/exercises/circular-buffer/README.md +0 -1
- data/tracks/java/exercises/clock/README.md +0 -1
- data/tracks/java/exercises/collatz-conjecture/README.md +0 -1
- data/tracks/java/exercises/complex-numbers/README.md +0 -1
- data/tracks/java/exercises/crypto-square/README.md +0 -1
- data/tracks/java/exercises/custom-set/README.md +0 -1
- data/tracks/java/exercises/diamond/README.md +0 -1
- data/tracks/java/exercises/difference-of-squares/README.md +0 -1
- data/tracks/java/exercises/etl/README.md +0 -1
- data/tracks/java/exercises/flatten-array/README.md +0 -1
- data/tracks/java/exercises/food-chain/README.md +0 -1
- data/tracks/java/exercises/gigasecond/README.md +0 -1
- data/tracks/java/exercises/grade-school/README.md +0 -1
- data/tracks/java/exercises/hamming/README.md +0 -1
- data/tracks/java/exercises/hello-world/README.md +0 -1
- data/tracks/java/exercises/hexadecimal/README.md +0 -1
- data/tracks/java/exercises/isogram/README.md +0 -1
- data/tracks/java/exercises/kindergarten-garden/README.md +0 -1
- data/tracks/java/exercises/largest-series-product/README.md +0 -1
- data/tracks/java/exercises/linked-list/README.md +0 -1
- data/tracks/java/exercises/list-ops/README.md +0 -1
- data/tracks/java/exercises/luhn/README.md +0 -1
- data/tracks/java/exercises/matrix/README.md +0 -1
- data/tracks/java/exercises/meetup/README.md +0 -1
- data/tracks/java/exercises/minesweeper/README.md +0 -1
- data/tracks/java/exercises/nth-prime/README.md +0 -1
- data/tracks/java/exercises/nucleotide-count/README.md +0 -1
- data/tracks/java/exercises/ocr-numbers/README.md +0 -1
- data/tracks/java/exercises/octal/README.md +0 -1
- data/tracks/java/exercises/palindrome-products/README.md +0 -1
- data/tracks/java/exercises/pangram/README.md +0 -1
- data/tracks/java/exercises/pascals-triangle/README.md +0 -1
- data/tracks/java/exercises/perfect-numbers/README.md +0 -1
- data/tracks/java/exercises/phone-number/README.md +0 -1
- data/tracks/java/exercises/pig-latin/README.md +0 -1
- data/tracks/java/exercises/poker/README.md +0 -1
- data/tracks/java/exercises/prime-factors/README.md +0 -1
- data/tracks/java/exercises/pythagorean-triplet/README.md +0 -1
- data/tracks/java/exercises/queen-attack/README.md +0 -1
- data/tracks/java/exercises/raindrops/README.md +0 -1
- data/tracks/java/exercises/rectangles/README.md +0 -1
- data/tracks/java/exercises/rna-transcription/README.md +0 -1
- data/tracks/java/exercises/robot-name/README.md +0 -1
- data/tracks/java/exercises/robot-simulator/README.md +0 -1
- data/tracks/java/exercises/roman-numerals/README.md +0 -1
- data/tracks/java/exercises/rotational-cipher/README.md +47 -0
- data/tracks/java/exercises/run-length-encoding/README.md +0 -1
- data/tracks/java/exercises/saddle-points/README.md +0 -1
- data/tracks/java/exercises/scrabble-score/README.md +0 -1
- data/tracks/java/exercises/secret-handshake/README.md +0 -1
- data/tracks/java/exercises/series/README.md +0 -1
- data/tracks/java/exercises/sieve/README.md +0 -1
- data/tracks/java/exercises/simple-cipher/README.md +0 -1
- data/tracks/java/exercises/simple-linked-list/README.md +0 -1
- data/tracks/java/exercises/space-age/README.md +0 -1
- data/tracks/java/exercises/spiral-matrix/README.md +0 -1
- data/tracks/java/exercises/strain/README.md +0 -1
- data/tracks/java/exercises/sublist/README.md +0 -1
- data/tracks/java/exercises/sum-of-multiples/README.md +0 -1
- data/tracks/java/exercises/transpose/README.md +0 -1
- data/tracks/java/exercises/triangle/README.md +0 -1
- data/tracks/java/exercises/trinary/README.md +0 -1
- data/tracks/java/exercises/twelve-days/README.md +0 -1
- data/tracks/java/exercises/two-fer/README.md +0 -1
- data/tracks/java/exercises/word-count/README.md +0 -1
- data/tracks/java/exercises/word-search/README.md +0 -1
- data/tracks/java/exercises/wordy/README.md +0 -1
- data/tracks/javascript/config/exercise_readme.go.tmpl +16 -0
- data/tracks/javascript/exercises/accumulate/README.md +59 -0
- data/tracks/javascript/exercises/acronym/README.md +39 -0
- data/tracks/javascript/exercises/all-your-base/README.md +59 -0
- data/tracks/javascript/exercises/allergies/README.md +61 -0
- data/tracks/javascript/exercises/alphametics/README.md +59 -0
- data/tracks/javascript/exercises/anagram/README.md +37 -0
- data/tracks/javascript/exercises/atbash-cipher/README.md +58 -0
- data/tracks/javascript/exercises/beer-song/README.md +351 -0
- data/tracks/javascript/exercises/binary/README.md +59 -0
- data/tracks/javascript/exercises/binary-search/README.md +65 -0
- data/tracks/javascript/exercises/binary-search-tree/README.md +84 -0
- data/tracks/javascript/exercises/bob/README.md +42 -0
- data/tracks/javascript/exercises/bowling/README.md +77 -0
- data/tracks/javascript/exercises/bracket-push/README.md +34 -0
- data/tracks/javascript/exercises/circular-buffer/README.md +74 -0
- data/tracks/javascript/exercises/clock/README.md +37 -0
- data/tracks/javascript/exercises/crypto-square/README.md +98 -0
- data/tracks/javascript/exercises/custom-set/README.md +35 -0
- data/tracks/javascript/exercises/diamond/README.md +83 -0
- data/tracks/javascript/exercises/difference-of-squares/README.md +43 -0
- data/tracks/javascript/exercises/etl/README.md +75 -0
- data/tracks/javascript/exercises/flatten-array/README.md +42 -0
- data/tracks/javascript/exercises/food-chain/README.md +94 -0
- data/tracks/javascript/exercises/gigasecond/README.md +35 -0
- data/tracks/javascript/exercises/grade-school/README.md +66 -0
- data/tracks/javascript/exercises/grains/README.md +58 -0
- data/tracks/javascript/exercises/hamming/README.md +66 -0
- data/tracks/javascript/exercises/hello-world/README.md +132 -0
- data/tracks/javascript/exercises/hexadecimal/README.md +38 -0
- data/tracks/javascript/exercises/isogram/README.md +43 -0
- data/tracks/javascript/exercises/kindergarten-garden/README.md +90 -0
- data/tracks/javascript/exercises/largest-series-product/README.md +44 -0
- data/tracks/javascript/exercises/leap/README.md +57 -0
- data/tracks/javascript/exercises/linked-list/README.md +58 -0
- data/tracks/javascript/exercises/list-ops/README.md +34 -0
- data/tracks/javascript/exercises/luhn/README.md +95 -0
- data/tracks/javascript/exercises/matrix/README.md +69 -0
- data/tracks/javascript/exercises/meetup/README.md +54 -0
- data/tracks/javascript/exercises/minesweeper/README.md +54 -0
- data/tracks/javascript/exercises/nth-prime/README.md +39 -0
- data/tracks/javascript/exercises/nucleotide-count/README.md +57 -0
- data/tracks/javascript/exercises/ocr-numbers/README.md +109 -0
- data/tracks/javascript/exercises/octal/README.md +73 -0
- data/tracks/javascript/exercises/palindrome-products/README.md +64 -0
- data/tracks/javascript/exercises/pangram/README.md +39 -0
- data/tracks/javascript/exercises/pascals-triangle/README.md +45 -0
- data/tracks/javascript/exercises/perfect-numbers/README.md +48 -0
- data/tracks/javascript/exercises/phone-number/README.md +58 -0
- data/tracks/javascript/exercises/pig-latin/README.md +48 -0
- data/tracks/javascript/exercises/point-mutations/README.md +65 -0
- data/tracks/javascript/exercises/prime-factors/README.md +60 -0
- data/tracks/javascript/exercises/proverb/README.md +42 -0
- data/tracks/javascript/exercises/pythagorean-triplet/README.md +48 -0
- data/tracks/javascript/exercises/queen-attack/README.md +57 -0
- data/tracks/javascript/exercises/raindrops/README.md +48 -0
- data/tracks/javascript/exercises/rna-transcription/README.md +49 -0
- data/tracks/javascript/exercises/robot-name/README.md +46 -0
- data/tracks/javascript/exercises/robot-simulator/README.md +58 -0
- data/tracks/javascript/exercises/roman-numerals/README.md +73 -0
- data/tracks/javascript/exercises/run-length-encoding/README.md +54 -0
- data/tracks/javascript/exercises/saddle-points/README.md +57 -0
- data/tracks/javascript/exercises/say/README.md +93 -0
- data/tracks/javascript/exercises/scrabble-score/README.md +68 -0
- data/tracks/javascript/exercises/secret-handshake/README.md +59 -0
- data/tracks/javascript/exercises/series/README.md +51 -0
- data/tracks/javascript/exercises/sieve/README.md +58 -0
- data/tracks/javascript/exercises/simple-cipher/README.md +114 -0
- data/tracks/javascript/exercises/simple-linked-list/README.md +52 -0
- data/tracks/javascript/exercises/space-age/README.md +48 -0
- data/tracks/javascript/exercises/strain/README.md +64 -0
- data/tracks/javascript/exercises/sum-of-multiples/README.md +42 -0
- data/tracks/javascript/exercises/triangle/README.md +50 -0
- data/tracks/javascript/exercises/trinary/README.md +52 -0
- data/tracks/javascript/exercises/two-bucket/README.md +60 -0
- data/tracks/javascript/exercises/word-count/README.md +43 -0
- data/tracks/javascript/exercises/wordy/README.md +87 -0
- data/tracks/lua/config/exercise_readme.go.tmpl +16 -0
- data/tracks/lua/exercises/acronym/README.md +25 -0
- data/tracks/lua/exercises/all-your-base/README.md +45 -0
- data/tracks/lua/exercises/allergies/README.md +47 -0
- data/tracks/lua/exercises/alphametics/README.md +45 -0
- data/tracks/lua/exercises/anagram/README.md +23 -0
- data/tracks/lua/exercises/atbash-cipher/README.md +44 -0
- data/tracks/lua/exercises/bank-account/README.md +40 -0
- data/tracks/lua/exercises/beer-song/README.md +337 -0
- data/tracks/lua/exercises/binary/README.md +45 -0
- data/tracks/lua/exercises/binary-search/README.md +51 -0
- data/tracks/lua/exercises/binary-search-tree/README.md +70 -0
- data/tracks/lua/exercises/bob/README.md +28 -0
- data/tracks/lua/exercises/bowling/README.md +63 -0
- data/tracks/lua/exercises/bracket-push/README.md +20 -0
- data/tracks/lua/exercises/change/README.md +33 -0
- data/tracks/lua/exercises/circular-buffer/README.md +60 -0
- data/tracks/lua/exercises/clock/README.md +23 -0
- data/tracks/lua/exercises/crypto-square/README.md +84 -0
- data/tracks/lua/exercises/custom-set/README.md +21 -0
- data/tracks/lua/exercises/diamond/README.md +69 -0
- data/tracks/lua/exercises/difference-of-squares/README.md +29 -0
- data/tracks/lua/exercises/etl/README.md +61 -0
- data/tracks/lua/exercises/flatten-array/README.md +28 -0
- data/tracks/lua/exercises/food-chain/README.md +80 -0
- data/tracks/lua/exercises/gigasecond/README.md +21 -0
- data/tracks/lua/exercises/grade-school/README.md +52 -0
- data/tracks/lua/exercises/grains/README.md +44 -0
- data/tracks/lua/exercises/hamming/README.md +52 -0
- data/tracks/lua/exercises/hello-world/README.md +31 -0
- data/tracks/lua/exercises/house/README.md +123 -0
- data/tracks/lua/exercises/isogram/README.md +29 -0
- data/tracks/lua/exercises/kindergarten-garden/README.md +76 -0
- data/tracks/lua/exercises/largest-series-product/README.md +30 -0
- data/tracks/lua/exercises/leap/README.md +43 -0
- data/tracks/lua/exercises/linked-list/README.md +44 -0
- data/tracks/lua/exercises/list-ops/README.md +20 -0
- data/tracks/lua/exercises/luhn/README.md +81 -0
- data/tracks/lua/exercises/matrix/README.md +55 -0
- data/tracks/lua/exercises/meetup/README.md +40 -0
- data/tracks/lua/exercises/minesweeper/README.md +40 -0
- data/tracks/lua/exercises/nth-prime/README.md +25 -0
- data/tracks/lua/exercises/nucleotide-count/README.md +43 -0
- data/tracks/lua/exercises/ocr-numbers/README.md +95 -0
- data/tracks/lua/exercises/octal/README.md +59 -0
- data/tracks/lua/exercises/pangram/README.md +25 -0
- data/tracks/lua/exercises/pascals-triangle/README.md +31 -0
- data/tracks/lua/exercises/perfect-numbers/README.md +34 -0
- data/tracks/lua/exercises/phone-number/README.md +44 -0
- data/tracks/lua/exercises/pig-latin/README.md +34 -0
- data/tracks/lua/exercises/pov/README.md +56 -0
- data/tracks/lua/exercises/prime-factors/README.md +46 -0
- data/tracks/lua/exercises/protein-translation/README.md +59 -0
- data/tracks/lua/exercises/pythagorean-triplet/README.md +34 -0
- data/tracks/lua/exercises/rail-fence-cipher/README.md +70 -0
- data/tracks/lua/exercises/raindrops/README.md +34 -0
- data/tracks/lua/exercises/rectangles/README.md +77 -0
- data/tracks/lua/exercises/rna-transcription/README.md +35 -0
- data/tracks/lua/exercises/robot-name/README.md +32 -0
- data/tracks/lua/exercises/robot-simulator/README.md +44 -0
- data/tracks/lua/exercises/roman-numerals/README.md +59 -0
- data/tracks/lua/exercises/run-length-encoding/README.md +40 -0
- data/tracks/lua/exercises/say/README.md +79 -0
- data/tracks/lua/exercises/scrabble-score/README.md +54 -0
- data/tracks/lua/exercises/secret-handshake/README.md +45 -0
- data/tracks/lua/exercises/series/README.md +37 -0
- data/tracks/lua/exercises/sieve/README.md +44 -0
- data/tracks/lua/exercises/space-age/README.md +34 -0
- data/tracks/lua/exercises/sublist/README.md +31 -0
- data/tracks/lua/exercises/sum-of-multiples/README.md +28 -0
- data/tracks/lua/exercises/tournament/README.md +78 -0
- data/tracks/lua/exercises/transpose/README.md +75 -0
- data/tracks/lua/exercises/triangle/README.md +36 -0
- data/tracks/lua/exercises/variable-length-quantity/README.md +49 -0
- data/tracks/lua/exercises/word-count/README.md +29 -0
- data/tracks/lua/exercises/word-search/README.md +40 -0
- data/tracks/mips/config/exercise_readme.go.tmpl +16 -0
- data/tracks/mips/exercises/atbash-cipher/README.md +34 -0
- data/tracks/mips/exercises/binary/README.md +35 -0
- data/tracks/mips/exercises/difference-of-squares/README.md +19 -0
- data/tracks/mips/exercises/hamming/README.md +42 -0
- data/tracks/mips/exercises/hexadecimal/README.md +14 -0
- data/tracks/mips/exercises/isogram/README.md +19 -0
- data/tracks/mips/exercises/leap/README.md +33 -0
- data/tracks/mips/exercises/nth-prime/README.md +15 -0
- data/tracks/mips/exercises/octal/README.md +49 -0
- data/tracks/mips/exercises/raindrops/README.md +24 -0
- data/tracks/mips/exercises/rna-transcription/README.md +25 -0
- data/tracks/mips/exercises/scrabble-score/README.md +44 -0
- data/tracks/mips/exercises/triangle/README.md +26 -0
- data/tracks/mips/exercises/trinary/README.md +28 -0
- data/tracks/purescript/config/exercise_readme.go.tmpl +16 -0
- data/tracks/purescript/exercises/accumulate/README.md +35 -0
- data/tracks/purescript/exercises/acronym/README.md +15 -0
- data/tracks/purescript/exercises/all-your-base/README.md +35 -0
- data/tracks/purescript/exercises/allergies/README.md +37 -0
- data/tracks/purescript/exercises/atbash-cipher/README.md +34 -0
- data/tracks/purescript/exercises/binary-search/README.md +41 -0
- data/tracks/purescript/exercises/bob/README.md +18 -0
- data/tracks/purescript/exercises/bracket-push/README.md +10 -0
- data/tracks/purescript/exercises/crypto-square/README.md +74 -0
- data/tracks/purescript/exercises/diamond/README.md +59 -0
- data/tracks/purescript/exercises/difference-of-squares/README.md +19 -0
- data/tracks/purescript/exercises/etl/README.md +51 -0
- data/tracks/purescript/exercises/hamming/README.md +42 -0
- data/tracks/purescript/exercises/hello-world/README.md +21 -0
- data/tracks/purescript/exercises/isogram/README.md +19 -0
- data/tracks/purescript/exercises/largest-series-product/README.md +20 -0
- data/tracks/purescript/exercises/leap/README.md +33 -0
- data/tracks/purescript/exercises/meetup/README.md +30 -0
- data/tracks/purescript/exercises/pangram/README.md +15 -0
- data/tracks/purescript/exercises/pascals-triangle/README.md +21 -0
- data/tracks/purescript/exercises/raindrops/README.md +24 -0
- data/tracks/purescript/exercises/scrabble-score/README.md +44 -0
- data/tracks/purescript/exercises/triangle/README.md +26 -0
- data/tracks/purescript/exercises/word-count/README.md +19 -0
- data/tracks/r/config/exercise_readme.go.tmpl +16 -0
- data/tracks/r/exercises/anagram/README.md +23 -0
- data/tracks/r/exercises/beer-song/README.md +337 -0
- data/tracks/r/exercises/bob/README.md +28 -0
- data/tracks/r/exercises/difference-of-squares/README.md +29 -0
- data/tracks/r/exercises/grains/README.md +44 -0
- data/tracks/r/exercises/hamming/README.md +52 -0
- data/tracks/r/exercises/hello-world/README.md +31 -0
- data/tracks/r/exercises/isogram/README.md +29 -0
- data/tracks/r/exercises/largest-series-product/README.md +30 -0
- data/tracks/r/exercises/leap/README.md +43 -0
- data/tracks/r/exercises/luhn/README.md +81 -0
- data/tracks/r/exercises/pascals-triangle/README.md +31 -0
- data/tracks/r/exercises/perfect-numbers/README.md +34 -0
- data/tracks/r/exercises/phone-number/README.md +44 -0
- data/tracks/r/exercises/prime-factors/README.md +46 -0
- data/tracks/r/exercises/raindrops/README.md +34 -0
- data/tracks/r/exercises/rna-transcription/README.md +35 -0
- data/tracks/r/exercises/rotational-cipher/README.md +46 -0
- data/tracks/r/exercises/scrabble-score/README.md +54 -0
- data/tracks/r/exercises/secret-handshake/README.md +45 -0
- data/tracks/r/exercises/sieve/README.md +44 -0
- data/tracks/r/exercises/space-age/README.md +34 -0
- data/tracks/r/exercises/sum-of-multiples/README.md +28 -0
- data/tracks/r/exercises/tournament/README.md +78 -0
- data/tracks/r/exercises/word-count/README.md +29 -0
- data/tracks/rust/{docs/EXERCISE_README_INSERT.md → config/exercise-readme-insert.md} +1 -1
- data/tracks/rust/config/exercise_readme.go.tmpl +16 -0
- data/tracks/rust/exercises/acronym/README.md +47 -0
- data/tracks/rust/exercises/all-your-base/README.md +67 -0
- data/tracks/rust/exercises/allergies/README.md +69 -0
- data/tracks/rust/exercises/alphametics/README.md +67 -0
- data/tracks/rust/exercises/anagram/README.md +45 -0
- data/tracks/rust/exercises/atbash-cipher/README.md +66 -0
- data/tracks/rust/exercises/beer-song/README.md +359 -0
- data/tracks/rust/exercises/bob/README.md +50 -0
- data/tracks/rust/exercises/bowling/README.md +85 -0
- data/tracks/rust/exercises/bracket-push/README.md +50 -0
- data/tracks/rust/exercises/circular-buffer/README.md +82 -0
- data/tracks/rust/exercises/custom-set/README.md +43 -0
- data/tracks/rust/exercises/difference-of-squares/README.md +51 -0
- data/tracks/rust/exercises/dominoes/README.md +50 -0
- data/tracks/rust/exercises/etl/README.md +83 -0
- data/tracks/rust/exercises/forth/README.md +61 -0
- data/tracks/rust/exercises/gigasecond/Cargo.lock +3 -3
- data/tracks/rust/exercises/gigasecond/Cargo.toml +1 -1
- data/tracks/rust/exercises/gigasecond/README.md +43 -0
- data/tracks/rust/exercises/gigasecond/example.rs +1 -1
- data/tracks/rust/exercises/gigasecond/src/lib.rs +2 -2
- data/tracks/rust/exercises/gigasecond/tests/gigasecond.rs +10 -10
- data/tracks/rust/exercises/grade-school/README.md +74 -0
- data/tracks/rust/exercises/grains/README.md +66 -0
- data/tracks/rust/exercises/hamming/README.md +74 -0
- data/tracks/rust/exercises/hello-world/README.md +53 -0
- data/tracks/rust/exercises/hexadecimal/README.md +46 -0
- data/tracks/rust/exercises/largest-series-product/README.md +60 -0
- data/tracks/rust/exercises/leap/README.md +65 -0
- data/tracks/rust/exercises/luhn/README.md +103 -0
- data/tracks/rust/exercises/luhn-from/README.md +49 -0
- data/tracks/rust/exercises/luhn-trait/README.md +57 -0
- data/tracks/rust/exercises/minesweeper/README.md +62 -0
- data/tracks/rust/exercises/nucleotide-codons/README.md +54 -0
- data/tracks/rust/exercises/nucleotide-count/README.md +65 -0
- data/tracks/rust/exercises/ocr-numbers/README.md +117 -0
- data/tracks/rust/exercises/pangram/README.md +47 -0
- data/tracks/rust/exercises/parallel-letter-frequency/README.md +77 -0
- data/tracks/rust/exercises/pascals-triangle/README.md +53 -0
- data/tracks/rust/exercises/phone-number/README.md +66 -0
- data/tracks/rust/exercises/protein-translation/README.md +81 -0
- data/tracks/rust/exercises/queen-attack/README.md +65 -0
- data/tracks/rust/exercises/raindrops/README.md +56 -0
- data/tracks/rust/exercises/react/README.md +51 -0
- data/tracks/rust/exercises/rectangles/README.md +99 -0
- data/tracks/rust/exercises/rna-transcription/README.md +57 -0
- data/tracks/rust/exercises/robot-name/README.md +54 -0
- data/tracks/rust/exercises/robot-simulator/README.md +66 -0
- data/tracks/rust/exercises/roman-numerals/README.md +81 -0
- data/tracks/rust/exercises/rotational-cipher/README.md +68 -0
- data/tracks/rust/exercises/run-length-encoding/README.md +62 -0
- data/tracks/rust/exercises/scrabble-score/README.md +76 -0
- data/tracks/rust/exercises/sieve/README.md +66 -0
- data/tracks/rust/exercises/space-age/README.md +64 -0
- data/tracks/rust/exercises/sublist/README.md +53 -0
- data/tracks/rust/exercises/sum-of-multiples/README.md +50 -0
- data/tracks/rust/exercises/tournament/README.md +100 -0
- data/tracks/rust/exercises/triangle/README.md +71 -0
- data/tracks/rust/exercises/variable-length-quantity/README.md +71 -0
- data/tracks/rust/exercises/word-count/README.md +51 -0
- data/tracks/rust/exercises/wordy/README.md +95 -0
- data/tracks/vimscript/config/exercise_readme.go.tmpl +16 -0
- data/tracks/vimscript/exercises/allergies/README.md +46 -0
- data/tracks/vimscript/exercises/anagram/README.md +22 -0
- data/tracks/vimscript/exercises/atbash-cipher/README.md +43 -0
- data/tracks/vimscript/exercises/beer-song/README.md +336 -0
- data/tracks/vimscript/exercises/bob/README.md +27 -0
- data/tracks/vimscript/exercises/difference-of-squares/README.md +28 -0
- data/tracks/vimscript/exercises/etl/README.md +60 -0
- data/tracks/vimscript/exercises/hamming/README.md +51 -0
- data/tracks/vimscript/exercises/hello-world/README.md +30 -0
- data/tracks/vimscript/exercises/largest-series-product/README.md +29 -0
- data/tracks/vimscript/exercises/leap/README.md +42 -0
- data/tracks/vimscript/exercises/nucleotide-count/README.md +42 -0
- data/tracks/vimscript/exercises/pangram/README.md +24 -0
- data/tracks/vimscript/exercises/phone-number/README.md +43 -0
- data/tracks/vimscript/exercises/raindrops/README.md +33 -0
- data/tracks/vimscript/exercises/rna-transcription/README.md +34 -0
- data/tracks/vimscript/exercises/roman-numerals/README.md +58 -0
- data/tracks/vimscript/exercises/scrabble-score/README.md +53 -0
- data/tracks/vimscript/exercises/triangle/README.md +35 -0
- data/tracks/vimscript/exercises/word-count/README.md +28 -0
- metadata +466 -86
- data/tracks/java/exercises/anagram/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/atbash-cipher/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/bank-account/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/beer-song/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/binary/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/binary-search/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/binary-search-tree/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/bob/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/book-store/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/bowling/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/bracket-push/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/change/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/circular-buffer/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/clock/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/collatz-conjecture/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/complex-numbers/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/crypto-square/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/custom-set/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/diamond/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/difference-of-squares/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/etl/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/flatten-array/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/food-chain/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/gigasecond/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/grade-school/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/hamming/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/hello-world/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/hexadecimal/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/isogram/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/kindergarten-garden/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/largest-series-product/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/linked-list/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/list-ops/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/luhn/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/matrix/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/meetup/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/minesweeper/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/nth-prime/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/nucleotide-count/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/ocr-numbers/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/octal/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/palindrome-products/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/pangram/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/pascals-triangle/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/perfect-numbers/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/phone-number/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/pig-latin/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/poker/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/prime-factors/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/pythagorean-triplet/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/queen-attack/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/raindrops/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/rectangles/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/rna-transcription/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/robot-name/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/robot-simulator/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/roman-numerals/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/run-length-encoding/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/saddle-points/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/scrabble-score/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/secret-handshake/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/series/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/sieve/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/simple-cipher/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/simple-linked-list/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/space-age/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/spiral-matrix/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/strain/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/sublist/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/sum-of-multiples/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/transpose/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/triangle/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/trinary/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/twelve-days/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/two-fer/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/word-count/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/word-search/.meta/readme.go.tmpl +0 -17
- data/tracks/java/exercises/wordy/.meta/readme.go.tmpl +0 -17
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Secret Handshake
|
|
2
|
+
|
|
3
|
+
> There are 10 types of people in the world: Those who understand
|
|
4
|
+
> binary, and those who don't.
|
|
5
|
+
|
|
6
|
+
You and your fellow cohort of those in the "know" when it comes to
|
|
7
|
+
binary decide to come up with a secret "handshake".
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
1 = wink
|
|
11
|
+
10 = double blink
|
|
12
|
+
100 = close your eyes
|
|
13
|
+
1000 = jump
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
10000 = Reverse the order of the operations in the secret handshake.
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Given a decimal number, convert it to the appropriate sequence of events for a secret handshake.
|
|
20
|
+
|
|
21
|
+
Here's a couple of examples:
|
|
22
|
+
|
|
23
|
+
Given the input 3, the function would return the array
|
|
24
|
+
["wink", "double blink"] because 3 is 11 in binary.
|
|
25
|
+
|
|
26
|
+
Given the input 19, the function would return the array
|
|
27
|
+
["double blink", "wink"] because 19 is 10011 in binary.
|
|
28
|
+
Notice that the addition of 16 (10000 in binary)
|
|
29
|
+
has caused the array to be reversed.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
## Getting Started
|
|
33
|
+
|
|
34
|
+
For installation and learning resources, refer to the
|
|
35
|
+
[exercism help page](http://exercism.io/languages/haskell).
|
|
36
|
+
|
|
37
|
+
## Running the tests
|
|
38
|
+
|
|
39
|
+
To run the test suite, execute the following command:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
stack test
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
#### If you get an error message like this...
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
No .cabal file found in directory
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
You are probably running an old stack version and need
|
|
52
|
+
to upgrade it.
|
|
53
|
+
|
|
54
|
+
#### Otherwise, if you get an error message like this...
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
No compiler found, expected minor version match with...
|
|
58
|
+
Try running "stack setup" to install the correct GHC...
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Just do as it says and it will download and install
|
|
62
|
+
the correct compiler version:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
stack setup
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Running *GHCi*
|
|
69
|
+
|
|
70
|
+
If you want to play with your solution in GHCi, just run the command:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
stack ghci
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Feedback, Issues, Pull Requests
|
|
77
|
+
|
|
78
|
+
The [exercism/haskell](https://github.com/exercism/haskell) repository on
|
|
79
|
+
GitHub is the home for all of the Haskell exercises.
|
|
80
|
+
|
|
81
|
+
If you have feedback about an exercise, or want to help implementing a new
|
|
82
|
+
one, head over there and create an issue. We'll do our best to help you!
|
|
83
|
+
|
|
84
|
+
## Source
|
|
85
|
+
|
|
86
|
+
Bert, in Mary Poppins [http://www.imdb.com/character/ch0011238/quotes](http://www.imdb.com/character/ch0011238/quotes)
|
|
87
|
+
|
|
88
|
+
## Submitting Incomplete Solutions
|
|
89
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Series
|
|
2
|
+
|
|
3
|
+
Given a string of digits, output all the contiguous substrings of length `n` in
|
|
4
|
+
that string.
|
|
5
|
+
|
|
6
|
+
For example, the string "49142" has the following 3-digit series:
|
|
7
|
+
|
|
8
|
+
- 491
|
|
9
|
+
- 914
|
|
10
|
+
- 142
|
|
11
|
+
|
|
12
|
+
And the following 4-digit series:
|
|
13
|
+
|
|
14
|
+
- 4914
|
|
15
|
+
- 9142
|
|
16
|
+
|
|
17
|
+
And if you ask for a 6-digit series from a 5-digit string, you deserve
|
|
18
|
+
whatever you get.
|
|
19
|
+
|
|
20
|
+
Note that these series are only required to occupy *adjacent positions*
|
|
21
|
+
in the input; the digits need not be *numerically consecutive*.
|
|
22
|
+
|
|
23
|
+
## Hints
|
|
24
|
+
|
|
25
|
+
To complete this exercise you need to implement the function `slices`,
|
|
26
|
+
that takes a *text* and returns the subsequences of digits with a
|
|
27
|
+
specified size:
|
|
28
|
+
|
|
29
|
+
If it is your first time solving this exercise, it is recommended that you
|
|
30
|
+
stick to the provided signature:
|
|
31
|
+
|
|
32
|
+
```haskell
|
|
33
|
+
slices :: Int -> String -> [[Int]]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Later, it may be a good idea to revisit this problem and play with other data
|
|
37
|
+
types and libraries:
|
|
38
|
+
|
|
39
|
+
- `ByteString`, from package *bytestring*.
|
|
40
|
+
- `Sequence`, from package *containers*.
|
|
41
|
+
- `Text`, from package *text*.
|
|
42
|
+
- `Vector`, from package *vector*.
|
|
43
|
+
|
|
44
|
+
The test suite was intentionally designed to accept almost any type signature
|
|
45
|
+
that makes sense, so you are encouraged to find the one you think is the best.
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
## Getting Started
|
|
50
|
+
|
|
51
|
+
For installation and learning resources, refer to the
|
|
52
|
+
[exercism help page](http://exercism.io/languages/haskell).
|
|
53
|
+
|
|
54
|
+
## Running the tests
|
|
55
|
+
|
|
56
|
+
To run the test suite, execute the following command:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
stack test
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
#### If you get an error message like this...
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
No .cabal file found in directory
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
You are probably running an old stack version and need
|
|
69
|
+
to upgrade it.
|
|
70
|
+
|
|
71
|
+
#### Otherwise, if you get an error message like this...
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
No compiler found, expected minor version match with...
|
|
75
|
+
Try running "stack setup" to install the correct GHC...
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Just do as it says and it will download and install
|
|
79
|
+
the correct compiler version:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
stack setup
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Running *GHCi*
|
|
86
|
+
|
|
87
|
+
If you want to play with your solution in GHCi, just run the command:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
stack ghci
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Feedback, Issues, Pull Requests
|
|
94
|
+
|
|
95
|
+
The [exercism/haskell](https://github.com/exercism/haskell) repository on
|
|
96
|
+
GitHub is the home for all of the Haskell exercises.
|
|
97
|
+
|
|
98
|
+
If you have feedback about an exercise, or want to help implementing a new
|
|
99
|
+
one, head over there and create an issue. We'll do our best to help you!
|
|
100
|
+
|
|
101
|
+
## Source
|
|
102
|
+
|
|
103
|
+
A subset of the Problem 8 at Project Euler [http://projecteuler.net/problem=8](http://projecteuler.net/problem=8)
|
|
104
|
+
|
|
105
|
+
## Submitting Incomplete Solutions
|
|
106
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Sgf Parsing
|
|
2
|
+
|
|
3
|
+
Parsing a Smart Game Format string.
|
|
4
|
+
|
|
5
|
+
[SGF](https://en.wikipedia.org/wiki/Smart_Game_Format) is a standard format for
|
|
6
|
+
storing board game files, in particular go.
|
|
7
|
+
|
|
8
|
+
SGF is a fairly simple format. An SGF file usually contains a single
|
|
9
|
+
tree of nodes where each node is a property list. The property list
|
|
10
|
+
contains key value pairs, each key can only occur once but may have
|
|
11
|
+
multiple values.
|
|
12
|
+
|
|
13
|
+
An SGF file may look like this:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
(;FF[4]C[root]SZ[19];B[aa];W[ab])
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
This is a tree with three nodes:
|
|
20
|
+
|
|
21
|
+
- The top level node has two properties: FF\[4\] (key = "FF", value =
|
|
22
|
+
"4") and C\[root\](key = "C", value = "root"). (FF indicates the
|
|
23
|
+
version of SGF and C is a comment.)
|
|
24
|
+
- The top level node has a single child which has a single property:
|
|
25
|
+
B\[aa\]. (Black plays on the point encoded as "aa", which is the
|
|
26
|
+
1-1 point (which is a stupid place to play)).
|
|
27
|
+
- The B\[aa\] node has a single child which has a single property:
|
|
28
|
+
W\[ab\].
|
|
29
|
+
|
|
30
|
+
As you can imagine an SGF file contains a lot of nodes with a single
|
|
31
|
+
child, which is why there's a shorthand for it.
|
|
32
|
+
|
|
33
|
+
SGF can encode variations of play. Go players do a lot of backtracking
|
|
34
|
+
in their reviews (let's try this, doesn't work, let's try that) and SGF
|
|
35
|
+
supports variations of play sequences. For example:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
(;FF[4](;B[aa];W[ab])(;B[dd];W[ee]))
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Here the root node has two variations. The first (which by convention
|
|
42
|
+
indicates what's actually played) is where black plays on 1-1. Black was
|
|
43
|
+
sent this file by his teacher who pointed out a more sensible play in
|
|
44
|
+
the second child of the root node: `B[dd]` (4-4 point, a very standard
|
|
45
|
+
opening to take the corner).
|
|
46
|
+
|
|
47
|
+
A key can have multiple values associated with it. For example:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
(;FF[4];AB[aa][ab][ba])
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Here `AB` (add black) is used to add three black stones to the board.
|
|
54
|
+
|
|
55
|
+
There are a few more complexities to SGF (and parsing in general), which
|
|
56
|
+
you can mostly ignore. You should assume that the input is encoded in
|
|
57
|
+
UTF-8, the tests won't contain a charset property, so don't worry about
|
|
58
|
+
that. Furthermore you may assume that all newlines are unix style (`\n`,
|
|
59
|
+
no `\r` or `\r\n` will be in the tests) and that no optional whitespace
|
|
60
|
+
between properties, nodes, etc will be in the tests.
|
|
61
|
+
|
|
62
|
+
The exercise will have you parse an SGF string and return a tree
|
|
63
|
+
structure of properties. You do not need to encode knowledge about the
|
|
64
|
+
data types of properties, just use the rules for the
|
|
65
|
+
[text](http://www.red-bean.com/sgf/sgf4.html#text) type everywhere.
|
|
66
|
+
|
|
67
|
+
## Hints
|
|
68
|
+
|
|
69
|
+
The Sgf module should export a parseSgf module with the following signature:
|
|
70
|
+
|
|
71
|
+
```haskell
|
|
72
|
+
parseSgf :: Text -> Maybe (Tree (Map Text [Text]))
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
You may find it useful to copy the following definitions for SgfTree
|
|
76
|
+
and SgfNode:
|
|
77
|
+
|
|
78
|
+
```haskell
|
|
79
|
+
-- | A tree of nodes.
|
|
80
|
+
type SgfTree = Tree SgfNode
|
|
81
|
+
|
|
82
|
+
-- | A node is a property list, each key can only occur once.
|
|
83
|
+
-- Keys may have multiple values associated with them.
|
|
84
|
+
type SgfNode = Map Text [Text]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
The parsec library is part of the Haskell Platform. Please use it to
|
|
88
|
+
your advantage.
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
## Getting Started
|
|
93
|
+
|
|
94
|
+
For installation and learning resources, refer to the
|
|
95
|
+
[exercism help page](http://exercism.io/languages/haskell).
|
|
96
|
+
|
|
97
|
+
## Running the tests
|
|
98
|
+
|
|
99
|
+
To run the test suite, execute the following command:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
stack test
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
#### If you get an error message like this...
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
No .cabal file found in directory
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
You are probably running an old stack version and need
|
|
112
|
+
to upgrade it.
|
|
113
|
+
|
|
114
|
+
#### Otherwise, if you get an error message like this...
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
No compiler found, expected minor version match with...
|
|
118
|
+
Try running "stack setup" to install the correct GHC...
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Just do as it says and it will download and install
|
|
122
|
+
the correct compiler version:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
stack setup
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Running *GHCi*
|
|
129
|
+
|
|
130
|
+
If you want to play with your solution in GHCi, just run the command:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
stack ghci
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Feedback, Issues, Pull Requests
|
|
137
|
+
|
|
138
|
+
The [exercism/haskell](https://github.com/exercism/haskell) repository on
|
|
139
|
+
GitHub is the home for all of the Haskell exercises.
|
|
140
|
+
|
|
141
|
+
If you have feedback about an exercise, or want to help implementing a new
|
|
142
|
+
one, head over there and create an issue. We'll do our best to help you!
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
## Submitting Incomplete Solutions
|
|
146
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Sieve
|
|
2
|
+
|
|
3
|
+
Use the Sieve of Eratosthenes to find all the primes from 2 up to a given
|
|
4
|
+
number.
|
|
5
|
+
|
|
6
|
+
The Sieve of Eratosthenes is a simple, ancient algorithm for finding all
|
|
7
|
+
prime numbers up to any given limit. It does so by iteratively marking as
|
|
8
|
+
composite (i.e. not prime) the multiples of each prime,
|
|
9
|
+
starting with the multiples of 2.
|
|
10
|
+
|
|
11
|
+
Create your range, starting at two and continuing up to and including the given limit. (i.e. [2, limit])
|
|
12
|
+
|
|
13
|
+
The algorithm consists of repeating the following over and over:
|
|
14
|
+
|
|
15
|
+
- take the next available unmarked number in your list (it is prime)
|
|
16
|
+
- mark all the multiples of that number (they are not prime)
|
|
17
|
+
|
|
18
|
+
Repeat until you have processed each number in your range.
|
|
19
|
+
|
|
20
|
+
When the algorithm terminates, all the numbers in the list that have not
|
|
21
|
+
been marked are prime.
|
|
22
|
+
|
|
23
|
+
The wikipedia article has a useful graphic that explains the algorithm:
|
|
24
|
+
https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
|
|
25
|
+
|
|
26
|
+
Notice that this is a very specific algorithm, and the tests don't check
|
|
27
|
+
that you've implemented the algorithm, only that you've come up with the
|
|
28
|
+
correct list of primes.
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
## Getting Started
|
|
32
|
+
|
|
33
|
+
For installation and learning resources, refer to the
|
|
34
|
+
[exercism help page](http://exercism.io/languages/haskell).
|
|
35
|
+
|
|
36
|
+
## Running the tests
|
|
37
|
+
|
|
38
|
+
To run the test suite, execute the following command:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
stack test
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
#### If you get an error message like this...
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
No .cabal file found in directory
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
You are probably running an old stack version and need
|
|
51
|
+
to upgrade it.
|
|
52
|
+
|
|
53
|
+
#### Otherwise, if you get an error message like this...
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
No compiler found, expected minor version match with...
|
|
57
|
+
Try running "stack setup" to install the correct GHC...
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Just do as it says and it will download and install
|
|
61
|
+
the correct compiler version:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
stack setup
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Running *GHCi*
|
|
68
|
+
|
|
69
|
+
If you want to play with your solution in GHCi, just run the command:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
stack ghci
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Feedback, Issues, Pull Requests
|
|
76
|
+
|
|
77
|
+
The [exercism/haskell](https://github.com/exercism/haskell) repository on
|
|
78
|
+
GitHub is the home for all of the Haskell exercises.
|
|
79
|
+
|
|
80
|
+
If you have feedback about an exercise, or want to help implementing a new
|
|
81
|
+
one, head over there and create an issue. We'll do our best to help you!
|
|
82
|
+
|
|
83
|
+
## Source
|
|
84
|
+
|
|
85
|
+
Sieve of Eratosthenes at Wikipedia [http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes](http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)
|
|
86
|
+
|
|
87
|
+
## Submitting Incomplete Solutions
|
|
88
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Simple Cipher
|
|
2
|
+
|
|
3
|
+
Implement a simple shift cipher like Caesar and a more secure substitution cipher.
|
|
4
|
+
|
|
5
|
+
## Step 1
|
|
6
|
+
|
|
7
|
+
"If he had anything confidential to say, he wrote it in cipher, that is,
|
|
8
|
+
by so changing the order of the letters of the alphabet, that not a word
|
|
9
|
+
could be made out. If anyone wishes to decipher these, and get at their
|
|
10
|
+
meaning, he must substitute the fourth letter of the alphabet, namely D,
|
|
11
|
+
for A, and so with the others."
|
|
12
|
+
—Suetonius, Life of Julius Caesar
|
|
13
|
+
|
|
14
|
+
Ciphers are very straight-forward algorithms that allow us to render
|
|
15
|
+
text less readable while still allowing easy deciphering. They are
|
|
16
|
+
vulnerable to many forms of cryptoanalysis, but we are lucky that
|
|
17
|
+
generally our little sisters are not cryptoanalysts.
|
|
18
|
+
|
|
19
|
+
The Caesar Cipher was used for some messages from Julius Caesar that
|
|
20
|
+
were sent afield. Now Caesar knew that the cipher wasn't very good, but
|
|
21
|
+
he had one ally in that respect: almost nobody could read well. So even
|
|
22
|
+
being a couple letters off was sufficient so that people couldn't
|
|
23
|
+
recognize the few words that they did know.
|
|
24
|
+
|
|
25
|
+
Your task is to create a simple shift cipher like the Caesar Cipher.
|
|
26
|
+
This image is a great example of the Caesar Cipher:
|
|
27
|
+
|
|
28
|
+
![Caesar Cipher][1]
|
|
29
|
+
|
|
30
|
+
For example:
|
|
31
|
+
|
|
32
|
+
Giving "iamapandabear" as input to the encode function returns the cipher "ldpdsdqgdehdu". Obscure enough to keep our message secret in transit.
|
|
33
|
+
|
|
34
|
+
When "ldpdsdqgdehdu" is put into the decode function it would return
|
|
35
|
+
the original "iamapandabear" letting your friend read your original
|
|
36
|
+
message.
|
|
37
|
+
|
|
38
|
+
## Step 2
|
|
39
|
+
|
|
40
|
+
Shift ciphers are no fun though when your kid sister figures it out. Try
|
|
41
|
+
amending the code to allow us to specify a key and use that for the
|
|
42
|
+
shift distance. This is called a substitution cipher.
|
|
43
|
+
|
|
44
|
+
Here's an example:
|
|
45
|
+
|
|
46
|
+
Given the key "aaaaaaaaaaaaaaaaaa", encoding the string "iamapandabear"
|
|
47
|
+
would return the original "iamapandabear".
|
|
48
|
+
|
|
49
|
+
Given the key "ddddddddddddddddd", encoding our string "iamapandabear"
|
|
50
|
+
would return the obscured "lpdsdqgdehdu"
|
|
51
|
+
|
|
52
|
+
In the example above, we've set a = 0 for the key value. So when the
|
|
53
|
+
plaintext is added to the key, we end up with the same message coming
|
|
54
|
+
out. So "aaaa" is not an ideal key. But if we set the key to "dddd", we
|
|
55
|
+
would get the same thing as the Caesar Cipher.
|
|
56
|
+
|
|
57
|
+
## Step 3
|
|
58
|
+
|
|
59
|
+
The weakest link in any cipher is the human being. Let's make your
|
|
60
|
+
substitution cipher a little more fault tolerant by providing a source
|
|
61
|
+
of randomness and ensuring that the key is not composed of numbers or
|
|
62
|
+
capital letters.
|
|
63
|
+
|
|
64
|
+
If someone doesn't submit a key at all, generate a truly random key of
|
|
65
|
+
at least 100 characters in length, accessible via Cipher#key (the #
|
|
66
|
+
syntax means instance variable)
|
|
67
|
+
|
|
68
|
+
If the key submitted has capital letters or numbers, throw an
|
|
69
|
+
ArgumentError with a message to that effect.
|
|
70
|
+
|
|
71
|
+
## Extensions
|
|
72
|
+
|
|
73
|
+
Shift ciphers work by making the text slightly odd, but are vulnerable
|
|
74
|
+
to frequency analysis. Substitution ciphers help that, but are still
|
|
75
|
+
very vulnerable when the key is short or if spaces are preserved. Later
|
|
76
|
+
on you'll see one solution to this problem in the exercise
|
|
77
|
+
"crypto-square".
|
|
78
|
+
|
|
79
|
+
If you want to go farther in this field, the questions begin to be about
|
|
80
|
+
how we can exchange keys in a secure way. Take a look at [Diffie-Hellman
|
|
81
|
+
on Wikipedia][dh] for one of the first implementations of this scheme.
|
|
82
|
+
|
|
83
|
+
[1]: https://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Caesar_cipher_left_shift_of_3.svg/320px-Caesar_cipher_left_shift_of_3.svg.png
|
|
84
|
+
[dh]: http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
## Getting Started
|
|
88
|
+
|
|
89
|
+
For installation and learning resources, refer to the
|
|
90
|
+
[exercism help page](http://exercism.io/languages/haskell).
|
|
91
|
+
|
|
92
|
+
## Running the tests
|
|
93
|
+
|
|
94
|
+
To run the test suite, execute the following command:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
stack test
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
#### If you get an error message like this...
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
No .cabal file found in directory
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
You are probably running an old stack version and need
|
|
107
|
+
to upgrade it.
|
|
108
|
+
|
|
109
|
+
#### Otherwise, if you get an error message like this...
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
No compiler found, expected minor version match with...
|
|
113
|
+
Try running "stack setup" to install the correct GHC...
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Just do as it says and it will download and install
|
|
117
|
+
the correct compiler version:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
stack setup
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Running *GHCi*
|
|
124
|
+
|
|
125
|
+
If you want to play with your solution in GHCi, just run the command:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
stack ghci
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Feedback, Issues, Pull Requests
|
|
132
|
+
|
|
133
|
+
The [exercism/haskell](https://github.com/exercism/haskell) repository on
|
|
134
|
+
GitHub is the home for all of the Haskell exercises.
|
|
135
|
+
|
|
136
|
+
If you have feedback about an exercise, or want to help implementing a new
|
|
137
|
+
one, head over there and create an issue. We'll do our best to help you!
|
|
138
|
+
|
|
139
|
+
## Source
|
|
140
|
+
|
|
141
|
+
Substitution Cipher at Wikipedia [http://en.wikipedia.org/wiki/Substitution_cipher](http://en.wikipedia.org/wiki/Substitution_cipher)
|
|
142
|
+
|
|
143
|
+
## Submitting Incomplete Solutions
|
|
144
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Simple Linked List
|
|
2
|
+
|
|
3
|
+
Write a simple linked list implementation that uses Elements and a List.
|
|
4
|
+
|
|
5
|
+
The linked list is a fundamental data structure in computer science,
|
|
6
|
+
often used in the implementation of other data structures. They're
|
|
7
|
+
pervasive in functional programming languages, such as Clojure, Erlang,
|
|
8
|
+
or Haskell, but far less common in imperative languages such as Ruby or
|
|
9
|
+
Python.
|
|
10
|
+
|
|
11
|
+
The simplest kind of linked list is a singly linked list. Each element in the
|
|
12
|
+
list contains data and a "next" field pointing to the next element in the list
|
|
13
|
+
of elements.
|
|
14
|
+
|
|
15
|
+
This variant of linked lists is often used to represent sequences or
|
|
16
|
+
push-down stacks (also called a LIFO stack; Last In, First Out).
|
|
17
|
+
|
|
18
|
+
As a first take, lets create a singly linked list to contain the range (1..10),
|
|
19
|
+
and provide functions to reverse a linked list and convert to and from arrays.
|
|
20
|
+
|
|
21
|
+
When implementing this in a language with built-in linked lists,
|
|
22
|
+
implement your own abstract data type.
|
|
23
|
+
|
|
24
|
+
## Hints
|
|
25
|
+
|
|
26
|
+
To complete this exercise, you need to create the data type `LinkedList`,
|
|
27
|
+
and implement the following functions:
|
|
28
|
+
|
|
29
|
+
- `datum`
|
|
30
|
+
- `fromList`
|
|
31
|
+
- `isNil`
|
|
32
|
+
- `new`
|
|
33
|
+
- `next`
|
|
34
|
+
- `nil`
|
|
35
|
+
- `reverseLinkedList`
|
|
36
|
+
- `toList`
|
|
37
|
+
|
|
38
|
+
You will find a dummy data declaration and type signatures already in place,
|
|
39
|
+
but it is up to you to define the functions and create a meaningful data type,
|
|
40
|
+
newtype or type synonym.
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
## Getting Started
|
|
45
|
+
|
|
46
|
+
For installation and learning resources, refer to the
|
|
47
|
+
[exercism help page](http://exercism.io/languages/haskell).
|
|
48
|
+
|
|
49
|
+
## Running the tests
|
|
50
|
+
|
|
51
|
+
To run the test suite, execute the following command:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
stack test
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
#### If you get an error message like this...
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
No .cabal file found in directory
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
You are probably running an old stack version and need
|
|
64
|
+
to upgrade it.
|
|
65
|
+
|
|
66
|
+
#### Otherwise, if you get an error message like this...
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
No compiler found, expected minor version match with...
|
|
70
|
+
Try running "stack setup" to install the correct GHC...
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Just do as it says and it will download and install
|
|
74
|
+
the correct compiler version:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
stack setup
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Running *GHCi*
|
|
81
|
+
|
|
82
|
+
If you want to play with your solution in GHCi, just run the command:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
stack ghci
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Feedback, Issues, Pull Requests
|
|
89
|
+
|
|
90
|
+
The [exercism/haskell](https://github.com/exercism/haskell) repository on
|
|
91
|
+
GitHub is the home for all of the Haskell exercises.
|
|
92
|
+
|
|
93
|
+
If you have feedback about an exercise, or want to help implementing a new
|
|
94
|
+
one, head over there and create an issue. We'll do our best to help you!
|
|
95
|
+
|
|
96
|
+
## Source
|
|
97
|
+
|
|
98
|
+
Inspired by 'Data Structures and Algorithms with Object-Oriented Design Patterns in Ruby', singly linked-lists. [http://www.brpreiss.com/books/opus8/html/page96.html#SECTION004300000000000000000](http://www.brpreiss.com/books/opus8/html/page96.html#SECTION004300000000000000000)
|
|
99
|
+
|
|
100
|
+
## Submitting Incomplete Solutions
|
|
101
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|