trackler 2.2.1.59 → 2.2.1.60
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/problem-specifications/exercises/food-chain/canonical-data.json +31 -23
- data/problem-specifications/exercises/house/canonical-data.json +45 -33
- data/problem-specifications/exercises/house/description.md +1 -1
- data/problem-specifications/exercises/kindergarten-garden/description.md +3 -3
- data/problem-specifications/exercises/nucleotide-count/description.md +2 -2
- data/problem-specifications/exercises/palindrome-products/description.md +1 -1
- data/problem-specifications/exercises/rectangles/description.md +9 -9
- data/problem-specifications/exercises/twelve-days/canonical-data.json +171 -0
- data/problem-specifications/exercises/two-bucket/description.md +7 -7
- data/tracks/c/docs/CONTRIBUTING.md +88 -39
- data/tracks/c/exercises/phone-number/test/test_phone_number.c +33 -29
- data/tracks/c/exercises/triangle/src/example.c +12 -12
- data/tracks/c/exercises/triangle/src/example.h +3 -3
- data/tracks/c/exercises/triangle/test/test_triangle.c +16 -16
- data/tracks/c/exercises/word-count/src/example.c +12 -3
- data/tracks/c/exercises/word-count/src/word_count.h +10 -5
- data/tracks/c/exercises/word-count/test/test_word_count.c +248 -58
- data/tracks/ceylon/exercises/hamming/source/hamming/HammingTest.ceylon +3 -3
- data/tracks/ceylon/exercises/leap/source/leap/LeapTest.ceylon +2 -2
- data/tracks/dart/exercises/phone-number/README.md +1 -1
- data/tracks/dart/exercises/phone-number/test/phone_number_test.dart +5 -5
- data/tracks/gnu-apl/.dockerignore +5 -0
- data/tracks/gnu-apl/.travis.yml +9 -4
- data/tracks/gnu-apl/Dockerfiles/release.dockerfile +15 -0
- data/tracks/gnu-apl/Dockerfiles/svn.dockerfile +22 -0
- data/tracks/gnu-apl/README.md +1 -1
- data/tracks/gnu-apl/bin/install-apl +26 -0
- data/tracks/gnu-apl/test.apl +7 -6
- data/tracks/go/docs/TESTS.md +1 -1
- data/tracks/haskell/.travis.yml +1 -1
- data/tracks/haskell/config.json +9 -0
- data/tracks/haskell/exercises/accumulate/stack.yaml +1 -1
- data/tracks/haskell/exercises/acronym/package.yaml +1 -1
- data/tracks/haskell/exercises/acronym/stack.yaml +1 -1
- data/tracks/haskell/exercises/acronym/test/Tests.hs +3 -0
- data/tracks/haskell/exercises/all-your-base/stack.yaml +1 -1
- data/tracks/haskell/exercises/allergies/stack.yaml +1 -1
- data/tracks/haskell/exercises/alphametics/examples/success-standard/src/Alphametics.hs +2 -1
- data/tracks/haskell/exercises/alphametics/stack.yaml +1 -1
- data/tracks/haskell/exercises/anagram/stack.yaml +1 -1
- data/tracks/haskell/exercises/atbash-cipher/stack.yaml +1 -1
- data/tracks/haskell/exercises/bank-account/stack.yaml +1 -1
- data/tracks/haskell/exercises/beer-song/stack.yaml +1 -1
- data/tracks/haskell/exercises/binary-search-tree/stack.yaml +1 -1
- data/tracks/haskell/exercises/binary/stack.yaml +1 -1
- data/tracks/haskell/exercises/bob/stack.yaml +1 -1
- data/tracks/haskell/exercises/bowling/stack.yaml +1 -1
- data/tracks/haskell/exercises/bracket-push/stack.yaml +1 -1
- data/tracks/haskell/exercises/change/stack.yaml +1 -1
- data/tracks/haskell/exercises/clock/stack.yaml +1 -1
- data/tracks/haskell/exercises/collatz-conjecture/stack.yaml +1 -1
- data/tracks/haskell/exercises/complex-numbers/stack.yaml +1 -1
- data/tracks/haskell/exercises/connect/stack.yaml +1 -1
- data/tracks/haskell/exercises/crypto-square/package.yaml +1 -1
- data/tracks/haskell/exercises/crypto-square/stack.yaml +1 -1
- data/tracks/haskell/exercises/crypto-square/test/Tests.hs +9 -5
- data/tracks/haskell/exercises/custom-set/package.yaml +1 -1
- data/tracks/haskell/exercises/custom-set/stack.yaml +1 -1
- data/tracks/haskell/exercises/custom-set/test/Tests.hs +3 -0
- data/tracks/haskell/exercises/diamond/stack.yaml +1 -1
- data/tracks/haskell/exercises/difference-of-squares/stack.yaml +1 -1
- data/tracks/haskell/exercises/dominoes/README.md +3 -3
- data/tracks/haskell/exercises/dominoes/stack.yaml +1 -1
- data/tracks/haskell/exercises/etl/stack.yaml +1 -1
- data/tracks/haskell/exercises/food-chain/stack.yaml +1 -1
- data/tracks/haskell/exercises/forth/stack.yaml +1 -1
- data/tracks/haskell/exercises/gigasecond/stack.yaml +1 -1
- data/tracks/haskell/exercises/go-counting/stack.yaml +1 -1
- data/tracks/haskell/exercises/grade-school/stack.yaml +1 -1
- data/tracks/haskell/exercises/grains/stack.yaml +1 -1
- data/tracks/haskell/exercises/hamming/package.yaml +1 -1
- data/tracks/haskell/exercises/hamming/stack.yaml +1 -1
- data/tracks/haskell/exercises/hamming/test/Tests.hs +4 -4
- data/tracks/haskell/exercises/hello-world/stack.yaml +1 -1
- data/tracks/haskell/exercises/hexadecimal/stack.yaml +1 -1
- data/tracks/haskell/exercises/house/README.md +1 -1
- data/tracks/haskell/exercises/house/stack.yaml +1 -1
- data/tracks/haskell/exercises/isbn-verifier/README.md +96 -0
- data/tracks/haskell/exercises/isbn-verifier/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/isbn-verifier/examples/success-standard/src/IsbnVerifier.hs +10 -0
- data/tracks/haskell/exercises/isbn-verifier/package.yaml +20 -0
- data/tracks/haskell/exercises/isbn-verifier/src/IsbnVerifier.hs +4 -0
- data/tracks/haskell/exercises/isbn-verifier/stack.yaml +1 -0
- data/tracks/haskell/exercises/isbn-verifier/test/Tests.hs +74 -0
- data/tracks/haskell/exercises/isogram/stack.yaml +1 -1
- data/tracks/haskell/exercises/kindergarten-garden/README.md +3 -3
- data/tracks/haskell/exercises/kindergarten-garden/stack.yaml +1 -1
- data/tracks/haskell/exercises/largest-series-product/stack.yaml +1 -1
- data/tracks/haskell/exercises/leap/package.yaml +1 -1
- data/tracks/haskell/exercises/leap/stack.yaml +1 -1
- data/tracks/haskell/exercises/leap/test/Tests.hs +1 -1
- data/tracks/haskell/exercises/lens-person/stack.yaml +1 -1
- data/tracks/haskell/exercises/linked-list/stack.yaml +1 -1
- data/tracks/haskell/exercises/list-ops/stack.yaml +1 -1
- data/tracks/haskell/exercises/luhn/stack.yaml +1 -1
- data/tracks/haskell/exercises/matrix/stack.yaml +1 -1
- data/tracks/haskell/exercises/meetup/stack.yaml +1 -1
- data/tracks/haskell/exercises/minesweeper/stack.yaml +1 -1
- data/tracks/haskell/exercises/nth-prime/package.yaml +1 -1
- data/tracks/haskell/exercises/nth-prime/stack.yaml +1 -1
- data/tracks/haskell/exercises/nucleotide-count/README.md +2 -2
- data/tracks/haskell/exercises/nucleotide-count/package.yaml +1 -1
- data/tracks/haskell/exercises/nucleotide-count/stack.yaml +1 -1
- data/tracks/haskell/exercises/nucleotide-count/test/Tests.hs +6 -0
- data/tracks/haskell/exercises/ocr-numbers/stack.yaml +1 -1
- data/tracks/haskell/exercises/octal/stack.yaml +1 -1
- data/tracks/haskell/exercises/palindrome-products/README.md +1 -1
- data/tracks/haskell/exercises/palindrome-products/stack.yaml +1 -1
- data/tracks/haskell/exercises/pangram/package.yaml +1 -1
- data/tracks/haskell/exercises/pangram/stack.yaml +1 -1
- data/tracks/haskell/exercises/pangram/test/Tests.hs +6 -2
- data/tracks/haskell/exercises/parallel-letter-frequency/stack.yaml +1 -1
- data/tracks/haskell/exercises/pascals-triangle/stack.yaml +1 -1
- data/tracks/haskell/exercises/perfect-numbers/stack.yaml +1 -1
- data/tracks/haskell/exercises/phone-number/README.md +1 -1
- data/tracks/haskell/exercises/phone-number/stack.yaml +1 -1
- data/tracks/haskell/exercises/pig-latin/stack.yaml +1 -1
- data/tracks/haskell/exercises/pov/stack.yaml +1 -1
- data/tracks/haskell/exercises/prime-factors/stack.yaml +1 -1
- data/tracks/haskell/exercises/pythagorean-triplet/stack.yaml +1 -1
- data/tracks/haskell/exercises/queen-attack/stack.yaml +1 -1
- data/tracks/haskell/exercises/raindrops/stack.yaml +1 -1
- data/tracks/haskell/exercises/rna-transcription/stack.yaml +1 -1
- data/tracks/haskell/exercises/robot-name/stack.yaml +1 -1
- data/tracks/haskell/exercises/robot-simulator/stack.yaml +1 -1
- data/tracks/haskell/exercises/roman-numerals/stack.yaml +1 -1
- data/tracks/haskell/exercises/rotational-cipher/stack.yaml +1 -1
- data/tracks/haskell/exercises/run-length-encoding/stack.yaml +1 -1
- data/tracks/haskell/exercises/saddle-points/stack.yaml +1 -1
- data/tracks/haskell/exercises/say/stack.yaml +1 -1
- data/tracks/haskell/exercises/scrabble-score/stack.yaml +1 -1
- data/tracks/haskell/exercises/secret-handshake/stack.yaml +1 -1
- data/tracks/haskell/exercises/series/stack.yaml +1 -1
- data/tracks/haskell/exercises/sgf-parsing/stack.yaml +1 -1
- data/tracks/haskell/exercises/sieve/stack.yaml +1 -1
- data/tracks/haskell/exercises/simple-cipher/stack.yaml +1 -1
- data/tracks/haskell/exercises/simple-linked-list/stack.yaml +1 -1
- data/tracks/haskell/exercises/space-age/stack.yaml +1 -1
- data/tracks/haskell/exercises/spiral-matrix/stack.yaml +1 -1
- data/tracks/haskell/exercises/strain/stack.yaml +1 -1
- data/tracks/haskell/exercises/sublist/stack.yaml +1 -1
- data/tracks/haskell/exercises/sum-of-multiples/stack.yaml +1 -1
- data/tracks/haskell/exercises/triangle/stack.yaml +1 -1
- data/tracks/haskell/exercises/trinary/stack.yaml +1 -1
- data/tracks/haskell/exercises/word-count/stack.yaml +1 -1
- data/tracks/haskell/exercises/wordy/examples/success-standard/src/WordProblem.hs +6 -5
- data/tracks/haskell/exercises/wordy/stack.yaml +1 -1
- data/tracks/haskell/exercises/zebra-puzzle/package.yaml +1 -1
- data/tracks/haskell/exercises/zebra-puzzle/stack.yaml +1 -1
- data/tracks/haskell/exercises/zipper/README.md +1 -1
- data/tracks/haskell/exercises/zipper/stack.yaml +1 -1
- data/tracks/javascript/.eslintignore +43 -0
- data/tracks/javascript/.travis.yml +2 -1
- data/tracks/javascript/exercises/bowling/README.md +5 -5
- data/tracks/javascript/exercises/crypto-square/example.js +2 -1
- data/tracks/javascript/exercises/diffie-hellman/diffie-hellman.spec.js +20 -20
- data/tracks/javascript/exercises/diffie-hellman/example.js +10 -10
- data/tracks/javascript/exercises/largest-series-product/example.js +2 -1
- data/tracks/javascript/exercises/sieve/example.js +5 -2
- data/tracks/javascript/package-lock.json +129 -76
- data/tracks/javascript/package.json +6 -5
- data/tracks/ocaml/config.json +10 -0
- data/tracks/ocaml/exercises/hamming/test.ml +3 -3
- data/tracks/ocaml/exercises/leap/test.ml +2 -2
- data/tracks/ocaml/exercises/pangram/test.ml +3 -3
- data/tracks/ocaml/exercises/rectangles/.merlin +5 -0
- data/tracks/ocaml/exercises/rectangles/Makefile +11 -0
- data/tracks/ocaml/exercises/rectangles/example.ml +30 -0
- data/tracks/ocaml/exercises/rectangles/rectangles.mli +1 -0
- data/tracks/ocaml/exercises/rectangles/test.ml +72 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/leap/test.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/ocaml/rectangles/test.ml +15 -0
- data/tracks/pony/README.md +1 -1
- data/tracks/pony/exercises/atbash-cipher/example.pony +6 -10
- data/tracks/pony/exercises/difference-of-squares/example.pony +3 -7
- data/tracks/rust/_test/count-ignores.sh +2 -2
- data/tracks/rust/config.json +24 -0
- data/tracks/rust/config/maintainers.json +10 -0
- data/tracks/rust/exercises/acronym/README.md +0 -1
- data/tracks/rust/exercises/all-your-base/README.md +1 -1
- data/tracks/rust/exercises/allergies/README.md +0 -1
- data/tracks/rust/exercises/alphametics/README.md +2 -2
- data/tracks/rust/exercises/atbash-cipher/README.md +2 -1
- data/tracks/rust/exercises/beer-song/README.md +1 -1
- data/tracks/rust/exercises/bowling/README.md +20 -6
- data/tracks/rust/exercises/circular-buffer/README.md +13 -6
- data/tracks/rust/exercises/crypto-square/README.md +10 -8
- data/tracks/rust/exercises/dominoes/Cargo.toml +1 -1
- data/tracks/rust/exercises/etl/README.md +2 -0
- data/tracks/rust/exercises/grade-school/README.md +0 -1
- data/tracks/rust/exercises/grains/README.md +0 -1
- data/tracks/rust/exercises/isbn-verifier/Cargo.lock +4 -0
- data/tracks/rust/exercises/isbn-verifier/Cargo.toml +3 -0
- data/tracks/rust/exercises/isbn-verifier/README.md +74 -0
- data/tracks/rust/exercises/isbn-verifier/example.rs +44 -0
- data/tracks/rust/exercises/isbn-verifier/src/lib.rs +4 -0
- data/tracks/rust/exercises/isbn-verifier/tests/isbn-verifier.rs +83 -0
- data/tracks/rust/exercises/isogram/README.md +3 -2
- data/tracks/rust/exercises/leap/README.md +1 -1
- data/tracks/rust/exercises/luhn/README.md +7 -7
- data/tracks/rust/exercises/nucleotide-count/README.md +8 -22
- data/tracks/rust/exercises/ocr-numbers/README.md +5 -5
- data/tracks/rust/exercises/pangram/README.md +1 -1
- data/tracks/rust/exercises/pascals-triangle/README.md +1 -1
- data/tracks/rust/exercises/perfect-numbers/README.md +2 -2
- data/tracks/rust/exercises/phone-number/README.md +3 -2
- data/tracks/rust/exercises/protein-translation/README.md +4 -5
- data/tracks/rust/exercises/proverb/README.md +13 -11
- data/tracks/rust/exercises/proverb/example.rs +14 -15
- data/tracks/rust/exercises/proverb/tests/proverb.rs +40 -13
- data/tracks/rust/exercises/pythagorean-triplet/README.md +3 -3
- data/tracks/rust/exercises/queen-attack/README.md +1 -1
- data/tracks/rust/exercises/rectangles/README.md +7 -7
- data/tracks/rust/exercises/roman-numerals/README.md +1 -1
- data/tracks/rust/exercises/rotational-cipher/README.md +2 -1
- data/tracks/rust/exercises/run-length-encoding/README.md +4 -4
- data/tracks/rust/exercises/scrabble-score/README.md +3 -1
- data/tracks/rust/exercises/space-age/README.md +1 -1
- data/tracks/rust/exercises/tournament/README.md +5 -5
- data/tracks/rust/exercises/triangle/README.md +9 -6
- data/tracks/rust/exercises/two-bucket/Cargo.lock +4 -0
- data/tracks/rust/exercises/two-bucket/Cargo.toml +3 -0
- data/tracks/rust/exercises/two-bucket/README.md +69 -0
- data/tracks/rust/exercises/two-bucket/example.rs +129 -0
- data/tracks/rust/exercises/two-bucket/src/lib.rs +26 -0
- data/tracks/rust/exercises/two-bucket/tests/two-bucket.rs +68 -0
- data/tracks/rust/exercises/variable-length-quantity/README.md +6 -7
- data/tracks/rust/exercises/word-count/README.md +1 -2
- data/tracks/rust/exercises/wordy/README.md +0 -5
- metadata +33 -4
- data/tracks/go/.github/PULL_REQUEST_TEMPLATE.md +0 -23
- data/tracks/ruby/.github/PULL_REQUEST_TEMPLATE.md +0 -40
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -7,10 +7,10 @@ correct domino chain (the dots on one half of a stone match the dots on the
|
|
7
7
|
neighbouring half of an adjacent stone) and that dots on the halfs of the stones
|
8
8
|
which don't have a neighbour (the first and last stone) match each other.
|
9
9
|
|
10
|
-
For example given the stones `
|
11
|
-
like `
|
10
|
+
For example given the stones `[2|1]`, `[2|3]` and `[1|3]` you should compute something
|
11
|
+
like `[1|2] [2|3] [3|1]` or `[3|2] [2|1] [1|3]` or `[1|3] [3|2] [2|1]` etc, where the first and last numbers are the same.
|
12
12
|
|
13
|
-
For stones
|
13
|
+
For stones `[1|2]`, `[4|1]` and `[2|3]` the resulting chain is not valid: `[4|1] [1|2] [2|3]`'s first and last numbers are not the same. 4 != 3
|
14
14
|
|
15
15
|
Some test cases may use duplicate stones in a chain solution, assume that multiple Domino sets are being used.
|
16
16
|
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -67,13 +67,13 @@ cases = [ Case { description = "empty strands"
|
|
67
67
|
, expected = Just 2
|
68
68
|
}
|
69
69
|
, Case { description = "non-unique character in first strand"
|
70
|
-
, strand1 = "
|
71
|
-
, strand2 = "
|
70
|
+
, strand1 = "AAG"
|
71
|
+
, strand2 = "AAA"
|
72
72
|
, expected = Just 1
|
73
73
|
}
|
74
74
|
, Case { description = "non-unique character in second strand"
|
75
|
-
, strand1 = "
|
76
|
-
, strand2 = "
|
75
|
+
, strand1 = "AAA"
|
76
|
+
, strand2 = "AAG"
|
77
77
|
, expected = Just 1
|
78
78
|
}
|
79
79
|
, Case { description = "same nucleotides in different positions"
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# House
|
2
2
|
|
3
|
-
|
3
|
+
Recite the nursery rhyme 'This is the House that Jack Built'.
|
4
4
|
|
5
5
|
> [The] process of placing a phrase of clause within another phrase of
|
6
6
|
> clause is called embedding. It is through the processes of recursion
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# Isbn Verifier
|
2
|
+
|
3
|
+
Check if a given ISBN-10 is valid.
|
4
|
+
|
5
|
+
## Functionality
|
6
|
+
|
7
|
+
Given an unknown string the program should check if the provided string is a valid ISBN-10.
|
8
|
+
Putting this into place requires some thinking about preprocessing/parsing of the string prior to calculating the check digit for the ISBN.
|
9
|
+
|
10
|
+
The program should allow for ISBN-10 without the separating dashes to be verified as well.
|
11
|
+
|
12
|
+
## ISBN
|
13
|
+
|
14
|
+
Let's take a random ISBN-10 number, say `3-598-21508-8` for this.
|
15
|
+
The first digit block indicates the group where the ISBN belongs. Groups can consist of shared languages, geographic regions or countries. The leading '3' signals this ISBN is from a german speaking country.
|
16
|
+
The following number block is to identify the publisher. Since this is a three digit publisher number there is a 5 digit title number for this book.
|
17
|
+
The last digit in the ISBN is the check digit which is used to detect read errors.
|
18
|
+
|
19
|
+
The first 9 digits in the ISBN have to be between 0 and 9.
|
20
|
+
The check digit can additionally be an 'X' to allow 10 to be a valid check digit as well.
|
21
|
+
|
22
|
+
A valid ISBN-10 is calculated with this formula `(x1 * 10 + x2 * 9 + x3 * 8 + x4 * 7 + x5 * 6 + x6 * 5 + x7 * 4 + x8 * 3 + x9 * 2 + x10 * 1) mod 11 == 0`
|
23
|
+
So for our example ISBN this means:
|
24
|
+
(3 * 10 + 5 * 9 + 9 * 8 + 8 * 7 + 2 * 6 + 1 * 5 + 5 * 4 + 0 * 3 + 8 * 2 + 8 * 1) mod 11 = 0
|
25
|
+
|
26
|
+
Which proves that the ISBN is valid.
|
27
|
+
|
28
|
+
## Caveats
|
29
|
+
|
30
|
+
Converting from string to number can be tricky in certain languages.
|
31
|
+
It's getting even trickier since the check-digit of an ISBN-10 can be 'X'.
|
32
|
+
|
33
|
+
## Bonus tasks
|
34
|
+
|
35
|
+
* Generate a valid ISBN-13 from the input ISBN-10 (and maybe verify it again with a derived verifier)
|
36
|
+
|
37
|
+
* Generate valid ISBN, maybe even from a given starting ISBN
|
38
|
+
|
39
|
+
## Getting Started
|
40
|
+
|
41
|
+
For installation and learning resources, refer to the
|
42
|
+
[exercism help page](http://exercism.io/languages/haskell).
|
43
|
+
|
44
|
+
## Running the tests
|
45
|
+
|
46
|
+
To run the test suite, execute the following command:
|
47
|
+
|
48
|
+
```bash
|
49
|
+
stack test
|
50
|
+
```
|
51
|
+
|
52
|
+
#### If you get an error message like this...
|
53
|
+
|
54
|
+
```
|
55
|
+
No .cabal file found in directory
|
56
|
+
```
|
57
|
+
|
58
|
+
You are probably running an old stack version and need
|
59
|
+
to upgrade it.
|
60
|
+
|
61
|
+
#### Otherwise, if you get an error message like this...
|
62
|
+
|
63
|
+
```
|
64
|
+
No compiler found, expected minor version match with...
|
65
|
+
Try running "stack setup" to install the correct GHC...
|
66
|
+
```
|
67
|
+
|
68
|
+
Just do as it says and it will download and install
|
69
|
+
the correct compiler version:
|
70
|
+
|
71
|
+
```bash
|
72
|
+
stack setup
|
73
|
+
```
|
74
|
+
|
75
|
+
## Running *GHCi*
|
76
|
+
|
77
|
+
If you want to play with your solution in GHCi, just run the command:
|
78
|
+
|
79
|
+
```bash
|
80
|
+
stack ghci
|
81
|
+
```
|
82
|
+
|
83
|
+
## Feedback, Issues, Pull Requests
|
84
|
+
|
85
|
+
The [exercism/haskell](https://github.com/exercism/haskell) repository on
|
86
|
+
GitHub is the home for all of the Haskell exercises.
|
87
|
+
|
88
|
+
If you have feedback about an exercise, or want to help implementing a new
|
89
|
+
one, head over there and create an issue. We'll do our best to help you!
|
90
|
+
|
91
|
+
## Source
|
92
|
+
|
93
|
+
Converting a string into a number and some basic processing utilizing a relatable real world example. [https://en.wikipedia.org/wiki/International_Standard_Book_Number#ISBN-10_check_digit_calculation](https://en.wikipedia.org/wiki/International_Standard_Book_Number#ISBN-10_check_digit_calculation)
|
94
|
+
|
95
|
+
## Submitting Incomplete Solutions
|
96
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module IsbnVerifier (isbn) where
|
2
|
+
|
3
|
+
isbn :: String -> Bool
|
4
|
+
isbn xs = length nums == 10 && g nums `mod` 11 == 0 && l <= 1
|
5
|
+
where
|
6
|
+
nums = let nxs = f xs in if last xs == 'X' then nxs++[(1,10)] else nxs
|
7
|
+
f :: String -> [(Int, Int)]
|
8
|
+
f = zip [10,9..1] . map (\x -> read [x]) . filter (`elem` ['0'..'9'])
|
9
|
+
g = sum . map (uncurry (*))
|
10
|
+
l = length $ filter (=='X') xs
|
@@ -0,0 +1,20 @@
|
|
1
|
+
name: isbn-verifier
|
2
|
+
version: 1.1.0.1
|
3
|
+
|
4
|
+
dependencies:
|
5
|
+
- base
|
6
|
+
|
7
|
+
library:
|
8
|
+
exposed-modules: IsbnVerifier
|
9
|
+
source-dirs: src
|
10
|
+
dependencies:
|
11
|
+
# - foo # List here the packages you
|
12
|
+
# - bar # want to use in your solution.
|
13
|
+
|
14
|
+
tests:
|
15
|
+
test:
|
16
|
+
main: Tests.hs
|
17
|
+
source-dirs: test
|
18
|
+
dependencies:
|
19
|
+
- isbn-verifier
|
20
|
+
- hspec
|
@@ -0,0 +1 @@
|
|
1
|
+
resolver: lts-9.11
|
@@ -0,0 +1,74 @@
|
|
1
|
+
{-# LANGUAGE RecordWildCards #-}
|
2
|
+
|
3
|
+
import Data.Foldable (for_)
|
4
|
+
import Test.Hspec (Spec, describe, it, shouldBe)
|
5
|
+
import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)
|
6
|
+
|
7
|
+
import IsbnVerifier (isbn)
|
8
|
+
|
9
|
+
main :: IO ()
|
10
|
+
main = hspecWith defaultConfig {configFastFail = True} specs
|
11
|
+
|
12
|
+
specs :: Spec
|
13
|
+
specs = describe "isbn" $ for_ cases test
|
14
|
+
where
|
15
|
+
|
16
|
+
test Case{..} = it description assertion
|
17
|
+
where
|
18
|
+
assertion = isbn input `shouldBe` expected
|
19
|
+
|
20
|
+
data Case = Case { description :: String
|
21
|
+
, input :: String
|
22
|
+
, expected :: Bool
|
23
|
+
}
|
24
|
+
|
25
|
+
cases :: [Case]
|
26
|
+
cases = [ Case { description = "valid isbn number"
|
27
|
+
, input = "3-598-21508-8"
|
28
|
+
, expected = True
|
29
|
+
}
|
30
|
+
, Case { description = "invalid isbn check digit"
|
31
|
+
, input = "3-598-21508-9"
|
32
|
+
, expected = False
|
33
|
+
}
|
34
|
+
, Case { description = "valid isbn number with a check digit of 10"
|
35
|
+
, input = "3-598-21507-X"
|
36
|
+
, expected = True
|
37
|
+
}
|
38
|
+
, Case { description = "check digit is a character other than X"
|
39
|
+
, input = "3-598-21507-A"
|
40
|
+
, expected = False
|
41
|
+
}
|
42
|
+
, Case { description = "invalid character in isbn"
|
43
|
+
, input = "3-598-2K507-0"
|
44
|
+
, expected = False
|
45
|
+
}
|
46
|
+
, Case { description = "X is only valid as a check digit"
|
47
|
+
, input = "3-598-2X507-9"
|
48
|
+
, expected = False
|
49
|
+
}
|
50
|
+
, Case { description = "valid isbn without separating dashes"
|
51
|
+
, input = "3598215088"
|
52
|
+
, expected = True
|
53
|
+
}
|
54
|
+
, Case { description = "isbn without separating dashes and X as check digit"
|
55
|
+
, input = "359821507"
|
56
|
+
, expected = False
|
57
|
+
}
|
58
|
+
, Case { description = "too long isbn and no dashes"
|
59
|
+
, input = "3598215078X"
|
60
|
+
, expected = False
|
61
|
+
}
|
62
|
+
, Case { description = "isbn without check digit"
|
63
|
+
, input = "3-598-21507"
|
64
|
+
, expected = False
|
65
|
+
}
|
66
|
+
, Case { description = "too long isbn"
|
67
|
+
, input = "3-598-21507-XX"
|
68
|
+
, expected = False
|
69
|
+
}
|
70
|
+
, Case { description = "check digit of X should not be used for 0"
|
71
|
+
, input = "3-598-21515-X"
|
72
|
+
, expected = False
|
73
|
+
}
|
74
|
+
]
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -9,8 +9,8 @@ actual dirt, and grow actual plants.
|
|
9
9
|
|
10
10
|
They've chosen to grow grass, clover, radishes, and violets.
|
11
11
|
|
12
|
-
To this end, the children have put little cups along the window sills, and
|
13
|
-
planted one type of plant in each cup, choosing randomly from the available
|
12
|
+
To this end, the children have put little cups along the window sills, and
|
13
|
+
planted one type of plant in each cup, choosing randomly from the available
|
14
14
|
types of seeds.
|
15
15
|
|
16
16
|
```text
|
@@ -25,7 +25,7 @@ There are 12 children in the class:
|
|
25
25
|
- Eve, Fred, Ginny, Harriet,
|
26
26
|
- Ileana, Joseph, Kincaid, and Larry.
|
27
27
|
|
28
|
-
Each child gets 4 cups, two on each row. Their teacher assigns cups to
|
28
|
+
Each child gets 4 cups, two on each row. Their teacher assigns cups to
|
29
29
|
the children alphabetically by their names.
|
30
30
|
|
31
31
|
The following diagram represents Alice's plants:
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -30,7 +30,7 @@ cases = [ Case { description = "year not divisible by 4: common year"
|
|
30
30
|
, expected = False
|
31
31
|
}
|
32
32
|
, Case { description = "year divisible by 4, not divisible by 100: leap year"
|
33
|
-
, input =
|
33
|
+
, input = 1996
|
34
34
|
, expected = True
|
35
35
|
}
|
36
36
|
, Case { description = "year divisible by 100, not divisible by 400: common year"
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -1 +1 @@
|
|
1
|
-
resolver: lts-
|
1
|
+
resolver: lts-9.11
|
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
Given a single stranded DNA string, compute how many times each nucleotide occurs in the string.
|
4
4
|
|
5
|
-
The genetic language of every living thing on the planet is DNA.
|
6
|
-
DNA is a large molecule that is built from an extremely long sequence of individual elements called nucleotides.
|
5
|
+
The genetic language of every living thing on the planet is DNA.
|
6
|
+
DNA is a large molecule that is built from an extremely long sequence of individual elements called nucleotides.
|
7
7
|
4 types exist in DNA and these differ only slightly and can be represented as the following symbols: 'A' for adenine, 'C' for cytosine, 'G' for guanine, and 'T' thymine.
|
8
8
|
|
9
9
|
Here is an analogy:
|